diff options
297 files changed, 3992 insertions, 4793 deletions
diff --git a/Android.bp b/Android.bp index 85ce41bfcfe5..589685174698 100644 --- a/Android.bp +++ b/Android.bp @@ -201,6 +201,7 @@ java_defaults { "core/java/android/net/INetworkScoreService.aidl", "core/java/android/net/INetworkStatsService.aidl", "core/java/android/net/INetworkStatsSession.aidl", + "core/java/android/net/ISocketKeepaliveCallback.aidl", "core/java/android/net/ITestNetworkManager.aidl", "core/java/android/net/ITetheringEventCallback.aidl", "core/java/android/net/ITetheringStatsProvider.aidl", @@ -681,7 +682,7 @@ java_defaults { "ext", ], - jarjar_rules: "jarjar_rules_hidl.txt", + jarjar_rules: ":framework-jarjar-rules", static_libs: [ "apex_aidl_interface-java", @@ -727,6 +728,11 @@ java_defaults { } filegroup { + name: "framework-jarjar-rules", + srcs: ["jarjar_rules_hidl.txt"], +} + +filegroup { name: "libincident_aidl", srcs: [ "core/java/android/os/IIncidentManager.aidl", @@ -826,14 +832,8 @@ aidl_interface { "core/java/android/net/INetworkStackConnector.aidl", "core/java/android/net/INetworkStackStatusCallback.aidl", "core/java/android/net/InitialConfigurationParcelable.aidl", - "core/java/android/net/IpPrefixParcelable.aidl", - "core/java/android/net/LinkAddressParcelable.aidl", - "core/java/android/net/LinkPropertiesParcelable.aidl", - "core/java/android/net/NetworkParcelable.aidl", "core/java/android/net/PrivateDnsConfigParcel.aidl", "core/java/android/net/ProvisioningConfigurationParcelable.aidl", - "core/java/android/net/ProxyInfoParcelable.aidl", - "core/java/android/net/RouteInfoParcelable.aidl", "core/java/android/net/StaticIpConfigurationParcelable.aidl", "core/java/android/net/TcpKeepalivePacketDataParcelable.aidl", "core/java/android/net/dhcp/DhcpServingParamsParcel.aidl", @@ -841,34 +841,65 @@ aidl_interface { "core/java/android/net/dhcp/IDhcpServerCallbacks.aidl", "core/java/android/net/ip/IIpClient.aidl", "core/java/android/net/ip/IIpClientCallbacks.aidl", + "core/java/android/net/IIpMemoryStore.aidl", + "core/java/android/net/IIpMemoryStoreCallbacks.aidl", + "core/java/android/net/ipmemorystore/**/*.aidl", ], + backend: { + ndk: { + enabled: false, + }, + cpp: { + enabled: false, + }, + }, api_dir: "aidl/networkstack", } aidl_interface { - name: "networkstack-aidl-framework", + name: "ipmemorystore-aidl-interfaces", local_include_dir: "core/java", srcs: [ - "core/java/android/net/TcpKeepalivePacketDataParcelable.aidl", "core/java/android/net/IIpMemoryStore.aidl", + "core/java/android/net/IIpMemoryStoreCallbacks.aidl", "core/java/android/net/ipmemorystore/**/*.aidl", ], +} + +aidl_interface { + name: "networkstack-aidl-framework", + local_include_dir: "core/java", + srcs: [ + "core/java/android/net/TcpKeepalivePacketDataParcelable.aidl", + ], api_dir: "aidl/networkstack", + backend: { + java: { + sdk_version: "28", + }, + }, } filegroup { - name: "framework-networkstack-shared-srcs", + name: "framework-annotations", srcs: [ - // TODO: remove these annotations as soon as we can use andoid.support.annotations.* "core/java/android/annotation/NonNull.java", "core/java/android/annotation/Nullable.java", "core/java/android/annotation/IntDef.java", "core/java/android/annotation/IntRange.java", "core/java/android/annotation/UnsupportedAppUsage.java", - "core/java/android/net/DhcpResults.java", - "core/java/android/util/LocalLog.java", "core/java/com/android/internal/annotations/GuardedBy.java", "core/java/com/android/internal/annotations/VisibleForTesting.java", + ] +} + +filegroup { + name: "framework-networkstack-shared-srcs", + srcs: [ + // TODO: remove these annotations as soon as we can use andoid.support.annotations.* + ":framework-annotations", + "core/java/android/net/DhcpResults.java", + "core/java/android/util/LocalLog.java", "core/java/com/android/internal/util/HexDump.java", "core/java/com/android/internal/util/IndentingPrintWriter.java", "core/java/com/android/internal/util/IState.java", @@ -1055,6 +1086,7 @@ java_library { "core/java/android/annotation/Nullable.java", "core/java/android/annotation/SystemApi.java", "core/java/android/annotation/TestApi.java", + "core/java/android/annotation/UnsupportedAppUsage.java", "core/java/android/os/HwBinder.java", "core/java/android/os/HwBlob.java", "core/java/android/os/HwParcel.java", @@ -1693,4 +1725,4 @@ aidl_mapping { name: "framework-aidl-mappings", srcs: [":framework-defaults"], output: "framework-aidl-mappings.txt" -}
\ No newline at end of file +} diff --git a/api/current.txt b/api/current.txt index 9553bf6f0bd6..733dd0c0ca59 100755 --- a/api/current.txt +++ b/api/current.txt @@ -6451,7 +6451,7 @@ package android.app.admin { method @Nullable public String[] getAccountTypesWithManagementDisabled(); method @Nullable public java.util.List<android.content.ComponentName> getActiveAdmins(); method @NonNull public java.util.Set<java.lang.String> getAffiliationIds(@NonNull android.content.ComponentName); - method @Nullable public java.util.List<java.lang.String> getAlwaysOnVpnLockdownWhitelist(@NonNull android.content.ComponentName); + method @Nullable public java.util.Set<java.lang.String> getAlwaysOnVpnLockdownWhitelist(@NonNull android.content.ComponentName); method @Nullable public String getAlwaysOnVpnPackage(@NonNull android.content.ComponentName); method @WorkerThread @NonNull public android.os.Bundle getApplicationRestrictions(@Nullable android.content.ComponentName, String); method @Deprecated @Nullable public String getApplicationRestrictionsManagingPackage(@NonNull android.content.ComponentName); @@ -6559,7 +6559,7 @@ package android.app.admin { method public void setAccountManagementDisabled(@NonNull android.content.ComponentName, String, boolean); method public void setAffiliationIds(@NonNull android.content.ComponentName, @NonNull java.util.Set<java.lang.String>); method public void setAlwaysOnVpnPackage(@NonNull android.content.ComponentName, @Nullable String, boolean) throws android.content.pm.PackageManager.NameNotFoundException; - method public void setAlwaysOnVpnPackage(@NonNull android.content.ComponentName, @Nullable String, boolean, @Nullable java.util.List<java.lang.String>) throws android.content.pm.PackageManager.NameNotFoundException; + method public void setAlwaysOnVpnPackage(@NonNull android.content.ComponentName, @Nullable String, boolean, @Nullable java.util.Set<java.lang.String>) throws android.content.pm.PackageManager.NameNotFoundException; method public boolean setApplicationHidden(@NonNull android.content.ComponentName, String, boolean); method @WorkerThread public void setApplicationRestrictions(@Nullable android.content.ComponentName, String, android.os.Bundle); method @Deprecated public void setApplicationRestrictionsManagingPackage(@NonNull android.content.ComponentName, @Nullable String) throws android.content.pm.PackageManager.NameNotFoundException; @@ -27227,10 +27227,9 @@ package android.net { } public final class DnsResolver { - method public static android.net.DnsResolver getInstance(); - method public void query(@Nullable android.net.Network, @NonNull byte[], int, @NonNull android.os.Handler, @NonNull android.net.DnsResolver.RawAnswerListener) throws android.system.ErrnoException; - method public void query(@Nullable android.net.Network, @NonNull String, int, int, int, @NonNull android.os.Handler, @NonNull android.net.DnsResolver.RawAnswerListener) throws android.system.ErrnoException; - method public void query(@Nullable android.net.Network, @NonNull String, int, @NonNull android.os.Handler, @NonNull android.net.DnsResolver.InetAddressAnswerListener) throws android.system.ErrnoException; + method @NonNull public static android.net.DnsResolver getInstance(); + method public <T> void query(@Nullable android.net.Network, @NonNull byte[], int, @NonNull java.util.concurrent.Executor, @NonNull android.net.DnsResolver.AnswerCallback<T>); + method public <T> void query(@Nullable android.net.Network, @NonNull String, int, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.DnsResolver.AnswerCallback<T>); field public static final int CLASS_IN = 1; // 0x1 field public static final int FLAG_EMPTY = 0; // 0x0 field public static final int FLAG_NO_CACHE_LOOKUP = 4; // 0x4 @@ -27240,12 +27239,23 @@ package android.net { field public static final int TYPE_AAAA = 28; // 0x1c } - public static interface DnsResolver.InetAddressAnswerListener { - method public void onAnswer(@NonNull java.util.List<java.net.InetAddress>); + public abstract static class DnsResolver.AnswerCallback<T> { + ctor public DnsResolver.AnswerCallback(@NonNull android.net.DnsResolver.AnswerParser<T>); + method public abstract void onAnswer(@NonNull T); + method public abstract void onParseException(@NonNull android.net.ParseException); + method public abstract void onQueryException(@NonNull android.system.ErrnoException); } - public static interface DnsResolver.RawAnswerListener { - method public void onAnswer(@Nullable byte[]); + public static interface DnsResolver.AnswerParser<T> { + method @NonNull public T parse(@NonNull byte[]) throws android.net.ParseException; + } + + public abstract static class DnsResolver.InetAddressAnswerCallback extends android.net.DnsResolver.AnswerCallback<java.util.List<java.net.InetAddress>> { + ctor public DnsResolver.InetAddressAnswerCallback(); + } + + public abstract static class DnsResolver.RawAnswerCallback extends android.net.DnsResolver.AnswerCallback<byte[]> { + ctor public DnsResolver.RawAnswerCallback(); } public class InetAddresses { @@ -27559,6 +27569,8 @@ package android.net { } public class ParseException extends java.lang.RuntimeException { + ctor public ParseException(@NonNull String); + ctor public ParseException(@NonNull String, @NonNull Throwable); field public String response; } @@ -41276,9 +41288,9 @@ package android.telecom { public abstract class CallRedirectionService extends android.app.Service { ctor public CallRedirectionService(); method public final void cancelCall(); - method public final android.os.IBinder onBind(android.content.Intent); + method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent); method public abstract void onPlaceCall(@NonNull android.net.Uri, @NonNull android.telecom.PhoneAccountHandle, boolean); - method public final boolean onUnbind(android.content.Intent); + method public final boolean onUnbind(@NonNull android.content.Intent); method public final void placeCallUnmodified(); method public final void redirectCall(@NonNull android.net.Uri, @NonNull android.telecom.PhoneAccountHandle, boolean); field public static final String SERVICE_INTERFACE = "android.telecom.CallRedirectionService"; @@ -42099,9 +42111,10 @@ package android.telephony { } public final class AvailableNetworkInfo implements android.os.Parcelable { - ctor public AvailableNetworkInfo(int, int, java.util.List<java.lang.String>); + ctor public AvailableNetworkInfo(int, int, @NonNull java.util.List<java.lang.String>, @NonNull java.util.List<java.lang.Integer>); method public int describeContents(); - method public java.util.List<java.lang.String> getMccMncs(); + method @NonNull public java.util.List<java.lang.Integer> getBands(); + method @NonNull public java.util.List<java.lang.String> getMccMncs(); method public int getPriority(); method public int getSubId(); method public void writeToParcel(android.os.Parcel, int); @@ -43033,14 +43046,14 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @WorkerThread public android.os.PersistableBundle getCarrierConfig(); method public int getCarrierIdFromSimMccMnc(); method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.telephony.CellLocation getCellLocation(); - method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @Nullable public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getCurrentEmergencyNumberList(); - method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @Nullable public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getCurrentEmergencyNumberList(int); method public int getDataActivity(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getDataNetworkType(); method public int getDataState(); method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceId(); method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceId(int); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceSoftwareVersion(); + method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @NonNull public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList(); + method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @NonNull public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList(int); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String[] getForbiddenPlmns(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getGroupIdLevel1(); method public String getIccAuthentication(int, int, String); @@ -43092,9 +43105,9 @@ package android.telephony { method public String iccTransmitApduBasicChannel(int, int, int, int, int, String); method public String iccTransmitApduLogicalChannel(int, int, int, int, int, int, String); method public boolean isConcurrentVoiceAndDataSupported(); - method public boolean isCurrentEmergencyNumber(@NonNull String); method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean isDataEnabled(); method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataRoamingEnabled(); + method public boolean isEmergencyNumber(@NonNull String); method public boolean isHearingAidCompatibilitySupported(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isMultisimSupported(); method public boolean isNetworkRoaming(); @@ -43117,7 +43130,7 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setNetworkSelectionModeManual(String, boolean); method public boolean setOperatorBrandOverride(String); method public boolean setPreferredNetworkTypeToGlobal(); - method public boolean setPreferredOpportunisticDataSubscription(int); + method public void setPreferredOpportunisticDataSubscription(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>); method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings); method public boolean setVoiceMailNumber(String, String); method @Deprecated public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri); @@ -43160,7 +43173,7 @@ package android.telephony { field public static final String EXTRA_CARRIER_ID = "android.telephony.extra.CARRIER_ID"; field public static final String EXTRA_CARRIER_NAME = "android.telephony.extra.CARRIER_NAME"; field public static final String EXTRA_HIDE_PUBLIC_SETTINGS = "android.telephony.extra.HIDE_PUBLIC_SETTINGS"; - field public static final String EXTRA_INCOMING_NUMBER = "incoming_number"; + field @Deprecated public static final String EXTRA_INCOMING_NUMBER = "incoming_number"; field public static final String EXTRA_IS_REFRESH = "android.telephony.extra.IS_REFRESH"; field public static final String EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT = "android.telephony.extra.LAUNCH_VOICEMAIL_SETTINGS_INTENT"; field public static final String EXTRA_NETWORK_COUNTRY = "android.telephony.extra.NETWORK_COUNTRY"; @@ -43413,15 +43426,13 @@ package android.telephony.emergency { public final class EmergencyNumber implements java.lang.Comparable<android.telephony.emergency.EmergencyNumber> android.os.Parcelable { method public int compareTo(@NonNull android.telephony.emergency.EmergencyNumber); method public int describeContents(); - method public String getCountryIso(); + method @NonNull public String getCountryIso(); method public int getEmergencyCallRouting(); - method public int getEmergencyNumberSourceBitmask(); - method public java.util.List<java.lang.Integer> getEmergencyNumberSources(); - method public java.util.List<java.lang.Integer> getEmergencyServiceCategories(); - method public int getEmergencyServiceCategoryBitmask(); + method @NonNull public java.util.List<java.lang.Integer> getEmergencyNumberSources(); + method @NonNull public java.util.List<java.lang.Integer> getEmergencyServiceCategories(); method @NonNull public java.util.List<java.lang.String> getEmergencyUrns(); - method public String getMnc(); - method public String getNumber(); + method @NonNull public String getMnc(); + method @NonNull public String getNumber(); method public boolean isFromSources(int); method public boolean isInEmergencyServiceCategories(int); method public void writeToParcel(android.os.Parcel, int); diff --git a/api/removed.txt b/api/removed.txt index d6169cbd883a..72202ad9712a 100644 --- a/api/removed.txt +++ b/api/removed.txt @@ -304,17 +304,11 @@ package android.media.tv { package android.net { public class ConnectivityManager { - method @Deprecated public void getLatestTetheringEntitlementValue(int, boolean, @NonNull android.net.ConnectivityManager.TetheringEntitlementValueListener, @Nullable android.os.Handler); method @Deprecated public boolean requestRouteToHost(int, int); method @Deprecated public int startUsingNetworkFeature(int, String); method @Deprecated public int stopUsingNetworkFeature(int, String); } - @Deprecated public abstract static class ConnectivityManager.TetheringEntitlementValueListener { - ctor public ConnectivityManager.TetheringEntitlementValueListener(); - method public void onEntitlementResult(int); - } - @Deprecated public class NetworkBadging { method @NonNull public static android.graphics.drawable.Drawable getWifiIcon(@IntRange(from=0, to=4) int, int, @Nullable android.content.res.Resources.Theme); field public static final int BADGING_4K = 30; // 0x1e diff --git a/api/system-current.txt b/api/system-current.txt index b9378bbefbc9..e26c6479706d 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3323,11 +3323,14 @@ package android.net { package android.net.apf { - public class ApfCapabilities { + public final class ApfCapabilities implements android.os.Parcelable { ctor public ApfCapabilities(int, int, int); + method public int describeContents(); method public static boolean getApfDrop8023Frames(android.content.Context); method public static int[] getApfEthTypeBlackList(android.content.Context); method public boolean hasDataAccess(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.net.apf.ApfCapabilities> CREATOR; field public final int apfPacketFormat; field public final int apfVersionSupported; field public final int maximumApfProgramSize; @@ -3525,16 +3528,16 @@ package android.net.metrics { package android.net.util { - public class SocketUtils { + public final class SocketUtils { method public static void addArpEntry(@NonNull java.net.Inet4Address, @NonNull android.net.MacAddress, @NonNull String, @NonNull java.io.FileDescriptor) throws java.io.IOException; method public static void attachControlPacketFilter(@NonNull java.io.FileDescriptor, int) throws java.net.SocketException; method public static void attachDhcpFilter(@NonNull java.io.FileDescriptor) throws java.net.SocketException; method public static void attachRaFilter(@NonNull java.io.FileDescriptor, int) throws java.net.SocketException; method public static void bindSocketToInterface(@NonNull java.io.FileDescriptor, @NonNull String) throws android.system.ErrnoException; method public static void closeSocket(@Nullable java.io.FileDescriptor) throws java.io.IOException; - method public static java.net.SocketAddress makeNetlinkSocketAddress(int, int); - method public static java.net.SocketAddress makePacketSocketAddress(short, int); - method public static java.net.SocketAddress makePacketSocketAddress(int, @NonNull byte[]); + method @NonNull public static java.net.SocketAddress makeNetlinkSocketAddress(int, int); + method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, int); + method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, @NonNull byte[]); method public static void setSocketTimeValueOption(@NonNull java.io.FileDescriptor, int, int, long) throws android.system.ErrnoException; } @@ -4012,7 +4015,7 @@ package android.os { field public static final String EXTRA_EVENT_TIMESTAMP = "android.os.extra.EVENT_TIMESTAMP"; } - public class BugreportManager { + public final class BugreportManager { method @RequiresPermission(android.Manifest.permission.DUMP) public void cancelBugreport(); method @RequiresPermission(android.Manifest.permission.DUMP) public void startBugreport(@NonNull android.os.ParcelFileDescriptor, @Nullable android.os.ParcelFileDescriptor, @NonNull android.os.BugreportParams, @NonNull java.util.concurrent.Executor, @NonNull android.os.BugreportManager.BugreportCallback); } @@ -4021,7 +4024,7 @@ package android.os { ctor public BugreportManager.BugreportCallback(); method public void onError(int); method public void onFinished(); - method public void onProgress(float); + method public void onProgress(@FloatRange(from=0.0f, to=100.0f) float); field public static final int BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS = 5; // 0x5 field public static final int BUGREPORT_ERROR_INVALID_INPUT = 1; // 0x1 field public static final int BUGREPORT_ERROR_RUNTIME = 2; // 0x2 @@ -4030,7 +4033,7 @@ package android.os { } public final class BugreportParams { - ctor public BugreportParams(@android.os.BugreportParams.BugreportMode int); + ctor public BugreportParams(int); method public int getMode(); field public static final int BUGREPORT_MODE_FULL = 0; // 0x0 field public static final int BUGREPORT_MODE_INTERACTIVE = 1; // 0x1 @@ -4040,9 +4043,6 @@ package android.os { field public static final int BUGREPORT_MODE_WIFI = 5; // 0x5 } - @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef(prefix={"BUGREPORT_MODE_"}, value={android.os.BugreportParams.BUGREPORT_MODE_FULL, android.os.BugreportParams.BUGREPORT_MODE_INTERACTIVE, android.os.BugreportParams.BUGREPORT_MODE_REMOTE, android.os.BugreportParams.BUGREPORT_MODE_WEAR, android.os.BugreportParams.BUGREPORT_MODE_TELEPHONY, android.os.BugreportParams.BUGREPORT_MODE_WIFI}) public static @interface BugreportParams.BugreportMode { - } - public final class ConfigUpdate { field public static final String ACTION_UPDATE_CARRIER_ID_DB = "android.os.action.UPDATE_CARRIER_ID_DB"; field public static final String ACTION_UPDATE_CARRIER_PROVISIONING_URLS = "android.intent.action.UPDATE_CARRIER_PROVISIONING_URLS"; @@ -5511,9 +5511,10 @@ package android.telecom { package android.telephony { - public static final class AccessNetworkConstants.TransportType { - field public static final int WLAN = 2; // 0x2 - field public static final int WWAN = 1; // 0x1 + public final class AccessNetworkConstants { + field public static final int TRANSPORT_TYPE_INVALID = -1; // 0xffffffff + field public static final int TRANSPORT_TYPE_WLAN = 2; // 0x2 + field public static final int TRANSPORT_TYPE_WWAN = 1; // 0x1 } public final class CallAttributes implements android.os.Parcelable { @@ -6033,8 +6034,8 @@ package android.telephony { field public static final String MBMS_STREAMING_SERVICE_ACTION = "android.telephony.action.EmbmsStreaming"; } - public class NetworkRegistrationState implements android.os.Parcelable { - ctor public NetworkRegistrationState(int, int, int, int, int, boolean, @NonNull int[], @Nullable android.telephony.CellIdentity); + public class NetworkRegistrationInfo implements android.os.Parcelable { + ctor public NetworkRegistrationInfo(int, int, int, int, int, boolean, @NonNull int[], @Nullable android.telephony.CellIdentity); method public int describeContents(); method public int getAccessNetworkTechnology(); method @NonNull public int[] getAvailableServices(); @@ -6048,7 +6049,7 @@ package android.telephony { method public boolean isEmergencyEnabled(); method public boolean isRoaming(); method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.telephony.NetworkRegistrationState> CREATOR; + 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 REG_STATE_DENIED = 3; // 0x3 @@ -6064,19 +6065,19 @@ package android.telephony { field public static final int SERVICE_TYPE_VOICE = 1; // 0x1 } - public static class NetworkRegistrationState.Builder { - ctor public NetworkRegistrationState.Builder(); - method @NonNull public android.telephony.NetworkRegistrationState build(); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setAccessNetworkTechnology(int); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setAvailableServices(@NonNull int[]); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setCellIdentity(@Nullable android.telephony.CellIdentity); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setDomain(int); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setEmergencyOnly(boolean); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setNrStatus(int); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setRegState(int); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setRejectCause(int); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setRoamingType(int); - method @NonNull public android.telephony.NetworkRegistrationState.Builder setTransportType(int); + public static 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 int[]); + 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 setNrStatus(int); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegState(int); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRejectCause(int); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRoamingType(int); + method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setTransportType(int); } public abstract class NetworkService extends android.app.Service { @@ -6089,13 +6090,13 @@ package android.telephony { public abstract class NetworkService.NetworkServiceProvider implements java.lang.AutoCloseable { ctor public NetworkService.NetworkServiceProvider(int); method public abstract void close(); - method public void getNetworkRegistrationState(int, @NonNull android.telephony.NetworkServiceCallback); + method public void getNetworkRegistrationInfo(int, @NonNull android.telephony.NetworkServiceCallback); method public final int getSlotIndex(); - method public final void notifyNetworkRegistrationStateChanged(); + method public final void notifyNetworkRegistrationInfoChanged(); } public class NetworkServiceCallback { - method public void onGetNetworkRegistrationStateComplete(int, @Nullable android.telephony.NetworkRegistrationState); + method public void onGetNetworkRegistrationInfoComplete(int, @Nullable android.telephony.NetworkRegistrationInfo); field public static final int RESULT_ERROR_BUSY = 3; // 0x3 field public static final int RESULT_ERROR_FAILED = 5; // 0x5 field public static final int RESULT_ERROR_ILLEGAL_STATE = 4; // 0x4 @@ -6270,12 +6271,10 @@ package android.telephony { } public class ServiceState implements android.os.Parcelable { - method @Nullable public android.telephony.NetworkRegistrationState getNetworkRegistrationState(int, int); - method @NonNull public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates(); - method @Deprecated @NonNull public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates(int); - method @Deprecated @Nullable public android.telephony.NetworkRegistrationState getNetworkRegistrationStates(int, int); - method @NonNull public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStatesForDomain(int); - method @NonNull public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStatesForTransportType(int); + method @Nullable public android.telephony.NetworkRegistrationInfo getNetworkRegistrationInfo(int, int); + method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoList(); + method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForDomain(int); + method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForTransportType(int); field public static final int ROAMING_TYPE_DOMESTIC = 2; // 0x2 field public static final int ROAMING_TYPE_INTERNATIONAL = 3; // 0x3 field public static final int ROAMING_TYPE_NOT_ROAMING = 0; // 0x0 @@ -6317,7 +6316,7 @@ package android.telephony { method public void requestEmbeddedSubscriptionInfoListRefresh(int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultDataSubId(int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultSmsSubId(int); - method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @NonNull java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setSubscriptionEnabled(int, boolean); field @NonNull public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI; field public static final int PROFILE_CLASS_DEFAULT = -1; // 0xffffffff @@ -6385,7 +6384,7 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean getEmergencyCallbackMode(); method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimDomain(); method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimIst(); - method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.util.Pair<java.lang.Integer,java.lang.Integer>> getLogicalToPhysicalSlotMapping(); + method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.Map<java.lang.Integer,java.lang.Integer> getLogicalToPhysicalSlotMapping(); method public static long getMaxNumberVerificationTimeoutMillis(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getPreferredNetworkTypeBitmap(); method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public int getRadioPowerState(); @@ -6399,10 +6398,14 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getVoiceActivationState(); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handlePinMmi(String); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handlePinMmiForSubscriber(int, String); - method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCurrentPotentialEmergencyNumber(@NonNull String); + method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean iccCloseLogicalChannelBySlot(int, int); + method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannelBySlot(int, @Nullable String, int); + method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String iccTransmitApduBasicChannelBySlot(int, int, int, int, int, int, @Nullable String); + method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String iccTransmitApduLogicalChannelBySlot(int, int, int, int, int, int, int, @Nullable String); method public boolean isDataConnectivityPossible(); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isIdle(); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isOffhook(); + method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isPotentialEmergencyNumber(@NonNull String); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRadioOn(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isRebootRequiredForModemConfigChange(); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging(); @@ -6786,7 +6789,7 @@ package android.telephony.ims { method public static int getCallTypeFromVideoState(int); method public int getEmergencyCallRouting(); method public int getEmergencyServiceCategories(); - method public java.util.List<java.lang.String> getEmergencyUrns(); + method @NonNull public java.util.List<java.lang.String> getEmergencyUrns(); method public android.telephony.ims.ImsStreamMediaProfile getMediaProfile(); method public int getRestrictCause(); method public int getServiceType(); @@ -6804,7 +6807,7 @@ package android.telephony.ims { method public void setEmergencyCallRouting(int); method public void setEmergencyCallTesting(boolean); method public void setEmergencyServiceCategories(int); - method public void setEmergencyUrns(java.util.List<java.lang.String>); + method public void setEmergencyUrns(@NonNull java.util.List<java.lang.String>); method public void setHasKnownUserIntentEmergency(boolean); method public void updateCallExtras(android.telephony.ims.ImsCallProfile); method public void updateCallType(android.telephony.ims.ImsCallProfile); diff --git a/api/test-current.txt b/api/test-current.txt index d43b1c4ec275..026d0016244e 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -234,6 +234,7 @@ package android.content { method public android.os.UserHandle getUser(); method public int getUserId(); method public void setAutofillCompatibilityEnabled(boolean); + field public static final String TEST_NETWORK_SERVICE = "test_network"; } } @@ -732,11 +733,14 @@ package android.net { package android.net.apf { - public class ApfCapabilities { + public final class ApfCapabilities implements android.os.Parcelable { ctor public ApfCapabilities(int, int, int); + method public int describeContents(); method public static boolean getApfDrop8023Frames(android.content.Context); method public static int[] getApfEthTypeBlackList(android.content.Context); method public boolean hasDataAccess(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.net.apf.ApfCapabilities> CREATOR; field public final int apfPacketFormat; field public final int apfVersionSupported; field public final int maximumApfProgramSize; @@ -934,16 +938,16 @@ package android.net.metrics { package android.net.util { - public class SocketUtils { + public final class SocketUtils { method public static void addArpEntry(@NonNull java.net.Inet4Address, @NonNull android.net.MacAddress, @NonNull String, @NonNull java.io.FileDescriptor) throws java.io.IOException; method public static void attachControlPacketFilter(@NonNull java.io.FileDescriptor, int) throws java.net.SocketException; method public static void attachDhcpFilter(@NonNull java.io.FileDescriptor) throws java.net.SocketException; method public static void attachRaFilter(@NonNull java.io.FileDescriptor, int) throws java.net.SocketException; method public static void bindSocketToInterface(@NonNull java.io.FileDescriptor, @NonNull String) throws android.system.ErrnoException; method public static void closeSocket(@Nullable java.io.FileDescriptor) throws java.io.IOException; - method public static java.net.SocketAddress makeNetlinkSocketAddress(int, int); - method public static java.net.SocketAddress makePacketSocketAddress(short, int); - method public static java.net.SocketAddress makePacketSocketAddress(int, @NonNull byte[]); + method @NonNull public static java.net.SocketAddress makeNetlinkSocketAddress(int, int); + method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, int); + method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, @NonNull byte[]); method public static void setSocketTimeValueOption(@NonNull java.io.FileDescriptor, int, int, long) throws android.system.ErrnoException; } diff --git a/config/hiddenapi-greylist.txt b/config/hiddenapi-greylist.txt index b02cf48025a3..c3d057b66be8 100644 --- a/config/hiddenapi-greylist.txt +++ b/config/hiddenapi-greylist.txt @@ -378,232 +378,17 @@ Landroid/net/wifi/IWifiScanner$Stub;-><init>()V Landroid/net/wifi/IWifiScanner$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiScanner; Landroid/net/wifi/p2p/IWifiP2pManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/p2p/IWifiP2pManager; Landroid/nfc/INfcAdapter$Stub;->TRANSACTION_enable:I -Landroid/os/AsyncResult;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Throwable;)V -Landroid/os/AsyncResult;->exception:Ljava/lang/Throwable; -Landroid/os/AsyncResult;->forMessage(Landroid/os/Message;)Landroid/os/AsyncResult; -Landroid/os/AsyncResult;->forMessage(Landroid/os/Message;Ljava/lang/Object;Ljava/lang/Throwable;)Landroid/os/AsyncResult; -Landroid/os/AsyncResult;->result:Ljava/lang/Object; -Landroid/os/AsyncResult;->userObj:Ljava/lang/Object; -Landroid/os/AsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; -Landroid/os/AsyncTask;->mStatus:Landroid/os/AsyncTask$Status; -Landroid/os/AsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; -Landroid/os/AsyncTask;->mWorker:Landroid/os/AsyncTask$WorkerRunnable; -Landroid/os/AsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; -Landroid/os/AsyncTask;->setDefaultExecutor(Ljava/util/concurrent/Executor;)V -Landroid/os/BaseBundle;->isParcelled()Z -Landroid/os/BaseBundle;->mMap:Landroid/util/ArrayMap; -Landroid/os/BaseBundle;->mParcelledData:Landroid/os/Parcel; -Landroid/os/BaseBundle;->unparcel()V -Landroid/os/BatteryManager;->EXTRA_CHARGE_COUNTER:Ljava/lang/String; -Landroid/os/BatteryManager;->EXTRA_INVALID_CHARGER:Ljava/lang/String; -Landroid/os/BatteryManager;->EXTRA_MAX_CHARGING_CURRENT:Ljava/lang/String; -Landroid/os/BatteryManager;->EXTRA_MAX_CHARGING_VOLTAGE:Ljava/lang/String; -Landroid/os/BatteryStats$Counter;->getCountLocked(I)I -Landroid/os/BatteryStats$HistoryItem;-><init>()V -Landroid/os/BatteryStats$HistoryItem;->batteryHealth:B -Landroid/os/BatteryStats$HistoryItem;->batteryLevel:B -Landroid/os/BatteryStats$HistoryItem;->batteryPlugType:B -Landroid/os/BatteryStats$HistoryItem;->batteryStatus:B -Landroid/os/BatteryStats$HistoryItem;->batteryVoltage:C -Landroid/os/BatteryStats$HistoryItem;->cmd:B -Landroid/os/BatteryStats$HistoryItem;->CMD_UPDATE:B -Landroid/os/BatteryStats$HistoryItem;->states2:I -Landroid/os/BatteryStats$HistoryItem;->states:I -Landroid/os/BatteryStats$HistoryItem;->time:J -Landroid/os/BatteryStats$Timer;->getCountLocked(I)I -Landroid/os/BatteryStats$Timer;->getTotalTimeLocked(JI)J -Landroid/os/BatteryStats$Uid$Pkg$Serv;->getLaunches(I)I -Landroid/os/BatteryStats$Uid$Pkg$Serv;->getStarts(I)I -Landroid/os/BatteryStats$Uid$Pkg$Serv;->getStartTime(JI)J -Landroid/os/BatteryStats$Uid$Pkg;->getServiceStats()Landroid/util/ArrayMap; -Landroid/os/BatteryStats$Uid$Pkg;->getWakeupAlarmStats()Landroid/util/ArrayMap; Landroid/os/BatteryStats$Uid$Proc$ExcessivePower;-><init>()V -Landroid/os/BatteryStats$Uid$Proc$ExcessivePower;->overTime:J -Landroid/os/BatteryStats$Uid$Proc$ExcessivePower;->type:I -Landroid/os/BatteryStats$Uid$Proc$ExcessivePower;->usedTime:J -Landroid/os/BatteryStats$Uid$Proc;->countExcessivePowers()I -Landroid/os/BatteryStats$Uid$Proc;->getExcessivePower(I)Landroid/os/BatteryStats$Uid$Proc$ExcessivePower; -Landroid/os/BatteryStats$Uid$Proc;->getForegroundTime(I)J -Landroid/os/BatteryStats$Uid$Proc;->getStarts(I)I -Landroid/os/BatteryStats$Uid$Proc;->getSystemTime(I)J -Landroid/os/BatteryStats$Uid$Proc;->getUserTime(I)J -Landroid/os/BatteryStats$Uid$Sensor;->getHandle()I -Landroid/os/BatteryStats$Uid$Sensor;->getSensorTime()Landroid/os/BatteryStats$Timer; -Landroid/os/BatteryStats$Uid$Sensor;->GPS:I -Landroid/os/BatteryStats$Uid$Wakelock;->getWakeTime(I)Landroid/os/BatteryStats$Timer; Landroid/os/BatteryStats$Uid;-><init>()V -Landroid/os/BatteryStats$Uid;->getAudioTurnedOnTimer()Landroid/os/BatteryStats$Timer; -Landroid/os/BatteryStats$Uid;->getFullWifiLockTime(JI)J -Landroid/os/BatteryStats$Uid;->getMobileRadioActiveTime(I)J -Landroid/os/BatteryStats$Uid;->getNetworkActivityBytes(II)J -Landroid/os/BatteryStats$Uid;->getPackageStats()Landroid/util/ArrayMap; -Landroid/os/BatteryStats$Uid;->getProcessStats()Landroid/util/ArrayMap; -Landroid/os/BatteryStats$Uid;->getSensorStats()Landroid/util/SparseArray; -Landroid/os/BatteryStats$Uid;->getUid()I -Landroid/os/BatteryStats$Uid;->getVideoTurnedOnTimer()Landroid/os/BatteryStats$Timer; -Landroid/os/BatteryStats$Uid;->getWakelockStats()Landroid/util/ArrayMap; -Landroid/os/BatteryStats$Uid;->getWifiBatchedScanTime(IJI)J -Landroid/os/BatteryStats$Uid;->getWifiMulticastTime(JI)J -Landroid/os/BatteryStats$Uid;->getWifiRunningTime(JI)J -Landroid/os/BatteryStats$Uid;->getWifiScanTime(JI)J -Landroid/os/BatteryStats;->computeBatteryRealtime(JI)J -Landroid/os/BatteryStats;->computeBatteryTimeRemaining(J)J -Landroid/os/BatteryStats;->computeBatteryUptime(JI)J -Landroid/os/BatteryStats;->computeChargeTimeRemaining(J)J -Landroid/os/BatteryStats;->dumpLine(Ljava/io/PrintWriter;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V -Landroid/os/BatteryStats;->getBatteryUptime(J)J -Landroid/os/BatteryStats;->getGlobalWifiRunningTime(JI)J -Landroid/os/BatteryStats;->getNextHistoryLocked(Landroid/os/BatteryStats$HistoryItem;)Z -Landroid/os/BatteryStats;->getPhoneOnTime(JI)J -Landroid/os/BatteryStats;->getPhoneSignalStrengthTime(IJI)J -Landroid/os/BatteryStats;->getScreenBrightnessTime(IJI)J -Landroid/os/BatteryStats;->getScreenOnTime(JI)J -Landroid/os/BatteryStats;->getUidStats()Landroid/util/SparseArray; -Landroid/os/BatteryStats;->getWifiOnTime(JI)J -Landroid/os/BatteryStats;->NUM_DATA_CONNECTION_TYPES:I -Landroid/os/BatteryStats;->NUM_SCREEN_BRIGHTNESS_BINS:I -Landroid/os/BatteryStats;->startIteratingHistoryLocked()Z -Landroid/os/BatteryStats;->STATS_CURRENT:I -Landroid/os/BatteryStats;->WAKE_TYPE_PARTIAL:I -Landroid/os/Binder;->execTransact(IJJI)Z -Landroid/os/Binder;->mObject:J -Landroid/os/Broadcaster;-><init>()V -Landroid/os/Broadcaster;->broadcast(Landroid/os/Message;)V -Landroid/os/Broadcaster;->cancelRequest(ILandroid/os/Handler;I)V -Landroid/os/Broadcaster;->request(ILandroid/os/Handler;I)V -Landroid/os/Build$VERSION;->ACTIVE_CODENAMES:[Ljava/lang/String; -Landroid/os/Build;->getLong(Ljava/lang/String;)J -Landroid/os/Build;->getString(Ljava/lang/String;)Ljava/lang/String; -Landroid/os/Build;->IS_DEBUGGABLE:Z -Landroid/os/Build;->IS_EMULATOR:Z -Landroid/os/Bundle;->filterValues()Landroid/os/Bundle; -Landroid/os/Bundle;->forPair(Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle; -Landroid/os/Bundle;->getIBinder(Ljava/lang/String;)Landroid/os/IBinder; -Landroid/os/Bundle;->getSize()I -Landroid/os/Bundle;->putIBinder(Ljava/lang/String;Landroid/os/IBinder;)V -Landroid/os/Bundle;->putParcelableList(Ljava/lang/String;Ljava/util/List;)V -Landroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)Landroid/os/Bundle; -Landroid/os/Debug$MemoryInfo;->dalvikPrivateClean:I -Landroid/os/Debug$MemoryInfo;->dalvikRss:I -Landroid/os/Debug$MemoryInfo;->dalvikSharedClean:I -Landroid/os/Debug$MemoryInfo;->dalvikSwappablePss:I -Landroid/os/Debug$MemoryInfo;->dalvikSwappedOut:I -Landroid/os/Debug$MemoryInfo;->dalvikSwappedOutPss:I -Landroid/os/Debug$MemoryInfo;->getOtherLabel(I)Ljava/lang/String; -Landroid/os/Debug$MemoryInfo;->getOtherPrivate(I)I -Landroid/os/Debug$MemoryInfo;->getOtherPrivateDirty(I)I -Landroid/os/Debug$MemoryInfo;->getOtherPss(I)I -Landroid/os/Debug$MemoryInfo;->getOtherSharedDirty(I)I -Landroid/os/Debug$MemoryInfo;->getSummaryCode()I -Landroid/os/Debug$MemoryInfo;->getSummaryGraphics()I -Landroid/os/Debug$MemoryInfo;->getSummaryJavaHeap()I -Landroid/os/Debug$MemoryInfo;->getSummaryNativeHeap()I -Landroid/os/Debug$MemoryInfo;->getSummaryPrivateOther()I -Landroid/os/Debug$MemoryInfo;->getSummaryStack()I -Landroid/os/Debug$MemoryInfo;->getSummarySystem()I -Landroid/os/Debug$MemoryInfo;->getTotalUss()I -Landroid/os/Debug$MemoryInfo;->hasSwappedOutPss:Z -Landroid/os/Debug$MemoryInfo;->nativePrivateClean:I -Landroid/os/Debug$MemoryInfo;->nativeRss:I -Landroid/os/Debug$MemoryInfo;->nativeSharedClean:I -Landroid/os/Debug$MemoryInfo;->nativeSwappablePss:I -Landroid/os/Debug$MemoryInfo;->nativeSwappedOut:I -Landroid/os/Debug$MemoryInfo;->nativeSwappedOutPss:I -Landroid/os/Debug$MemoryInfo;->NUM_DVK_STATS:I -Landroid/os/Debug$MemoryInfo;->NUM_OTHER_STATS:I -Landroid/os/Debug$MemoryInfo;->otherPrivateClean:I -Landroid/os/Debug$MemoryInfo;->otherRss:I -Landroid/os/Debug$MemoryInfo;->otherSharedClean:I -Landroid/os/Debug$MemoryInfo;->otherStats:[I -Landroid/os/Debug$MemoryInfo;->otherSwappablePss:I -Landroid/os/Debug$MemoryInfo;->otherSwappedOut:I -Landroid/os/Debug$MemoryInfo;->otherSwappedOutPss:I -Landroid/os/Debug;-><init>()V -Landroid/os/Debug;->countInstancesOfClass(Ljava/lang/Class;)J -Landroid/os/Debug;->dumpNativeHeap(Ljava/io/FileDescriptor;)V -Landroid/os/Debug;->dumpReferenceTables()V -Landroid/os/Debug;->getCaller()Ljava/lang/String; -Landroid/os/Debug;->getCallers(I)Ljava/lang/String; -Landroid/os/Debug;->getMemInfo([J)V -Landroid/os/Debug;->getMemoryInfo(ILandroid/os/Debug$MemoryInfo;)V -Landroid/os/DropBoxManager;->mService:Lcom/android/internal/os/IDropBoxManagerService; -Landroid/os/Environment$UserEnvironment;-><init>(I)V -Landroid/os/Environment$UserEnvironment;->getExternalDirs()[Ljava/io/File; -Landroid/os/Environment$UserEnvironment;->getExternalStorageDirectory()Ljava/io/File; -Landroid/os/Environment$UserEnvironment;->getExternalStoragePublicDirectory(Ljava/lang/String;)Ljava/io/File; -Landroid/os/Environment;->buildExternalStorageAndroidDataDirs()[Ljava/io/File; -Landroid/os/Environment;->buildExternalStorageAppCacheDirs(Ljava/lang/String;)[Ljava/io/File; -Landroid/os/Environment;->buildExternalStorageAppDataDirs(Ljava/lang/String;)[Ljava/io/File; -Landroid/os/Environment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File; -Landroid/os/Environment;->buildExternalStorageAppMediaDirs(Ljava/lang/String;)[Ljava/io/File; -Landroid/os/Environment;->buildExternalStorageAppObbDirs(Ljava/lang/String;)[Ljava/io/File; -Landroid/os/Environment;->buildPaths([Ljava/io/File;[Ljava/lang/String;)[Ljava/io/File; -Landroid/os/Environment;->getDataSystemDirectory()Ljava/io/File; -Landroid/os/Environment;->getLegacyExternalStorageDirectory()Ljava/io/File; -Landroid/os/Environment;->getLegacyExternalStorageObbDirectory()Ljava/io/File; -Landroid/os/Environment;->getOemDirectory()Ljava/io/File; -Landroid/os/Environment;->getStorageDirectory()Ljava/io/File; -Landroid/os/Environment;->getVendorDirectory()Ljava/io/File; -Landroid/os/Environment;->initForCurrentUser()V -Landroid/os/Environment;->maybeTranslateEmulatedPathToInternal(Ljava/io/File;)Ljava/io/File; -Landroid/os/Environment;->sCurrentUser:Landroid/os/Environment$UserEnvironment; -Landroid/os/FileObserver$ObserverThread;->onEvent(IILjava/lang/String;)V -Landroid/os/FileObserver;->s_observerThread:Landroid/os/FileObserver$ObserverThread; Landroid/os/FileUtils;-><init>()V -Landroid/os/FileUtils;->checksumCrc32(Ljava/io/File;)J -Landroid/os/FileUtils;->copyFile(Ljava/io/File;Ljava/io/File;)Z -Landroid/os/FileUtils;->copyToFile(Ljava/io/InputStream;Ljava/io/File;)Z -Landroid/os/FileUtils;->deleteContents(Ljava/io/File;)Z -Landroid/os/FileUtils;->deleteOlderFiles(Ljava/io/File;IJ)Z -Landroid/os/FileUtils;->isFilenameSafe(Ljava/io/File;)Z -Landroid/os/FileUtils;->readTextFile(Ljava/io/File;ILjava/lang/String;)Ljava/lang/String; -Landroid/os/FileUtils;->setPermissions(Ljava/io/File;III)I -Landroid/os/FileUtils;->setPermissions(Ljava/io/FileDescriptor;III)I -Landroid/os/FileUtils;->setPermissions(Ljava/lang/String;III)I -Landroid/os/FileUtils;->stringToFile(Ljava/io/File;Ljava/lang/String;)V -Landroid/os/FileUtils;->stringToFile(Ljava/lang/String;Ljava/lang/String;)V -Landroid/os/FileUtils;->sync(Ljava/io/FileOutputStream;)Z -Landroid/os/Handler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V -Landroid/os/Handler;-><init>(Z)V -Landroid/os/Handler;->getIMessenger()Landroid/os/IMessenger; -Landroid/os/Handler;->getMain()Landroid/os/Handler; -Landroid/os/Handler;->getPostMessage(Ljava/lang/Runnable;Ljava/lang/Object;)Landroid/os/Message; -Landroid/os/Handler;->hasCallbacks(Ljava/lang/Runnable;)Z -Landroid/os/Handler;->mCallback:Landroid/os/Handler$Callback; -Landroid/os/Handler;->mLooper:Landroid/os/Looper; -Landroid/os/Handler;->mMessenger:Landroid/os/IMessenger; -Landroid/os/HwBinder;->reportSyspropChanged()V -Landroid/os/HwParcel;-><init>(Z)V -Landroid/os/HwRemoteBinder;-><init>()V Landroid/os/IBatteryPropertiesRegistrar$Stub$Proxy;-><init>(Landroid/os/IBinder;)V -Landroid/os/IBinder;->SYSPROPS_TRANSACTION:I Landroid/os/IDeviceIdentifiersPolicyService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDeviceIdentifiersPolicyService; Landroid/os/IDeviceIdleController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IDeviceIdleController; -Landroid/os/IDeviceIdleController;->addPowerSaveTempWhitelistApp(Ljava/lang/String;JILjava/lang/String;)V Landroid/os/IDeviceIdleController;->getAppIdTempWhitelist()[I Landroid/os/IDeviceIdleController;->getFullPowerWhitelistExceptIdle()[Ljava/lang/String; Landroid/os/INetworkManagementService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/os/INetworkManagementService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/INetworkManagementService; -Landroid/os/INetworkManagementService;->clearInterfaceAddresses(Ljava/lang/String;)V -Landroid/os/INetworkManagementService;->disableIpv6(Ljava/lang/String;)V -Landroid/os/INetworkManagementService;->disableNat(Ljava/lang/String;Ljava/lang/String;)V -Landroid/os/INetworkManagementService;->enableIpv6(Ljava/lang/String;)V -Landroid/os/INetworkManagementService;->enableNat(Ljava/lang/String;Ljava/lang/String;)V -Landroid/os/INetworkManagementService;->getInterfaceConfig(Ljava/lang/String;)Landroid/net/InterfaceConfiguration; -Landroid/os/INetworkManagementService;->getIpForwardingEnabled()Z -Landroid/os/INetworkManagementService;->isBandwidthControlEnabled()Z -Landroid/os/INetworkManagementService;->isTetheringStarted()Z Landroid/os/INetworkManagementService;->listTetheredInterfaces()[Ljava/lang/String; -Landroid/os/INetworkManagementService;->registerObserver(Landroid/net/INetworkManagementEventObserver;)V -Landroid/os/INetworkManagementService;->setInterfaceConfig(Ljava/lang/String;Landroid/net/InterfaceConfiguration;)V -Landroid/os/INetworkManagementService;->setInterfaceIpv6PrivacyExtensions(Ljava/lang/String;Z)V -Landroid/os/INetworkManagementService;->setIpForwardingEnabled(Z)V -Landroid/os/INetworkManagementService;->setIPv6AddrGenMode(Ljava/lang/String;I)V -Landroid/os/INetworkManagementService;->startTethering([Ljava/lang/String;)V -Landroid/os/INetworkManagementService;->stopTethering()V -Landroid/os/INetworkManagementService;->tetherInterface(Ljava/lang/String;)V -Landroid/os/INetworkManagementService;->unregisterObserver(Landroid/net/INetworkManagementEventObserver;)V -Landroid/os/INetworkManagementService;->untetherInterface(Ljava/lang/String;)V Landroid/os/IPermissionController$Stub$Proxy;->checkPermission(Ljava/lang/String;II)Z Landroid/os/IPermissionController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPermissionController; Landroid/os/IPowerManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V @@ -611,313 +396,21 @@ Landroid/os/IPowerManager$Stub$Proxy;->isLightDeviceIdleMode()Z Landroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPowerManager; Landroid/os/IPowerManager$Stub;->TRANSACTION_acquireWakeLock:I Landroid/os/IPowerManager$Stub;->TRANSACTION_goToSleep:I -Landroid/os/IPowerManager;->goToSleep(JII)V -Landroid/os/IPowerManager;->isInteractive()Z -Landroid/os/IPowerManager;->reboot(ZLjava/lang/String;Z)V Landroid/os/IPowerManager;->releaseWakeLock(Landroid/os/IBinder;I)V -Landroid/os/IPowerManager;->userActivity(JII)V -Landroid/os/IPowerManager;->wakeUp(JLjava/lang/String;Ljava/lang/String;)V Landroid/os/IRecoverySystem$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IRecoverySystem; Landroid/os/IRemoteCallback$Stub;-><init>()V -Landroid/os/IRemoteCallback;->sendResult(Landroid/os/Bundle;)V -Landroid/os/IServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder; -Landroid/os/IServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder; Landroid/os/IUpdateEngine$Stub;-><init>()V Landroid/os/IUpdateEngineCallback;->onStatusUpdate(IF)V Landroid/os/IUserManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/os/IUserManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IUserManager; -Landroid/os/IUserManager;->getUserInfo(I)Landroid/content/pm/UserInfo; Landroid/os/IVibratorService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IVibratorService; -Landroid/os/LocaleList;->setDefault(Landroid/os/LocaleList;I)V -Landroid/os/Looper;->mLogging:Landroid/util/Printer; -Landroid/os/Looper;->mQueue:Landroid/os/MessageQueue; -Landroid/os/Looper;->setTraceTag(J)V -Landroid/os/Looper;->sMainLooper:Landroid/os/Looper; -Landroid/os/Looper;->sThreadLocal:Ljava/lang/ThreadLocal; -Landroid/os/MemoryFile;->deactivate()V -Landroid/os/MemoryFile;->getFileDescriptor()Ljava/io/FileDescriptor; -Landroid/os/MemoryFile;->getSize(Ljava/io/FileDescriptor;)I -Landroid/os/MemoryFile;->native_get_size(Ljava/io/FileDescriptor;)I -Landroid/os/MemoryFile;->native_pin(Ljava/io/FileDescriptor;Z)Z -Landroid/os/Message;->callback:Ljava/lang/Runnable; -Landroid/os/Message;->flags:I -Landroid/os/Message;->markInUse()V -Landroid/os/Message;->next:Landroid/os/Message; -Landroid/os/Message;->recycleUnchecked()V -Landroid/os/Message;->setCallback(Ljava/lang/Runnable;)Landroid/os/Message; -Landroid/os/Message;->target:Landroid/os/Handler; -Landroid/os/Message;->toString(J)Ljava/lang/String; -Landroid/os/Message;->when:J -Landroid/os/MessageQueue;->dispatchEvents(II)I -Landroid/os/MessageQueue;->hasMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)Z -Landroid/os/MessageQueue;->mIdleHandlers:Ljava/util/ArrayList; -Landroid/os/MessageQueue;->mMessages:Landroid/os/Message; -Landroid/os/MessageQueue;->mNextBarrierToken:I -Landroid/os/MessageQueue;->mPtr:J -Landroid/os/MessageQueue;->mQuitAllowed:Z -Landroid/os/MessageQueue;->nativePollOnce(JI)V -Landroid/os/MessageQueue;->next()Landroid/os/Message; -Landroid/os/MessageQueue;->postSyncBarrier()I -Landroid/os/MessageQueue;->removeSyncBarrier(I)V Landroid/os/Parcel$ReadWriteHelper;-><init>()V -Landroid/os/Parcel;->getGlobalAllocCount()J -Landroid/os/Parcel;->getGlobalAllocSize()J -Landroid/os/Parcel;->mNativePtr:J -Landroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;Ljava/lang/ClassLoader;)V -Landroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet; -Landroid/os/Parcel;->readBlob()[B -Landroid/os/Parcel;->readCharSequence()Ljava/lang/CharSequence; -Landroid/os/Parcel;->readCreator(Landroid/os/Parcelable$Creator;Ljava/lang/ClassLoader;)Landroid/os/Parcelable; -Landroid/os/Parcel;->readExceptionCode()I -Landroid/os/Parcel;->readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator; -Landroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List; -Landroid/os/Parcel;->readRawFileDescriptor()Ljava/io/FileDescriptor; -Landroid/os/Parcel;->readStringArray()[Ljava/lang/String; -Landroid/os/Parcel;->writeArrayMap(Landroid/util/ArrayMap;)V -Landroid/os/Parcel;->writeArraySet(Landroid/util/ArraySet;)V -Landroid/os/Parcel;->writeBlob([B)V -Landroid/os/Parcel;->writeCharSequence(Ljava/lang/CharSequence;)V -Landroid/os/Parcel;->writeParcelableCreator(Landroid/os/Parcelable;)V -Landroid/os/Parcel;->writeParcelableList(Ljava/util/List;I)V -Landroid/os/ParcelableParcel;-><init>(Ljava/lang/ClassLoader;)V -Landroid/os/ParcelableParcel;->CREATOR:Landroid/os/Parcelable$ClassLoaderCreator; -Landroid/os/ParcelableParcel;->getClassLoader()Ljava/lang/ClassLoader; -Landroid/os/ParcelableParcel;->getParcel()Landroid/os/Parcel; -Landroid/os/ParcelFileDescriptor;-><init>(Ljava/io/FileDescriptor;)V -Landroid/os/ParcelFileDescriptor;->fromData([BLjava/lang/String;)Landroid/os/ParcelFileDescriptor; -Landroid/os/ParcelFileDescriptor;->getFile(Ljava/io/FileDescriptor;)Ljava/io/File; -Landroid/os/ParcelFileDescriptor;->seekTo(J)J -Landroid/os/PerformanceCollector;-><init>()V -Landroid/os/PerformanceCollector;->beginSnapshot(Ljava/lang/String;)V -Landroid/os/PerformanceCollector;->endSnapshot()Landroid/os/Bundle; -Landroid/os/PerformanceCollector;->startTiming(Ljava/lang/String;)V -Landroid/os/PerformanceCollector;->stopTiming(Ljava/lang/String;)Landroid/os/Bundle; -Landroid/os/PowerManager$WakeLock;->mFlags:I -Landroid/os/PowerManager$WakeLock;->mTag:Ljava/lang/String; -Landroid/os/PowerManager;->ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED:Ljava/lang/String; -Landroid/os/PowerManager;->ACTION_POWER_SAVE_MODE_CHANGING:Ljava/lang/String; -Landroid/os/PowerManager;->BRIGHTNESS_ON:I -Landroid/os/PowerManager;->EXTRA_POWER_SAVE_MODE:Ljava/lang/String; -Landroid/os/PowerManager;->getDefaultScreenBrightnessSetting()I -Landroid/os/PowerManager;->getMaximumScreenBrightnessSetting()I -Landroid/os/PowerManager;->getMinimumScreenBrightnessSetting()I -Landroid/os/PowerManager;->goToSleep(JII)V -Landroid/os/PowerManager;->GO_TO_SLEEP_REASON_TIMEOUT:I -Landroid/os/PowerManager;->isLightDeviceIdleMode()Z -Landroid/os/PowerManager;->mService:Landroid/os/IPowerManager; -Landroid/os/PowerManager;->setPowerSaveMode(Z)Z -Landroid/os/PowerManager;->validateWakeLockParameters(ILjava/lang/String;)V -Landroid/os/PowerManager;->wakeUp(JLjava/lang/String;)V -Landroid/os/Process;->DRM_UID:I -Landroid/os/Process;->getFreeMemory()J -Landroid/os/Process;->getParentPid(I)I -Landroid/os/Process;->getPids(Ljava/lang/String;[I)[I -Landroid/os/Process;->getPidsForCommands([Ljava/lang/String;)[I -Landroid/os/Process;->getPss(I)J -Landroid/os/Process;->getTotalMemory()J -Landroid/os/Process;->getUidForPid(I)I -Landroid/os/Process;->isIsolated(I)Z -Landroid/os/Process;->LOG_UID:I -Landroid/os/Process;->MEDIA_UID:I -Landroid/os/Process;->myPpid()I -Landroid/os/Process;->NFC_UID:I -Landroid/os/Process;->parseProcLine([BII[I[Ljava/lang/String;[J[F)Z -Landroid/os/Process;->PROC_COMBINE:I -Landroid/os/Process;->PROC_OUT_FLOAT:I -Landroid/os/Process;->PROC_OUT_LONG:I -Landroid/os/Process;->PROC_OUT_STRING:I -Landroid/os/Process;->PROC_PARENS:I -Landroid/os/Process;->PROC_QUOTES:I -Landroid/os/Process;->PROC_SPACE_TERM:I -Landroid/os/Process;->PROC_TAB_TERM:I -Landroid/os/Process;->PROC_TERM_MASK:I -Landroid/os/Process;->PROC_ZERO_TERM:I -Landroid/os/Process;->readProcFile(Ljava/lang/String;[I[Ljava/lang/String;[J[F)Z -Landroid/os/Process;->readProcLines(Ljava/lang/String;[Ljava/lang/String;[J)V -Landroid/os/Process;->setArgV0(Ljava/lang/String;)V -Landroid/os/Process;->setProcessGroup(II)V -Landroid/os/Process;->VPN_UID:I -Landroid/os/Process;->WIFI_UID:I -Landroid/os/RecoverySystem;->verifyPackageCompatibility(Ljava/io/InputStream;)Z -Landroid/os/Registrant;-><init>(Landroid/os/Handler;ILjava/lang/Object;)V -Landroid/os/Registrant;->clear()V -Landroid/os/Registrant;->messageForRegistrant()Landroid/os/Message; -Landroid/os/Registrant;->notifyRegistrant()V -Landroid/os/Registrant;->notifyRegistrant(Landroid/os/AsyncResult;)V -Landroid/os/Registrant;->notifyResult(Ljava/lang/Object;)V Landroid/os/RegistrantList;-><init>()V -Landroid/os/RegistrantList;->add(Landroid/os/Handler;ILjava/lang/Object;)V -Landroid/os/RegistrantList;->add(Landroid/os/Registrant;)V -Landroid/os/RegistrantList;->addUnique(Landroid/os/Handler;ILjava/lang/Object;)V -Landroid/os/RegistrantList;->notifyRegistrants()V -Landroid/os/RegistrantList;->notifyRegistrants(Landroid/os/AsyncResult;)V -Landroid/os/RegistrantList;->notifyResult(Ljava/lang/Object;)V -Landroid/os/RegistrantList;->remove(Landroid/os/Handler;)V -Landroid/os/RegistrantList;->removeCleared()V -Landroid/os/RegistrantList;->size()I -Landroid/os/RemoteCallbackList;->mCallbacks:Landroid/util/ArrayMap; -Landroid/os/RemoteException;->rethrowFromSystemServer()Ljava/lang/RuntimeException; -Landroid/os/SELinux;->checkSELinuxAccess(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z -Landroid/os/SELinux;->getContext()Ljava/lang/String; -Landroid/os/SELinux;->getFileContext(Ljava/lang/String;)Ljava/lang/String; -Landroid/os/SELinux;->getPidContext(I)Ljava/lang/String; -Landroid/os/SELinux;->isSELinuxEnabled()Z -Landroid/os/SELinux;->isSELinuxEnforced()Z -Landroid/os/SELinux;->restoreconRecursive(Ljava/io/File;)Z Landroid/os/ServiceManager;-><init>()V -Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;)V -Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;Z)V -Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V -Landroid/os/ServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder; -Landroid/os/ServiceManager;->getIServiceManager()Landroid/os/IServiceManager; -Landroid/os/ServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder; -Landroid/os/ServiceManager;->listServices()[Ljava/lang/String; -Landroid/os/ServiceManager;->sCache:Ljava/util/HashMap; -Landroid/os/ServiceManager;->sServiceManager:Landroid/os/IServiceManager; -Landroid/os/ServiceManagerNative;->asInterface(Landroid/os/IBinder;)Landroid/os/IServiceManager; -Landroid/os/ServiceManagerProxy;->getService(Ljava/lang/String;)Landroid/os/IBinder; -Landroid/os/ServiceManagerProxy;->mRemote:Landroid/os/IBinder; -Landroid/os/SharedMemory;->getFd()I -Landroid/os/ShellCommand;->peekNextArg()Ljava/lang/String; -Landroid/os/StatFs;->mStat:Landroid/system/StructStatVfs; Landroid/os/storage/IObbActionListener$Stub;-><init>()V Landroid/os/storage/IStorageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/os/storage/IStorageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/storage/IStorageManager; Landroid/os/storage/StorageEventListener;-><init>()V -Landroid/os/StrictMode$Span;->finish()V -Landroid/os/StrictMode$ThreadPolicy;->mask:I -Landroid/os/StrictMode$VmPolicy$Builder;->mMask:I -Landroid/os/StrictMode$VmPolicy;->mask:I -Landroid/os/StrictMode;->conditionallyCheckInstanceCounts()V -Landroid/os/StrictMode;->disableDeathOnFileUriExposure()V -Landroid/os/StrictMode;->enableDeathOnFileUriExposure()V -Landroid/os/StrictMode;->enterCriticalSpan(Ljava/lang/String;)Landroid/os/StrictMode$Span; -Landroid/os/StrictMode;->getThreadPolicyMask()I -Landroid/os/StrictMode;->incrementExpectedActivityCount(Ljava/lang/Class;)V -Landroid/os/StrictMode;->onBinderStrictModePolicyChange(I)V -Landroid/os/StrictMode;->onWebViewMethodCalledOnWrongThread(Ljava/lang/Throwable;)V -Landroid/os/StrictMode;->sLastVmViolationTime:Ljava/util/HashMap; -Landroid/os/StrictMode;->sWindowManager:Landroid/util/Singleton; -Landroid/os/StrictMode;->violationsBeingTimed:Ljava/lang/ThreadLocal; -Landroid/os/SystemClock;-><init>()V -Landroid/os/SystemClock;->currentThreadTimeMicro()J -Landroid/os/SystemClock;->currentTimeMicro()J -Landroid/os/SystemProperties;-><init>()V -Landroid/os/SystemProperties;->addChangeCallback(Ljava/lang/Runnable;)V -Landroid/os/SystemProperties;->native_get(Ljava/lang/String;)Ljava/lang/String; -Landroid/os/SystemProperties;->native_get_long(Ljava/lang/String;J)J -Landroid/os/SystemProperties;->PROP_NAME_MAX:I -Landroid/os/SystemProperties;->reportSyspropChanged()V -Landroid/os/SystemProperties;->sChangeCallbacks:Ljava/util/ArrayList; -Landroid/os/SystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V -Landroid/os/SystemService;->start(Ljava/lang/String;)V -Landroid/os/SystemService;->stop(Ljava/lang/String;)V -Landroid/os/SystemVibrator;-><init>()V -Landroid/os/SystemVibrator;-><init>(Landroid/content/Context;)V -Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V -Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V -Landroid/os/Trace;->isTagEnabled(J)Z -Landroid/os/Trace;->nativeGetEnabledTags()J -Landroid/os/Trace;->sEnabledTags:J -Landroid/os/Trace;->setAppTracingAllowed(Z)V -Landroid/os/Trace;->traceBegin(JLjava/lang/String;)V -Landroid/os/Trace;->traceCounter(JLjava/lang/String;I)V -Landroid/os/Trace;->traceEnd(J)V -Landroid/os/Trace;->TRACE_TAG_APP:J -Landroid/os/Trace;->TRACE_TAG_VIEW:J -Landroid/os/UEventObserver$UEvent;->get(Ljava/lang/String;)Ljava/lang/String; -Landroid/os/UEventObserver$UEvent;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -Landroid/os/UEventObserver;-><init>()V -Landroid/os/UEventObserver;->onUEvent(Landroid/os/UEventObserver$UEvent;)V -Landroid/os/UEventObserver;->startObserving(Ljava/lang/String;)V -Landroid/os/UEventObserver;->stopObserving()V -Landroid/os/UpdateLock;->acquire()V -Landroid/os/UpdateLock;->isHeld()Z -Landroid/os/UpdateLock;->NOW_IS_CONVENIENT:Ljava/lang/String; -Landroid/os/UpdateLock;->release()V -Landroid/os/UpdateLock;->TIMESTAMP:Ljava/lang/String; -Landroid/os/UpdateLock;->UPDATE_LOCK_CHANGED:Ljava/lang/String; -Landroid/os/UserHandle;-><init>(I)V -Landroid/os/UserHandle;->AID_APP_END:I -Landroid/os/UserHandle;->AID_APP_START:I -Landroid/os/UserHandle;->AID_CACHE_GID_START:I -Landroid/os/UserHandle;->AID_ROOT:I -Landroid/os/UserHandle;->AID_SHARED_GID_START:I -Landroid/os/UserHandle;->CURRENT_OR_SELF:Landroid/os/UserHandle; -Landroid/os/UserHandle;->ERR_GID:I -Landroid/os/UserHandle;->getAppIdFromSharedAppGid(I)I -Landroid/os/UserHandle;->getCallingUserId()I -Landroid/os/UserHandle;->getUid(II)I -Landroid/os/UserHandle;->getUserId(I)I -Landroid/os/UserHandle;->isApp(I)Z -Landroid/os/UserHandle;->isIsolated(I)Z -Landroid/os/UserHandle;->isSameApp(II)Z -Landroid/os/UserHandle;->mHandle:I -Landroid/os/UserHandle;->MU_ENABLED:Z -Landroid/os/UserHandle;->OWNER:Landroid/os/UserHandle; -Landroid/os/UserHandle;->PER_USER_RANGE:I -Landroid/os/UserHandle;->USER_ALL:I -Landroid/os/UserHandle;->USER_CURRENT:I -Landroid/os/UserHandle;->USER_CURRENT_OR_SELF:I -Landroid/os/UserHandle;->USER_NULL:I -Landroid/os/UserHandle;->USER_OWNER:I -Landroid/os/UserHandle;->USER_SERIAL_SYSTEM:I -Landroid/os/UserHandle;->USER_SYSTEM:I -Landroid/os/UserManager;->createProfileForUser(Ljava/lang/String;II)Landroid/content/pm/UserInfo; -Landroid/os/UserManager;->createUser(Ljava/lang/String;I)Landroid/content/pm/UserInfo; -Landroid/os/UserManager;->DISALLOW_RECORD_AUDIO:Ljava/lang/String; -Landroid/os/UserManager;->get(Landroid/content/Context;)Landroid/os/UserManager; -Landroid/os/UserManager;->getEnabledProfiles(I)Ljava/util/List; -Landroid/os/UserManager;->getMaxSupportedUsers()I -Landroid/os/UserManager;->getProfileIdsWithDisabled(I)[I -Landroid/os/UserManager;->getProfileParent(I)Landroid/content/pm/UserInfo; -Landroid/os/UserManager;->getProfiles(I)Ljava/util/List; -Landroid/os/UserManager;->getUserHandle()I -Landroid/os/UserManager;->getUserHandle(I)I -Landroid/os/UserManager;->getUserIcon(I)Landroid/graphics/Bitmap; -Landroid/os/UserManager;->getUserInfo(I)Landroid/content/pm/UserInfo; -Landroid/os/UserManager;->getUsers()Ljava/util/List; -Landroid/os/UserManager;->getUsers(Z)Ljava/util/List; -Landroid/os/UserManager;->getUserSerialNumber(I)I -Landroid/os/UserManager;->getUserStartRealtime()J -Landroid/os/UserManager;->getUserUnlockRealtime()J -Landroid/os/UserManager;->hasBaseUserRestriction(Ljava/lang/String;Landroid/os/UserHandle;)Z -Landroid/os/UserManager;->hasUserRestriction(Ljava/lang/String;Landroid/os/UserHandle;)Z -Landroid/os/UserManager;->isAdminUser()Z -Landroid/os/UserManager;->isDeviceInDemoMode(Landroid/content/Context;)Z -Landroid/os/UserManager;->isGuestUser(I)Z -Landroid/os/UserManager;->isLinkedUser()Z -Landroid/os/UserManager;->isUserAdmin(I)Z -Landroid/os/UserManager;->isUserUnlocked(I)Z -Landroid/os/UserManager;->mService:Landroid/os/IUserManager; -Landroid/os/UserManager;->removeUser(I)Z -Landroid/os/Vibrator;-><init>()V -Landroid/os/VintfObject;->getHalNamesAndVersions()[Ljava/lang/String; -Landroid/os/VintfObject;->getSepolicyVersion()Ljava/lang/String; -Landroid/os/VintfObject;->getTargetFrameworkCompatibilityMatrixVersion()Ljava/lang/Long; -Landroid/os/VintfObject;->getVndkSnapshots()Ljava/util/Map; -Landroid/os/VintfObject;->report()[Ljava/lang/String; -Landroid/os/VintfRuntimeInfo;->getCpuInfo()Ljava/lang/String; -Landroid/os/VintfRuntimeInfo;->getHardwareId()Ljava/lang/String; -Landroid/os/VintfRuntimeInfo;->getKernelVersion()Ljava/lang/String; -Landroid/os/VintfRuntimeInfo;->getNodeName()Ljava/lang/String; -Landroid/os/VintfRuntimeInfo;->getOsName()Ljava/lang/String; -Landroid/os/VintfRuntimeInfo;->getOsRelease()Ljava/lang/String; -Landroid/os/VintfRuntimeInfo;->getOsVersion()Ljava/lang/String; -Landroid/os/WorkSource;-><init>(I)V -Landroid/os/WorkSource;-><init>(Landroid/os/Parcel;)V -Landroid/os/WorkSource;->add(I)Z -Landroid/os/WorkSource;->add(ILjava/lang/String;)Z -Landroid/os/WorkSource;->addReturningNewbs(Landroid/os/WorkSource;)Landroid/os/WorkSource; -Landroid/os/WorkSource;->get(I)I -Landroid/os/WorkSource;->getName(I)Ljava/lang/String; -Landroid/os/WorkSource;->mNames:[Ljava/lang/String; -Landroid/os/WorkSource;->mNum:I -Landroid/os/WorkSource;->mUids:[I -Landroid/os/WorkSource;->setReturningDiffs(Landroid/os/WorkSource;)[Landroid/os/WorkSource; -Landroid/os/WorkSource;->size()I -Landroid/os/ZygoteStartFailedEx;-><init>(Ljava/lang/String;)V -Landroid/os/ZygoteStartFailedEx;-><init>(Ljava/lang/Throwable;)V Landroid/preference/PreferenceGroupAdapter;->getItem(I)Landroid/preference/Preference; Landroid/R$styleable;->ActionBar:[I Landroid/R$styleable;->ActionBar_background:I @@ -1901,48 +1394,6 @@ Lcom/android/internal/statusbar/IStatusBar$Stub;->asInterface(Landroid/os/IBinde Lcom/android/internal/statusbar/IStatusBarService$Stub;-><init>()V Lcom/android/internal/statusbar/IStatusBarService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBarService; Lcom/android/internal/telecom/ITelecomService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/ITelecomService; -Lcom/android/internal/telephony/BaseCommands;->mCallStateRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mCallWaitingInfoRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mCatCallSetUpRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mCatCcAlphaRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mCatEventRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mCatProCmdRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mCatSessionEndRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mCdmaPrlChangedRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mCdmaSmsRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mCdmaSubscriptionChangedRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/BaseCommands;->mEmergencyCallbackModeRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mExitEmergencyCallbackModeRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mGsmBroadcastSmsRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mGsmSmsRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mHardwareConfigChangeRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mIccRefreshRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mIccSmsFullRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mIccStatusChangedRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mImsNetworkStateChangedRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mNITZTimeRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mOtaProvisionRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mPhoneRadioCapabilityChangedRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mPhoneType:I -Lcom/android/internal/telephony/BaseCommands;->mPreferredNetworkType:I -Lcom/android/internal/telephony/BaseCommands;->mResendIncallMuteRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mRestrictedStateRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mRilCellInfoListRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mRingbackToneRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mRingRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mSignalStrengthRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mSmsOnSimRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mSmsStatusRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mSrvccStateRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mSsnRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mSsRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mStateMonitor:Ljava/lang/Object; -Lcom/android/internal/telephony/BaseCommands;->mSubscriptionStatusRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/BaseCommands;->mUnsolOemHookRawRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mUSSDRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/BaseCommands;->mVoiceRadioTechChangedRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/Call$State;->ACTIVE:Lcom/android/internal/telephony/Call$State; Lcom/android/internal/telephony/Call$State;->ALERTING:Lcom/android/internal/telephony/Call$State; Lcom/android/internal/telephony/Call$State;->DIALING:Lcom/android/internal/telephony/Call$State; Lcom/android/internal/telephony/Call$State;->DISCONNECTED:Lcom/android/internal/telephony/Call$State; @@ -1950,232 +1401,22 @@ Lcom/android/internal/telephony/Call$State;->DISCONNECTING:Lcom/android/internal Lcom/android/internal/telephony/Call$State;->HOLDING:Lcom/android/internal/telephony/Call$State; Lcom/android/internal/telephony/Call$State;->IDLE:Lcom/android/internal/telephony/Call$State; Lcom/android/internal/telephony/Call$State;->INCOMING:Lcom/android/internal/telephony/Call$State; -Lcom/android/internal/telephony/Call$State;->isAlive()Z -Lcom/android/internal/telephony/Call$State;->isRinging()Z Lcom/android/internal/telephony/Call$State;->values()[Lcom/android/internal/telephony/Call$State; Lcom/android/internal/telephony/Call$State;->WAITING:Lcom/android/internal/telephony/Call$State; Lcom/android/internal/telephony/Call;-><init>()V -Lcom/android/internal/telephony/Call;->getConnections()Ljava/util/List; -Lcom/android/internal/telephony/Call;->getEarliestConnection()Lcom/android/internal/telephony/Connection; -Lcom/android/internal/telephony/Call;->getLatestConnection()Lcom/android/internal/telephony/Connection; -Lcom/android/internal/telephony/Call;->getPhone()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/Call;->getState()Lcom/android/internal/telephony/Call$State; -Lcom/android/internal/telephony/Call;->hangup()V -Lcom/android/internal/telephony/Call;->isIdle()Z -Lcom/android/internal/telephony/Call;->isMultiparty()Z -Lcom/android/internal/telephony/Call;->mConnections:Ljava/util/ArrayList; -Lcom/android/internal/telephony/Call;->mState:Lcom/android/internal/telephony/Call$State; Lcom/android/internal/telephony/CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler;-><init>(Lcom/android/internal/telephony/CallerInfoAsyncQuery;Landroid/content/Context;)V Lcom/android/internal/telephony/CallerInfoAsyncQuery$CookieWrapper;-><init>()V Lcom/android/internal/telephony/CallerInfoAsyncQuery;->release()V Lcom/android/internal/telephony/CallForwardInfo;-><init>()V -Lcom/android/internal/telephony/CallForwardInfo;->number:Ljava/lang/String; -Lcom/android/internal/telephony/CallForwardInfo;->reason:I -Lcom/android/internal/telephony/CallForwardInfo;->serviceClass:I -Lcom/android/internal/telephony/CallForwardInfo;->status:I -Lcom/android/internal/telephony/CallForwardInfo;->timeSeconds:I -Lcom/android/internal/telephony/CallForwardInfo;->toa:I -Lcom/android/internal/telephony/CallManager;->canConference(Lcom/android/internal/telephony/Call;I)Z -Lcom/android/internal/telephony/CallManager;->canDial(Lcom/android/internal/telephony/Phone;)Z -Lcom/android/internal/telephony/CallManager;->conference(Lcom/android/internal/telephony/Call;)V -Lcom/android/internal/telephony/CallManager;->getActiveFgCall(I)Lcom/android/internal/telephony/Call; -Lcom/android/internal/telephony/CallManager;->getActiveFgCallState(I)Lcom/android/internal/telephony/Call$State; -Lcom/android/internal/telephony/CallManager;->getBackgroundCalls()Ljava/util/List; -Lcom/android/internal/telephony/CallManager;->getBgCallConnections()Ljava/util/List; -Lcom/android/internal/telephony/CallManager;->getBgPhone()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/CallManager;->getContext()Landroid/content/Context; -Lcom/android/internal/telephony/CallManager;->getDefaultPhone()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/CallManager;->getFgCallConnections()Ljava/util/List; -Lcom/android/internal/telephony/CallManager;->getFgPhone()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/CallManager;->getFgPhone(I)Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/CallManager;->getFirstActiveBgCall()Lcom/android/internal/telephony/Call; -Lcom/android/internal/telephony/CallManager;->getFirstActiveBgCall(I)Lcom/android/internal/telephony/Call; -Lcom/android/internal/telephony/CallManager;->getFirstActiveRingingCall()Lcom/android/internal/telephony/Call; -Lcom/android/internal/telephony/CallManager;->getFirstActiveRingingCall(I)Lcom/android/internal/telephony/Call; -Lcom/android/internal/telephony/CallManager;->getInstance()Lcom/android/internal/telephony/CallManager; -Lcom/android/internal/telephony/CallManager;->getPhoneInCall()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/CallManager;->getRingingCalls()Ljava/util/List; -Lcom/android/internal/telephony/CallManager;->getRingingPhone()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/CallManager;->getState()Lcom/android/internal/telephony/PhoneConstants$State; -Lcom/android/internal/telephony/CallManager;->getState(I)Lcom/android/internal/telephony/PhoneConstants$State; -Lcom/android/internal/telephony/CallManager;->hasActiveBgCall()Z -Lcom/android/internal/telephony/CallManager;->hasActiveBgCall(I)Z -Lcom/android/internal/telephony/CallManager;->hasActiveFgCall()Z -Lcom/android/internal/telephony/CallManager;->hasActiveFgCall(I)Z -Lcom/android/internal/telephony/CallManager;->hasActiveRingingCall(I)Z -Lcom/android/internal/telephony/CallManager;->hasMoreThanOneRingingCall()Z -Lcom/android/internal/telephony/CallManager;->hasMoreThanOneRingingCall(I)Z -Lcom/android/internal/telephony/CallManager;->mBackgroundCalls:Ljava/util/ArrayList; -Lcom/android/internal/telephony/CallManager;->mEmptyConnections:Ljava/util/ArrayList; -Lcom/android/internal/telephony/CallManager;->mForegroundCalls:Ljava/util/ArrayList; -Lcom/android/internal/telephony/CallManager;->mPhones:Ljava/util/ArrayList; -Lcom/android/internal/telephony/CallManager;->mRingingCalls:Ljava/util/ArrayList; -Lcom/android/internal/telephony/CallManager;->registerForDisconnect(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CallManager;->registerForNewRingingConnection(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CallManager;->registerForPreciseCallStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CallManager;->registerPhone(Lcom/android/internal/telephony/Phone;)Z -Lcom/android/internal/telephony/CallManager;->unregisterForDisconnect(Landroid/os/Handler;)V -Lcom/android/internal/telephony/CallManager;->unregisterForNewRingingConnection(Landroid/os/Handler;)V -Lcom/android/internal/telephony/CallManager;->unregisterForPreciseCallStateChanged(Landroid/os/Handler;)V -Lcom/android/internal/telephony/CallManager;->unregisterPhone(Lcom/android/internal/telephony/Phone;)V -Lcom/android/internal/telephony/CallStateException;-><init>(Ljava/lang/String;)V Lcom/android/internal/telephony/CallTracker;-><init>()V -Lcom/android/internal/telephony/CallTracker;->getState()Lcom/android/internal/telephony/PhoneConstants$State; -Lcom/android/internal/telephony/CallTracker;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/CallTracker;->mCi:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/CallTracker;->mNeedsPoll:Z -Lcom/android/internal/telephony/CallTracker;->mNumberConverted:Z -Lcom/android/internal/telephony/CallTracker;->mPendingOperations:I -Lcom/android/internal/telephony/CallTracker;->registerForVoiceCallEnded(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CarrierServiceBindHelper;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/CarrierServiceBindHelper;->mHandler:Landroid/os/Handler; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->CLOSE_CHANNEL:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->DISPLAY_TEXT:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->fromInt(I)Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->GET_CHANNEL_STATUS:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->GET_INKEY:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->GET_INPUT:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->LANGUAGE_NOTIFICATION:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->LAUNCH_BROWSER:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->OPEN_CHANNEL:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->PLAY_TONE:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->PROVIDE_LOCAL_INFORMATION:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->RECEIVE_DATA:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->REFRESH:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SELECT_ITEM:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_DATA:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_DTMF:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_SMS:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_SS:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SEND_USSD:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SET_UP_CALL:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SET_UP_EVENT_LIST:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SET_UP_IDLE_MODE_TEXT:Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/AppInterface$CommandType;->SET_UP_MENU:Lcom/android/internal/telephony/cat/AppInterface$CommandType; Lcom/android/internal/telephony/cat/AppInterface$CommandType;->values()[Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/CatCmdMessage$CallSettings;->callMsg:Lcom/android/internal/telephony/cat/TextMessage; -Lcom/android/internal/telephony/cat/CatCmdMessage$CallSettings;->confirmMsg:Lcom/android/internal/telephony/cat/TextMessage; -Lcom/android/internal/telephony/cat/CatCmdMessage$SetupEventListSettings;->eventList:[I -Lcom/android/internal/telephony/cat/CatCmdMessage;->getCallSettings()Lcom/android/internal/telephony/cat/CatCmdMessage$CallSettings; -Lcom/android/internal/telephony/cat/CatCmdMessage;->getCmdType()Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/CatCmdMessage;->geTextMessage()Lcom/android/internal/telephony/cat/TextMessage; -Lcom/android/internal/telephony/cat/CatCmdMessage;->getSetEventList()Lcom/android/internal/telephony/cat/CatCmdMessage$SetupEventListSettings; -Lcom/android/internal/telephony/cat/CatCmdMessage;->hasIconLoadFailed()Z -Lcom/android/internal/telephony/cat/CatCmdMessage;->mCallSettings:Lcom/android/internal/telephony/cat/CatCmdMessage$CallSettings; -Lcom/android/internal/telephony/cat/CatCmdMessage;->mCmdDet:Lcom/android/internal/telephony/cat/CommandDetails; -Lcom/android/internal/telephony/cat/CatCmdMessage;->mInput:Lcom/android/internal/telephony/cat/Input; -Lcom/android/internal/telephony/cat/CatCmdMessage;->mMenu:Lcom/android/internal/telephony/cat/Menu; -Lcom/android/internal/telephony/cat/CatCmdMessage;->mTextMsg:Lcom/android/internal/telephony/cat/TextMessage; -Lcom/android/internal/telephony/cat/CatLog;->d(Ljava/lang/Object;Ljava/lang/String;)V -Lcom/android/internal/telephony/cat/CatLog;->d(Ljava/lang/String;Ljava/lang/String;)V -Lcom/android/internal/telephony/cat/CatLog;->e(Ljava/lang/Object;Ljava/lang/String;)V -Lcom/android/internal/telephony/cat/CatResponseMessage;->setEventDownload(I[B)V -Lcom/android/internal/telephony/cat/CatService;->dispose()V -Lcom/android/internal/telephony/cat/CatService;->isStkAppInstalled()Z -Lcom/android/internal/telephony/cat/CatService;->mCmdIf:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/cat/CatService;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/cat/CatService;->mCurrntCmd:Lcom/android/internal/telephony/cat/CatCmdMessage; -Lcom/android/internal/telephony/cat/CatService;->mMenuCmd:Lcom/android/internal/telephony/cat/CatCmdMessage; -Lcom/android/internal/telephony/cat/CatService;->mMsgDecoder:Lcom/android/internal/telephony/cat/RilMessageDecoder; -Lcom/android/internal/telephony/cat/CatService;->mSlotId:I -Lcom/android/internal/telephony/cat/CatService;->mStkAppInstalled:Z -Lcom/android/internal/telephony/cat/CatService;->mUiccController:Lcom/android/internal/telephony/uicc/UiccController; -Lcom/android/internal/telephony/cat/CatService;->sendTerminalResponse(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/ResultCode;ZILcom/android/internal/telephony/cat/ResponseData;)V -Lcom/android/internal/telephony/cat/CatService;->sInstance:[Lcom/android/internal/telephony/cat/CatService; -Lcom/android/internal/telephony/cat/CatService;->sInstanceLock:Ljava/lang/Object; -Lcom/android/internal/telephony/cat/CommandDetails;->commandNumber:I -Lcom/android/internal/telephony/cat/CommandDetails;->commandQualifier:I -Lcom/android/internal/telephony/cat/CommandDetails;->compRequired:Z -Lcom/android/internal/telephony/cat/CommandDetails;->typeOfCommand:I -Lcom/android/internal/telephony/cat/CommandParams;-><init>(Lcom/android/internal/telephony/cat/CommandDetails;)V -Lcom/android/internal/telephony/cat/CommandParams;->getCommandType()Lcom/android/internal/telephony/cat/AppInterface$CommandType; -Lcom/android/internal/telephony/cat/CommandParams;->mCmdDet:Lcom/android/internal/telephony/cat/CommandDetails; -Lcom/android/internal/telephony/cat/CommandParamsFactory;->dispose()V -Lcom/android/internal/telephony/cat/CommandParamsFactory;->mIconLoader:Lcom/android/internal/telephony/cat/IconLoader; -Lcom/android/internal/telephony/cat/CommandParamsFactory;->searchForNextTag(Lcom/android/internal/telephony/cat/ComprehensionTlvTag;Ljava/util/Iterator;)Lcom/android/internal/telephony/cat/ComprehensionTlv; -Lcom/android/internal/telephony/cat/CommandParamsFactory;->searchForTag(Lcom/android/internal/telephony/cat/ComprehensionTlvTag;Ljava/util/List;)Lcom/android/internal/telephony/cat/ComprehensionTlv; -Lcom/android/internal/telephony/cat/ComprehensionTlv;->getLength()I -Lcom/android/internal/telephony/cat/ComprehensionTlv;->getRawValue()[B -Lcom/android/internal/telephony/cat/ComprehensionTlv;->getTag()I -Lcom/android/internal/telephony/cat/ComprehensionTlv;->getValueIndex()I -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->ADDRESS:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->ALPHA_ID:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->COMMAND_DETAILS:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->DEVICE_IDENTITIES:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->ICON_ID:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->RESULT:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->SMS_TPDU:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->TEXT_ATTRIBUTE:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->TEXT_STRING:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->USSD_STRING:Lcom/android/internal/telephony/cat/ComprehensionTlvTag; -Lcom/android/internal/telephony/cat/ComprehensionTlvTag;->value()I -Lcom/android/internal/telephony/cat/DeviceIdentities;->destinationId:I -Lcom/android/internal/telephony/cat/DisplayTextParams;-><init>(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/TextMessage;)V -Lcom/android/internal/telephony/cat/DisplayTextParams;->mTextMsg:Lcom/android/internal/telephony/cat/TextMessage; -Lcom/android/internal/telephony/cat/Duration$TimeUnit;->value()I -Lcom/android/internal/telephony/cat/Duration;->timeInterval:I -Lcom/android/internal/telephony/cat/Duration;->timeUnit:Lcom/android/internal/telephony/cat/Duration$TimeUnit; -Lcom/android/internal/telephony/cat/GetInputParams;-><init>(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/Input;)V -Lcom/android/internal/telephony/cat/IconId;->recordNumber:I -Lcom/android/internal/telephony/cat/IconLoader;->loadIcon(ILandroid/os/Message;)V -Lcom/android/internal/telephony/cat/Menu;->titleAttrs:Ljava/util/List; -Lcom/android/internal/telephony/cat/PlayToneParams;-><init>(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/TextMessage;Lcom/android/internal/telephony/cat/Tone;Lcom/android/internal/telephony/cat/Duration;Z)V Lcom/android/internal/telephony/cat/ResponseData;-><init>()V -Lcom/android/internal/telephony/cat/ResponseData;->format(Ljava/io/ByteArrayOutputStream;)V -Lcom/android/internal/telephony/cat/ResultCode;->BACKWARD_MOVE_BY_USER:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->BEYOND_TERMINAL_CAPABILITY:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->BIP_ERROR:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->CMD_DATA_NOT_UNDERSTOOD:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->HELP_INFO_REQUIRED:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->LAUNCH_BROWSER_ERROR:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->NETWORK_CRNTLY_UNABLE_TO_PROCESS:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->NO_RESPONSE_FROM_USER:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->OK:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_ICON_NOT_DISPLAYED:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_LIMITED_SERVICE:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_MODIFIED_BY_NAA:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_NAA_NOT_ACTIVE:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_TONE_NOT_PLAYED:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_WITH_ADDITIONAL_EFS_READ:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_WITH_MISSING_INFO:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_WITH_MODIFICATION:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->PRFRMD_WITH_PARTIAL_COMPREHENSION:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->REQUIRED_VALUES_MISSING:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->TERMINAL_CRNTLY_UNABLE_TO_PROCESS:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->UICC_SESSION_TERM_BY_USER:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->USER_NOT_ACCEPT:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->USIM_CALL_CONTROL_PERMANENT:Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultCode;->value()I Lcom/android/internal/telephony/cat/ResultCode;->values()[Lcom/android/internal/telephony/cat/ResultCode; -Lcom/android/internal/telephony/cat/ResultException;-><init>(Lcom/android/internal/telephony/cat/ResultCode;)V -Lcom/android/internal/telephony/cat/RilMessage;-><init>(ILjava/lang/String;)V -Lcom/android/internal/telephony/cat/RilMessage;->mData:Ljava/lang/Object; -Lcom/android/internal/telephony/cat/RilMessage;->mId:I -Lcom/android/internal/telephony/cat/RilMessageDecoder;->getInstance(Landroid/os/Handler;Lcom/android/internal/telephony/uicc/IccFileHandler;I)Lcom/android/internal/telephony/cat/RilMessageDecoder; -Lcom/android/internal/telephony/cat/RilMessageDecoder;->mCmdParamsFactory:Lcom/android/internal/telephony/cat/CommandParamsFactory; Lcom/android/internal/telephony/cat/RilMessageDecoder;->mCurrentRilMessage:Lcom/android/internal/telephony/cat/RilMessage; -Lcom/android/internal/telephony/cat/RilMessageDecoder;->mInstance:[Lcom/android/internal/telephony/cat/RilMessageDecoder; -Lcom/android/internal/telephony/cat/RilMessageDecoder;->mStateStart:Lcom/android/internal/telephony/cat/RilMessageDecoder$StateStart; Lcom/android/internal/telephony/cat/RilMessageDecoder;->sendCmdForExecution(Lcom/android/internal/telephony/cat/RilMessage;)V Lcom/android/internal/telephony/cat/RilMessageDecoder;->sendStartDecodingMessageParams(Lcom/android/internal/telephony/cat/RilMessage;)V -Lcom/android/internal/telephony/cat/SelectItemParams;-><init>(Lcom/android/internal/telephony/cat/CommandDetails;Lcom/android/internal/telephony/cat/Menu;Z)V -Lcom/android/internal/telephony/cat/TextMessage;-><init>()V -Lcom/android/internal/telephony/cat/TextMessage;->iconSelfExplanatory:Z -Lcom/android/internal/telephony/cat/TextMessage;->text:Ljava/lang/String; Lcom/android/internal/telephony/cat/ValueObject;-><init>()V -Lcom/android/internal/telephony/cat/ValueParser;->retrieveAlphaId(Lcom/android/internal/telephony/cat/ComprehensionTlv;)Ljava/lang/String; Lcom/android/internal/telephony/cat/ValueParser;->retrieveDeviceIdentities(Lcom/android/internal/telephony/cat/ComprehensionTlv;)Lcom/android/internal/telephony/cat/DeviceIdentities; -Lcom/android/internal/telephony/cat/ValueParser;->retrieveTextAttribute(Lcom/android/internal/telephony/cat/ComprehensionTlv;)Ljava/util/List; -Lcom/android/internal/telephony/cat/ValueParser;->retrieveTextString(Lcom/android/internal/telephony/cat/ComprehensionTlv;)Ljava/lang/String; -Lcom/android/internal/telephony/cdma/CdmaCallWaitingNotification;->number:Ljava/lang/String; -Lcom/android/internal/telephony/cdma/CdmaMmiCode;->makeEmptyNull(Ljava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/cdma/CdmaMmiCode;->mSc:Ljava/lang/String; -Lcom/android/internal/telephony/cdma/CdmaSMSDispatcher;->getFormat()Ljava/lang/String; -Lcom/android/internal/telephony/cdma/CdmaSMSDispatcher;->handleCdmaStatusReport(Lcom/android/internal/telephony/cdma/SmsMessage;)V -Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->getCdmaSubscriptionSource()I -Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager;->getInstance(Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;Landroid/os/Handler;ILjava/lang/Object;)Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager; -Lcom/android/internal/telephony/cdma/EriManager$EriDisplayInformation;->mEriIconText:Ljava/lang/String; -Lcom/android/internal/telephony/cdma/EriManager;->getEriDisplayInformation(II)Lcom/android/internal/telephony/cdma/EriManager$EriDisplayInformation; Lcom/android/internal/telephony/cdma/sms/BearerData$CodingException;-><init>(Ljava/lang/String;)V Lcom/android/internal/telephony/cdma/sms/BearerData$TimeStamp;-><init>()V Lcom/android/internal/telephony/cdma/sms/BearerData;-><init>()V @@ -2229,130 +1470,6 @@ Lcom/android/internal/telephony/cdma/SmsMessage;->mBearerData:Lcom/android/inter Lcom/android/internal/telephony/cdma/SmsMessage;->mEnvelope:Lcom/android/internal/telephony/cdma/sms/SmsEnvelope; Lcom/android/internal/telephony/cdma/SmsMessage;->parseSms()V Lcom/android/internal/telephony/cdma/SmsMessage;->privateGetSubmitPdu(Ljava/lang/String;ZLcom/android/internal/telephony/cdma/sms/UserData;)Lcom/android/internal/telephony/cdma/SmsMessage$SubmitPdu; -Lcom/android/internal/telephony/CommandException$Error;->GENERIC_FAILURE:Lcom/android/internal/telephony/CommandException$Error; -Lcom/android/internal/telephony/CommandException$Error;->PASSWORD_INCORRECT:Lcom/android/internal/telephony/CommandException$Error; -Lcom/android/internal/telephony/CommandException$Error;->RADIO_NOT_AVAILABLE:Lcom/android/internal/telephony/CommandException$Error; -Lcom/android/internal/telephony/CommandException$Error;->REQUEST_NOT_SUPPORTED:Lcom/android/internal/telephony/CommandException$Error; -Lcom/android/internal/telephony/CommandException$Error;->SIM_PUK2:Lcom/android/internal/telephony/CommandException$Error; -Lcom/android/internal/telephony/CommandException$Error;->SMS_FAIL_RETRY:Lcom/android/internal/telephony/CommandException$Error; -Lcom/android/internal/telephony/CommandException;-><init>(Lcom/android/internal/telephony/CommandException$Error;)V -Lcom/android/internal/telephony/CommandException;->fromRilErrno(I)Lcom/android/internal/telephony/CommandException; -Lcom/android/internal/telephony/CommandException;->getCommandError()Lcom/android/internal/telephony/CommandException$Error; -Lcom/android/internal/telephony/CommandException;->mError:Lcom/android/internal/telephony/CommandException$Error; -Lcom/android/internal/telephony/CommandsInterface;->acceptCall(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->acknowledgeLastIncomingCdmaSms(ZILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->acknowledgeLastIncomingGsmSms(ZILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->changeBarringPassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->deleteSmsOnRuim(ILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->deleteSmsOnSim(ILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->exitEmergencyCallbackMode(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getBasebandVersion(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getCdmaBroadcastConfig(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getCDMASubscription(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getDataCallList(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getIccCardStatus(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getIMEISV(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getIMSI(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getLastDataCallFailCause(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getLastPdpFailCause(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getNetworkSelectionMode(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getOperator(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getPDPContextList(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getPreferredNetworkType(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getSignalStrength(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getSmscAddress(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->getVoiceRegistrationState(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->handleCallSetupRequestFromSim(ZLandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->iccIO(IILjava/lang/String;IIILjava/lang/String;Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->iccIOForApp(IILjava/lang/String;IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->invokeOemRilRequestRaw([BLandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->queryCallForwardStatus(IILjava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->queryCallWaiting(ILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->queryFacilityLock(Ljava/lang/String;Ljava/lang/String;ILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->queryTTYMode(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForAvailable(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForCdmaOtaProvision(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForCellInfoList(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForIccRefresh(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForImsNetworkStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForNotAvailable(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForOffOrNotAvailable(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForOn(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForRadioStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->registerForRilConnected(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->reportSmsMemoryStatus(ZLandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->reportStkServiceIsRunning(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->requestIccSimAuthentication(ILjava/lang/String;Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->requestShutdown(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->sendDtmf(CLandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->sendEnvelope(Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->sendTerminalResponse(Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setCallForward(IIILjava/lang/String;ILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setCallWaiting(ZILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setCdmaBroadcastActivation(ZLandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setDataAllowed(ZLandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setEmergencyCallbackMode(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setFacilityLock(Ljava/lang/String;ZLjava/lang/String;ILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setNetworkSelectionModeAutomatic(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setNetworkSelectionModeManual(Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnCallRing(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnCatCallSetUp(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnCatCcAlphaNotify(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnCatEvent(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnCatProactiveCmd(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnCatSessionEnd(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnIccRefresh(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnIccSmsFull(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnNewGsmBroadcastSms(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnNITZTime(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnSignalStrengthUpdate(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnSmsOnSim(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnSmsStatus(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setOnSuppServiceNotification(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/CommandsInterface;->setPhoneType(I)V -Lcom/android/internal/telephony/CommandsInterface;->setPreferredNetworkType(ILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setRadioPower(ZLandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setSmscAddress(Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setTTYMode(ILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->setUiccSubscription(IIIILandroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->supplyIccPin(Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->switchWaitingOrHoldingAndActive(Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->unregisterForAvailable(Landroid/os/Handler;)V -Lcom/android/internal/telephony/CommandsInterface;->unregisterForCdmaOtaProvision(Landroid/os/Handler;)V -Lcom/android/internal/telephony/CommandsInterface;->unregisterForOffOrNotAvailable(Landroid/os/Handler;)V -Lcom/android/internal/telephony/CommandsInterface;->unregisterForOn(Landroid/os/Handler;)V -Lcom/android/internal/telephony/CommandsInterface;->unregisterForRilConnected(Landroid/os/Handler;)V -Lcom/android/internal/telephony/CommandsInterface;->unregisterForVoiceRadioTechChanged(Landroid/os/Handler;)V -Lcom/android/internal/telephony/CommandsInterface;->writeSmsToRuim(ILjava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/CommandsInterface;->writeSmsToSim(ILjava/lang/String;Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/Connection$PostDialState;->CANCELLED:Lcom/android/internal/telephony/Connection$PostDialState; -Lcom/android/internal/telephony/Connection$PostDialState;->COMPLETE:Lcom/android/internal/telephony/Connection$PostDialState; -Lcom/android/internal/telephony/Connection$PostDialState;->NOT_STARTED:Lcom/android/internal/telephony/Connection$PostDialState; -Lcom/android/internal/telephony/Connection$PostDialState;->STARTED:Lcom/android/internal/telephony/Connection$PostDialState; -Lcom/android/internal/telephony/Connection$PostDialState;->WAIT:Lcom/android/internal/telephony/Connection$PostDialState; -Lcom/android/internal/telephony/Connection$PostDialState;->WILD:Lcom/android/internal/telephony/Connection$PostDialState; -Lcom/android/internal/telephony/Connection;-><init>(I)V -Lcom/android/internal/telephony/Connection;->getAddress()Ljava/lang/String; -Lcom/android/internal/telephony/Connection;->getCall()Lcom/android/internal/telephony/Call; -Lcom/android/internal/telephony/Connection;->getConnectTime()J -Lcom/android/internal/telephony/Connection;->getCreateTime()J -Lcom/android/internal/telephony/Connection;->getDisconnectCause()I -Lcom/android/internal/telephony/Connection;->getDisconnectTime()J -Lcom/android/internal/telephony/Connection;->getDurationMillis()J -Lcom/android/internal/telephony/Connection;->getState()Lcom/android/internal/telephony/Call$State; -Lcom/android/internal/telephony/Connection;->getUserData()Ljava/lang/Object; -Lcom/android/internal/telephony/Connection;->hangup()V -Lcom/android/internal/telephony/Connection;->isAlive()Z -Lcom/android/internal/telephony/Connection;->isIncoming()Z -Lcom/android/internal/telephony/Connection;->LOG_TAG:Ljava/lang/String; -Lcom/android/internal/telephony/Connection;->mAddress:Ljava/lang/String; -Lcom/android/internal/telephony/Connection;->mCnapName:Ljava/lang/String; -Lcom/android/internal/telephony/Connection;->mCnapNamePresentation:I -Lcom/android/internal/telephony/Connection;->mDialString:Ljava/lang/String; -Lcom/android/internal/telephony/Connection;->mDuration:J -Lcom/android/internal/telephony/Connection;->mIsIncoming:Z -Lcom/android/internal/telephony/Connection;->mNumberPresentation:I -Lcom/android/internal/telephony/Connection;->setVideoState(I)V Lcom/android/internal/telephony/DctConstants$Activity;->DATAIN:Lcom/android/internal/telephony/DctConstants$Activity; Lcom/android/internal/telephony/DctConstants$Activity;->DATAINANDOUT:Lcom/android/internal/telephony/DctConstants$Activity; Lcom/android/internal/telephony/DctConstants$Activity;->DATAOUT:Lcom/android/internal/telephony/DctConstants$Activity; @@ -2365,22 +1482,7 @@ Lcom/android/internal/telephony/DctConstants$State;->FAILED:Lcom/android/interna Lcom/android/internal/telephony/DctConstants$State;->IDLE:Lcom/android/internal/telephony/DctConstants$State; Lcom/android/internal/telephony/DctConstants$State;->RETRYING:Lcom/android/internal/telephony/DctConstants$State; Lcom/android/internal/telephony/DctConstants$State;->values()[Lcom/android/internal/telephony/DctConstants$State; -Lcom/android/internal/telephony/DefaultPhoneNotifier;->mRegistry:Lcom/android/internal/telephony/ITelephonyRegistry; -Lcom/android/internal/telephony/DriverCall$State;->ACTIVE:Lcom/android/internal/telephony/DriverCall$State; -Lcom/android/internal/telephony/DriverCall$State;->ALERTING:Lcom/android/internal/telephony/DriverCall$State; -Lcom/android/internal/telephony/DriverCall$State;->DIALING:Lcom/android/internal/telephony/DriverCall$State; -Lcom/android/internal/telephony/DriverCall$State;->HOLDING:Lcom/android/internal/telephony/DriverCall$State; -Lcom/android/internal/telephony/DriverCall$State;->INCOMING:Lcom/android/internal/telephony/DriverCall$State; Lcom/android/internal/telephony/DriverCall$State;->values()[Lcom/android/internal/telephony/DriverCall$State; -Lcom/android/internal/telephony/DriverCall$State;->WAITING:Lcom/android/internal/telephony/DriverCall$State; -Lcom/android/internal/telephony/DriverCall;-><init>()V -Lcom/android/internal/telephony/DriverCall;->index:I -Lcom/android/internal/telephony/DriverCall;->isMT:Z -Lcom/android/internal/telephony/DriverCall;->isVoice:Z -Lcom/android/internal/telephony/DriverCall;->name:Ljava/lang/String; -Lcom/android/internal/telephony/DriverCall;->number:Ljava/lang/String; -Lcom/android/internal/telephony/DriverCall;->numberPresentation:I -Lcom/android/internal/telephony/DriverCall;->state:Lcom/android/internal/telephony/DriverCall$State; Lcom/android/internal/telephony/gsm/GsmCellBroadcastHandler$SmsCbConcatInfo;-><init>(Lcom/android/internal/telephony/gsm/SmsCbHeader;Landroid/telephony/SmsCbLocation;)V Lcom/android/internal/telephony/gsm/GsmCellBroadcastHandler$SmsCbConcatInfo;->matchesLocation(Ljava/lang/String;II)Z Lcom/android/internal/telephony/gsm/GsmCellBroadcastHandler;->mSmsCbPageMap:Ljava/util/HashMap; @@ -2459,79 +1561,7 @@ Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;->mLock:Ljava/lang/Obje Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;->mPhoneBookRecords:Ljava/util/ArrayList; Lcom/android/internal/telephony/gsm/UsimPhoneBookManager;->reset()V Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails;-><init>()V -Lcom/android/internal/telephony/GsmCdmaCall;->attachFake(Lcom/android/internal/telephony/Connection;Lcom/android/internal/telephony/Call$State;)V -Lcom/android/internal/telephony/GsmCdmaCallTracker;->clearDisconnected()V -Lcom/android/internal/telephony/GsmCdmaCallTracker;->disableDataCallInEmergencyCall(Ljava/lang/String;)V -Lcom/android/internal/telephony/GsmCdmaCallTracker;->fakeHoldForegroundBeforeDial()V -Lcom/android/internal/telephony/GsmCdmaCallTracker;->getPhone()Lcom/android/internal/telephony/GsmCdmaPhone; -Lcom/android/internal/telephony/GsmCdmaCallTracker;->handleEcmTimer(I)V -Lcom/android/internal/telephony/GsmCdmaCallTracker;->isPhoneTypeGsm()Z -Lcom/android/internal/telephony/GsmCdmaCallTracker;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/GsmCdmaCallTracker;->mBackgroundCall:Lcom/android/internal/telephony/GsmCdmaCall; -Lcom/android/internal/telephony/GsmCdmaCallTracker;->mForegroundCall:Lcom/android/internal/telephony/GsmCdmaCall; -Lcom/android/internal/telephony/GsmCdmaCallTracker;->mPendingMO:Lcom/android/internal/telephony/GsmCdmaConnection; -Lcom/android/internal/telephony/GsmCdmaCallTracker;->mPhone:Lcom/android/internal/telephony/GsmCdmaPhone; -Lcom/android/internal/telephony/GsmCdmaCallTracker;->mRingingCall:Lcom/android/internal/telephony/GsmCdmaCall; -Lcom/android/internal/telephony/GsmCdmaCallTracker;->mState:Lcom/android/internal/telephony/PhoneConstants$State; -Lcom/android/internal/telephony/GsmCdmaCallTracker;->obtainCompleteMessage()Landroid/os/Message; -Lcom/android/internal/telephony/GsmCdmaCallTracker;->obtainCompleteMessage(I)Landroid/os/Message; -Lcom/android/internal/telephony/GsmCdmaCallTracker;->setMute(Z)V -Lcom/android/internal/telephony/GsmCdmaCallTracker;->switchWaitingOrHoldingAndActive()V -Lcom/android/internal/telephony/GsmCdmaCallTracker;->updatePhoneState()V Lcom/android/internal/telephony/GsmCdmaConnection$MyHandler;-><init>(Lcom/android/internal/telephony/GsmCdmaConnection;Landroid/os/Looper;)V -Lcom/android/internal/telephony/GsmCdmaConnection;->acquireWakeLock()V -Lcom/android/internal/telephony/GsmCdmaConnection;->createWakeLock(Landroid/content/Context;)V -Lcom/android/internal/telephony/GsmCdmaConnection;->disconnectCauseFromCode(I)I -Lcom/android/internal/telephony/GsmCdmaConnection;->fetchDtmfToneDelay(Lcom/android/internal/telephony/GsmCdmaPhone;)V -Lcom/android/internal/telephony/GsmCdmaConnection;->findNextPCharOrNonPOrNonWCharIndex(Ljava/lang/String;I)I -Lcom/android/internal/telephony/GsmCdmaConnection;->findPOrWCharToAppend(Ljava/lang/String;II)C -Lcom/android/internal/telephony/GsmCdmaConnection;->formatDialString(Ljava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/GsmCdmaConnection;->getState()Lcom/android/internal/telephony/Call$State; -Lcom/android/internal/telephony/GsmCdmaConnection;->isPause(C)Z -Lcom/android/internal/telephony/GsmCdmaConnection;->isPhoneTypeGsm()Z -Lcom/android/internal/telephony/GsmCdmaConnection;->isWait(C)Z -Lcom/android/internal/telephony/GsmCdmaConnection;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/GsmCdmaConnection;->maskDialString(Ljava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/GsmCdmaConnection;->mIndex:I -Lcom/android/internal/telephony/GsmCdmaConnection;->mOwner:Lcom/android/internal/telephony/GsmCdmaCallTracker; -Lcom/android/internal/telephony/GsmCdmaConnection;->onConnectedInOrOut()V -Lcom/android/internal/telephony/GsmCdmaConnection;->updateParent(Lcom/android/internal/telephony/GsmCdmaCall;Lcom/android/internal/telephony/GsmCdmaCall;)V -Lcom/android/internal/telephony/GsmCdmaPhone$Cfu;-><init>(Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/GsmCdmaPhone;->exitEmergencyCallbackMode()V -Lcom/android/internal/telephony/GsmCdmaPhone;->getCallTracker()Lcom/android/internal/telephony/CallTracker; -Lcom/android/internal/telephony/GsmCdmaPhone;->getCdmaEriText()Ljava/lang/String; -Lcom/android/internal/telephony/GsmCdmaPhone;->getEsn()Ljava/lang/String; -Lcom/android/internal/telephony/GsmCdmaPhone;->getLine1Number()Ljava/lang/String; -Lcom/android/internal/telephony/GsmCdmaPhone;->getPhoneType()I -Lcom/android/internal/telephony/GsmCdmaPhone;->getServiceState()Landroid/telephony/ServiceState; -Lcom/android/internal/telephony/GsmCdmaPhone;->getState()Lcom/android/internal/telephony/PhoneConstants$State; -Lcom/android/internal/telephony/GsmCdmaPhone;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/GsmCdmaPhone;->handleInCallMmiCommands(Ljava/lang/String;)Z -Lcom/android/internal/telephony/GsmCdmaPhone;->isCfEnable(I)Z -Lcom/android/internal/telephony/GsmCdmaPhone;->isEriFileLoaded()Z -Lcom/android/internal/telephony/GsmCdmaPhone;->isInCall()Z -Lcom/android/internal/telephony/GsmCdmaPhone;->isManualSelProhibitedInGlobalMode()Z -Lcom/android/internal/telephony/GsmCdmaPhone;->isPhoneTypeGsm()Z -Lcom/android/internal/telephony/GsmCdmaPhone;->isValidCommandInterfaceCFAction(I)Z -Lcom/android/internal/telephony/GsmCdmaPhone;->isValidCommandInterfaceCFReason(I)Z -Lcom/android/internal/telephony/GsmCdmaPhone;->logd(Ljava/lang/String;)V -Lcom/android/internal/telephony/GsmCdmaPhone;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/GsmCdmaPhone;->mCT:Lcom/android/internal/telephony/GsmCdmaCallTracker; -Lcom/android/internal/telephony/GsmCdmaPhone;->mEcmExitRespRegistrant:Landroid/os/Registrant; -Lcom/android/internal/telephony/GsmCdmaPhone;->mEriManager:Lcom/android/internal/telephony/cdma/EriManager; -Lcom/android/internal/telephony/GsmCdmaPhone;->mIccSmsInterfaceManager:Lcom/android/internal/telephony/IccSmsInterfaceManager; -Lcom/android/internal/telephony/GsmCdmaPhone;->mIsimUiccRecords:Lcom/android/internal/telephony/uicc/IsimUiccRecords; -Lcom/android/internal/telephony/GsmCdmaPhone;->mPendingMMIs:Ljava/util/ArrayList; -Lcom/android/internal/telephony/GsmCdmaPhone;->mSST:Lcom/android/internal/telephony/ServiceStateTracker; -Lcom/android/internal/telephony/GsmCdmaPhone;->notifyPreciseCallStateChanged()V -Lcom/android/internal/telephony/GsmCdmaPhone;->notifyServiceStateChanged(Landroid/telephony/ServiceState;)V -Lcom/android/internal/telephony/GsmCdmaPhone;->setOnEcbModeExitResponse(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/GsmCdmaPhone;->syncClirSetting()V -Lcom/android/internal/telephony/IccCard;->getState()Lcom/android/internal/telephony/IccCardConstants$State; -Lcom/android/internal/telephony/IccCard;->registerForNetworkLocked(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/IccCard;->supplyNetworkDepersonalization(Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/IccCard;->supplyPin(Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/IccCard;->supplyPuk(Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V Lcom/android/internal/telephony/IccCardConstants$State;->ABSENT:Lcom/android/internal/telephony/IccCardConstants$State; Lcom/android/internal/telephony/IccCardConstants$State;->CARD_IO_ERROR:Lcom/android/internal/telephony/IccCardConstants$State; Lcom/android/internal/telephony/IccCardConstants$State;->NETWORK_LOCKED:Lcom/android/internal/telephony/IccCardConstants$State; @@ -2542,47 +1572,7 @@ Lcom/android/internal/telephony/IccCardConstants$State;->PUK_REQUIRED:Lcom/andro Lcom/android/internal/telephony/IccCardConstants$State;->READY:Lcom/android/internal/telephony/IccCardConstants$State; Lcom/android/internal/telephony/IccCardConstants$State;->UNKNOWN:Lcom/android/internal/telephony/IccCardConstants$State; Lcom/android/internal/telephony/IccCardConstants$State;->values()[Lcom/android/internal/telephony/IccCardConstants$State; -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->checkThread()V -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->DBG:Z -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->logd(Ljava/lang/String;)V -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mAdnCache:Lcom/android/internal/telephony/uicc/AdnRecordCache; -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mBaseHandler:Landroid/os/Handler; -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mPhone:Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->updateEfForIccType(I)I Lcom/android/internal/telephony/IccProvider;-><init>()V -Lcom/android/internal/telephony/IccProvider;->ADDRESS_BOOK_COLUMN_NAMES:[Ljava/lang/String; -Lcom/android/internal/telephony/IccProvider;->DBG:Z -Lcom/android/internal/telephony/IccProvider;->loadRecord(Lcom/android/internal/telephony/uicc/AdnRecord;Landroid/database/MatrixCursor;I)V -Lcom/android/internal/telephony/IccProvider;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/IccSmsInterfaceManager;->copyMessageToIccEf(Ljava/lang/String;I[B[B)Z -Lcom/android/internal/telephony/IccSmsInterfaceManager;->disableCdmaBroadcastRange(II)Z -Lcom/android/internal/telephony/IccSmsInterfaceManager;->disableGsmBroadcastRange(II)Z -Lcom/android/internal/telephony/IccSmsInterfaceManager;->enableCdmaBroadcastRange(II)Z -Lcom/android/internal/telephony/IccSmsInterfaceManager;->enableGsmBroadcastRange(II)Z -Lcom/android/internal/telephony/IccSmsInterfaceManager;->enforceReceiveAndSend(Ljava/lang/String;)V -Lcom/android/internal/telephony/IccSmsInterfaceManager;->filterDestAddress(Ljava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->getAllMessagesFromIccEf(Ljava/lang/String;)Ljava/util/List; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->getImsSmsFormat()Ljava/lang/String; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->getPremiumSmsPermission(Ljava/lang/String;)I -Lcom/android/internal/telephony/IccSmsInterfaceManager;->injectSmsPdu([BLjava/lang/String;Landroid/app/PendingIntent;)V -Lcom/android/internal/telephony/IccSmsInterfaceManager;->isImsSmsSupported()Z -Lcom/android/internal/telephony/IccSmsInterfaceManager;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/IccSmsInterfaceManager;->mAppOps:Landroid/app/AppOpsManager; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->mCellBroadcastRangeManager:Lcom/android/internal/telephony/IccSmsInterfaceManager$CellBroadcastRangeManager; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->mHandler:Landroid/os/Handler; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->mLock:Ljava/lang/Object; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->mPhone:Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->mSms:Ljava/util/List; -Lcom/android/internal/telephony/IccSmsInterfaceManager;->mSuccess:Z -Lcom/android/internal/telephony/IccSmsInterfaceManager;->sendData(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V -Lcom/android/internal/telephony/IccSmsInterfaceManager;->sendStoredMultipartText(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V -Lcom/android/internal/telephony/IccSmsInterfaceManager;->sendStoredText(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V -Lcom/android/internal/telephony/IccSmsInterfaceManager;->setCdmaBroadcastConfig([Lcom/android/internal/telephony/cdma/CdmaSmsBroadcastConfigInfo;)Z -Lcom/android/internal/telephony/IccSmsInterfaceManager;->setCellBroadcastConfig([Lcom/android/internal/telephony/gsm/SmsBroadcastConfigInfo;)Z -Lcom/android/internal/telephony/IccSmsInterfaceManager;->setPremiumSmsPermission(Ljava/lang/String;I)V -Lcom/android/internal/telephony/IccSmsInterfaceManager;->updateMessageOnIccEf(Ljava/lang/String;II[B)Z Lcom/android/internal/telephony/IIccPhoneBook$Stub$Proxy;->mRemote:Landroid/os/IBinder; Lcom/android/internal/telephony/IIccPhoneBook$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IIccPhoneBook; Lcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsInEf(I)Ljava/util/List; @@ -2591,142 +1581,24 @@ Lcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsSize(I)[I Lcom/android/internal/telephony/IIccPhoneBook;->getAdnRecordsSizeForSubscriber(II)[I Lcom/android/internal/telephony/IIccPhoneBook;->updateAdnRecordsInEfBySearch(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z Lcom/android/internal/telephony/IMms$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IMms; -Lcom/android/internal/telephony/imsphone/ImsExternalCall;-><init>(Lcom/android/internal/telephony/Phone;Lcom/android/internal/telephony/imsphone/ImsExternalConnection;)V Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ExternalCallStateListener;-><init>(Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;)V Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker$ExternalConnectionListener;-><init>(Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker;)V -Lcom/android/internal/telephony/imsphone/ImsExternalConnection;->rebuildCapabilities()V -Lcom/android/internal/telephony/imsphone/ImsExternalConnection;->setActive()V -Lcom/android/internal/telephony/imsphone/ImsPhone$Cf;-><init>(Ljava/lang/String;ZLandroid/os/Message;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->getActionFromCFAction(I)I -Lcom/android/internal/telephony/imsphone/ImsPhone;->getBackgroundCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall; -Lcom/android/internal/telephony/imsphone/ImsPhone;->getCallForwardingOption(ILandroid/os/Message;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->getCallWaiting(Landroid/os/Message;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->getConditionFromCFReason(I)I -Lcom/android/internal/telephony/imsphone/ImsPhone;->getForegroundCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall; -Lcom/android/internal/telephony/imsphone/ImsPhone;->getRingingCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall; -Lcom/android/internal/telephony/imsphone/ImsPhone;->getServiceState()Landroid/telephony/ServiceState; -Lcom/android/internal/telephony/imsphone/ImsPhone;->getState()Lcom/android/internal/telephony/PhoneConstants$State; -Lcom/android/internal/telephony/imsphone/ImsPhone;->handleEnterEmergencyCallbackMode()V -Lcom/android/internal/telephony/imsphone/ImsPhone;->handleExitEmergencyCallbackMode()V -Lcom/android/internal/telephony/imsphone/ImsPhone;->handleInCallMmiCommands(Ljava/lang/String;)Z -Lcom/android/internal/telephony/imsphone/ImsPhone;->isCfEnable(I)Z -Lcom/android/internal/telephony/imsphone/ImsPhone;->isUtEnabled()Z -Lcom/android/internal/telephony/imsphone/ImsPhone;->isValidCommandInterfaceCFAction(I)Z -Lcom/android/internal/telephony/imsphone/ImsPhone;->isValidCommandInterfaceCFReason(I)Z -Lcom/android/internal/telephony/imsphone/ImsPhone;->isVolteEnabled()Z -Lcom/android/internal/telephony/imsphone/ImsPhone;->mCT:Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker; -Lcom/android/internal/telephony/imsphone/ImsPhone;->mPendingMMIs:Ljava/util/ArrayList; -Lcom/android/internal/telephony/imsphone/ImsPhone;->mSS:Landroid/telephony/ServiceState; Lcom/android/internal/telephony/imsphone/ImsPhone;->notifyCallForwardingIndicator()V Lcom/android/internal/telephony/imsphone/ImsPhone;->notifyPreciseCallStateChanged()V -Lcom/android/internal/telephony/imsphone/ImsPhone;->notifyUnknownConnection(Lcom/android/internal/telephony/Connection;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->onMMIDone(Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->sendErrorResponse(Landroid/os/Message;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->sendErrorResponse(Landroid/os/Message;Ljava/lang/Throwable;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->setCallForwardingOption(IILjava/lang/String;IILandroid/os/Message;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->setCallWaiting(ZLandroid/os/Message;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->setImsRegistered(Z)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->setOnEcbModeExitResponse(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/imsphone/ImsPhone;->setServiceState(I)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->attach(Lcom/android/internal/telephony/Connection;Lcom/android/internal/telephony/Call$State;)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->attachFake(Lcom/android/internal/telephony/Connection;Lcom/android/internal/telephony/Call$State;)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->getConnections()Ljava/util/List; Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->getImsCall()Lcom/android/ims/ImsCall; -Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->hangup()V -Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->merge(Lcom/android/internal/telephony/imsphone/ImsPhoneCall;Lcom/android/internal/telephony/Call$State;)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCall;->onHangupLocal()V -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->addConnection(Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->clearDisconnected()V -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->dial(Ljava/lang/String;ILandroid/os/Bundle;)Lcom/android/internal/telephony/Connection; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->dialPendingMO()V Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->findConnection(Lcom/android/ims/ImsCall;)Lcom/android/internal/telephony/imsphone/ImsPhoneConnection; Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->getEcbmInterface()Lcom/android/ims/ImsEcbm; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->getUtInterface()Lcom/android/ims/ImsUtInterface; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->handleEcmTimer(I)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mAllowEmergencyVideoCalls:Z -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mBackgroundCall:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mCallExpectedToResume:Lcom/android/ims/ImsCall; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mConnections:Ljava/util/ArrayList; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mForegroundCall:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mHandoverCall:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mImsCallListener:Lcom/android/ims/ImsCall$Listener; Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mImsManager:Lcom/android/ims/ImsManager; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mOnHoldToneId:I -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mOnHoldToneStarted:Z -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mPendingMO:Lcom/android/internal/telephony/imsphone/ImsPhoneConnection; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mPendingUssd:Landroid/os/Message; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mPhone:Lcom/android/internal/telephony/imsphone/ImsPhone; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mRingingCall:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mSwitchingFgAndBgCalls:Z -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mSyncHold:Ljava/lang/Object; Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->mUssdSession:Lcom/android/ims/ImsCall; Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->processCallStateChange(Lcom/android/ims/ImsCall;Lcom/android/internal/telephony/Call$State;I)V Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->processCallStateChange(Lcom/android/ims/ImsCall;Lcom/android/internal/telephony/Call$State;IZ)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->removeConnection(Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;)V Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->setVideoCallProvider(Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;Lcom/android/ims/ImsCall;)V -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->switchAfterConferenceSuccess()V -Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker;->updatePhoneState()V Lcom/android/internal/telephony/imsphone/ImsPhoneConnection$MyHandler;-><init>(Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;Landroid/os/Looper;)V -Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->acquireWakeLock()V -Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->createWakeLock(Landroid/content/Context;)V -Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->getCall()Lcom/android/internal/telephony/imsphone/ImsPhoneCall; -Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->getOwner()Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker; -Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->isMultiparty()Z -Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->mDisconnected:Z Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->mImsCall:Lcom/android/ims/ImsCall; -Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->mOwner:Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker; -Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->mParent:Lcom/android/internal/telephony/imsphone/ImsPhoneCall; -Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->onDisconnect()Z Lcom/android/internal/telephony/imsphone/ImsPhoneConnection;->update(Lcom/android/ims/ImsCall;Lcom/android/internal/telephony/Call$State;)Z -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->getCLIRMode()I -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->getDialingNumber()Ljava/lang/String; -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->getErrorMessage(Landroid/os/AsyncResult;)Ljava/lang/CharSequence; -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->getScString()Ljava/lang/CharSequence; -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isActivate()Z -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isDeactivate()Z -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isEmptyOrNull(Ljava/lang/CharSequence;)Z -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isErasure()Z -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isRegister()Z -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isSupportedOverImsPhone()Z -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->isTemporaryModeCLIR()Z -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->mPhone:Lcom/android/internal/telephony/imsphone/ImsPhone; -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->newFromDialString(Ljava/lang/String;Lcom/android/internal/telephony/imsphone/ImsPhone;)Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode; -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->processCode()V -Lcom/android/internal/telephony/imsphone/ImsPhoneMmiCode;->serviceClassToCFString(I)Ljava/lang/CharSequence; Lcom/android/internal/telephony/InboundSmsHandler$SmsBroadcastReceiver;-><init>(Lcom/android/internal/telephony/InboundSmsHandler;Lcom/android/internal/telephony/InboundSmsTracker;)V -Lcom/android/internal/telephony/InboundSmsHandler$SmsBroadcastReceiver;->mDeleteWhere:Ljava/lang/String; -Lcom/android/internal/telephony/InboundSmsHandler$SmsBroadcastReceiver;->mDeleteWhereArgs:[Ljava/lang/String; -Lcom/android/internal/telephony/InboundSmsHandler;->acknowledgeLastIncomingSms(ZILandroid/os/Message;)V -Lcom/android/internal/telephony/InboundSmsHandler;->deleteFromRawTable(Ljava/lang/String;[Ljava/lang/String;I)V -Lcom/android/internal/telephony/InboundSmsHandler;->dispatchIntent(Landroid/content/Intent;Ljava/lang/String;ILandroid/os/Bundle;Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;)V -Lcom/android/internal/telephony/InboundSmsHandler;->dispatchNormalMessage(Lcom/android/internal/telephony/SmsMessageBase;)I -Lcom/android/internal/telephony/InboundSmsHandler;->getPhone()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/InboundSmsHandler;->handleInjectSms(Landroid/os/AsyncResult;)V -Lcom/android/internal/telephony/InboundSmsHandler;->handleNewSms(Landroid/os/AsyncResult;)V -Lcom/android/internal/telephony/InboundSmsHandler;->handleSmsWhitelisting(Landroid/content/ComponentName;)Landroid/os/Bundle; -Lcom/android/internal/telephony/InboundSmsHandler;->isSkipNotifyFlagSet(I)Z -Lcom/android/internal/telephony/InboundSmsHandler;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/InboundSmsHandler;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/InboundSmsHandler;->mCellBroadcastHandler:Lcom/android/internal/telephony/CellBroadcastHandler; -Lcom/android/internal/telephony/InboundSmsHandler;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/InboundSmsHandler;->mDeliveringState:Lcom/android/internal/telephony/InboundSmsHandler$DeliveringState; -Lcom/android/internal/telephony/InboundSmsHandler;->mDeviceIdleController:Landroid/os/IDeviceIdleController; -Lcom/android/internal/telephony/InboundSmsHandler;->mIdleState:Lcom/android/internal/telephony/InboundSmsHandler$IdleState; -Lcom/android/internal/telephony/InboundSmsHandler;->mPhone:Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/InboundSmsHandler;->mResolver:Landroid/content/ContentResolver; -Lcom/android/internal/telephony/InboundSmsHandler;->mUserManager:Landroid/os/UserManager; -Lcom/android/internal/telephony/InboundSmsHandler;->mWaitingState:Lcom/android/internal/telephony/InboundSmsHandler$WaitingState; -Lcom/android/internal/telephony/InboundSmsHandler;->mWakeLock:Landroid/os/PowerManager$WakeLock; -Lcom/android/internal/telephony/InboundSmsHandler;->mWapPush:Lcom/android/internal/telephony/WapPushOverSms; -Lcom/android/internal/telephony/InboundSmsHandler;->processMessagePart(Lcom/android/internal/telephony/InboundSmsTracker;)Z -Lcom/android/internal/telephony/InboundSmsHandler;->showNewMessageNotification()V -Lcom/android/internal/telephony/InboundSmsHandler;->writeInboxMessage(Landroid/content/Intent;)Landroid/net/Uri; -Lcom/android/internal/telephony/InboundSmsTracker;->getFormat()Ljava/lang/String; -Lcom/android/internal/telephony/InboundSmsTracker;->getIndexOffset()I -Lcom/android/internal/telephony/IntRangeManager;->mRanges:Ljava/util/ArrayList; Lcom/android/internal/telephony/IPhoneStateListener$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneStateListener; Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getDeviceId(Ljava/lang/String;)Ljava/lang/String; @@ -2748,91 +1620,6 @@ Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_getDeviceId:I Lcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Lcom/android/internal/telephony/ITelephonyRegistry$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephonyRegistry; Lcom/android/internal/telephony/IWapPushManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IWapPushManager; -Lcom/android/internal/telephony/MccTable$MccEntry;->mIso:Ljava/lang/String; -Lcom/android/internal/telephony/MccTable;->countryCodeForMcc(I)Ljava/lang/String; -Lcom/android/internal/telephony/MccTable;->defaultLanguageForMcc(I)Ljava/lang/String; -Lcom/android/internal/telephony/MccTable;->defaultTimeZoneForMcc(I)Ljava/lang/String; -Lcom/android/internal/telephony/MccTable;->entryForMcc(I)Lcom/android/internal/telephony/MccTable$MccEntry; -Lcom/android/internal/telephony/MccTable;->getLocaleForLanguageCountry(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; -Lcom/android/internal/telephony/MccTable;->smallestDigitsMccForMnc(I)I -Lcom/android/internal/telephony/MmiCode$State;->CANCELLED:Lcom/android/internal/telephony/MmiCode$State; -Lcom/android/internal/telephony/MmiCode$State;->COMPLETE:Lcom/android/internal/telephony/MmiCode$State; -Lcom/android/internal/telephony/MmiCode$State;->FAILED:Lcom/android/internal/telephony/MmiCode$State; -Lcom/android/internal/telephony/MmiCode$State;->PENDING:Lcom/android/internal/telephony/MmiCode$State; -Lcom/android/internal/telephony/MmiCode;->getPhone()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/Phone;->dispose()V -Lcom/android/internal/telephony/Phone;->exitEmergencyCallbackMode()V -Lcom/android/internal/telephony/Phone;->getActiveApnTypes()[Ljava/lang/String; -Lcom/android/internal/telephony/Phone;->getCallTracker()Lcom/android/internal/telephony/CallTracker; -Lcom/android/internal/telephony/Phone;->getCellLocation()Landroid/telephony/CellLocation; -Lcom/android/internal/telephony/Phone;->getContext()Landroid/content/Context; -Lcom/android/internal/telephony/Phone;->getDataConnectionState()Lcom/android/internal/telephony/PhoneConstants$DataState; -Lcom/android/internal/telephony/Phone;->getIccCard()Lcom/android/internal/telephony/IccCard; -Lcom/android/internal/telephony/Phone;->getIccFileHandler()Lcom/android/internal/telephony/uicc/IccFileHandler; -Lcom/android/internal/telephony/Phone;->getIccSerialNumber()Ljava/lang/String; -Lcom/android/internal/telephony/Phone;->getIccSmsInterfaceManager()Lcom/android/internal/telephony/IccSmsInterfaceManager; -Lcom/android/internal/telephony/Phone;->getImsPhone()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/Phone;->getIsimRecords()Lcom/android/internal/telephony/uicc/IsimRecords; -Lcom/android/internal/telephony/Phone;->getMsisdn()Ljava/lang/String; -Lcom/android/internal/telephony/Phone;->getNai()Ljava/lang/String; -Lcom/android/internal/telephony/Phone;->getPhoneId()I -Lcom/android/internal/telephony/Phone;->getPhoneName()Ljava/lang/String; -Lcom/android/internal/telephony/Phone;->getPhoneType()I -Lcom/android/internal/telephony/Phone;->getServiceStateTracker()Lcom/android/internal/telephony/ServiceStateTracker; -Lcom/android/internal/telephony/Phone;->getSmscAddress(Landroid/os/Message;)V -Lcom/android/internal/telephony/Phone;->getState()Lcom/android/internal/telephony/PhoneConstants$State; -Lcom/android/internal/telephony/Phone;->getSubId()I -Lcom/android/internal/telephony/Phone;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/Phone;->getUiccCard()Lcom/android/internal/telephony/uicc/UiccCard; -Lcom/android/internal/telephony/Phone;->getVideoState(Lcom/android/internal/telephony/Call;)I -Lcom/android/internal/telephony/Phone;->invokeOemRilRequestRaw([BLandroid/os/Message;)V -Lcom/android/internal/telephony/Phone;->invokeOemRilRequestStrings([Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/Phone;->isCspPlmnEnabled()Z -Lcom/android/internal/telephony/Phone;->isUtEnabled()Z -Lcom/android/internal/telephony/Phone;->isVideoEnabled()Z -Lcom/android/internal/telephony/Phone;->isVolteEnabled()Z -Lcom/android/internal/telephony/Phone;->isWifiCallingEnabled()Z -Lcom/android/internal/telephony/Phone;->mCi:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/Phone;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/Phone;->mIccRecords:Ljava/util/concurrent/atomic/AtomicReference; -Lcom/android/internal/telephony/Phone;->mImsPhone:Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/Phone;->mMmiRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/Phone;->mNotifier:Lcom/android/internal/telephony/PhoneNotifier; -Lcom/android/internal/telephony/Phone;->mPhoneId:I -Lcom/android/internal/telephony/Phone;->mSmsStorageMonitor:Lcom/android/internal/telephony/SmsStorageMonitor; -Lcom/android/internal/telephony/Phone;->mUiccApplication:Ljava/util/concurrent/atomic/AtomicReference; -Lcom/android/internal/telephony/Phone;->mUiccController:Lcom/android/internal/telephony/uicc/UiccController; -Lcom/android/internal/telephony/Phone;->needsOtaServiceProvisioning()Z -Lcom/android/internal/telephony/Phone;->notifyOtaspChanged(I)V -Lcom/android/internal/telephony/Phone;->registerForDisconnect(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForEcmTimerReset(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForIncomingRing(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForMmiComplete(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForMmiInitiate(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForNewRingingConnection(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForPreciseCallStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForRingbackTone(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForServiceStateChanged(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForSimRecordsLoaded(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->registerForUnknownConnection(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->selectNetworkManually(Lcom/android/internal/telephony/OperatorInfo;ZLandroid/os/Message;)V -Lcom/android/internal/telephony/Phone;->setNetworkSelectionModeAutomatic(Landroid/os/Message;)V -Lcom/android/internal/telephony/Phone;->setOnEcbModeExitResponse(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->setOnPostDialCharacter(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/Phone;->setPreferredNetworkType(ILandroid/os/Message;)V -Lcom/android/internal/telephony/Phone;->setSmscAddress(Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/Phone;->unregisterForDisconnect(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForEcmTimerReset(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForIncomingRing(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForMmiComplete(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForMmiInitiate(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForNewRingingConnection(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForPreciseCallStateChanged(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForRingbackTone(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForServiceStateChanged(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForSimRecordsLoaded(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unregisterForUnknownConnection(Landroid/os/Handler;)V -Lcom/android/internal/telephony/Phone;->unsetOnEcbModeExitResponse(Landroid/os/Handler;)V Lcom/android/internal/telephony/PhoneConstants$DataState;->CONNECTED:Lcom/android/internal/telephony/PhoneConstants$DataState; Lcom/android/internal/telephony/PhoneConstants$DataState;->CONNECTING:Lcom/android/internal/telephony/PhoneConstants$DataState; Lcom/android/internal/telephony/PhoneConstants$DataState;->DISCONNECTED:Lcom/android/internal/telephony/PhoneConstants$DataState; @@ -2846,152 +1633,7 @@ Lcom/android/internal/telephony/PhoneConstants;->PRESENTATION_ALLOWED:I Lcom/android/internal/telephony/PhoneConstants;->PRESENTATION_PAYPHONE:I Lcom/android/internal/telephony/PhoneConstants;->PRESENTATION_RESTRICTED:I Lcom/android/internal/telephony/PhoneConstants;->PRESENTATION_UNKNOWN:I -Lcom/android/internal/telephony/PhoneFactory;->calculatePreferredNetworkType(Landroid/content/Context;I)I -Lcom/android/internal/telephony/PhoneFactory;->getDefaultPhone()Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/PhoneFactory;->getDefaultSubscription()I -Lcom/android/internal/telephony/PhoneFactory;->getPhone(I)Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/PhoneFactory;->getPhones()[Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/PhoneFactory;->makeDefaultPhone(Landroid/content/Context;)V -Lcom/android/internal/telephony/PhoneFactory;->sCommandsInterface:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/PhoneFactory;->sContext:Landroid/content/Context; -Lcom/android/internal/telephony/PhoneFactory;->sMadeDefaults:Z -Lcom/android/internal/telephony/PhoneFactory;->sPhoneNotifier:Lcom/android/internal/telephony/PhoneNotifier; -Lcom/android/internal/telephony/PhoneInternalInterface$DataActivityState;->NONE:Lcom/android/internal/telephony/PhoneInternalInterface$DataActivityState; -Lcom/android/internal/telephony/PhoneInternalInterface;->PREFERRED_NT_MODE:I -Lcom/android/internal/telephony/PhoneNotifier;->notifyMessageWaitingChanged(Lcom/android/internal/telephony/Phone;)V -Lcom/android/internal/telephony/PhoneNotifier;->notifySignalStrength(Lcom/android/internal/telephony/Phone;)V -Lcom/android/internal/telephony/PhoneStateIntentReceiver;-><init>(Landroid/content/Context;Landroid/os/Handler;)V -Lcom/android/internal/telephony/PhoneStateIntentReceiver;->getSignalStrengthDbm()I -Lcom/android/internal/telephony/PhoneStateIntentReceiver;->mSignalStrength:Landroid/telephony/SignalStrength; -Lcom/android/internal/telephony/PhoneStateIntentReceiver;->mWants:I -Lcom/android/internal/telephony/PhoneStateIntentReceiver;->notifyServiceState(I)V -Lcom/android/internal/telephony/PhoneStateIntentReceiver;->notifySignalStrength(I)V -Lcom/android/internal/telephony/PhoneStateIntentReceiver;->registerIntent()V -Lcom/android/internal/telephony/PhoneStateIntentReceiver;->unregisterIntent()V -Lcom/android/internal/telephony/PhoneSubInfoController;->getDefaultSubscription()I -Lcom/android/internal/telephony/PhoneSubInfoController;->getPhone(I)Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/PhoneSubInfoController;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/PhoneSubInfoController;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/PhoneSubInfoController;->mPhone:[Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/PhoneSwitcher;->activate(I)V -Lcom/android/internal/telephony/PhoneSwitcher;->deactivate(I)V -Lcom/android/internal/telephony/PhoneSwitcher;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/PhoneSwitcher;->mMaxActivePhones:I -Lcom/android/internal/telephony/PhoneSwitcher;->mNumPhones:I -Lcom/android/internal/telephony/PhoneSwitcher;->mPhones:[Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/ProxyController;->completeRadioCapabilityTransaction()V -Lcom/android/internal/telephony/ProxyController;->getInstance()Lcom/android/internal/telephony/ProxyController; -Lcom/android/internal/telephony/ProxyController;->logd(Ljava/lang/String;)V -Lcom/android/internal/telephony/ProxyController;->mOldRadioAccessFamily:[I -Lcom/android/internal/telephony/ProxyController;->mRadioCapabilitySessionId:I -Lcom/android/internal/telephony/ProxyController;->mSetRadioAccessFamilyStatus:[I -Lcom/android/internal/telephony/ProxyController;->mUniqueIdGenerator:Ljava/util/concurrent/atomic/AtomicInteger; -Lcom/android/internal/telephony/ProxyController;->sendRadioCapabilityRequest(IIIILjava/lang/String;II)V -Lcom/android/internal/telephony/ProxyController;->sProxyController:Lcom/android/internal/telephony/ProxyController; -Lcom/android/internal/telephony/RadioCapability;->getRadioAccessFamily()I -Lcom/android/internal/telephony/RetryManager;->configure(Ljava/lang/String;)Z -Lcom/android/internal/telephony/RetryManager;->getRetryTimer()I -Lcom/android/internal/telephony/RetryManager;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/RetryManager;->mApnType:Ljava/lang/String; -Lcom/android/internal/telephony/RetryManager;->mFailFastInterApnDelay:J -Lcom/android/internal/telephony/RetryManager;->mInterApnDelay:J -Lcom/android/internal/telephony/RetryManager;->mPhone:Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/RIL;-><init>(Landroid/content/Context;II)V -Lcom/android/internal/telephony/RIL;-><init>(Landroid/content/Context;IILjava/lang/Integer;)V -Lcom/android/internal/telephony/RIL;->acquireWakeLock(Lcom/android/internal/telephony/RILRequest;I)V -Lcom/android/internal/telephony/RIL;->clearRequestList(IZ)V -Lcom/android/internal/telephony/RIL;->clearWakeLock(I)Z -Lcom/android/internal/telephony/RIL;->decrementWakeLock(Lcom/android/internal/telephony/RILRequest;)V -Lcom/android/internal/telephony/RIL;->findAndRemoveRequestFromList(I)Lcom/android/internal/telephony/RILRequest; -Lcom/android/internal/telephony/RIL;->getResponseForTimedOutRILRequest(Lcom/android/internal/telephony/RILRequest;)Ljava/lang/Object; -Lcom/android/internal/telephony/RIL;->hangupForegroundResumeBackground(Landroid/os/Message;)V -Lcom/android/internal/telephony/RIL;->hangupWaitingOrBackground(Landroid/os/Message;)V -Lcom/android/internal/telephony/RIL;->invokeOemRilRequestRaw([BLandroid/os/Message;)V -Lcom/android/internal/telephony/RIL;->makeStaticRadioCapability()Lcom/android/internal/telephony/RadioCapability; -Lcom/android/internal/telephony/RIL;->mRequestList:Landroid/util/SparseArray; -Lcom/android/internal/telephony/RIL;->mTestingEmergencyCall:Ljava/util/concurrent/atomic/AtomicBoolean; -Lcom/android/internal/telephony/RIL;->mWakeLock:Landroid/os/PowerManager$WakeLock; -Lcom/android/internal/telephony/RIL;->notifyRegistrantsCdmaInfoRec(Lcom/android/internal/telephony/cdma/CdmaInformationRecords;)V -Lcom/android/internal/telephony/RIL;->notifyRegistrantsRilConnectionChanged(I)V -Lcom/android/internal/telephony/RIL;->requestToString(I)Ljava/lang/String; -Lcom/android/internal/telephony/RIL;->responseToString(I)Ljava/lang/String; -Lcom/android/internal/telephony/RIL;->retToString(ILjava/lang/Object;)Ljava/lang/String; -Lcom/android/internal/telephony/RIL;->riljLog(Ljava/lang/String;)V -Lcom/android/internal/telephony/RIL;->setRadioPower(ZLandroid/os/Message;)V -Lcom/android/internal/telephony/RIL;->unsljLog(I)V -Lcom/android/internal/telephony/RIL;->unsljLogMore(ILjava/lang/String;)V -Lcom/android/internal/telephony/RIL;->unsljLogRet(ILjava/lang/Object;)V -Lcom/android/internal/telephony/RIL;->unsljLogvRet(ILjava/lang/Object;)V Lcom/android/internal/telephony/RILConstants;->PREFERRED_NETWORK_MODE:I -Lcom/android/internal/telephony/RILRequest;->mRequest:I -Lcom/android/internal/telephony/RILRequest;->mResult:Landroid/os/Message; -Lcom/android/internal/telephony/RILRequest;->mSerial:I -Lcom/android/internal/telephony/RILRequest;->obtain(ILandroid/os/Message;)Lcom/android/internal/telephony/RILRequest; -Lcom/android/internal/telephony/RILRequest;->onError(ILjava/lang/Object;)V -Lcom/android/internal/telephony/RILRequest;->release()V -Lcom/android/internal/telephony/RILRequest;->serialString()Ljava/lang/String; -Lcom/android/internal/telephony/ServiceStateTracker;->fixUnknownMcc(Ljava/lang/String;I)Ljava/lang/String; -Lcom/android/internal/telephony/ServiceStateTracker;->getCurrentDataConnectionState()I -Lcom/android/internal/telephony/ServiceStateTracker;->getDesiredPowerState()Z -Lcom/android/internal/telephony/ServiceStateTracker;->getPhoneId()I -Lcom/android/internal/telephony/ServiceStateTracker;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/ServiceStateTracker;->isConcurrentVoiceAndDataAllowed()Z -Lcom/android/internal/telephony/ServiceStateTracker;->isGprsConsistent(II)Z -Lcom/android/internal/telephony/ServiceStateTracker;->isImsRegistered()Z -Lcom/android/internal/telephony/ServiceStateTracker;->isInHomeSidNid(II)Z -Lcom/android/internal/telephony/ServiceStateTracker;->isInvalidOperatorNumeric(Ljava/lang/String;)Z -Lcom/android/internal/telephony/ServiceStateTracker;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/ServiceStateTracker;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/ServiceStateTracker;->mCi:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/ServiceStateTracker;->mCr:Landroid/content/ContentResolver; -Lcom/android/internal/telephony/ServiceStateTracker;->mCurDataSpn:Ljava/lang/String; -Lcom/android/internal/telephony/ServiceStateTracker;->mCurPlmn:Ljava/lang/String; -Lcom/android/internal/telephony/ServiceStateTracker;->mCurShowPlmn:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mCurShowSpn:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mCurSpn:Ljava/lang/String; -Lcom/android/internal/telephony/ServiceStateTracker;->mDataRoamingOffRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/ServiceStateTracker;->mDataRoamingOnRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/ServiceStateTracker;->mDefaultRoamingIndicator:I -Lcom/android/internal/telephony/ServiceStateTracker;->mDesiredPowerState:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mDeviceShuttingDown:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mEmergencyOnly:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mIccRecords:Lcom/android/internal/telephony/uicc/IccRecords; -Lcom/android/internal/telephony/ServiceStateTracker;->mIntentReceiver:Landroid/content/BroadcastReceiver; -Lcom/android/internal/telephony/ServiceStateTracker;->mIsSubscriptionFromRuim:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mMaxDataCalls:I -Lcom/android/internal/telephony/ServiceStateTracker;->mNetworkAttachedRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/ServiceStateTracker;->mNewMaxDataCalls:I -Lcom/android/internal/telephony/ServiceStateTracker;->mNewReasonDataDenied:I -Lcom/android/internal/telephony/ServiceStateTracker;->mNewSS:Landroid/telephony/ServiceState; -Lcom/android/internal/telephony/ServiceStateTracker;->mOnSubscriptionsChangedListener:Lcom/android/internal/telephony/ServiceStateTracker$SstSubscriptionsChangedListener; -Lcom/android/internal/telephony/ServiceStateTracker;->mPhone:Lcom/android/internal/telephony/GsmCdmaPhone; -Lcom/android/internal/telephony/ServiceStateTracker;->mPreferredNetworkType:I -Lcom/android/internal/telephony/ServiceStateTracker;->mReasonDataDenied:I -Lcom/android/internal/telephony/ServiceStateTracker;->mReportedGprsNoReg:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mRoamingIndicator:I -Lcom/android/internal/telephony/ServiceStateTracker;->mSignalStrength:Landroid/telephony/SignalStrength; -Lcom/android/internal/telephony/ServiceStateTracker;->mSpnUpdatePending:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mSS:Landroid/telephony/ServiceState; -Lcom/android/internal/telephony/ServiceStateTracker;->mStartedGprsRegCheck:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mSubId:I -Lcom/android/internal/telephony/ServiceStateTracker;->mSubscriptionController:Lcom/android/internal/telephony/SubscriptionController; -Lcom/android/internal/telephony/ServiceStateTracker;->mSubscriptionManager:Landroid/telephony/SubscriptionManager; -Lcom/android/internal/telephony/ServiceStateTracker;->mUiccApplcation:Lcom/android/internal/telephony/uicc/UiccCardApplication; -Lcom/android/internal/telephony/ServiceStateTracker;->mUiccController:Lcom/android/internal/telephony/uicc/UiccController; -Lcom/android/internal/telephony/ServiceStateTracker;->mVoiceRoamingOffRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/ServiceStateTracker;->mVoiceRoamingOnRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/ServiceStateTracker;->notifySignalStrength()Z -Lcom/android/internal/telephony/ServiceStateTracker;->pollState()V -Lcom/android/internal/telephony/ServiceStateTracker;->reRegisterNetwork(Landroid/os/Message;)V -Lcom/android/internal/telephony/ServiceStateTracker;->resetServiceStateInIwlanMode()V -Lcom/android/internal/telephony/ServiceStateTracker;->setOperatorIdd(Ljava/lang/String;)V -Lcom/android/internal/telephony/ServiceStateTracker;->setRoamingType(Landroid/telephony/ServiceState;)V -Lcom/android/internal/telephony/ServiceStateTracker;->setSignalStrengthDefaultValues()V -Lcom/android/internal/telephony/ServiceStateTracker;->updateOtaspState()V -Lcom/android/internal/telephony/ServiceStateTracker;->updatePhoneObject()V -Lcom/android/internal/telephony/ServiceStateTracker;->updateRoamingState()V -Lcom/android/internal/telephony/ServiceStateTracker;->updateSpnDisplay()V -Lcom/android/internal/telephony/ServiceStateTracker;->useDataRegStateForDataOnlyDevices()V Lcom/android/internal/telephony/sip/SipPhone$SipCall;->hold()V Lcom/android/internal/telephony/sip/SipPhone$SipCall;->switchWith(Lcom/android/internal/telephony/sip/SipPhone$SipCall;)V Lcom/android/internal/telephony/sip/SipPhone$SipCall;->unhold()V @@ -3015,100 +1657,14 @@ Lcom/android/internal/telephony/SmsApplication;->getSmsApplicationData(Ljava/lan Lcom/android/internal/telephony/SmsApplication;->isDefaultSmsApplication(Landroid/content/Context;Ljava/lang/String;)Z Lcom/android/internal/telephony/SmsApplication;->setDefaultApplication(Ljava/lang/String;Landroid/content/Context;)V Lcom/android/internal/telephony/SmsApplication;->shouldWriteMessageForPackage(Ljava/lang/String;Landroid/content/Context;)Z -Lcom/android/internal/telephony/SmsBroadcastUndelivered;-><init>(Landroid/content/Context;Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler;Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler;)V -Lcom/android/internal/telephony/SMSDispatcher$ConfirmDialogListener;->mNegativeButton:Landroid/widget/Button; -Lcom/android/internal/telephony/SMSDispatcher$ConfirmDialogListener;->mPositiveButton:Landroid/widget/Button; -Lcom/android/internal/telephony/SMSDispatcher$ConfirmDialogListener;->mRememberUndoInstruction:Landroid/widget/TextView; Lcom/android/internal/telephony/SMSDispatcher$DataSmsSender;-><init>(Lcom/android/internal/telephony/SMSDispatcher;Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSender;-><init>(Lcom/android/internal/telephony/SMSDispatcher;Ljava/util/ArrayList;[Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V -Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSender;->sendSmsByCarrierApp(Ljava/lang/String;Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSenderCallback;)V Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSenderCallback;-><init>(Lcom/android/internal/telephony/SMSDispatcher;Lcom/android/internal/telephony/SMSDispatcher$MultipartSmsSender;)V Lcom/android/internal/telephony/SMSDispatcher$SmsSenderCallback;-><init>(Lcom/android/internal/telephony/SMSDispatcher;Lcom/android/internal/telephony/SMSDispatcher$SmsSender;)V -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->isMultipart()Z -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mAppInfo:Landroid/content/pm/PackageInfo; -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mData:Ljava/util/HashMap; -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mDeliveryIntent:Landroid/app/PendingIntent; -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mDestAddress:Ljava/lang/String; -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mMessageRef:I -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mMessageUri:Landroid/net/Uri; -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mPersistMessage:Z -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mSentIntent:Landroid/app/PendingIntent; -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->mTimestamp:J -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->onFailed(Landroid/content/Context;II)V -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->onSent(Landroid/content/Context;)V -Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;->updateSentMessageStatus(Landroid/content/Context;I)V Lcom/android/internal/telephony/SMSDispatcher$TextSmsSender;-><init>(Lcom/android/internal/telephony/SMSDispatcher;Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V -Lcom/android/internal/telephony/SMSDispatcher;->calculateLength(Ljava/lang/CharSequence;Z)Lcom/android/internal/telephony/GsmAlphabet$TextEncodingDetails; -Lcom/android/internal/telephony/SMSDispatcher;->checkCallerIsPhoneOrCarrierApp()V -Lcom/android/internal/telephony/SMSDispatcher;->deliveryPendingList:Ljava/util/ArrayList; -Lcom/android/internal/telephony/SMSDispatcher;->dispose()V -Lcom/android/internal/telephony/SMSDispatcher;->getCarrierAppPackageName()Ljava/lang/String; -Lcom/android/internal/telephony/SMSDispatcher;->getMultipartMessageText(Ljava/util/ArrayList;)Ljava/lang/String; -Lcom/android/internal/telephony/SMSDispatcher;->getNextConcatenatedRef()I -Lcom/android/internal/telephony/SMSDispatcher;->getSubId()I -Lcom/android/internal/telephony/SMSDispatcher;->handleConfirmShortCode(ZLcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V -Lcom/android/internal/telephony/SMSDispatcher;->mCi:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/SMSDispatcher;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/SMSDispatcher;->mPhone:Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/SMSDispatcher;->mResolver:Landroid/content/ContentResolver; -Lcom/android/internal/telephony/SMSDispatcher;->mTelephonyManager:Landroid/telephony/TelephonyManager; -Lcom/android/internal/telephony/SMSDispatcher;->processSendSmsResponse(Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;II)V -Lcom/android/internal/telephony/SMSDispatcher;->sendData(Ljava/lang/String;Ljava/lang/String;I[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V -Lcom/android/internal/telephony/SMSDispatcher;->sendMultipartSms(Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V -Lcom/android/internal/telephony/SMSDispatcher;->sendSms(Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V -Lcom/android/internal/telephony/SMSDispatcher;->sendSubmitPdu(Lcom/android/internal/telephony/SMSDispatcher$SmsTracker;)V Lcom/android/internal/telephony/SmsHeader$ConcatRef;-><init>()V Lcom/android/internal/telephony/SmsHeader$PortAddrs;-><init>()V Lcom/android/internal/telephony/SmsMessageBase;-><init>()V -Lcom/android/internal/telephony/SmsResponse;-><init>(ILjava/lang/String;I)V -Lcom/android/internal/telephony/SmsResponse;->mAckPdu:Ljava/lang/String; -Lcom/android/internal/telephony/SmsResponse;->mErrorCode:I -Lcom/android/internal/telephony/SmsResponse;->mMessageRef:I -Lcom/android/internal/telephony/SmsStorageMonitor;->mCi:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/SmsUsageMonitor;-><init>(Landroid/content/Context;)V -Lcom/android/internal/telephony/SmsUsageMonitor;->check(Ljava/lang/String;I)Z -Lcom/android/internal/telephony/SubscriptionController;->broadcastDefaultDataSubIdChanged(I)V -Lcom/android/internal/telephony/SubscriptionController;->colorArr:[I -Lcom/android/internal/telephony/SubscriptionController;->enforceModifyPhoneState(Ljava/lang/String;)V -Lcom/android/internal/telephony/SubscriptionController;->getActiveSubInfoCount(Ljava/lang/String;)I -Lcom/android/internal/telephony/SubscriptionController;->getActiveSubscriptionInfo(ILjava/lang/String;)Landroid/telephony/SubscriptionInfo; -Lcom/android/internal/telephony/SubscriptionController;->getActiveSubscriptionInfoList(Ljava/lang/String;)Ljava/util/List; -Lcom/android/internal/telephony/SubscriptionController;->getDefaultDataSubId()I -Lcom/android/internal/telephony/SubscriptionController;->getDefaultSmsSubId()I -Lcom/android/internal/telephony/SubscriptionController;->getDefaultSubId()I -Lcom/android/internal/telephony/SubscriptionController;->getDefaultVoiceSubId()I -Lcom/android/internal/telephony/SubscriptionController;->getInstance()Lcom/android/internal/telephony/SubscriptionController; -Lcom/android/internal/telephony/SubscriptionController;->getPhoneId(I)I -Lcom/android/internal/telephony/SubscriptionController;->getSubId(I)[I -Lcom/android/internal/telephony/SubscriptionController;->getSubIdUsingPhoneId(I)I -Lcom/android/internal/telephony/SubscriptionController;->getSubInfo(Ljava/lang/String;Ljava/lang/Object;)Ljava/util/List; -Lcom/android/internal/telephony/SubscriptionController;->getSubInfoRecord(Landroid/database/Cursor;)Landroid/telephony/SubscriptionInfo; -Lcom/android/internal/telephony/SubscriptionController;->isActiveSubId(I)Z -Lcom/android/internal/telephony/SubscriptionController;->isSubInfoReady()Z -Lcom/android/internal/telephony/SubscriptionController;->logd(Ljava/lang/String;)V -Lcom/android/internal/telephony/SubscriptionController;->logdl(Ljava/lang/String;)V -Lcom/android/internal/telephony/SubscriptionController;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/SubscriptionController;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/SubscriptionController;->mDefaultPhoneId:I -Lcom/android/internal/telephony/SubscriptionController;->mLock:Ljava/lang/Object; -Lcom/android/internal/telephony/SubscriptionController;->notifySubscriptionInfoChanged()V -Lcom/android/internal/telephony/SubscriptionController;->setDefaultDataSubId(I)V -Lcom/android/internal/telephony/SubscriptionController;->setDefaultFallbackSubId(II)V -Lcom/android/internal/telephony/SubscriptionController;->setDefaultSmsSubId(I)V -Lcom/android/internal/telephony/SubscriptionController;->setDefaultVoiceSubId(I)V -Lcom/android/internal/telephony/SubscriptionController;->setPlmnSpn(IZLjava/lang/String;ZLjava/lang/String;)Z -Lcom/android/internal/telephony/SubscriptionController;->updateAllDataConnectionTrackers()V -Lcom/android/internal/telephony/SubscriptionController;->validateSubId(I)V -Lcom/android/internal/telephony/SubscriptionInfoUpdater;->broadcastSimStateChanged(ILjava/lang/String;Ljava/lang/String;)V -Lcom/android/internal/telephony/SubscriptionInfoUpdater;->isAllIccIdQueryDone()Z -Lcom/android/internal/telephony/SubscriptionInfoUpdater;->logd(Ljava/lang/String;)V -Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mCurrentlyActiveUserId:I -Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mIccId:[Ljava/lang/String; -Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mPackageManager:Landroid/content/pm/IPackageManager; -Lcom/android/internal/telephony/SubscriptionInfoUpdater;->mPhone:[Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/SubscriptionInfoUpdater;->PROJECT_SIM_NUM:I -Lcom/android/internal/telephony/TelephonyCapabilities;->supportsAdn(I)Z Lcom/android/internal/telephony/TelephonyProperties;->PROPERTY_ICC_OPERATOR_NUMERIC:Ljava/lang/String; Lcom/android/internal/telephony/test/InterpreterEx;-><init>(Ljava/lang/String;)V Lcom/android/internal/telephony/test/SimulatedCommands;->acceptCall(Landroid/os/Message;)V @@ -3125,143 +1681,11 @@ Lcom/android/internal/telephony/test/SimulatedGsmCallState;->releaseActiveAccept Lcom/android/internal/telephony/test/SimulatedGsmCallState;->releaseHeldOrUDUB()Z Lcom/android/internal/telephony/test/SimulatedGsmCallState;->separateCall(I)Z Lcom/android/internal/telephony/test/SimulatedGsmCallState;->switchActiveAndHeldOrWaiting()Z -Lcom/android/internal/telephony/uicc/AdnRecord;-><init>(IILjava/lang/String;Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/AdnRecord;-><init>(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/AdnRecord;-><init>(II[B)V -Lcom/android/internal/telephony/uicc/AdnRecord;-><init>(Ljava/lang/String;Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/AdnRecord;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/AdnRecord;-><init>([B)V -Lcom/android/internal/telephony/uicc/AdnRecord;->buildAdnString(I)[B -Lcom/android/internal/telephony/uicc/AdnRecord;->CREATOR:Landroid/os/Parcelable$Creator; -Lcom/android/internal/telephony/uicc/AdnRecord;->getEmails()[Ljava/lang/String; -Lcom/android/internal/telephony/uicc/AdnRecord;->getNumber()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/AdnRecord;->isEmpty()Z -Lcom/android/internal/telephony/uicc/AdnRecord;->mAlphaTag:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/AdnRecord;->mEfid:I -Lcom/android/internal/telephony/uicc/AdnRecord;->mEmails:[Ljava/lang/String; -Lcom/android/internal/telephony/uicc/AdnRecord;->mExtRecord:I -Lcom/android/internal/telephony/uicc/AdnRecord;->mNumber:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/AdnRecord;->mRecordNumber:I -Lcom/android/internal/telephony/uicc/AdnRecord;->setEmails([Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/AdnRecordCache;->extensionEfForEf(I)I -Lcom/android/internal/telephony/uicc/AdnRecordCache;->getRecordsIfLoaded(I)Ljava/util/ArrayList; -Lcom/android/internal/telephony/uicc/AdnRecordCache;->mAdnLikeWaiters:Landroid/util/SparseArray; -Lcom/android/internal/telephony/uicc/AdnRecordCache;->mFh:Lcom/android/internal/telephony/uicc/IccFileHandler; -Lcom/android/internal/telephony/uicc/AdnRecordCache;->mUserWriteResponse:Landroid/util/SparseArray; -Lcom/android/internal/telephony/uicc/AdnRecordCache;->mUsimPhoneBookManager:Lcom/android/internal/telephony/gsm/UsimPhoneBookManager; -Lcom/android/internal/telephony/uicc/AdnRecordCache;->reset()V -Lcom/android/internal/telephony/uicc/AdnRecordCache;->sendErrorResponse(Landroid/os/Message;Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/AdnRecordCache;->updateAdnByIndex(ILcom/android/internal/telephony/uicc/AdnRecord;ILjava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/uicc/AdnRecordLoader;-><init>(Lcom/android/internal/telephony/uicc/IccFileHandler;)V -Lcom/android/internal/telephony/uicc/AdnRecordLoader;->getEFPath(I)Ljava/lang/String; -Lcom/android/internal/telephony/uicc/AdnRecordLoader;->loadFromEF(IIILandroid/os/Message;)V -Lcom/android/internal/telephony/uicc/AdnRecordLoader;->mFh:Lcom/android/internal/telephony/uicc/IccFileHandler; -Lcom/android/internal/telephony/uicc/AdnRecordLoader;->updateEF(Lcom/android/internal/telephony/uicc/AdnRecord;IIILjava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_DETECTED:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_PIN:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_PUK:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_READY:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_SUBSCRIPTION_PERSO:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->APPSTATE_UNKNOWN:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState;->values()[Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_CSIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_ISIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_RUIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_SIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_UNKNOWN:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->APPTYPE_USIM:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;->values()[Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_NETWORK:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_NETWORK_SUBSET:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_SERVICE_PROVIDER:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->PERSOSUBSTATE_UNKNOWN:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState;->values()[Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; Lcom/android/internal/telephony/uicc/IccCardApplicationStatus;-><init>()V -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus;->AppTypeFromRILInt(I)Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/IccCardApplicationStatus;->app_type:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;->CARDSTATE_ABSENT:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; -Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;->CARDSTATE_ERROR:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; -Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;->CARDSTATE_PRESENT:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; -Lcom/android/internal/telephony/uicc/IccCardStatus$CardState;->isCardPresent()Z -Lcom/android/internal/telephony/uicc/IccCardStatus$PinState;->PINSTATE_DISABLED:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; -Lcom/android/internal/telephony/uicc/IccCardStatus$PinState;->PINSTATE_ENABLED_BLOCKED:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; -Lcom/android/internal/telephony/uicc/IccCardStatus$PinState;->PINSTATE_ENABLED_PERM_BLOCKED:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; -Lcom/android/internal/telephony/uicc/IccCardStatus;->mApplications:[Lcom/android/internal/telephony/uicc/IccCardApplicationStatus; -Lcom/android/internal/telephony/uicc/IccCardStatus;->mCardState:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; -Lcom/android/internal/telephony/uicc/IccCardStatus;->mCdmaSubscriptionAppIndex:I -Lcom/android/internal/telephony/uicc/IccCardStatus;->mGsmUmtsSubscriptionAppIndex:I -Lcom/android/internal/telephony/uicc/IccCardStatus;->mImsSubscriptionAppIndex:I -Lcom/android/internal/telephony/uicc/IccCardStatus;->mUniversalPinState:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; -Lcom/android/internal/telephony/uicc/IccFileHandler$LoadLinearFixedContext;-><init>(IILandroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler$LoadLinearFixedContext;->mRecordSize:I -Lcom/android/internal/telephony/uicc/IccFileHandler$LoadLinearFixedContext;->results:Ljava/util/ArrayList; -Lcom/android/internal/telephony/uicc/IccFileHandler;->getEFLinearRecordSize(ILandroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler;->getEFLinearRecordSize(ILjava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler;->getEFPath(I)Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFLinearFixed(IILandroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFLinearFixed(ILjava/lang/String;ILandroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFLinearFixedAll(ILandroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFLinearFixedAll(ILjava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler;->loadEFTransparent(ILandroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler;->mAid:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccFileHandler;->mCi:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/uicc/IccFileHandler;->mParentApp:Lcom/android/internal/telephony/uicc/UiccCardApplication; -Lcom/android/internal/telephony/uicc/IccFileHandler;->updateEFLinearFixed(II[BLjava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler;->updateEFLinearFixed(ILjava/lang/String;I[BLjava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccFileHandler;->updateEFTransparent(I[BLandroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccIoResult;-><init>(IILjava/lang/String;)V -Lcom/android/internal/telephony/uicc/IccIoResult;-><init>(II[B)V -Lcom/android/internal/telephony/uicc/IccIoResult;->payload:[B -Lcom/android/internal/telephony/uicc/IccIoResult;->success()Z -Lcom/android/internal/telephony/uicc/IccIoResult;->sw1:I -Lcom/android/internal/telephony/uicc/IccIoResult;->sw2:I -Lcom/android/internal/telephony/uicc/IccRecords;->auth_rsp:Lcom/android/internal/telephony/uicc/IccIoResult; -Lcom/android/internal/telephony/uicc/IccRecords;->getGid1()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->getIccId()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->getIccSimChallengeResponse(ILjava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->getIMSI()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->getMsisdnNumber()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->getOperatorNumeric()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->getRecordsLoaded()Z -Lcom/android/internal/telephony/uicc/IccRecords;->getServiceProviderName()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->getUsimServiceTable()Lcom/android/internal/telephony/uicc/UsimServiceTable; -Lcom/android/internal/telephony/uicc/IccRecords;->handleRefresh(Lcom/android/internal/telephony/uicc/IccRefreshResponse;)V -Lcom/android/internal/telephony/uicc/IccRecords;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/IccRecords;->mAdnCache:Lcom/android/internal/telephony/uicc/AdnRecordCache; -Lcom/android/internal/telephony/uicc/IccRecords;->mCi:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/uicc/IccRecords;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/uicc/IccRecords;->mDestroyed:Ljava/util/concurrent/atomic/AtomicBoolean; -Lcom/android/internal/telephony/uicc/IccRecords;->mFh:Lcom/android/internal/telephony/uicc/IccFileHandler; -Lcom/android/internal/telephony/uicc/IccRecords;->mGid1:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->mIccId:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->mImsi:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->mIsVoiceMailFixed:Z -Lcom/android/internal/telephony/uicc/IccRecords;->mLock:Ljava/lang/Object; -Lcom/android/internal/telephony/uicc/IccRecords;->mMncLength:I -Lcom/android/internal/telephony/uicc/IccRecords;->mParentApp:Lcom/android/internal/telephony/uicc/UiccCardApplication; -Lcom/android/internal/telephony/uicc/IccRecords;->mRecordsEventsRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/uicc/IccRecords;->mRecordsToLoad:I -Lcom/android/internal/telephony/uicc/IccRecords;->mSpn:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->mTelephonyManager:Landroid/telephony/TelephonyManager; -Lcom/android/internal/telephony/uicc/IccRecords;->mVoiceMailNum:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRecords;->registerForNetworkSelectionModeAutomatic(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/uicc/IccRecords;->registerForNewSms(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/uicc/IccRecords;->registerForRecordsEvents(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/uicc/IccRecords;->registerForRecordsLoaded(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/uicc/IccRecords;->setMsisdnNumber(Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)V -Lcom/android/internal/telephony/uicc/IccRecords;->setVoiceCallForwardingFlag(IZLjava/lang/String;)V -Lcom/android/internal/telephony/uicc/IccRecords;->unregisterForNetworkSelectionModeAutomatic(Landroid/os/Handler;)V -Lcom/android/internal/telephony/uicc/IccRecords;->unregisterForNewSms(Landroid/os/Handler;)V -Lcom/android/internal/telephony/uicc/IccRecords;->unregisterForRecordsEvents(Landroid/os/Handler;)V -Lcom/android/internal/telephony/uicc/IccRecords;->unregisterForRecordsLoaded(Landroid/os/Handler;)V Lcom/android/internal/telephony/uicc/IccRefreshResponse;-><init>()V -Lcom/android/internal/telephony/uicc/IccRefreshResponse;->aid:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccRefreshResponse;->efId:I -Lcom/android/internal/telephony/uicc/IccRefreshResponse;->refreshResult:I -Lcom/android/internal/telephony/uicc/IccServiceTable;->getTag()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IccServiceTable;->mServiceTable:[B Lcom/android/internal/telephony/uicc/IccUtils;->adnStringFieldToString([BII)Ljava/lang/String; Lcom/android/internal/telephony/uicc/IccUtils;->bcdToString([BII)Ljava/lang/String; Lcom/android/internal/telephony/uicc/IccUtils;->bytesToHexString([B)Ljava/lang/String; @@ -3273,175 +1697,7 @@ Lcom/android/internal/telephony/uicc/IccUtils;->hexStringToBytes(Ljava/lang/Stri Lcom/android/internal/telephony/uicc/IccUtils;->networkNameToString([BII)Ljava/lang/String; Lcom/android/internal/telephony/uicc/IccUtils;->parseToBnW([BI)Landroid/graphics/Bitmap; Lcom/android/internal/telephony/uicc/IccUtils;->parseToRGB([BIZ)Landroid/graphics/Bitmap; -Lcom/android/internal/telephony/uicc/IsimRecords;->getIsimDomain()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimRecords;->getIsimImpi()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimRecords;->getIsimImpu()[Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->auth_rsp:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->fetchIsimRecords()V -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->isimTlvToString([B)Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimDomain:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimImpi:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimImpu:[Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimIst:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mIsimPcscf:[Ljava/lang/String; -Lcom/android/internal/telephony/uicc/IsimUiccRecords;->mLock:Ljava/lang/Object; -Lcom/android/internal/telephony/uicc/RuimRecords;->adjstMinDigits(I)I -Lcom/android/internal/telephony/uicc/RuimRecords;->fetchRuimRecords()V -Lcom/android/internal/telephony/uicc/RuimRecords;->getAssetLanguages(Landroid/content/Context;)[Ljava/lang/String; -Lcom/android/internal/telephony/uicc/RuimRecords;->getCsimSpnDisplayCondition()Z -Lcom/android/internal/telephony/uicc/RuimRecords;->getMdn()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/RuimRecords;->getMdnNumber()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/RuimRecords;->getRUIMOperatorNumeric()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/RuimRecords;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/RuimRecords;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/RuimRecords;->mEFli:[B -Lcom/android/internal/telephony/uicc/RuimRecords;->mEFpl:[B -Lcom/android/internal/telephony/uicc/RuimRecords;->mMin:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/RuimRecords;->mNai:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/RuimRecords;->onGetCSimEprlDone(Landroid/os/AsyncResult;)V -Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->INIT:Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; -Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->READ_SPN_3GPP:Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; -Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->READ_SPN_CPHS:Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; -Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->READ_SPN_SHORT_CPHS:Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState;->values()[Lcom/android/internal/telephony/uicc/SIMRecords$GetSpnFsmState; -Lcom/android/internal/telephony/uicc/SIMRecords;->fetchSimRecords()V -Lcom/android/internal/telephony/uicc/SIMRecords;->getExtFromEf(I)I -Lcom/android/internal/telephony/uicc/SIMRecords;->getMsisdnNumber()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/SIMRecords;->getOperatorNumeric()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/SIMRecords;->getSpnFsm(ZLandroid/os/AsyncResult;)V -Lcom/android/internal/telephony/uicc/SIMRecords;->getVoiceMailNumber()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/SIMRecords;->isCphsMailboxEnabled()Z -Lcom/android/internal/telephony/uicc/SIMRecords;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/SIMRecords;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/SIMRecords;->logv(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/SIMRecords;->mEfCff:[B -Lcom/android/internal/telephony/uicc/SIMRecords;->mEfCfis:[B -Lcom/android/internal/telephony/uicc/SIMRecords;->mEfCPHS_MWI:[B -Lcom/android/internal/telephony/uicc/SIMRecords;->mEfLi:[B -Lcom/android/internal/telephony/uicc/SIMRecords;->mEfMWIS:[B -Lcom/android/internal/telephony/uicc/SIMRecords;->mEfPl:[B -Lcom/android/internal/telephony/uicc/SIMRecords;->mSpnDisplayCondition:I -Lcom/android/internal/telephony/uicc/SIMRecords;->mUsimServiceTable:Lcom/android/internal/telephony/uicc/UsimServiceTable; -Lcom/android/internal/telephony/uicc/SIMRecords;->mVmConfig:Lcom/android/internal/telephony/uicc/VoiceMailConstants; -Lcom/android/internal/telephony/uicc/SIMRecords;->setVoiceCallForwardingFlag(IZLjava/lang/String;)V -Lcom/android/internal/telephony/uicc/UiccCard;->getApplication(I)Lcom/android/internal/telephony/uicc/UiccCardApplication; -Lcom/android/internal/telephony/uicc/UiccCard;->getApplicationByType(I)Lcom/android/internal/telephony/uicc/UiccCardApplication; -Lcom/android/internal/telephony/uicc/UiccCard;->getApplicationIndex(I)Lcom/android/internal/telephony/uicc/UiccCardApplication; -Lcom/android/internal/telephony/uicc/UiccCard;->getCardState()Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; -Lcom/android/internal/telephony/uicc/UiccCard;->getCarrierPackageNamesForIntent(Landroid/content/pm/PackageManager;Landroid/content/Intent;)Ljava/util/List; -Lcom/android/internal/telephony/uicc/UiccCard;->getIccId()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/UiccCard;->getNumApplications()I -Lcom/android/internal/telephony/uicc/UiccCard;->getOperatorBrandOverride()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/UiccCard;->isApplicationOnIcc(Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType;)Z -Lcom/android/internal/telephony/uicc/UiccCard;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/UiccCard;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/UiccCard;->mCardState:Lcom/android/internal/telephony/uicc/IccCardStatus$CardState; -Lcom/android/internal/telephony/uicc/UiccCard;->mCi:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/uicc/UiccCard;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/uicc/UiccCard;->mLock:Ljava/lang/Object; -Lcom/android/internal/telephony/uicc/UiccCard;->mPhoneId:I -Lcom/android/internal/telephony/uicc/UiccCardApplication;->dispose()V -Lcom/android/internal/telephony/uicc/UiccCardApplication;->getAid()Ljava/lang/String; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->getAuthContext()I -Lcom/android/internal/telephony/uicc/UiccCardApplication;->getIccFileHandler()Lcom/android/internal/telephony/uicc/IccFileHandler; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->getIccRecords()Lcom/android/internal/telephony/uicc/IccRecords; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->getPersoSubState()Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->getPhoneId()I -Lcom/android/internal/telephony/uicc/UiccCardApplication;->getPin1State()Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->getState()Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->getType()Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/UiccCardApplication;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/UiccCardApplication;->mAid:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->mAppState:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppState; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->mAppType:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$AppType; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->mCi:Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->mDestroyed:Z -Lcom/android/internal/telephony/uicc/UiccCardApplication;->mLock:Ljava/lang/Object; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->mPersoSubState:Lcom/android/internal/telephony/uicc/IccCardApplicationStatus$PersoSubState; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->mPin1State:Lcom/android/internal/telephony/uicc/IccCardStatus$PinState; -Lcom/android/internal/telephony/uicc/UiccCardApplication;->registerForReady(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/uicc/UiccCardApplication;->unregisterForReady(Landroid/os/Handler;)V -Lcom/android/internal/telephony/uicc/UiccCardApplication;->update(Lcom/android/internal/telephony/uicc/IccCardApplicationStatus;Landroid/content/Context;Lcom/android/internal/telephony/CommandsInterface;)V -Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules$TLV;->length:Ljava/lang/Integer; -Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules$TLV;->value:Ljava/lang/String; -Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules;->mLoadedCallback:Landroid/os/Message; -Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules;->mState:Ljava/util/concurrent/atomic/AtomicInteger; -Lcom/android/internal/telephony/uicc/UiccController;->getIccFileHandler(II)Lcom/android/internal/telephony/uicc/IccFileHandler; -Lcom/android/internal/telephony/uicc/UiccController;->getIccRecords(II)Lcom/android/internal/telephony/uicc/IccRecords; -Lcom/android/internal/telephony/uicc/UiccController;->getInstance()Lcom/android/internal/telephony/uicc/UiccController; -Lcom/android/internal/telephony/uicc/UiccController;->getUiccCard(I)Lcom/android/internal/telephony/uicc/UiccCard; -Lcom/android/internal/telephony/uicc/UiccController;->getUiccCardApplication(II)Lcom/android/internal/telephony/uicc/UiccCardApplication; -Lcom/android/internal/telephony/uicc/UiccController;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/uicc/UiccController;->mCis:[Lcom/android/internal/telephony/CommandsInterface; -Lcom/android/internal/telephony/uicc/UiccController;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/uicc/UiccController;->mInstance:Lcom/android/internal/telephony/uicc/UiccController; -Lcom/android/internal/telephony/uicc/UiccController;->mLock:Ljava/lang/Object; -Lcom/android/internal/telephony/uicc/UiccController;->registerForIccChanged(Landroid/os/Handler;ILjava/lang/Object;)V -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->ALLOWED_CSG_LISTS_AND_INDICATIONS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->CFI_STATUS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->CSG_DISPLAY_CONTROL:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->FDN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->MBDN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->MSISDN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->MWI_STATUS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->OPERATOR_CSG_LISTS_AND_INDICATIONS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->OPERATOR_PLMN_LIST:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->PLMN_NETWORK_NAME:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SDN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SM_OVER_IP:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SM_SERVICE_PARAMS:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SM_STORAGE:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;->SPN:Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService; -Lcom/android/internal/telephony/uicc/UsimServiceTable;->isAvailable(Lcom/android/internal/telephony/uicc/UsimServiceTable$UsimService;)Z -Lcom/android/internal/telephony/uicc/VoiceMailConstants;-><init>()V -Lcom/android/internal/telephony/UiccPhoneBookController;-><init>([Lcom/android/internal/telephony/Phone;)V -Lcom/android/internal/telephony/UiccPhoneBookController;->getDefaultSubscription()I -Lcom/android/internal/telephony/UiccPhoneBookController;->getIccPhoneBookInterfaceManager(I)Lcom/android/internal/telephony/IccPhoneBookInterfaceManager; -Lcom/android/internal/telephony/UiccPhoneBookController;->mPhone:[Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/UiccSmsController;->copyMessageToIccEfForSubscriber(ILjava/lang/String;I[B[B)Z -Lcom/android/internal/telephony/UiccSmsController;->disableCellBroadcastForSubscriber(III)Z -Lcom/android/internal/telephony/UiccSmsController;->disableCellBroadcastRangeForSubscriber(IIII)Z -Lcom/android/internal/telephony/UiccSmsController;->enableCellBroadcastForSubscriber(III)Z -Lcom/android/internal/telephony/UiccSmsController;->enableCellBroadcastRangeForSubscriber(IIII)Z -Lcom/android/internal/telephony/UiccSmsController;->getAllMessagesFromIccEfForSubscriber(ILjava/lang/String;)Ljava/util/List; -Lcom/android/internal/telephony/UiccSmsController;->getIccSmsInterfaceManager(I)Lcom/android/internal/telephony/IccSmsInterfaceManager; -Lcom/android/internal/telephony/UiccSmsController;->getImsSmsFormatForSubscriber(I)Ljava/lang/String; -Lcom/android/internal/telephony/UiccSmsController;->getPreferredSmsSubscription()I -Lcom/android/internal/telephony/UiccSmsController;->isImsSmsSupportedForSubscriber(I)Z -Lcom/android/internal/telephony/UiccSmsController;->sendDataForSubscriber(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V -Lcom/android/internal/telephony/UiccSmsController;->sendErrorInPendingIntent(Landroid/app/PendingIntent;I)V -Lcom/android/internal/telephony/UiccSmsController;->sendErrorInPendingIntents(Ljava/util/List;I)V -Lcom/android/internal/telephony/UiccSmsController;->updateMessageOnIccEfForSubscriber(ILjava/lang/String;II[B)Z -Lcom/android/internal/telephony/UUSInfo;->getDcs()I -Lcom/android/internal/telephony/UUSInfo;->getType()I -Lcom/android/internal/telephony/UUSInfo;->getUserData()[B -Lcom/android/internal/telephony/WakeLockStateMachine;->log(Ljava/lang/String;)V -Lcom/android/internal/telephony/WakeLockStateMachine;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/WakeLockStateMachine;->mIdleState:Lcom/android/internal/telephony/WakeLockStateMachine$IdleState; -Lcom/android/internal/telephony/WakeLockStateMachine;->mPhone:Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/WapPushOverSms;->dispatchWapPdu([BLandroid/content/BroadcastReceiver;Lcom/android/internal/telephony/InboundSmsHandler;)I -Lcom/android/internal/telephony/WapPushOverSms;->getDeliveryOrReadReportThreadId(Landroid/content/Context;Lcom/google/android/mms/pdu/GenericPdu;)J -Lcom/android/internal/telephony/WapPushOverSms;->isDuplicateNotification(Landroid/content/Context;Lcom/google/android/mms/pdu/NotificationInd;)Z -Lcom/android/internal/telephony/WapPushOverSms;->isWapPushForMms([BLcom/android/internal/telephony/InboundSmsHandler;)Z -Lcom/android/internal/telephony/WapPushOverSms;->mContext:Landroid/content/Context; -Lcom/android/internal/telephony/WapPushOverSms;->mDeviceIdleController:Landroid/os/IDeviceIdleController; -Lcom/android/internal/telephony/WapPushOverSms;->mWapPushManager:Lcom/android/internal/telephony/IWapPushManager; -Lcom/android/internal/telephony/WspTypeDecoder;-><init>([B)V -Lcom/android/internal/telephony/WspTypeDecoder;->decodeContentType(I)Z -Lcom/android/internal/telephony/WspTypeDecoder;->decodeIntegerValue(I)Z -Lcom/android/internal/telephony/WspTypeDecoder;->decodeShortInteger(I)Z -Lcom/android/internal/telephony/WspTypeDecoder;->decodeTextString(I)Z -Lcom/android/internal/telephony/WspTypeDecoder;->decodeUintvarInteger(I)Z -Lcom/android/internal/telephony/WspTypeDecoder;->decodeValueLength(I)Z -Lcom/android/internal/telephony/WspTypeDecoder;->decodeXWapApplicationId(I)Z -Lcom/android/internal/telephony/WspTypeDecoder;->getContentParameters()Ljava/util/HashMap; -Lcom/android/internal/telephony/WspTypeDecoder;->getDecodedDataLength()I -Lcom/android/internal/telephony/WspTypeDecoder;->getValue32()J -Lcom/android/internal/telephony/WspTypeDecoder;->getValueString()Ljava/lang/String; -Lcom/android/internal/telephony/WspTypeDecoder;->mWspData:[B -Lcom/android/internal/telephony/WspTypeDecoder;->seekXWapApplicationId(II)Z 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 diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index 3a76de442777..0f1ba390cd7a 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -760,6 +760,16 @@ public final class LoadedApk { isBundledApp = false; } + // Similar to vendor apks, we should add /product/lib for apks from product partition + // and not having /product/lib in the default search path + final boolean treatProductApkAsUnbundled = !defaultSearchPaths.contains("/product/lib"); + if (mApplicationInfo.getCodePath() != null + && mApplicationInfo.isProduct() && treatProductApkAsUnbundled + // TODO(b/128557860): Change target SDK version when version code R is available. + && getTargetSdkVersion() == Build.VERSION_CODES.CUR_DEVELOPMENT) { + isBundledApp = false; + } + makePaths(mActivityThread, isBundledApp, mApplicationInfo, zipPaths, libPaths); String libraryPermittedPath = mDataDir; diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index e92efde236c4..b4330fb56af0 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -81,14 +81,14 @@ import android.net.ConnectivityThread; import android.net.EthernetManager; import android.net.IConnectivityManager; import android.net.IEthernetManager; -import android.net.IIpMemoryStore; import android.net.IIpSecService; import android.net.INetworkPolicyManager; -import android.net.IpMemoryStore; +import android.net.ITestNetworkManager; import android.net.IpSecManager; import android.net.NetworkPolicyManager; import android.net.NetworkScoreManager; import android.net.NetworkWatchlistManager; +import android.net.TestNetworkManager; import android.net.lowpan.ILowpanManager; import android.net.lowpan.LowpanManager; import android.net.nsd.INsdManager; @@ -126,6 +126,7 @@ import android.os.IUserManager; import android.os.IncidentManager; import android.os.PowerManager; import android.os.RecoverySystem; +import android.os.RemoteException; import android.os.ServiceManager; import android.os.ServiceManager.ServiceNotFoundException; import android.os.SystemUpdateManager; @@ -295,17 +296,6 @@ final class SystemServiceRegistry { } }); - registerService(Context.IP_MEMORY_STORE_SERVICE, IpMemoryStore.class, - new CachedServiceFetcher<IpMemoryStore>() { - @Override - public IpMemoryStore createService(final ContextImpl ctx) - throws ServiceNotFoundException { - IBinder b = ServiceManager.getServiceOrThrow( - Context.IP_MEMORY_STORE_SERVICE); - IIpMemoryStore service = IIpMemoryStore.Stub.asInterface(b); - return new IpMemoryStore(ctx, service); - }}); - registerService(Context.IPSEC_SERVICE, IpSecManager.class, new CachedServiceFetcher<IpSecManager>() { @Override @@ -315,6 +305,29 @@ final class SystemServiceRegistry { return new IpSecManager(ctx, service); }}); + registerService( + Context.TEST_NETWORK_SERVICE, + TestNetworkManager.class, + new StaticApplicationContextServiceFetcher<TestNetworkManager>() { + @Override + public TestNetworkManager createService(Context context) + throws ServiceNotFoundException { + IBinder csBinder = + ServiceManager.getServiceOrThrow(Context.CONNECTIVITY_SERVICE); + IConnectivityManager csMgr = + IConnectivityManager.Stub.asInterface(csBinder); + + final IBinder tnBinder; + try { + tnBinder = csMgr.startOrGetTestNetworkService(); + } catch (RemoteException e) { + throw new ServiceNotFoundException(Context.TEST_NETWORK_SERVICE); + } + ITestNetworkManager tnMgr = ITestNetworkManager.Stub.asInterface(tnBinder); + return new TestNetworkManager(context, tnMgr); + } + }); + registerService(Context.COUNTRY_DETECTOR, CountryDetector.class, new StaticServiceFetcher<CountryDetector>() { @Override diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 3871d7a2418a..e2322f3e2eeb 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -104,6 +104,7 @@ import java.security.spec.PKCS8EncodedKeySpec; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.Executor; @@ -4488,7 +4489,8 @@ public class DevicePolicyManager { * </ul> * The call will fail if called with the package name of an unsupported VPN app. * <p> Enabling lockdown via {@code lockdownEnabled} argument carries the risk that any failure - * of the VPN provider could break networking for all apps. + * of the VPN provider could break networking for all apps. This method clears any lockdown + * whitelist set by {@link #setAlwaysOnVpnPackage(ComponentName, String, boolean, Set)}. * * @param vpnPackage The package name for an installed VPN app on the device, or {@code null} to * remove an existing always-on VPN configuration. @@ -4498,11 +4500,11 @@ public class DevicePolicyManager { * @throws NameNotFoundException if {@code vpnPackage} is not installed. * @throws UnsupportedOperationException if {@code vpnPackage} exists but does not support being * set as always-on, or if always-on VPN is not available. - * @see #setAlwaysOnVpnPackage(ComponentName, String, boolean, List) + * @see #setAlwaysOnVpnPackage(ComponentName, String, boolean, Set) */ public void setAlwaysOnVpnPackage(@NonNull ComponentName admin, @Nullable String vpnPackage, boolean lockdownEnabled) throws NameNotFoundException { - setAlwaysOnVpnPackage(admin, vpnPackage, lockdownEnabled, Collections.emptyList()); + setAlwaysOnVpnPackage(admin, vpnPackage, lockdownEnabled, Collections.emptySet()); } /** @@ -4512,6 +4514,11 @@ public class DevicePolicyManager { * System apps can always bypass VPN. * <p> Note that the system doesn't update the whitelist when packages are installed or * uninstalled, the admin app must call this method to keep the list up to date. + * <p> When {@code lockdownEnabled} is false {@code lockdownWhitelist} is ignored . When + * {@code lockdownEnabled} is {@code true} and {@code lockdownWhitelist} is {@code null} or + * empty, only system apps can bypass VPN. + * <p> Setting always-on VPN package to {@code null} or using + * {@link #setAlwaysOnVpnPackage(ComponentName, String, boolean)} clears lockdown whitelist. * * @param vpnPackage package name for an installed VPN app on the device, or {@code null} * to remove an existing always-on VPN configuration @@ -4528,13 +4535,13 @@ public class DevicePolicyManager { * available. */ public void setAlwaysOnVpnPackage(@NonNull ComponentName admin, @Nullable String vpnPackage, - boolean lockdownEnabled, @Nullable List<String> lockdownWhitelist) + boolean lockdownEnabled, @Nullable Set<String> lockdownWhitelist) throws NameNotFoundException { throwIfParentInstance("setAlwaysOnVpnPackage"); if (mService != null) { try { - mService.setAlwaysOnVpnPackage( - admin, vpnPackage, lockdownEnabled, lockdownWhitelist); + mService.setAlwaysOnVpnPackage(admin, vpnPackage, lockdownEnabled, + lockdownWhitelist == null ? null : new ArrayList<>(lockdownWhitelist)); } catch (ServiceSpecificException e) { switch (e.errorCode) { case ERROR_VPN_PACKAGE_NOT_FOUND: @@ -4572,7 +4579,7 @@ public class DevicePolicyManager { } /** - * Called by device or profile owner to query the list of packages that are allowed to access + * Called by device or profile owner to query the set of packages that are allowed to access * the network directly when always-on VPN is in lockdown mode but not connected. Returns * {@code null} when always-on VPN is not active or not in lockdown mode. * @@ -4580,13 +4587,15 @@ public class DevicePolicyManager { * * @throws SecurityException if {@code admin} is not a device or a profile owner. * - * @see #setAlwaysOnVpnPackage(ComponentName, String, boolean, List) + * @see #setAlwaysOnVpnPackage(ComponentName, String, boolean, Set) */ - public @Nullable List<String> getAlwaysOnVpnLockdownWhitelist(@NonNull ComponentName admin) { + public @Nullable Set<String> getAlwaysOnVpnLockdownWhitelist(@NonNull ComponentName admin) { throwIfParentInstance("getAlwaysOnVpnLockdownWhitelist"); if (mService != null) { try { - return mService.getAlwaysOnVpnLockdownWhitelist(admin); + final List<String> whitelist = + mService.getAlwaysOnVpnLockdownWhitelist(admin); + return whitelist == null ? null : new HashSet<>(whitelist); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/bluetooth/BluetoothA2dp.java b/core/java/android/bluetooth/BluetoothA2dp.java index 171c2f5b1a08..9faa1d675d8d 100644 --- a/core/java/android/bluetooth/BluetoothA2dp.java +++ b/core/java/android/bluetooth/BluetoothA2dp.java @@ -224,8 +224,10 @@ public final class BluetoothA2dp implements BluetoothProfile { if (VDBG) Log.d(TAG, "Unbinding service..."); try { mServiceLock.writeLock().lock(); - mService = null; - mContext.unbindService(mConnection); + if (mService != null) { + mService = null; + mContext.unbindService(mConnection); + } } catch (Exception re) { Log.e(TAG, "", re); } finally { diff --git a/core/java/android/bluetooth/BluetoothHearingAid.java b/core/java/android/bluetooth/BluetoothHearingAid.java index c5a0bbd2f802..58ff2e14fd50 100644 --- a/core/java/android/bluetooth/BluetoothHearingAid.java +++ b/core/java/android/bluetooth/BluetoothHearingAid.java @@ -22,7 +22,6 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; -import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -91,7 +90,6 @@ public final class BluetoothHearingAid implements BluetoothProfile { * @hide */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) - @UnsupportedAppUsage public static final String ACTION_ACTIVE_DEVICE_CHANGED = "android.bluetooth.hearingaid.profile.action.ACTIVE_DEVICE_CHANGED"; @@ -323,7 +321,8 @@ public final class BluetoothHearingAid implements BluetoothProfile { /** * {@inheritDoc} */ - @Override public @NonNull List<BluetoothDevice> getDevicesMatchingConnectionStates( + @Override + public @NonNull List<BluetoothDevice> getDevicesMatchingConnectionStates( @NonNull int[] states) { if (VDBG) log("getDevicesMatchingStates()"); try { @@ -345,7 +344,8 @@ public final class BluetoothHearingAid implements BluetoothProfile { * {@inheritDoc} */ @Override - public int getConnectionState(@NonNull BluetoothDevice device) { + public @BluetoothProfile.BtProfileState int getConnectionState( + @NonNull BluetoothDevice device) { if (VDBG) log("getState(" + device + ")"); try { mServiceLock.readLock().lock(); @@ -385,7 +385,6 @@ public final class BluetoothHearingAid implements BluetoothProfile { * @return false on immediate error, true otherwise * @hide */ - @UnsupportedAppUsage public boolean setActiveDevice(@Nullable BluetoothDevice device) { if (DBG) log("setActiveDevice(" + device + ")"); try { @@ -417,7 +416,6 @@ public final class BluetoothHearingAid implements BluetoothProfile { * @hide */ @RequiresPermission(Manifest.permission.BLUETOOTH) - @UnsupportedAppUsage public List<BluetoothDevice> getActiveDevices() { if (VDBG) log("getActiveDevices()"); try { diff --git a/core/java/android/bluetooth/BluetoothHidHost.java b/core/java/android/bluetooth/BluetoothHidHost.java index 0ca39f169a72..289e769a99ef 100644 --- a/core/java/android/bluetooth/BluetoothHidHost.java +++ b/core/java/android/bluetooth/BluetoothHidHost.java @@ -232,8 +232,10 @@ public final class BluetoothHidHost implements BluetoothProfile { if (VDBG) Log.d(TAG, "Unbinding service..."); synchronized (mConnection) { try { - mService = null; - mContext.unbindService(mConnection); + if (mService != null) { + mService = null; + mContext.unbindService(mConnection); + } } catch (Exception re) { Log.e(TAG, "", re); } diff --git a/core/java/android/bluetooth/BluetoothPbap.java b/core/java/android/bluetooth/BluetoothPbap.java index ae264e19bb7c..b303c34ee0ae 100644 --- a/core/java/android/bluetooth/BluetoothPbap.java +++ b/core/java/android/bluetooth/BluetoothPbap.java @@ -120,8 +120,10 @@ public class BluetoothPbap implements BluetoothProfile { log("Unbinding service..."); synchronized (mConnection) { try { - mService = null; - mContext.unbindService(mConnection); + if (mService != null) { + mService = null; + mContext.unbindService(mConnection); + } } catch (Exception re) { Log.e(TAG, "", re); } diff --git a/core/java/android/bluetooth/BluetoothProfile.java b/core/java/android/bluetooth/BluetoothProfile.java index b8670dbeadad..dabe0fdac39a 100644 --- a/core/java/android/bluetooth/BluetoothProfile.java +++ b/core/java/android/bluetooth/BluetoothProfile.java @@ -18,11 +18,14 @@ package android.bluetooth; import android.Manifest; +import android.annotation.IntDef; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; import android.os.Build; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.List; /** @@ -60,6 +63,16 @@ public interface BluetoothProfile { /** The profile is in disconnecting state */ int STATE_DISCONNECTING = 3; + /** @hide */ + @IntDef({ + STATE_DISCONNECTED, + STATE_CONNECTING, + STATE_CONNECTED, + STATE_DISCONNECTING, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface BtProfileState {} + /** * Headset and Handsfree profile */ @@ -263,7 +276,7 @@ public interface BluetoothProfile { * #STATE_CONNECTING}, {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING} */ @RequiresPermission(Manifest.permission.BLUETOOTH) - public int getConnectionState(BluetoothDevice device); + @BtProfileState int getConnectionState(BluetoothDevice device); /** * An interface for notifying BluetoothProfile IPC clients when they have diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 136657ff555e..8625a04963a7 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -3016,6 +3016,7 @@ public abstract class Context { CONNECTIVITY_SERVICE, //@hide: IP_MEMORY_STORE_SERVICE, IPSEC_SERVICE, + TEST_NETWORK_SERVICE, //@hide: UPDATE_LOCK_SERVICE, //@hide: NETWORKMANAGEMENT_SERVICE, NETWORK_STATS_SERVICE, @@ -3522,14 +3523,6 @@ public abstract class Context { /** * Use with {@link #getSystemService(String)} to retrieve a - * {@link android.net.IpMemoryStore} to store and read information about - * known networks. - * @hide - */ - public static final String IP_MEMORY_STORE_SERVICE = "ipmemorystore"; - - /** - * Use with {@link #getSystemService(String)} to retrieve a * {@link android.net.IpSecManager} for encrypting Sockets or Networks with * IPSec. * @@ -3539,6 +3532,15 @@ public abstract class Context { /** * Use with {@link #getSystemService(String)} to retrieve a {@link + * android.net.TestNetworkManager} for building TUNs and limited-use Networks + * + * @see #getSystemService(String) + * @hide + */ + @TestApi public static final String TEST_NETWORK_SERVICE = "test_network"; + + /** + * Use with {@link #getSystemService(String)} to retrieve a {@link * android.os.IUpdateLock} for managing runtime sequences that * must not be interrupted by headless OTA application or similar. * diff --git a/core/java/android/content/pm/AndroidHidlUpdater.java b/core/java/android/content/pm/AndroidHidlUpdater.java index b7ae8f4a1291..d0657e5eb8ec 100644 --- a/core/java/android/content/pm/AndroidHidlUpdater.java +++ b/core/java/android/content/pm/AndroidHidlUpdater.java @@ -34,8 +34,14 @@ public class AndroidHidlUpdater extends PackageSharedLibraryUpdater { @Override public void updatePackage(Package pkg) { + ApplicationInfo info = pkg.applicationInfo; + // This was the default <= P and is maintained for backwards compatibility. - if (pkg.applicationInfo.targetSdkVersion <= Build.VERSION_CODES.P) { + boolean isLegacy = info.targetSdkVersion <= Build.VERSION_CODES.P; + // Only system apps use these libraries + boolean isSystem = info.isSystemApp() || info.isUpdatedSystemApp(); + + if (isLegacy && isSystem) { prefixRequiredLibrary(pkg, ANDROID_HIDL_BASE); prefixRequiredLibrary(pkg, ANDROID_HIDL_MANAGER); } else { diff --git a/core/java/android/content/pm/PackageList.java b/core/java/android/content/pm/PackageList.java index cfd99abc6283..f78175868860 100644 --- a/core/java/android/content/pm/PackageList.java +++ b/core/java/android/content/pm/PackageList.java @@ -45,16 +45,16 @@ public class PackageList implements PackageListObserver, AutoCloseable { } @Override - public void onPackageAdded(String packageName) { + public void onPackageAdded(String packageName, int uid) { if (mWrappedObserver != null) { - mWrappedObserver.onPackageAdded(packageName); + mWrappedObserver.onPackageAdded(packageName, uid); } } @Override - public void onPackageRemoved(String packageName) { + public void onPackageRemoved(String packageName, int uid) { if (mWrappedObserver != null) { - mWrappedObserver.onPackageRemoved(packageName); + mWrappedObserver.onPackageRemoved(packageName, uid); } } diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index 7c9943b61ea4..c29936937ecd 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -62,9 +62,9 @@ public abstract class PackageManagerInternal { /** Observer called whenever the list of packages changes */ public interface PackageListObserver { /** A package was added to the system. */ - void onPackageAdded(@NonNull String packageName); + void onPackageAdded(@NonNull String packageName, int uid); /** A package was removed from the system. */ - void onPackageRemoved(@NonNull String packageName); + void onPackageRemoved(@NonNull String packageName, int uid); } /** Interface to override permission checks via composition */ diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index ecb9dbf38614..d710d57d8f0b 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -3857,8 +3857,6 @@ public class PackageParser { // every activity info has had a chance to set it from its attributes. setMaxAspectRatio(owner); - PackageBackwardCompatibility.modifySharedLibraries(owner); - if (hasDomainURLs(owner)) { owner.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS; } else { diff --git a/core/java/android/net/CaptivePortal.java b/core/java/android/net/CaptivePortal.java index 3ab35e1eebf0..ba7323ddbd81 100644 --- a/core/java/android/net/CaptivePortal.java +++ b/core/java/android/net/CaptivePortal.java @@ -29,15 +29,33 @@ import android.os.RemoteException; * {@code ACTION_CAPTIVE_PORTAL_SIGN_IN} activity. */ public class CaptivePortal implements Parcelable { - /** @hide */ + /** + * Response code from the captive portal application, indicating that the portal was dismissed + * and the network should be re-validated. + * @see ICaptivePortal#appResponse(int) + * @see android.net.INetworkMonitor#notifyCaptivePortalAppFinished(int) + * @hide + */ @SystemApi @TestApi public static final int APP_RETURN_DISMISSED = 0; - /** @hide */ + /** + * Response code from the captive portal application, indicating that the user did not login and + * does not want to use the captive portal network. + * @see ICaptivePortal#appResponse(int) + * @see android.net.INetworkMonitor#notifyCaptivePortalAppFinished(int) + * @hide + */ @SystemApi @TestApi public static final int APP_RETURN_UNWANTED = 1; - /** @hide */ + /** + * Response code from the captive portal application, indicating that the user does not wish to + * login but wants to use the captive portal network as-is. + * @see ICaptivePortal#appResponse(int) + * @see android.net.INetworkMonitor#notifyCaptivePortalAppFinished(int) + * @hide + */ @SystemApi @TestApi public static final int APP_RETURN_WANTED_AS_IS = 2; diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 2a357ff2bcbb..e5802c23eb6f 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -38,7 +38,6 @@ import android.os.Build; import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Handler; -import android.os.HandlerThread; import android.os.IBinder; import android.os.INetworkActivityListener; import android.os.INetworkManagementService; @@ -75,6 +74,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.RejectedExecutionException; /** * Class that answers queries about the state of network connectivity. It also @@ -1813,23 +1815,26 @@ public class ConnectivityManager { public static final int MIN_INTERVAL = 10; private final Network mNetwork; - private final PacketKeepaliveCallback mCallback; - private final Looper mLooper; - private final Messenger mMessenger; + private final ISocketKeepaliveCallback mCallback; + private final ExecutorService mExecutor; private volatile Integer mSlot; - void stopLooper() { - mLooper.quit(); - } - @UnsupportedAppUsage public void stop() { try { - mService.stopKeepalive(mNetwork, mSlot); - } catch (RemoteException e) { - Log.e(TAG, "Error stopping packet keepalive: ", e); - stopLooper(); + mExecutor.execute(() -> { + try { + if (mSlot != null) { + mService.stopKeepalive(mNetwork, mSlot); + } + } catch (RemoteException e) { + Log.e(TAG, "Error stopping packet keepalive: ", e); + throw e.rethrowFromSystemServer(); + } + }); + } catch (RejectedExecutionException e) { + // The internal executor has already stopped due to previous event. } } @@ -1837,40 +1842,43 @@ public class ConnectivityManager { Preconditions.checkNotNull(network, "network cannot be null"); Preconditions.checkNotNull(callback, "callback cannot be null"); mNetwork = network; - mCallback = callback; - HandlerThread thread = new HandlerThread(TAG); - thread.start(); - mLooper = thread.getLooper(); - mMessenger = new Messenger(new Handler(mLooper) { + mExecutor = Executors.newSingleThreadExecutor(); + mCallback = new ISocketKeepaliveCallback.Stub() { @Override - public void handleMessage(Message message) { - switch (message.what) { - case NetworkAgent.EVENT_SOCKET_KEEPALIVE: - int error = message.arg2; - try { - if (error == SUCCESS) { - if (mSlot == null) { - mSlot = message.arg1; - mCallback.onStarted(); - } else { - mSlot = null; - stopLooper(); - mCallback.onStopped(); - } - } else { - stopLooper(); - mCallback.onError(error); - } - } catch (Exception e) { - Log.e(TAG, "Exception in keepalive callback(" + error + ")", e); - } - break; - default: - Log.e(TAG, "Unhandled message " + Integer.toHexString(message.what)); - break; - } + public void onStarted(int slot) { + Binder.withCleanCallingIdentity(() -> + mExecutor.execute(() -> { + mSlot = slot; + callback.onStarted(); + })); + } + + @Override + public void onStopped() { + Binder.withCleanCallingIdentity(() -> + mExecutor.execute(() -> { + mSlot = null; + callback.onStopped(); + })); + mExecutor.shutdown(); + } + + @Override + public void onError(int error) { + Binder.withCleanCallingIdentity(() -> + mExecutor.execute(() -> { + mSlot = null; + callback.onError(error); + })); + mExecutor.shutdown(); + } + + @Override + public void onDataReceived() { + // PacketKeepalive is only used for Nat-T keepalive and as such does not invoke + // this callback when data is received. } - }); + }; } } @@ -1887,12 +1895,11 @@ public class ConnectivityManager { InetAddress srcAddr, int srcPort, InetAddress dstAddr) { final PacketKeepalive k = new PacketKeepalive(network, callback); try { - mService.startNattKeepalive(network, intervalSeconds, k.mMessenger, new Binder(), + mService.startNattKeepalive(network, intervalSeconds, k.mCallback, srcAddr.getHostAddress(), srcPort, dstAddr.getHostAddress()); } catch (RemoteException e) { Log.e(TAG, "Error starting packet keepalive: ", e); - k.stopLooper(); - return null; + throw e.rethrowFromSystemServer(); } return k; } @@ -2809,23 +2816,6 @@ public class ConnectivityManager { } /** - * @removed - * @deprecated This API would be removed when all of caller has been updated. - * */ - @Deprecated - public abstract static class TetheringEntitlementValueListener { - /** - * Called to notify entitlement result. - * - * @param resultCode a int value of entitlement result. It may be one of - * {@link #TETHER_ERROR_NO_ERROR}, - * {@link #TETHER_ERROR_PROVISION_FAILED}, or - * {@link #TETHER_ERROR_ENTITLEMENT_UNKONWN}. - */ - public void onEntitlementResult(int resultCode) {} - } - - /** * Get the last value of the entitlement check on this downstream. If the cached value is * {@link #TETHER_ERROR_NO_ERROR} or showEntitlementUi argument is false, it just return the * cached value. Otherwise, a UI-based entitlement check would be performed. It is not @@ -2871,31 +2861,6 @@ public class ConnectivityManager { } /** - * @removed - * @deprecated This API would be removed when all of caller has been updated. - * */ - @Deprecated - public void getLatestTetheringEntitlementValue(int type, boolean showEntitlementUi, - @NonNull final TetheringEntitlementValueListener listener, @Nullable Handler handler) { - Preconditions.checkNotNull(listener, "TetheringEntitlementValueListener cannot be null."); - ResultReceiver wrappedListener = new ResultReceiver(handler) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - listener.onEntitlementResult(resultCode); - } - }; - - try { - String pkgName = mContext.getOpPackageName(); - Log.i(TAG, "getLatestTetheringEntitlementValue:" + pkgName); - mService.getLatestTetheringEntitlementResult(type, wrappedListener, - showEntitlementUi, pkgName); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - - /** * Report network connectivity status. This is currently used only * to alter status bar UI. * <p>This method requires the caller to hold the permission diff --git a/core/java/android/net/DnsPacket.java b/core/java/android/net/DnsPacket.java index 0ac02b1b7b37..83e57e0a047b 100644 --- a/core/java/android/net/DnsPacket.java +++ b/core/java/android/net/DnsPacket.java @@ -71,7 +71,7 @@ public abstract class DnsPacket { } /** - * It's used both for DNS questions and DNS resource records. + * Superclass for DNS questions and DNS resource records. * * DNS questions (No TTL/RDATA) * DNS resource records (With TTL/RDATA) @@ -96,12 +96,13 @@ public abstract class DnsPacket { /** * Create a new DnsRecord from a positioned ByteBuffer. * - * @param ByteBuffer input of record, must be in network byte order - * (which is the default). * Reads the passed ByteBuffer from its current position and decodes a DNS record. * When this constructor returns, the reading position of the ByteBuffer has been * advanced to the end of the DNS header record. * This is meant to chain with other methods reading a DNS response in sequence. + * + * @param ByteBuffer input of record, must be in network byte order + * (which is the default). */ DnsRecord(int recordType, @NonNull ByteBuffer buf) throws BufferUnderflowException, ParseException { @@ -205,16 +206,6 @@ public abstract class DnsPacket { protected final DnsHeader mHeader; protected final List<DnsRecord>[] mRecords; - public static class ParseException extends Exception { - public ParseException(String msg) { - super(msg); - } - - public ParseException(String msg, Throwable cause) { - super(msg, cause); - } - } - protected DnsPacket(@NonNull byte[] data) throws ParseException { if (null == data) throw new ParseException("Parse header failed, null input data"); final ByteBuffer buffer; diff --git a/core/java/android/net/DnsResolver.java b/core/java/android/net/DnsResolver.java index d3bc3e66fbee..93b8cf801d45 100644 --- a/core/java/android/net/DnsResolver.java +++ b/core/java/android/net/DnsResolver.java @@ -22,11 +22,11 @@ import static android.net.NetworkUtils.resNetworkSend; import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_ERROR; import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_INPUT; +import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; -import android.os.Handler; -import android.os.MessageQueue; +import android.os.Looper; import android.system.ErrnoException; import android.util.Log; @@ -37,8 +37,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; -import java.util.function.Consumer; - +import java.util.concurrent.Executor; /** * Dns resolver class for asynchronous dns querying @@ -81,66 +80,137 @@ public final class DnsResolver { public static final int FLAG_NO_CACHE_STORE = 1 << 1; public static final int FLAG_NO_CACHE_LOOKUP = 1 << 2; - private static final int DNS_RAW_RESPONSE = 1; - private static final int NETID_UNSET = 0; private static final DnsResolver sInstance = new DnsResolver(); /** - * listener for receiving raw answers + * Get instance for DnsResolver + */ + public static @NonNull DnsResolver getInstance() { + return sInstance; + } + + private DnsResolver() {} + + /** + * Answer parser for parsing raw answers + * + * @param <T> The type of the parsed answer */ - public interface RawAnswerListener { + public interface AnswerParser<T> { /** - * {@code byte[]} is {@code null} if query timed out + * Creates a <T> answer by parsing the given raw answer. + * + * @param rawAnswer the raw answer to be parsed + * @return a parsed <T> answer + * @throws ParseException if parsing failed */ - void onAnswer(@Nullable byte[] answer); + @NonNull T parse(@NonNull byte[] rawAnswer) throws ParseException; } /** - * listener for receiving parsed answers + * Base class for answer callbacks + * + * @param <T> The type of the parsed answer */ - public interface InetAddressAnswerListener { + public abstract static class AnswerCallback<T> { + /** @hide */ + public final AnswerParser<T> parser; + + public AnswerCallback(@NonNull AnswerParser<T> parser) { + this.parser = parser; + }; + /** - * Will be called exactly once with all the answers to the query. - * size of addresses will be zero if no available answer could be parsed. + * Success response to + * {@link android.net.DnsResolver#query query()}. + * + * Invoked when the answer to a query was successfully parsed. + * + * @param answer parsed answer to the query. + * + * {@see android.net.DnsResolver#query query()} */ - void onAnswer(@NonNull List<InetAddress> addresses); + public abstract void onAnswer(@NonNull T answer); + + /** + * Error response to + * {@link android.net.DnsResolver#query query()}. + * + * Invoked when there is no valid answer to + * {@link android.net.DnsResolver#query query()} + * + * @param exception a {@link ParseException} object with additional + * detail regarding the failure + */ + public abstract void onParseException(@NonNull ParseException exception); + + /** + * Error response to + * {@link android.net.DnsResolver#query query()}. + * + * Invoked if an error happens when + * issuing the DNS query or receiving the result. + * {@link android.net.DnsResolver#query query()} + * + * @param exception an {@link ErrnoException} object with additional detail + * regarding the failure + */ + public abstract void onQueryException(@NonNull ErrnoException exception); } /** - * Get instance for DnsResolver + * Callback for receiving raw answers */ - public static DnsResolver getInstance() { - return sInstance; + public abstract static class RawAnswerCallback extends AnswerCallback<byte[]> { + public RawAnswerCallback() { + super(rawAnswer -> rawAnswer); + } } - private DnsResolver() {} + /** + * Callback for receiving parsed {@link InetAddress} answers + * + * Note that if the answer does not contain any IP addresses, + * onAnswer will be called with an empty list. + */ + public abstract static class InetAddressAnswerCallback + extends AnswerCallback<List<InetAddress>> { + public InetAddressAnswerCallback() { + super(rawAnswer -> new DnsAddressAnswer(rawAnswer).getAddresses()); + } + } /** - * Pass in a blob and corresponding setting, - * get a blob back asynchronously with the entire raw answer. + * Send a raw DNS query. + * The answer will be provided asynchronously through the provided {@link AnswerCallback}. * * @param network {@link Network} specifying which network for querying. * {@code null} for query on default network. * @param query blob message * @param flags flags as a combination of the FLAGS_* constants - * @param handler {@link Handler} to specify the thread - * upon which the {@link RawAnswerListener} will be invoked. - * @param listener a {@link RawAnswerListener} which will be called to notify the caller + * @param executor The {@link Executor} that the callback should be executed on. + * @param callback an {@link AnswerCallback} which will be called to notify the caller * of the result of dns query. */ - public void query(@Nullable Network network, @NonNull byte[] query, @QueryFlag int flags, - @NonNull Handler handler, @NonNull RawAnswerListener listener) throws ErrnoException { - final FileDescriptor queryfd = resNetworkSend((network != null + public <T> void query(@Nullable Network network, @NonNull byte[] query, @QueryFlag int flags, + @NonNull @CallbackExecutor Executor executor, @NonNull AnswerCallback<T> callback) { + final FileDescriptor queryfd; + try { + queryfd = resNetworkSend((network != null ? network.netId : NETID_UNSET), query, query.length, flags); - registerFDListener(handler.getLooper().getQueue(), queryfd, - answerbuf -> listener.onAnswer(answerbuf)); + } catch (ErrnoException e) { + callback.onQueryException(e); + return; + } + + registerFDListener(executor, queryfd, callback); } /** - * Pass in a domain name and corresponding setting, - * get a blob back asynchronously with the entire raw answer. + * Send a DNS query with the specified name, class and query type. + * The answer will be provided asynchronously through the provided {@link AnswerCallback}. * * @param network {@link Network} specifying which network for querying. * {@code null} for query on default network. @@ -148,74 +218,53 @@ public final class DnsResolver { * @param nsClass dns class as one of the CLASS_* constants * @param nsType dns resource record (RR) type as one of the TYPE_* constants * @param flags flags as a combination of the FLAGS_* constants - * @param handler {@link Handler} to specify the thread - * upon which the {@link RawAnswerListener} will be invoked. - * @param listener a {@link RawAnswerListener} which will be called to notify the caller + * @param executor The {@link Executor} that the callback should be executed on. + * @param callback an {@link AnswerCallback} which will be called to notify the caller * of the result of dns query. */ - public void query(@Nullable Network network, @NonNull String domain, @QueryClass int nsClass, - @QueryType int nsType, @QueryFlag int flags, - @NonNull Handler handler, @NonNull RawAnswerListener listener) throws ErrnoException { - final FileDescriptor queryfd = resNetworkQuery((network != null - ? network.netId : NETID_UNSET), domain, nsClass, nsType, flags); - registerFDListener(handler.getLooper().getQueue(), queryfd, - answerbuf -> listener.onAnswer(answerbuf)); - } - - /** - * Pass in a domain name and corresponding setting, - * get back a set of InetAddresses asynchronously. - * - * @param network {@link Network} specifying which network for querying. - * {@code null} for query on default network. - * @param domain domain name for querying - * @param flags flags as a combination of the FLAGS_* constants - * @param handler {@link Handler} to specify the thread - * upon which the {@link InetAddressAnswerListener} will be invoked. - * @param listener an {@link InetAddressAnswerListener} which will be called to - * notify the caller of the result of dns query. - * - */ - public void query(@Nullable Network network, @NonNull String domain, @QueryFlag int flags, - @NonNull Handler handler, @NonNull InetAddressAnswerListener listener) - throws ErrnoException { - final FileDescriptor v4fd = resNetworkQuery((network != null - ? network.netId : NETID_UNSET), domain, CLASS_IN, TYPE_A, flags); - final FileDescriptor v6fd = resNetworkQuery((network != null - ? network.netId : NETID_UNSET), domain, CLASS_IN, TYPE_AAAA, flags); - - final InetAddressAnswerAccumulator accmulator = - new InetAddressAnswerAccumulator(2, listener); - final Consumer<byte[]> consumer = answerbuf -> - accmulator.accumulate(parseAnswers(answerbuf)); - - registerFDListener(handler.getLooper().getQueue(), v4fd, consumer); - registerFDListener(handler.getLooper().getQueue(), v6fd, consumer); + public <T> void query(@Nullable Network network, @NonNull String domain, + @QueryClass int nsClass, @QueryType int nsType, @QueryFlag int flags, + @NonNull @CallbackExecutor Executor executor, @NonNull AnswerCallback<T> callback) { + final FileDescriptor queryfd; + try { + queryfd = resNetworkQuery((network != null + ? network.netId : NETID_UNSET), domain, nsClass, nsType, flags); + } catch (ErrnoException e) { + callback.onQueryException(e); + return; + } + registerFDListener(executor, queryfd, callback); } - private void registerFDListener(@NonNull MessageQueue queue, - @NonNull FileDescriptor queryfd, @NonNull Consumer<byte[]> answerConsumer) { - queue.addOnFileDescriptorEventListener( + private <T> void registerFDListener(@NonNull Executor executor, + @NonNull FileDescriptor queryfd, @NonNull AnswerCallback<T> answerCallback) { + Looper.getMainLooper().getQueue().addOnFileDescriptorEventListener( queryfd, FD_EVENTS, (fd, events) -> { - byte[] answerbuf = null; - try { - // TODO: Implement result function in Java side instead of using JNI - // Because JNI method close fd prior than unregistering fd on - // event listener. - answerbuf = resNetworkResult(fd); - } catch (ErrnoException e) { - Log.e(TAG, "resNetworkResult:" + e.toString()); - } - answerConsumer.accept(answerbuf); + executor.execute(() -> { + byte[] answerbuf = null; + try { + answerbuf = resNetworkResult(fd); + } catch (ErrnoException e) { + Log.e(TAG, "resNetworkResult:" + e.toString()); + answerCallback.onQueryException(e); + return; + } + try { + answerCallback.onAnswer( + answerCallback.parser.parse(answerbuf)); + } catch (ParseException e) { + answerCallback.onParseException(e); + } + }); // Unregister this fd listener return 0; }); } - private class DnsAddressAnswer extends DnsPacket { + private static class DnsAddressAnswer extends DnsPacket { private static final String TAG = "DnsResolver.DnsAddressAnswer"; private static final boolean DBG = false; @@ -226,12 +275,6 @@ public final class DnsResolver { if ((mHeader.flags & (1 << 15)) == 0) { throw new ParseException("Not an answer packet"); } - if (mHeader.rcode != 0) { - throw new ParseException("Response error, rcode:" + mHeader.rcode); - } - if (mHeader.getRecordCount(ANSECTION) == 0) { - throw new ParseException("No available answer"); - } if (mHeader.getRecordCount(QDSECTION) == 0) { throw new ParseException("No question found"); } @@ -241,6 +284,8 @@ public final class DnsResolver { public @NonNull List<InetAddress> getAddresses() { final List<InetAddress> results = new ArrayList<InetAddress>(); + if (mHeader.getRecordCount(ANSECTION) == 0) return results; + for (final DnsRecord ansSec : mRecords[ANSECTION]) { // Only support A and AAAA, also ignore answers if query type != answer type. int nsType = ansSec.nsType; @@ -259,34 +304,4 @@ public final class DnsResolver { } } - private @Nullable List<InetAddress> parseAnswers(@Nullable byte[] data) { - try { - return (data == null) ? null : new DnsAddressAnswer(data).getAddresses(); - } catch (DnsPacket.ParseException e) { - Log.e(TAG, "Parse answer fail " + e.getMessage()); - return null; - } - } - - private class InetAddressAnswerAccumulator { - private final List<InetAddress> mAllAnswers; - private final InetAddressAnswerListener mAnswerListener; - private final int mTargetAnswerCount; - private int mReceivedAnswerCount = 0; - - InetAddressAnswerAccumulator(int size, @NonNull InetAddressAnswerListener listener) { - mTargetAnswerCount = size; - mAllAnswers = new ArrayList<>(); - mAnswerListener = listener; - } - - public void accumulate(@Nullable List<InetAddress> answer) { - if (null != answer) { - mAllAnswers.addAll(answer); - } - if (++mReceivedAnswerCount == mTargetAnswerCount) { - mAnswerListener.onAnswer(mAllAnswers); - } - } - } } diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 403b44d6d7d7..24e6a855ffe8 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -27,6 +27,7 @@ import android.net.NetworkMisc; import android.net.NetworkQuotaInfo; import android.net.NetworkRequest; import android.net.NetworkState; +import android.net.ISocketKeepaliveCallback; import android.net.ProxyInfo; import android.os.Bundle; import android.os.IBinder; @@ -194,15 +195,15 @@ interface IConnectivityManager void factoryReset(); - void startNattKeepalive(in Network network, int intervalSeconds, in Messenger messenger, - in IBinder binder, String srcAddr, int srcPort, String dstAddr); + void startNattKeepalive(in Network network, int intervalSeconds, + in ISocketKeepaliveCallback cb, String srcAddr, int srcPort, String dstAddr); void startNattKeepaliveWithFd(in Network network, in FileDescriptor fd, int resourceId, - int intervalSeconds, in Messenger messenger, in IBinder binder, String srcAddr, + int intervalSeconds, in ISocketKeepaliveCallback cb, String srcAddr, String dstAddr); void startTcpKeepalive(in Network network, in FileDescriptor fd, int intervalSeconds, - in Messenger messenger, in IBinder binder); + in ISocketKeepaliveCallback cb); void stopKeepalive(in Network network, int slot); @@ -219,4 +220,6 @@ interface IConnectivityManager void registerTetheringEventCallback(ITetheringEventCallback callback, String callerPkg); void unregisterTetheringEventCallback(ITetheringEventCallback callback, String callerPkg); + + IBinder startOrGetTestNetworkService(); } diff --git a/core/java/android/net/ProxyInfoParcelable.aidl b/core/java/android/net/IIpMemoryStoreCallbacks.aidl index 59fd8467b820..53108dbca097 100644 --- a/core/java/android/net/ProxyInfoParcelable.aidl +++ b/core/java/android/net/IIpMemoryStoreCallbacks.aidl @@ -5,20 +5,20 @@ * 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 + * 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 ProxyInfoParcelable { - String host; - int port; - String[] exclusionList; - String pacFileUrl; +import android.net.IIpMemoryStore; + +/** {@hide} */ +oneway interface IIpMemoryStoreCallbacks { + void onIpMemoryStoreFetched(in IIpMemoryStore ipMemoryStore); } diff --git a/core/java/android/net/INetworkStackConnector.aidl b/core/java/android/net/INetworkStackConnector.aidl index e052488f38c8..3751c36d6ee9 100644 --- a/core/java/android/net/INetworkStackConnector.aidl +++ b/core/java/android/net/INetworkStackConnector.aidl @@ -15,8 +15,9 @@ */ package android.net; +import android.net.IIpMemoryStoreCallbacks; import android.net.INetworkMonitorCallbacks; -import android.net.NetworkParcelable; +import android.net.Network; import android.net.dhcp.DhcpServingParamsParcel; import android.net.dhcp.IDhcpServerCallbacks; import android.net.ip.IIpClientCallbacks; @@ -25,7 +26,7 @@ import android.net.ip.IIpClientCallbacks; oneway interface INetworkStackConnector { void makeDhcpServer(in String ifName, in DhcpServingParamsParcel params, in IDhcpServerCallbacks cb); - void makeNetworkMonitor(in NetworkParcelable network, String name, - in INetworkMonitorCallbacks cb); + void makeNetworkMonitor(in Network network, String name, in INetworkMonitorCallbacks cb); void makeIpClient(in String ifName, in IIpClientCallbacks callbacks); -}
\ No newline at end of file + void fetchIpMemoryStore(in IIpMemoryStoreCallbacks cb); +} diff --git a/core/java/android/net/RouteInfoParcelable.aidl b/core/java/android/net/ISocketKeepaliveCallback.aidl index 15bcdcfc2000..020fbcacbfef 100644 --- a/core/java/android/net/RouteInfoParcelable.aidl +++ b/core/java/android/net/ISocketKeepaliveCallback.aidl @@ -1,5 +1,5 @@ -/* - * Copyright (C) 2019 The Android Open Source Project +/** + * 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. @@ -12,15 +12,23 @@ * 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; -import android.net.IpPrefixParcelable; - -parcelable RouteInfoParcelable { - IpPrefixParcelable destination; - String gatewayAddr; - String ifaceName; - int type; +/** + * Callback to provide status changes of keepalive offload. + * + * @hide + */ +oneway interface ISocketKeepaliveCallback +{ + /** The keepalive was successfully started. */ + void onStarted(int slot); + /** The keepalive was successfully stopped. */ + void onStopped(); + /** The keepalive was stopped because of an error. */ + void onError(int error); + /** The keepalive on a TCP socket was stopped because the socket received data. */ + void onDataReceived(); } diff --git a/core/java/android/net/InitialConfigurationParcelable.aidl b/core/java/android/net/InitialConfigurationParcelable.aidl index bdda355955a5..3fa88c377a64 100644 --- a/core/java/android/net/InitialConfigurationParcelable.aidl +++ b/core/java/android/net/InitialConfigurationParcelable.aidl @@ -16,12 +16,12 @@ package android.net; -import android.net.IpPrefixParcelable; -import android.net.LinkAddressParcelable; +import android.net.IpPrefix; +import android.net.LinkAddress; parcelable InitialConfigurationParcelable { - LinkAddressParcelable[] ipAddresses; - IpPrefixParcelable[] directlyConnectedRoutes; + LinkAddress[] ipAddresses; + IpPrefix[] directlyConnectedRoutes; String[] dnsServers; String gateway; }
\ No newline at end of file diff --git a/core/java/android/net/IpPrefix.aidl b/core/java/android/net/IpPrefix.aidl index 837db5f1ef37..0d70f2a1ed2c 100644 --- a/core/java/android/net/IpPrefix.aidl +++ b/core/java/android/net/IpPrefix.aidl @@ -17,4 +17,6 @@ package android.net; -parcelable IpPrefix cpp_header "binder/IpPrefix.h"; +// @JavaOnlyStableParcelable only affects the parcelable when built as stable aidl (aidl_interface +// build rule). IpPrefix is also used in cpp but only as non-stable aidl. +@JavaOnlyStableParcelable parcelable IpPrefix cpp_header "binder/IpPrefix.h"; diff --git a/core/java/android/net/IpPrefixParcelable.aidl b/core/java/android/net/IpPrefixParcelable.aidl deleted file mode 100644 index 93a8d41936cc..000000000000 --- a/core/java/android/net/IpPrefixParcelable.aidl +++ /dev/null @@ -1,22 +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 IpPrefixParcelable { - String address; - int prefixLength; -}
\ No newline at end of file diff --git a/core/java/android/net/LinkAddress.aidl b/core/java/android/net/LinkAddress.aidl index e7d8646078da..9c804db08d61 100644 --- a/core/java/android/net/LinkAddress.aidl +++ b/core/java/android/net/LinkAddress.aidl @@ -17,5 +17,5 @@ package android.net; -parcelable LinkAddress; +@JavaOnlyStableParcelable parcelable LinkAddress; diff --git a/core/java/android/net/LinkAddressParcelable.aidl b/core/java/android/net/LinkAddressParcelable.aidl deleted file mode 100644 index af8e79b21f69..000000000000 --- a/core/java/android/net/LinkAddressParcelable.aidl +++ /dev/null @@ -1,24 +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 LinkAddressParcelable { - String address; - int prefixLength; - int flags; - int scope; -}
\ No newline at end of file diff --git a/core/java/android/net/LinkProperties.aidl b/core/java/android/net/LinkProperties.aidl index 3cb9525761ed..a8b3c7b0392f 100644 --- a/core/java/android/net/LinkProperties.aidl +++ b/core/java/android/net/LinkProperties.aidl @@ -17,4 +17,4 @@ package android.net; -parcelable LinkProperties; +@JavaOnlyStableParcelable parcelable LinkProperties; diff --git a/core/java/android/net/LinkPropertiesParcelable.aidl b/core/java/android/net/LinkPropertiesParcelable.aidl deleted file mode 100644 index 6b52239b4168..000000000000 --- a/core/java/android/net/LinkPropertiesParcelable.aidl +++ /dev/null @@ -1,38 +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; - -import android.net.IpPrefixParcelable; -import android.net.LinkAddressParcelable; -import android.net.ProxyInfoParcelable; -import android.net.RouteInfoParcelable; - -parcelable LinkPropertiesParcelable { - String ifaceName; - LinkAddressParcelable[] linkAddresses; - String[] dnses; - String[] pcscfs; - String[] validatedPrivateDnses; - boolean usePrivateDns; - String privateDnsServerName; - String domains; - RouteInfoParcelable[] routes; - ProxyInfoParcelable httpProxy; - int mtu; - String tcpBufferSizes; - IpPrefixParcelable nat64Prefix; -}
\ No newline at end of file diff --git a/core/java/android/net/NattSocketKeepalive.java b/core/java/android/net/NattSocketKeepalive.java index 88631aea3a88..84da294f8940 100644 --- a/core/java/android/net/NattSocketKeepalive.java +++ b/core/java/android/net/NattSocketKeepalive.java @@ -17,7 +17,6 @@ package android.net; import android.annotation.NonNull; -import android.os.Binder; import android.os.RemoteException; import android.util.Log; @@ -52,24 +51,30 @@ public final class NattSocketKeepalive extends SocketKeepalive { @Override void startImpl(int intervalSec) { - try { - mService.startNattKeepaliveWithFd(mNetwork, mFd, mResourceId, intervalSec, mMessenger, - new Binder(), mSource.getHostAddress(), mDestination.getHostAddress()); - } catch (RemoteException e) { - Log.e(TAG, "Error starting packet keepalive: ", e); - stopLooper(); - } + mExecutor.execute(() -> { + try { + mService.startNattKeepaliveWithFd(mNetwork, mFd, mResourceId, intervalSec, + mCallback, + mSource.getHostAddress(), mDestination.getHostAddress()); + } catch (RemoteException e) { + Log.e(TAG, "Error starting socket keepalive: ", e); + throw e.rethrowFromSystemServer(); + } + }); } @Override void stopImpl() { - try { - if (mSlot != null) { - mService.stopKeepalive(mNetwork, mSlot); + mExecutor.execute(() -> { + try { + if (mSlot != null) { + mService.stopKeepalive(mNetwork, mSlot); + } + } catch (RemoteException e) { + Log.e(TAG, "Error stopping socket keepalive: ", e); + throw e.rethrowFromSystemServer(); } - } catch (RemoteException e) { - Log.e(TAG, "Error stopping packet keepalive: ", e); - stopLooper(); - } + }); + } } diff --git a/core/java/android/net/Network.aidl b/core/java/android/net/Network.aidl index 73ba1af3f3d0..05622025bf33 100644 --- a/core/java/android/net/Network.aidl +++ b/core/java/android/net/Network.aidl @@ -17,4 +17,4 @@ package android.net; -parcelable Network; +@JavaOnlyStableParcelable parcelable Network; diff --git a/core/java/android/net/NetworkParcelable.aidl b/core/java/android/net/NetworkParcelable.aidl deleted file mode 100644 index c26352efb078..000000000000 --- a/core/java/android/net/NetworkParcelable.aidl +++ /dev/null @@ -1,22 +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 NetworkParcelable { - long networkHandle; -} diff --git a/core/java/android/net/NetworkTemplate.java b/core/java/android/net/NetworkTemplate.java index bb75c6343659..60ae352d5c95 100644 --- a/core/java/android/net/NetworkTemplate.java +++ b/core/java/android/net/NetworkTemplate.java @@ -40,6 +40,7 @@ import android.os.Parcelable; import android.util.BackupUtils; import android.util.Log; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import java.io.ByteArrayOutputStream; @@ -89,10 +90,22 @@ public class NetworkTemplate implements Parcelable { private static boolean sForceAllNetworkTypes = false; + /** + * Results in matching against all mobile network types. + * + * <p>See {@link #matchesMobile} and {@link matchesMobileWildcard}. + */ + @VisibleForTesting public static void forceAllNetworkTypes() { sForceAllNetworkTypes = true; } + /** Resets the affect of {@link #forceAllNetworkTypes}. */ + @VisibleForTesting + public static void resetForceAllNetworkTypes() { + sForceAllNetworkTypes = false; + } + /** * Template to match {@link ConnectivityManager#TYPE_MOBILE} networks with * the given IMSI. diff --git a/core/java/android/net/ParseException.java b/core/java/android/net/ParseException.java index 2380e863d043..9d4727a84bc0 100644 --- a/core/java/android/net/ParseException.java +++ b/core/java/android/net/ParseException.java @@ -16,15 +16,22 @@ package android.net; +import android.annotation.NonNull; + /** - * Thrown when parsing a URL fails. + * Thrown when parsing failed. */ // See non-public class {@link WebAddress}. public class ParseException extends RuntimeException { public String response; - ParseException(String response) { + public ParseException(@NonNull String response) { super(response); this.response = response; } + + public ParseException(@NonNull String response, @NonNull Throwable cause) { + super(response, cause); + this.response = response; + } } diff --git a/core/java/android/net/ProvisioningConfigurationParcelable.aidl b/core/java/android/net/ProvisioningConfigurationParcelable.aidl index 2a144f2aae3b..5b46d7f55ee3 100644 --- a/core/java/android/net/ProvisioningConfigurationParcelable.aidl +++ b/core/java/android/net/ProvisioningConfigurationParcelable.aidl @@ -19,7 +19,7 @@ package android.net; import android.net.ApfCapabilitiesParcelable; import android.net.InitialConfigurationParcelable; -import android.net.NetworkParcelable; +import android.net.Network; import android.net.StaticIpConfigurationParcelable; parcelable ProvisioningConfigurationParcelable { @@ -33,6 +33,6 @@ parcelable ProvisioningConfigurationParcelable { ApfCapabilitiesParcelable apfCapabilities; int provisioningTimeoutMs; int ipv6AddrGenMode; - NetworkParcelable network; + Network network; String displayName; } diff --git a/core/java/android/net/ProxyInfo.aidl b/core/java/android/net/ProxyInfo.aidl index 2c91960e4dcb..a5d0c120e747 100644 --- a/core/java/android/net/ProxyInfo.aidl +++ b/core/java/android/net/ProxyInfo.aidl @@ -17,5 +17,5 @@ package android.net; -parcelable ProxyInfo; +@JavaOnlyStableParcelable parcelable ProxyInfo; diff --git a/core/java/android/net/RouteInfo.aidl b/core/java/android/net/RouteInfo.aidl index 2296a576873d..7af9fdaef342 100644 --- a/core/java/android/net/RouteInfo.aidl +++ b/core/java/android/net/RouteInfo.aidl @@ -16,4 +16,4 @@ package android.net; -parcelable RouteInfo; +@JavaOnlyStableParcelable parcelable RouteInfo; diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java index 45860b3858ce..95d66bb87064 100644 --- a/core/java/android/net/SSLCertificateSocketFactory.java +++ b/core/java/android/net/SSLCertificateSocketFactory.java @@ -62,7 +62,7 @@ import javax.net.ssl.X509TrustManager; * * The handshake timeout does not apply to actual TCP socket connection. * If you want a connection timeout as well, use {@link #createSocket()} - * and {@link Socket#connect(SocketAddress, int)}, after which you + * and {@link Socket#connect(java.net.SocketAddress, int)}, after which you * must verify the identity of the server you are connected to. * * <p class="caution"><b>Most {@link SSLSocketFactory} implementations do not @@ -211,14 +211,14 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { } /** - * Verify the hostname of the certificate used by the other end of a - * connected socket. You MUST call this if you did not supply a hostname - * to {@link #createSocket()}. It is harmless to call this method - * redundantly if the hostname has already been verified. + * Verify the hostname of the certificate used by the other end of a connected socket using the + * {@link HostnameVerifier} obtained from {@code + * HttpsURLConnection.getDefaultHostnameVerifier()}. You MUST call this if you did not supply a + * hostname to {@link #createSocket()}. It is harmless to call this method redundantly if the + * hostname has already been verified. * - * <p>Wildcard certificates are allowed to verify any matching hostname, - * so "foo.bar.example.com" is verified if the peer has a certificate - * for "*.example.com". + * <p>Wildcard certificates are allowed to verify any matching hostname, so + * "foo.bar.example.com" is verified if the peer has a certificate for "*.example.com". * * @param socket An SSL socket which has been connected to a server * @param hostname The expected hostname of the remote server @@ -483,7 +483,8 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { * {@inheritDoc} * * <p>By default, this method returns a <i>connected</i> socket and verifies the peer's - * certificate hostname after connecting; if this instance was created with + * certificate hostname after connecting using the {@link HostnameVerifier} obtained from + * {@code HttpsURLConnection.getDefaultHostnameVerifier()}; if this instance was created with * {@link #getInsecure(int, SSLSessionCache)}, it returns a socket that is <i>not connected</i> * instead. */ @@ -562,7 +563,8 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { * {@inheritDoc} * * <p>By default, this method returns a <i>connected</i> socket and verifies the peer's - * certificate hostname after connecting; if this instance was created with + * certificate hostname after connecting using the {@link HostnameVerifier} obtained from + * {@code HttpsURLConnection.getDefaultHostnameVerifier()}; if this instance was created with * {@link #getInsecure(int, SSLSessionCache)}, it returns a socket that is <i>not connected</i> * instead. */ @@ -585,7 +587,8 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory { * {@inheritDoc} * * <p>By default, this method returns a <i>connected</i> socket and verifies the peer's - * certificate hostname after connecting; if this instance was created with + * certificate hostname after connecting using the {@link HostnameVerifier} obtained from + * {@code HttpsURLConnection.getDefaultHostnameVerifier()}; if this instance was created with * {@link #getInsecure(int, SSLSessionCache)}, it returns a socket that is <i>not connected</i> * instead. */ diff --git a/core/java/android/net/SocketKeepalive.java b/core/java/android/net/SocketKeepalive.java index 07728beb9c64..0e768dfc8eb9 100644 --- a/core/java/android/net/SocketKeepalive.java +++ b/core/java/android/net/SocketKeepalive.java @@ -20,13 +20,8 @@ import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; -import android.os.Handler; -import android.os.HandlerThread; -import android.os.Looper; -import android.os.Message; -import android.os.Messenger; -import android.os.Process; -import android.util.Log; +import android.os.Binder; +import android.os.RemoteException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -152,10 +147,9 @@ public abstract class SocketKeepalive implements AutoCloseable { @NonNull final IConnectivityManager mService; @NonNull final Network mNetwork; - @NonNull private final Executor mExecutor; - @NonNull private final SocketKeepalive.Callback mCallback; - @NonNull private final Looper mLooper; - @NonNull final Messenger mMessenger; + @NonNull final Executor mExecutor; + @NonNull final ISocketKeepaliveCallback mCallback; + // TODO: remove slot since mCallback could be used to identify which keepalive to stop. @Nullable Integer mSlot; SocketKeepalive(@NonNull IConnectivityManager service, @NonNull Network network, @@ -163,53 +157,53 @@ public abstract class SocketKeepalive implements AutoCloseable { mService = service; mNetwork = network; mExecutor = executor; - mCallback = callback; - // TODO: 1. Use other thread modeling instead of create one thread for every instance to - // reduce the memory cost. - // 2. support restart. - // 3. Fix race condition which caused by rapidly start and stop. - HandlerThread thread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND - + Process.THREAD_PRIORITY_LESS_FAVORABLE); - thread.start(); - mLooper = thread.getLooper(); - mMessenger = new Messenger(new Handler(mLooper) { + mCallback = new ISocketKeepaliveCallback.Stub() { @Override - public void handleMessage(Message message) { - switch (message.what) { - case NetworkAgent.EVENT_SOCKET_KEEPALIVE: - final int status = message.arg2; - try { - if (status == SUCCESS) { - if (mSlot == null) { - mSlot = message.arg1; - mExecutor.execute(() -> mCallback.onStarted()); - } else { - mSlot = null; - stopLooper(); - mExecutor.execute(() -> mCallback.onStopped()); - } - } else if (status == DATA_RECEIVED) { - stopLooper(); - mExecutor.execute(() -> mCallback.onDataReceived()); - } else { - stopLooper(); - mExecutor.execute(() -> mCallback.onError(status)); - } - } catch (Exception e) { - Log.e(TAG, "Exception in keepalive callback(" + status + ")", e); - } - break; - default: - Log.e(TAG, "Unhandled message " + Integer.toHexString(message.what)); - break; - } + public void onStarted(int slot) { + Binder.withCleanCallingIdentity(() -> + mExecutor.execute(() -> { + mSlot = slot; + callback.onStarted(); + })); } - }); + + @Override + public void onStopped() { + Binder.withCleanCallingIdentity(() -> + executor.execute(() -> { + mSlot = null; + callback.onStopped(); + })); + } + + @Override + public void onError(int error) { + Binder.withCleanCallingIdentity(() -> + executor.execute(() -> { + mSlot = null; + callback.onError(error); + })); + } + + @Override + public void onDataReceived() { + Binder.withCleanCallingIdentity(() -> + executor.execute(() -> { + mSlot = null; + callback.onDataReceived(); + })); + } + }; } /** * Request that keepalive be started with the given {@code intervalSec}. See - * {@link SocketKeepalive}. + * {@link SocketKeepalive}. If the remote binder dies, or the binder call throws an exception + * when invoking start or stop of the {@link SocketKeepalive}, a {@link RemoteException} will be + * thrown into the {@code executor}. This is typically not important to catch because the remote + * party is the system, so if it is not in shape to communicate through binder the system is + * probably going down anyway. If the caller cares regardless, it can use a custom + * {@link Executor} to catch the {@link RemoteException}. * * @param intervalSec The target interval in seconds between keepalive packet transmissions. * The interval should be between 10 seconds and 3600 seconds, otherwise @@ -222,12 +216,6 @@ public abstract class SocketKeepalive implements AutoCloseable { abstract void startImpl(int intervalSec); - /** @hide */ - protected void stopLooper() { - // TODO: remove this after changing thread modeling. - mLooper.quit(); - } - /** * Requests that keepalive be stopped. The application must wait for {@link Callback#onStopped} * before using the object. See {@link SocketKeepalive}. @@ -245,7 +233,6 @@ public abstract class SocketKeepalive implements AutoCloseable { @Override public final void close() { stop(); - stopLooper(); } /** @@ -259,7 +246,8 @@ public abstract class SocketKeepalive implements AutoCloseable { public void onStopped() {} /** An error occurred. */ public void onError(@ErrorCode int error) {} - /** The keepalive on a TCP socket was stopped because the socket received data. */ + /** The keepalive on a TCP socket was stopped because the socket received data. This is + * never called for UDP sockets. */ public void onDataReceived() {} } } diff --git a/core/java/android/net/StaticIpConfigurationParcelable.aidl b/core/java/android/net/StaticIpConfigurationParcelable.aidl index 45dc0210dfba..6fffb423edb5 100644 --- a/core/java/android/net/StaticIpConfigurationParcelable.aidl +++ b/core/java/android/net/StaticIpConfigurationParcelable.aidl @@ -17,10 +17,10 @@ package android.net; -import android.net.LinkAddressParcelable; +import android.net.LinkAddress; parcelable StaticIpConfigurationParcelable { - LinkAddressParcelable ipAddress; + LinkAddress ipAddress; String gateway; String[] dnsServers; String domains; diff --git a/core/java/android/net/TcpSocketKeepalive.java b/core/java/android/net/TcpSocketKeepalive.java index f691a0d24344..26cc8ff181b2 100644 --- a/core/java/android/net/TcpSocketKeepalive.java +++ b/core/java/android/net/TcpSocketKeepalive.java @@ -17,7 +17,6 @@ package android.net; import android.annotation.NonNull; -import android.os.Binder; import android.os.RemoteException; import android.util.Log; @@ -56,24 +55,28 @@ final class TcpSocketKeepalive extends SocketKeepalive { */ @Override void startImpl(int intervalSec) { - try { - final FileDescriptor fd = mSocket.getFileDescriptor$(); - mService.startTcpKeepalive(mNetwork, fd, intervalSec, mMessenger, new Binder()); - } catch (RemoteException e) { - Log.e(TAG, "Error starting packet keepalive: ", e); - stopLooper(); - } + mExecutor.execute(() -> { + try { + final FileDescriptor fd = mSocket.getFileDescriptor$(); + mService.startTcpKeepalive(mNetwork, fd, intervalSec, mCallback); + } catch (RemoteException e) { + Log.e(TAG, "Error starting packet keepalive: ", e); + throw e.rethrowFromSystemServer(); + } + }); } @Override void stopImpl() { - try { - if (mSlot != null) { - mService.stopKeepalive(mNetwork, mSlot); + mExecutor.execute(() -> { + try { + if (mSlot != null) { + mService.stopKeepalive(mNetwork, mSlot); + } + } catch (RemoteException e) { + Log.e(TAG, "Error stopping packet keepalive: ", e); + throw e.rethrowFromSystemServer(); } - } catch (RemoteException e) { - Log.e(TAG, "Error stopping packet keepalive: ", e); - stopLooper(); - } + }); } } diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java index 870d8b1b7c22..ea245a4879c3 100644 --- a/core/java/android/net/VpnService.java +++ b/core/java/android/net/VpnService.java @@ -27,6 +27,8 @@ import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.app.PendingIntent; import android.app.Service; +import android.app.admin.DevicePolicyManager; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.IPackageManager; @@ -48,6 +50,7 @@ import java.net.InetAddress; import java.net.Socket; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * VpnService is a base class for applications to extend and build their @@ -138,7 +141,7 @@ public class VpnService extends Service { * provides users with the ability to set it as always-on, so that VPN connection is * persisted after device reboot and app upgrade. Always-on VPN can also be enabled by device * owner and profile owner apps through - * {@link android.app.admin.DevicePolicyManager#setAlwaysOnVpnPackage}. + * {@link DevicePolicyManager#setAlwaysOnVpnPackage}. * * <p>VPN apps not supporting this feature should opt out by adding this meta-data field to the * {@code VpnService} component of {@code AndroidManifest.xml}. In case there is more than one @@ -370,7 +373,10 @@ public class VpnService extends Service { } /** - * Returns whether the service is running in always-on VPN mode. + * Returns whether the service is running in always-on VPN mode. In this mode the system ensures + * that the service is always running by restarting it when necessary, e.g. after reboot. + * + * @see DevicePolicyManager#setAlwaysOnVpnPackage(ComponentName, String, boolean, Set) */ public final boolean isAlwaysOn() { try { @@ -381,8 +387,11 @@ public class VpnService extends Service { } /** - * Returns whether the service is running in always-on VPN mode blocking connections without - * VPN. + * Returns whether the service is running in always-on VPN lockdown mode. In this mode the + * system ensures that the service is always running and that the apps aren't allowed to bypass + * the VPN. + * + * @see DevicePolicyManager#setAlwaysOnVpnPackage(ComponentName, String, boolean, Set) */ public final boolean isLockdownEnabled() { try { diff --git a/core/java/android/net/apf/ApfCapabilities.java b/core/java/android/net/apf/ApfCapabilities.java index e09fa8fd9e77..d6023d701762 100644 --- a/core/java/android/net/apf/ApfCapabilities.java +++ b/core/java/android/net/apf/ApfCapabilities.java @@ -19,17 +19,20 @@ package android.net.apf; import android.annotation.SystemApi; import android.annotation.TestApi; import android.content.Context; +import android.os.Parcel; +import android.os.Parcelable; import com.android.internal.R; /** * APF program support capabilities. * + * This class is immutable. * @hide */ @SystemApi @TestApi -public class ApfCapabilities { +public final class ApfCapabilities implements Parcelable { /** * Version of APF instruction set supported for packet filtering. 0 indicates no support for * packet filtering using APF programs. @@ -53,6 +56,37 @@ public class ApfCapabilities { this.apfPacketFormat = apfPacketFormat; } + private ApfCapabilities(Parcel in) { + apfVersionSupported = in.readInt(); + maximumApfProgramSize = in.readInt(); + apfPacketFormat = in.readInt(); + } + + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(apfVersionSupported); + dest.writeInt(maximumApfProgramSize); + dest.writeInt(apfPacketFormat); + } + + public static final Creator<ApfCapabilities> CREATOR = new Creator<ApfCapabilities>() { + @Override + public ApfCapabilities createFromParcel(Parcel in) { + return new ApfCapabilities(in); + } + + @Override + public ApfCapabilities[] newArray(int size) { + return new ApfCapabilities[size]; + } + }; + @Override public String toString() { return String.format("%s{version: %d, maxSize: %d, format: %d}", getClass().getSimpleName(), diff --git a/core/java/android/net/ip/IIpClient.aidl b/core/java/android/net/ip/IIpClient.aidl index a4a80e1efe6f..b834e45c6852 100644 --- a/core/java/android/net/ip/IIpClient.aidl +++ b/core/java/android/net/ip/IIpClient.aidl @@ -15,7 +15,7 @@ */ package android.net.ip; -import android.net.ProxyInfoParcelable; +import android.net.ProxyInfo; import android.net.ProvisioningConfigurationParcelable; import android.net.TcpKeepalivePacketDataParcelable; @@ -28,7 +28,7 @@ oneway interface IIpClient { void startProvisioning(in ProvisioningConfigurationParcelable req); void stop(); void setTcpBufferSizes(in String tcpBufferSizes); - void setHttpProxy(in ProxyInfoParcelable proxyInfo); + void setHttpProxy(in ProxyInfo proxyInfo); void setMulticastFilter(boolean enabled); void addKeepalivePacketFilter(int slot, in TcpKeepalivePacketDataParcelable pkt); void removeKeepalivePacketFilter(int slot); diff --git a/core/java/android/net/ip/IIpClientCallbacks.aidl b/core/java/android/net/ip/IIpClientCallbacks.aidl index f077e3b77ac7..3681416611a9 100644 --- a/core/java/android/net/ip/IIpClientCallbacks.aidl +++ b/core/java/android/net/ip/IIpClientCallbacks.aidl @@ -15,7 +15,7 @@ */ package android.net.ip; -import android.net.LinkPropertiesParcelable; +import android.net.LinkProperties; import android.net.ip.IIpClient; import android.net.DhcpResultsParcelable; @@ -34,11 +34,11 @@ oneway interface IIpClientCallbacks { // null or not. void onNewDhcpResults(in DhcpResultsParcelable dhcpResults); - void onProvisioningSuccess(in LinkPropertiesParcelable newLp); - void onProvisioningFailure(in LinkPropertiesParcelable newLp); + void onProvisioningSuccess(in LinkProperties newLp); + void onProvisioningFailure(in LinkProperties newLp); // Invoked on LinkProperties changes. - void onLinkPropertiesChange(in LinkPropertiesParcelable newLp); + void onLinkPropertiesChange(in LinkProperties newLp); // Called when the internal IpReachabilityMonitor (if enabled) has // detected the loss of a critical number of required neighbors. diff --git a/core/java/android/net/util/SocketUtils.java b/core/java/android/net/util/SocketUtils.java index 5827f9ec9343..6f8aece848f8 100644 --- a/core/java/android/net/util/SocketUtils.java +++ b/core/java/android/net/util/SocketUtils.java @@ -45,7 +45,7 @@ import java.net.SocketException; */ @SystemApi @TestApi -public class SocketUtils { +public final class SocketUtils { /** * Create a raw datagram socket that is bound to an interface. * @@ -63,6 +63,7 @@ public class SocketUtils { /** * Make a socket address to communicate with netlink. */ + @NonNull public static SocketAddress makeNetlinkSocketAddress(int portId, int groupsMask) { return new NetlinkSocketAddress(portId, groupsMask); } @@ -70,13 +71,15 @@ public class SocketUtils { /** * Make socket address that packet sockets can bind to. */ - public static SocketAddress makePacketSocketAddress(short protocol, int ifIndex) { - return new PacketSocketAddress(protocol, ifIndex); + @NonNull + public static SocketAddress makePacketSocketAddress(int protocol, int ifIndex) { + return new PacketSocketAddress((short) protocol, ifIndex); } /** * Make a socket address that packet socket can send packets to. */ + @NonNull public static SocketAddress makePacketSocketAddress(int ifIndex, @NonNull byte[] hwAddr) { return new PacketSocketAddress(ifIndex, hwAddr); } diff --git a/core/java/android/os/AsyncResult.java b/core/java/android/os/AsyncResult.java index 5bad09d17e7b..58a27015f2df 100644 --- a/core/java/android/os/AsyncResult.java +++ b/core/java/android/os/AsyncResult.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.os.Message; /** @hide */ @@ -25,13 +26,17 @@ public class AsyncResult /*************************** Instance Variables **************************/ // Expect either exception or result to be null + @UnsupportedAppUsage public Object userObj; + @UnsupportedAppUsage public Throwable exception; + @UnsupportedAppUsage public Object result; /***************************** Class Methods *****************************/ /** Saves and sets m.obj */ + @UnsupportedAppUsage public static AsyncResult forMessage(Message m, Object r, Throwable ex) { @@ -45,6 +50,7 @@ public class AsyncResult } /** Saves and sets m.obj */ + @UnsupportedAppUsage public static AsyncResult forMessage(Message m) { @@ -58,6 +64,7 @@ public class AsyncResult } /** please note, this sets m.obj to be this */ + @UnsupportedAppUsage public AsyncResult (Object uo, Object r, Throwable ex) { diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java index a851e04e78ec..d259f386ea77 100644 --- a/core/java/android/os/AsyncTask.java +++ b/core/java/android/os/AsyncTask.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.MainThread; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.annotation.WorkerThread; import java.util.ArrayDeque; @@ -259,15 +260,20 @@ public abstract class AsyncTask<Params, Progress, Result> { private static final int MESSAGE_POST_RESULT = 0x1; private static final int MESSAGE_POST_PROGRESS = 0x2; + @UnsupportedAppUsage private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR; private static InternalHandler sHandler; + @UnsupportedAppUsage private final WorkerRunnable<Params, Result> mWorker; + @UnsupportedAppUsage private final FutureTask<Result> mFuture; + @UnsupportedAppUsage private volatile Status mStatus = Status.PENDING; private final AtomicBoolean mCancelled = new AtomicBoolean(); + @UnsupportedAppUsage private final AtomicBoolean mTaskInvoked = new AtomicBoolean(); private final Handler mHandler; @@ -331,6 +337,7 @@ public abstract class AsyncTask<Params, Progress, Result> { } /** @hide */ + @UnsupportedAppUsage public static void setDefaultExecutor(Executor exec) { sDefaultExecutor = exec; } diff --git a/core/java/android/os/BaseBundle.java b/core/java/android/os/BaseBundle.java index 0fef78d1f4ba..117d11a4c74b 100644 --- a/core/java/android/os/BaseBundle.java +++ b/core/java/android/os/BaseBundle.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.util.ArrayMap; import android.util.Log; import android.util.MathUtils; @@ -82,6 +83,7 @@ public class BaseBundle { // Invariant - exactly one of mMap / mParcelledData will be null // (except inside a call to unparcel) + @UnsupportedAppUsage ArrayMap<String, Object> mMap = null; /* @@ -89,6 +91,7 @@ public class BaseBundle { * data are stored as a Parcel containing a Bundle. When the data * are unparcelled, mParcelledData willbe set to null. */ + @UnsupportedAppUsage Parcel mParcelledData = null; /** @@ -225,6 +228,7 @@ public class BaseBundle { * If the underlying data are stored as a Parcel, unparcel them * using the currently assigned class loader. */ + @UnsupportedAppUsage /* package */ void unparcel() { synchronized (this) { final Parcel source = mParcelledData; @@ -311,6 +315,7 @@ public class BaseBundle { /** * @hide */ + @UnsupportedAppUsage public boolean isParcelled() { return mParcelledData != null; } diff --git a/core/java/android/os/BatteryManager.java b/core/java/android/os/BatteryManager.java index 954071a0ee97..1a6e012e0ff3 100644 --- a/core/java/android/os/BatteryManager.java +++ b/core/java/android/os/BatteryManager.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.Intent; import android.hardware.health.V1_0.Constants; @@ -109,6 +110,7 @@ public class BatteryManager { * to the device. * {@hide} */ + @UnsupportedAppUsage public static final String EXTRA_INVALID_CHARGER = "invalid_charger"; /** @@ -116,6 +118,7 @@ public class BatteryManager { * Int value set to the maximum charging current supported by the charger in micro amperes. * {@hide} */ + @UnsupportedAppUsage public static final String EXTRA_MAX_CHARGING_CURRENT = "max_charging_current"; /** @@ -123,6 +126,7 @@ public class BatteryManager { * Int value set to the maximum charging voltage supported by the charger in micro volts. * {@hide} */ + @UnsupportedAppUsage public static final String EXTRA_MAX_CHARGING_VOLTAGE = "max_charging_voltage"; /** @@ -130,6 +134,7 @@ public class BatteryManager { * integer containing the charge counter present in the battery. * {@hide} */ + @UnsupportedAppUsage public static final String EXTRA_CHARGE_COUNTER = "charge_counter"; /** diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 517eaf83d336..6beddfdc5904 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.job.JobParameters; import android.content.Context; @@ -71,6 +72,7 @@ public abstract class BatteryStats implements Parcelable { /** * A constant indicating a partial wake lock timer. */ + @UnsupportedAppUsage public static final int WAKE_TYPE_PARTIAL = 0; /** @@ -196,6 +198,7 @@ public abstract class BatteryStats implements Parcelable { /** * Include only the current run in the stats. */ + @UnsupportedAppUsage public static final int STATS_CURRENT = 1; /** @@ -390,6 +393,7 @@ public abstract class BatteryStats implements Parcelable { * * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT */ + @UnsupportedAppUsage public abstract int getCountLocked(int which); /** @@ -491,6 +495,7 @@ public abstract class BatteryStats implements Parcelable { * * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT */ + @UnsupportedAppUsage public abstract int getCountLocked(int which); /** @@ -501,6 +506,7 @@ public abstract class BatteryStats implements Parcelable { * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT * @return a time in microseconds */ + @UnsupportedAppUsage public abstract long getTotalTimeLocked(long elapsedRealtimeUs, int which); /** @@ -603,6 +609,7 @@ public abstract class BatteryStats implements Parcelable { * * @return a Map from Strings to Uid.Wakelock objects. */ + @UnsupportedAppUsage public abstract ArrayMap<String, ? extends Wakelock> getWakelockStats(); /** @@ -637,6 +644,7 @@ public abstract class BatteryStats implements Parcelable { * The statistics associated with a particular wake lock. */ public static abstract class Wakelock { + @UnsupportedAppUsage public abstract Timer getWakeTime(int type); } @@ -652,6 +660,7 @@ public abstract class BatteryStats implements Parcelable { * * @return a Map from Integer sensor ids to Uid.Sensor objects. */ + @UnsupportedAppUsage public abstract SparseArray<? extends Sensor> getSensorStats(); /** @@ -664,6 +673,7 @@ public abstract class BatteryStats implements Parcelable { * * @return a Map from Strings to Uid.Proc objects. */ + @UnsupportedAppUsage public abstract ArrayMap<String, ? extends Proc> getProcessStats(); /** @@ -671,6 +681,7 @@ public abstract class BatteryStats implements Parcelable { * * @return a Map from Strings to Uid.Pkg objects. */ + @UnsupportedAppUsage public abstract ArrayMap<String, ? extends Pkg> getPackageStats(); public abstract ControllerActivityCounter getWifiControllerActivity(); @@ -680,6 +691,7 @@ public abstract class BatteryStats implements Parcelable { /** * {@hide} */ + @UnsupportedAppUsage public abstract int getUid(); public abstract void noteWifiRunningLocked(long elapsedRealtime); @@ -694,8 +706,11 @@ public abstract class BatteryStats implements Parcelable { public abstract void noteWifiMulticastDisabledLocked(long elapsedRealtime); public abstract void noteActivityResumedLocked(long elapsedRealtime); public abstract void noteActivityPausedLocked(long elapsedRealtime); + @UnsupportedAppUsage public abstract long getWifiRunningTime(long elapsedRealtimeUs, int which); + @UnsupportedAppUsage public abstract long getFullWifiLockTime(long elapsedRealtimeUs, int which); + @UnsupportedAppUsage public abstract long getWifiScanTime(long elapsedRealtimeUs, int which); public abstract int getWifiScanCount(int which); /** @@ -709,10 +724,14 @@ public abstract class BatteryStats implements Parcelable { * Returns the timer keeping track of background wifi scans. */ public abstract Timer getWifiScanBackgroundTimer(); + @UnsupportedAppUsage public abstract long getWifiBatchedScanTime(int csphBin, long elapsedRealtimeUs, int which); public abstract int getWifiBatchedScanCount(int csphBin, int which); + @UnsupportedAppUsage public abstract long getWifiMulticastTime(long elapsedRealtimeUs, int which); + @UnsupportedAppUsage public abstract Timer getAudioTurnedOnTimer(); + @UnsupportedAppUsage public abstract Timer getVideoTurnedOnTimer(); public abstract Timer getFlashlightTurnedOnTimer(); public abstract Timer getCameraTurnedOnTimer(); @@ -842,8 +861,10 @@ public abstract class BatteryStats implements Parcelable { public abstract int getUserActivityCount(int type, int which); public abstract boolean hasNetworkActivity(); + @UnsupportedAppUsage public abstract long getNetworkActivityBytes(int type, int which); public abstract long getNetworkActivityPackets(int type, int which); + @UnsupportedAppUsage public abstract long getMobileRadioActiveTime(int which); public abstract int getMobileRadioActiveCount(int which); @@ -903,10 +924,13 @@ public abstract class BatteryStats implements Parcelable { * the sensor HAL, and therefore out of our control */ // Magic sensor number for the GPS. + @UnsupportedAppUsage public static final int GPS = -10000; + @UnsupportedAppUsage public abstract int getHandle(); + @UnsupportedAppUsage public abstract Timer getSensorTime(); /** Returns a Timer for sensor usage when app is in the background. */ @@ -928,8 +952,11 @@ public abstract class BatteryStats implements Parcelable { public static final int TYPE_WAKE = 1; public static final int TYPE_CPU = 2; + @UnsupportedAppUsage public int type; + @UnsupportedAppUsage public long overTime; + @UnsupportedAppUsage public long usedTime; } @@ -943,6 +970,7 @@ public abstract class BatteryStats implements Parcelable { * * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. */ + @UnsupportedAppUsage public abstract long getUserTime(int which); /** @@ -950,6 +978,7 @@ public abstract class BatteryStats implements Parcelable { * * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. */ + @UnsupportedAppUsage public abstract long getSystemTime(int which); /** @@ -957,6 +986,7 @@ public abstract class BatteryStats implements Parcelable { * * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. */ + @UnsupportedAppUsage public abstract int getStarts(int which); /** @@ -978,10 +1008,13 @@ public abstract class BatteryStats implements Parcelable { * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. * @return foreground cpu time in microseconds */ + @UnsupportedAppUsage public abstract long getForegroundTime(int which); + @UnsupportedAppUsage public abstract int countExcessivePowers(); + @UnsupportedAppUsage public abstract ExcessivePower getExcessivePower(int i); } @@ -995,11 +1028,13 @@ public abstract class BatteryStats implements Parcelable { * package. The mapping keys are tag names for the alarms, the counter contains * the number of times the alarm was triggered while on battery. */ + @UnsupportedAppUsage public abstract ArrayMap<String, ? extends Counter> getWakeupAlarmStats(); /** * Returns a mapping containing service statistics. */ + @UnsupportedAppUsage public abstract ArrayMap<String, ? extends Serv> getServiceStats(); /** @@ -1014,6 +1049,7 @@ public abstract class BatteryStats implements Parcelable { * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. * @return */ + @UnsupportedAppUsage public abstract long getStartTime(long batteryUptime, int which); /** @@ -1021,6 +1057,7 @@ public abstract class BatteryStats implements Parcelable { * * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. */ + @UnsupportedAppUsage public abstract int getStarts(int which); /** @@ -1028,6 +1065,7 @@ public abstract class BatteryStats implements Parcelable { * * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. */ + @UnsupportedAppUsage public abstract int getLaunches(int which); } } @@ -1490,8 +1528,10 @@ public abstract class BatteryStats implements Parcelable { public HistoryItem next; // The time of this event in milliseconds, as per SystemClock.elapsedRealtime(). + @UnsupportedAppUsage public long time; + @UnsupportedAppUsage public static final byte CMD_UPDATE = 0; // These can be written as deltas public static final byte CMD_NULL = -1; public static final byte CMD_START = 4; @@ -1500,6 +1540,7 @@ public abstract class BatteryStats implements Parcelable { public static final byte CMD_RESET = 7; public static final byte CMD_SHUTDOWN = 8; + @UnsupportedAppUsage public byte cmd = CMD_NULL; /** @@ -1509,12 +1550,17 @@ public abstract class BatteryStats implements Parcelable { return cmd == CMD_UPDATE; } + @UnsupportedAppUsage public byte batteryLevel; + @UnsupportedAppUsage public byte batteryStatus; + @UnsupportedAppUsage public byte batteryHealth; + @UnsupportedAppUsage public byte batteryPlugType; public short batteryTemperature; + @UnsupportedAppUsage public char batteryVoltage; // The charge of the battery in micro-Ampere-hours. @@ -1561,6 +1607,7 @@ public abstract class BatteryStats implements Parcelable { public static final int SETTLE_TO_ZERO_STATES = 0xffff0000 & ~MOST_INTERESTING_STATES; + @UnsupportedAppUsage public int states; // Constants from WIFI_SUPPL_STATE_* @@ -1596,6 +1643,7 @@ public abstract class BatteryStats implements Parcelable { public static final int SETTLE_TO_ZERO_STATES2 = 0xffff0000 & ~MOST_INTERESTING_STATES2; + @UnsupportedAppUsage public int states2; // The wake lock that was acquired at this point. @@ -1704,6 +1752,7 @@ public abstract class BatteryStats implements Parcelable { public final HistoryTag localWakeReasonTag = new HistoryTag(); public final HistoryTag localEventTag = new HistoryTag(); + @UnsupportedAppUsage public HistoryItem() { } @@ -1995,6 +2044,7 @@ public abstract class BatteryStats implements Parcelable { public abstract int getHistoryUsedSize(); + @UnsupportedAppUsage public abstract boolean startIteratingHistoryLocked(); public abstract int getHistoryStringPoolSize(); @@ -2005,6 +2055,7 @@ public abstract class BatteryStats implements Parcelable { public abstract int getHistoryTagPoolUid(int index); + @UnsupportedAppUsage public abstract boolean getNextHistoryLocked(HistoryItem out); public abstract void finishIteratingHistoryLocked(); @@ -2031,6 +2082,7 @@ public abstract class BatteryStats implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public abstract long getScreenOnTime(long elapsedRealtimeUs, int which); /** @@ -2071,6 +2123,7 @@ public abstract class BatteryStats implements Parcelable { "0", "1", "2", "3", "4" }; + @UnsupportedAppUsage public static final int NUM_SCREEN_BRIGHTNESS_BINS = 5; /** @@ -2079,6 +2132,7 @@ public abstract class BatteryStats implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public abstract long getScreenBrightnessTime(int brightnessBin, long elapsedRealtimeUs, int which); @@ -2187,6 +2241,7 @@ public abstract class BatteryStats implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public abstract long getPhoneOnTime(long elapsedRealtimeUs, int which); /** @@ -2202,6 +2257,7 @@ public abstract class BatteryStats implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public abstract long getPhoneSignalStrengthTime(int strengthBin, long elapsedRealtimeUs, int which); @@ -2284,6 +2340,7 @@ public abstract class BatteryStats implements Parcelable { "ehrpd", "hspap", "gsm", "td_scdma", "iwlan", "lte_ca", "other" }; + @UnsupportedAppUsage public static final int NUM_DATA_CONNECTION_TYPES = DATA_CONNECTION_OTHER+1; /** @@ -2446,6 +2503,7 @@ public abstract class BatteryStats implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public abstract long getWifiOnTime(long elapsedRealtimeUs, int which); /** @@ -2462,6 +2520,7 @@ public abstract class BatteryStats implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public abstract long getGlobalWifiRunningTime(long elapsedRealtimeUs, int which); public static final int WIFI_STATE_OFF = 0; @@ -2667,6 +2726,7 @@ public abstract class BatteryStats implements Parcelable { /** * Returns a SparseArray containing the statistics for each uid. */ + @UnsupportedAppUsage public abstract SparseArray<? extends Uid> getUidStats(); /** @@ -2674,6 +2734,7 @@ public abstract class BatteryStats implements Parcelable { * * @param curTime the amount of elapsed realtime in microseconds. */ + @UnsupportedAppUsage public abstract long getBatteryUptime(long curTime); /** @@ -2754,6 +2815,7 @@ public abstract class BatteryStats implements Parcelable { * @param curTime the elapsed realtime in microseconds. * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. */ + @UnsupportedAppUsage public abstract long computeBatteryUptime(long curTime, int which); /** @@ -2762,6 +2824,7 @@ public abstract class BatteryStats implements Parcelable { * @param curTime the current elapsed realtime in microseconds. * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. */ + @UnsupportedAppUsage public abstract long computeBatteryRealtime(long curTime, int which); /** @@ -2804,6 +2867,7 @@ public abstract class BatteryStats implements Parcelable { * * @param curTime The current elepsed realtime in microseconds. */ + @UnsupportedAppUsage public abstract long computeBatteryTimeRemaining(long curTime); // The part of a step duration that is the actual time. @@ -2938,6 +3002,7 @@ public abstract class BatteryStats implements Parcelable { * * @param curTime The current elepsed realtime in microseconds. */ + @UnsupportedAppUsage public abstract long computeChargeTimeRemaining(long curTime); /** @@ -3222,6 +3287,7 @@ public abstract class BatteryStats implements Parcelable { * @param type type of data (e.g. "wakelock", "sensor", "process", "apk" , "process", "network") * @param args type-dependent data arguments */ + @UnsupportedAppUsage private static final void dumpLine(PrintWriter pw, int uid, String category, String type, Object... args ) { dumpLineHeader(pw, uid, category, type); diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java index 3bc1e93853af..3de11837bfd1 100644 --- a/core/java/android/os/Binder.java +++ b/core/java/android/os/Binder.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.util.ExceptionUtils; import android.util.Log; import android.util.Slog; @@ -221,6 +222,7 @@ public class Binder implements IBinder { /** * Raw native pointer to JavaBBinderHolder object. Owned by this Java object. Not null. */ + @UnsupportedAppUsage private final long mObject; private IInterface mOwner; @@ -720,6 +722,7 @@ public class Binder implements IBinder { private static native long getFinalizer(); // Entry point from android_util_Binder.cpp's onTransact + @UnsupportedAppUsage private boolean execTransact(int code, long dataObj, long replyObj, int flags) { BinderCallsStats binderCallsStats = BinderCallsStats.getInstance(); diff --git a/core/java/android/os/Broadcaster.java b/core/java/android/os/Broadcaster.java index 70dcdd8ac886..6ac7f1a9c970 100644 --- a/core/java/android/os/Broadcaster.java +++ b/core/java/android/os/Broadcaster.java @@ -16,9 +16,12 @@ package android.os; +import android.annotation.UnsupportedAppUsage; + /** @hide */ public class Broadcaster { + @UnsupportedAppUsage public Broadcaster() { } @@ -29,6 +32,7 @@ public class Broadcaster * When this broadcaster pushes a message with senderWhat in the what field, * target will be sent a copy of that message with targetWhat in the what field. */ + @UnsupportedAppUsage public void request(int senderWhat, Handler target, int targetWhat) { synchronized (this) { @@ -96,6 +100,7 @@ public class Broadcaster /** * Unregister for notifications for this senderWhat/target/targetWhat tuple. */ + @UnsupportedAppUsage public void cancelRequest(int senderWhat, Handler target, int targetWhat) { synchronized (this) { @@ -168,6 +173,7 @@ public class Broadcaster * Send out msg. Anyone who has registered via the request() method will be * sent the message. */ + @UnsupportedAppUsage public void broadcast(Message msg) { synchronized (this) { diff --git a/core/java/android/os/BugreportManager.java b/core/java/android/os/BugreportManager.java index 684369a6f720..f87abde361f3 100644 --- a/core/java/android/os/BugreportManager.java +++ b/core/java/android/os/BugreportManager.java @@ -17,6 +17,7 @@ package android.os; import android.annotation.CallbackExecutor; +import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; @@ -27,6 +28,8 @@ import android.content.Context; import com.android.internal.util.Preconditions; +import libcore.io.IoUtils; + import java.io.FileDescriptor; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -39,7 +42,7 @@ import java.util.concurrent.Executor; */ @SystemApi @SystemService(Context.BUGREPORT_SERVICE) -public class BugreportManager { +public final class BugreportManager { private final Context mContext; private final IDumpstate mBinder; @@ -90,7 +93,7 @@ public class BugreportManager { * Called when there is a progress update. * @param progress the progress in [0.0, 100.0] */ - public void onProgress(float progress) {} + public void onProgress(@FloatRange(from = 0f, to = 100f) float progress) {} /** * Called when taking bugreport resulted in an error. @@ -123,6 +126,8 @@ public class BugreportManager { * <p>The bugreport artifacts will be copied over to the given file descriptors only if the * user consents to sharing with the calling app. * + * <p>{@link BugreportManager} takes ownership of {@code bugreportFd} and {@code screenshotFd}. + * * @param bugreportFd file to write the bugreport. This should be opened in write-only, * append mode. * @param screenshotFd file to write the screenshot, if necessary. This should be opened @@ -136,12 +141,13 @@ public class BugreportManager { @NonNull BugreportParams params, @NonNull @CallbackExecutor Executor executor, @NonNull BugreportCallback callback) { - Preconditions.checkNotNull(bugreportFd); - Preconditions.checkNotNull(params); - Preconditions.checkNotNull(executor); - Preconditions.checkNotNull(callback); - DumpstateListener dsListener = new DumpstateListener(executor, callback); try { + Preconditions.checkNotNull(bugreportFd); + Preconditions.checkNotNull(params); + Preconditions.checkNotNull(executor); + Preconditions.checkNotNull(callback); + + DumpstateListener dsListener = new DumpstateListener(executor, callback); // Note: mBinder can get callingUid from the binder transaction. mBinder.startBugreport(-1 /* callingUid */, mContext.getOpPackageName(), @@ -151,6 +157,12 @@ public class BugreportManager { params.getMode(), dsListener); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); + } finally { + // We can close the file descriptors here because binder would have duped them. + IoUtils.closeQuietly(bugreportFd); + if (screenshotFd != null) { + IoUtils.closeQuietly(screenshotFd); + } } } @@ -170,7 +182,7 @@ public class BugreportManager { private final Executor mExecutor; private final BugreportCallback mCallback; - DumpstateListener(Executor executor, @Nullable BugreportCallback callback) { + DumpstateListener(Executor executor, BugreportCallback callback) { mExecutor = executor; mCallback = callback; } @@ -208,8 +220,6 @@ public class BugreportManager { }); } finally { Binder.restoreCallingIdentity(identity); - // The bugreport has finished. Let's shutdown the service to minimize its footprint. - cancelBugreport(); } } diff --git a/core/java/android/os/BugreportParams.java b/core/java/android/os/BugreportParams.java index 3871375cfced..279ccae7c94f 100644 --- a/core/java/android/os/BugreportParams.java +++ b/core/java/android/os/BugreportParams.java @@ -41,6 +41,7 @@ public final class BugreportParams { /** * Defines acceptable types of bugreports. + * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "BUGREPORT_MODE_" }, value = { diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index 6de575960f48..1c319fb4ea36 100755 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -20,6 +20,7 @@ import android.Manifest; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.Application; import android.content.Context; import android.text.TextUtils; @@ -102,6 +103,7 @@ public class Build { * Whether this build was for an emulator device. * @hide */ + @UnsupportedAppUsage public static final boolean IS_EMULATOR = getString("ro.kernel.qemu").equals("1"); /** @@ -285,6 +287,7 @@ public class Build { /** * @hide */ + @UnsupportedAppUsage public static final String[] ACTIVE_CODENAMES = "REL".equals(ALL_CODENAMES[0]) ? new String[0] : ALL_CODENAMES; @@ -1083,6 +1086,7 @@ public class Build { * Returns true if we are running a debug build such as "user-debug" or "eng". * @hide */ + @UnsupportedAppUsage public static final boolean IS_DEBUGGABLE = SystemProperties.getInt("ro.debuggable", 0) == 1; @@ -1131,6 +1135,7 @@ public class Build { return TextUtils.isEmpty(propVal) ? null : propVal; } + @UnsupportedAppUsage private static String getString(String property) { return SystemProperties.get(property, UNKNOWN); } @@ -1144,6 +1149,7 @@ public class Build { } } + @UnsupportedAppUsage private static long getLong(String property) { try { return Long.parseLong(SystemProperties.get(property)); diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java index 7ae5a673f630..6b5eff705c83 100644 --- a/core/java/android/os/Bundle.java +++ b/core/java/android/os/Bundle.java @@ -17,6 +17,7 @@ package android.os; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.util.ArrayMap; import android.util.Size; import android.util.SizeF; @@ -173,6 +174,7 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { * * @hide */ + @UnsupportedAppUsage public static Bundle forPair(String key, String value) { Bundle b = new Bundle(1); b.putString(key, value); @@ -229,6 +231,7 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { } /** {@hide} */ + @UnsupportedAppUsage public static Bundle setDefusable(Bundle bundle, boolean defusable) { if (bundle != null) { bundle.setDefusable(defusable); @@ -303,6 +306,7 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { * * @hide */ + @UnsupportedAppUsage public int getSize() { if (mParcelledData != null) { return mParcelledData.dataSize(); @@ -385,6 +389,7 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { * Filter values in Bundle to only basic types. * @hide */ + @UnsupportedAppUsage public Bundle filterValues() { unparcel(); Bundle bundle = this; @@ -557,6 +562,7 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { } /** {@hide} */ + @UnsupportedAppUsage public void putParcelableList(String key, List<? extends Parcelable> value) { unparcel(); mMap.put(key, value); @@ -728,6 +734,7 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { * @deprecated * @hide This is the old name of the function. */ + @UnsupportedAppUsage @Deprecated public void putIBinder(@Nullable String key, @Nullable IBinder value) { unparcel(); @@ -1180,6 +1187,7 @@ public final class Bundle extends BaseBundle implements Cloneable, Parcelable { * @deprecated * @hide This is the old name of the function. */ + @UnsupportedAppUsage @Deprecated @Nullable public IBinder getIBinder(@Nullable String key) { diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index e6069644caa5..eab451c7447a 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.app.AppGlobals; import android.content.Context; import android.util.Log; @@ -87,6 +88,7 @@ public final class Debug // set/cleared by waitForDebugger() private static volatile boolean mWaiting = false; + @UnsupportedAppUsage private Debug() {} /* @@ -115,8 +117,10 @@ public final class Debug public int dalvikPss; /** The proportional set size that is swappable for dalvik heap. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int dalvikSwappablePss; /** @hide The resident set size for dalvik heap. (Without other Dalvik overhead.) */ + @UnsupportedAppUsage public int dalvikRss; /** The private dirty pages used by dalvik heap. */ public int dalvikPrivateDirty; @@ -124,23 +128,29 @@ public final class Debug public int dalvikSharedDirty; /** The private clean pages used by dalvik heap. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int dalvikPrivateClean; /** The shared clean pages used by dalvik heap. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int dalvikSharedClean; /** The dirty dalvik pages that have been swapped out. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int dalvikSwappedOut; /** The dirty dalvik pages that have been swapped out, proportional. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int dalvikSwappedOutPss; /** The proportional set size for the native heap. */ public int nativePss; /** The proportional set size that is swappable for the native heap. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int nativeSwappablePss; /** @hide The resident set size for the native heap. */ + @UnsupportedAppUsage public int nativeRss; /** The private dirty pages used by the native heap. */ public int nativePrivateDirty; @@ -148,23 +158,29 @@ public final class Debug public int nativeSharedDirty; /** The private clean pages used by the native heap. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int nativePrivateClean; /** The shared clean pages used by the native heap. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int nativeSharedClean; /** The dirty native pages that have been swapped out. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int nativeSwappedOut; /** The dirty native pages that have been swapped out, proportional. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int nativeSwappedOutPss; /** The proportional set size for everything else. */ public int otherPss; /** The proportional set size that is swappable for everything else. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int otherSwappablePss; /** @hide The resident set size for everything else. */ + @UnsupportedAppUsage public int otherRss; /** The private dirty pages used by everything else. */ public int otherPrivateDirty; @@ -172,19 +188,24 @@ public final class Debug public int otherSharedDirty; /** The private clean pages used by everything else. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int otherPrivateClean; /** The shared clean pages used by everything else. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int otherSharedClean; /** The dirty pages used by anyting else that have been swapped out. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int otherSwappedOut; /** The dirty pages used by anyting else that have been swapped out, proportional. */ /** @hide We may want to expose this, eventually. */ + @UnsupportedAppUsage public int otherSwappedOutPss; /** Whether the kernel reports proportional swap usage */ /** @hide */ + @UnsupportedAppUsage public boolean hasSwappedOutPss; /** @hide */ @@ -231,6 +252,7 @@ public final class Debug // Needs to be declared here for the DVK_STAT ranges below. /** @hide */ + @UnsupportedAppUsage public static final int NUM_OTHER_STATS = 17; // Dalvik subsections. @@ -291,6 +313,7 @@ public final class Debug public static final int OTHER_DVK_STAT_ART_END = OTHER_ART_BOOT - NUM_OTHER_STATS; /** @hide */ + @UnsupportedAppUsage public static final int NUM_DVK_STATS = 14; /** @hide */ @@ -315,6 +338,7 @@ public final class Debug /** @hide */ public static final int OFFSET_SWAPPED_OUT_PSS = 8; + @UnsupportedAppUsage private int[] otherStats = new int[(NUM_OTHER_STATS+NUM_DVK_STATS)*NUM_CATEGORIES]; public MemoryInfo() { @@ -330,6 +354,7 @@ public final class Debug /** * @hide Return total PSS memory usage in kB. */ + @UnsupportedAppUsage public int getTotalUss() { return dalvikPrivateClean + dalvikPrivateDirty + nativePrivateClean + nativePrivateDirty @@ -396,6 +421,7 @@ public final class Debug } /** @hide */ + @UnsupportedAppUsage public int getOtherPss(int which) { return otherStats[which * NUM_CATEGORIES + OFFSET_PSS]; } @@ -411,11 +437,13 @@ public final class Debug } /** @hide */ + @UnsupportedAppUsage public int getOtherPrivateDirty(int which) { return otherStats[which * NUM_CATEGORIES + OFFSET_PRIVATE_DIRTY]; } /** @hide */ + @UnsupportedAppUsage public int getOtherSharedDirty(int which) { return otherStats[which * NUM_CATEGORIES + OFFSET_SHARED_DIRTY]; } @@ -426,6 +454,7 @@ public final class Debug } /** @hide */ + @UnsupportedAppUsage public int getOtherPrivate(int which) { return getOtherPrivateClean(which) + getOtherPrivateDirty(which); } @@ -446,6 +475,7 @@ public final class Debug } /** @hide */ + @UnsupportedAppUsage public static String getOtherLabel(int which) { switch (which) { case OTHER_DALVIK_OTHER: return "Dalvik Other"; @@ -623,6 +653,7 @@ public final class Debug * such thing as private clean for the Java Heap. * @hide */ + @UnsupportedAppUsage public int getSummaryJavaHeap() { return dalvikPrivateDirty + getOtherPrivate(OTHER_ART); } @@ -635,6 +666,7 @@ public final class Debug * such thing as private clean for the Native Heap. * @hide */ + @UnsupportedAppUsage public int getSummaryNativeHeap() { return nativePrivateDirty; } @@ -644,6 +676,7 @@ public final class Debug * the application. * @hide */ + @UnsupportedAppUsage public int getSummaryCode() { return getOtherPrivate(OTHER_SO) + getOtherPrivate(OTHER_JAR) @@ -662,6 +695,7 @@ public final class Debug * such thing as private clean for the stack. * @hide */ + @UnsupportedAppUsage public int getSummaryStack() { return getOtherPrivateDirty(OTHER_STACK); } @@ -677,6 +711,7 @@ public final class Debug * memory into the System category. * @hide */ + @UnsupportedAppUsage public int getSummaryGraphics() { return getOtherPrivate(OTHER_GL_DEV) + getOtherPrivate(OTHER_GRAPHICS) @@ -688,6 +723,7 @@ public final class Debug * accounted for. * @hide */ + @UnsupportedAppUsage public int getSummaryPrivateOther() { return getTotalPrivateClean() + getTotalPrivateDirty() @@ -704,6 +740,7 @@ public final class Debug * * Includes all shared memory. * @hide */ + @UnsupportedAppUsage public int getSummarySystem() { return getTotalPss() - getTotalPrivateClean() @@ -1743,6 +1780,7 @@ public final class Debug * as the caller. * @hide */ + @UnsupportedAppUsage public static native void getMemoryInfo(int pid, MemoryInfo memoryInfo); /** @@ -1798,6 +1836,7 @@ public final class Debug * as defined by MEMINFO_* offsets. * @hide */ + @UnsupportedAppUsage public static native void getMemInfo(long[] outSizes); /** @@ -1886,6 +1925,7 @@ public final class Debug * * @hide */ + @UnsupportedAppUsage public static native void dumpNativeHeap(FileDescriptor fd); /** @@ -1900,6 +1940,7 @@ public final class Debug * * @hide */ + @UnsupportedAppUsage public static long countInstancesOfClass(Class cls) { return VMDebug.countInstancesOfClass(cls, true); } @@ -1959,6 +2000,7 @@ public final class Debug * * @hide */ + @UnsupportedAppUsage public static final void dumpReferenceTables() { VMDebug.dumpReferenceTables(); } @@ -2325,6 +2367,7 @@ public final class Debug * @return a string describing the call stack. * {@hide} */ + @UnsupportedAppUsage public static String getCallers(final int depth) { final StackTraceElement[] callStack = Thread.currentThread().getStackTrace(); StringBuffer sb = new StringBuffer(); @@ -2371,6 +2414,7 @@ public final class Debug * @return a String describing the immediate caller of the calling method. * {@hide} */ + @UnsupportedAppUsage public static String getCaller() { return getCaller(Thread.currentThread().getStackTrace(), 0); } diff --git a/core/java/android/os/DropBoxManager.java b/core/java/android/os/DropBoxManager.java index 97f0e0cf31e9..89fef68dc2c0 100644 --- a/core/java/android/os/DropBoxManager.java +++ b/core/java/android/os/DropBoxManager.java @@ -19,6 +19,7 @@ package android.os; import android.annotation.SdkConstant; import android.annotation.SystemService; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.util.Log; @@ -45,6 +46,7 @@ public class DropBoxManager { private static final String TAG = "DropBoxManager"; private final Context mContext; + @UnsupportedAppUsage private final IDropBoxManagerService mService; /** Flag value: Entry's content was deleted to save space. */ diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java index 213260fa9162..207eb36a6987 100644 --- a/core/java/android/os/Environment.java +++ b/core/java/android/os/Environment.java @@ -17,6 +17,7 @@ package android.os; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.os.storage.StorageManager; @@ -66,6 +67,7 @@ public class Environment { private static final File DIR_VENDOR_ROOT = getDirectory(ENV_VENDOR_ROOT, "/vendor"); private static final File DIR_PRODUCT_ROOT = getDirectory(ENV_PRODUCT_ROOT, "/product"); + @UnsupportedAppUsage private static UserEnvironment sCurrentUser; private static boolean sUserRequired; @@ -74,6 +76,7 @@ public class Environment { } /** {@hide} */ + @UnsupportedAppUsage public static void initForCurrentUser() { final int userId = UserHandle.myUserId(); sCurrentUser = new UserEnvironment(userId); @@ -83,10 +86,12 @@ public class Environment { public static class UserEnvironment { private final int mUserId; + @UnsupportedAppUsage public UserEnvironment(int userId) { mUserId = userId; } + @UnsupportedAppUsage public File[] getExternalDirs() { final StorageVolume[] volumes = StorageManager.getVolumeList(mUserId, StorageManager.FLAG_FOR_WRITE); @@ -97,11 +102,13 @@ public class Environment { return files; } + @UnsupportedAppUsage @Deprecated public File getExternalStorageDirectory() { return getExternalDirs()[0]; } + @UnsupportedAppUsage @Deprecated public File getExternalStoragePublicDirectory(String type) { return buildExternalStoragePublicDirs(type)[0]; @@ -149,6 +156,7 @@ public class Environment { } /** {@hide} */ + @UnsupportedAppUsage public static File getStorageDirectory() { return DIR_ANDROID_STORAGE; } @@ -159,6 +167,7 @@ public class Environment { * * @hide */ + @UnsupportedAppUsage public static File getOemDirectory() { return DIR_OEM_ROOT; } @@ -178,6 +187,7 @@ public class Environment { * software that should persist across simple reflashing of the "system" partition. * @hide */ + @UnsupportedAppUsage public static File getVendorDirectory() { return DIR_VENDOR_ROOT; } @@ -250,6 +260,7 @@ public class Environment { } /** {@hide} */ + @UnsupportedAppUsage public static File getDataSystemDirectory() { return new File(getDataDirectory(), "system"); } @@ -482,11 +493,13 @@ public class Environment { } /** {@hide} */ + @UnsupportedAppUsage public static File getLegacyExternalStorageDirectory() { return new File(System.getenv(ENV_EXTERNAL_STORAGE)); } /** {@hide} */ + @UnsupportedAppUsage public static File getLegacyExternalStorageObbDirectory() { return buildPath(getLegacyExternalStorageDirectory(), DIR_ANDROID, DIR_OBB); } @@ -742,6 +755,7 @@ public class Environment { * Returns the path for android-specific data on the SD card. * @hide */ + @UnsupportedAppUsage public static File[] buildExternalStorageAndroidDataDirs() { throwIfUserRequired(); return sCurrentUser.buildExternalStorageAndroidDataDirs(); @@ -751,6 +765,7 @@ public class Environment { * Generates the raw path to an application's data * @hide */ + @UnsupportedAppUsage public static File[] buildExternalStorageAppDataDirs(String packageName) { throwIfUserRequired(); return sCurrentUser.buildExternalStorageAppDataDirs(packageName); @@ -760,6 +775,7 @@ public class Environment { * Generates the raw path to an application's media * @hide */ + @UnsupportedAppUsage public static File[] buildExternalStorageAppMediaDirs(String packageName) { throwIfUserRequired(); return sCurrentUser.buildExternalStorageAppMediaDirs(packageName); @@ -769,6 +785,7 @@ public class Environment { * Generates the raw path to an application's OBB files * @hide */ + @UnsupportedAppUsage public static File[] buildExternalStorageAppObbDirs(String packageName) { throwIfUserRequired(); return sCurrentUser.buildExternalStorageAppObbDirs(packageName); @@ -778,6 +795,7 @@ public class Environment { * Generates the path to an application's files. * @hide */ + @UnsupportedAppUsage public static File[] buildExternalStorageAppFilesDirs(String packageName) { throwIfUserRequired(); return sCurrentUser.buildExternalStorageAppFilesDirs(packageName); @@ -787,6 +805,7 @@ public class Environment { * Generates the path to an application's cache. * @hide */ + @UnsupportedAppUsage public static File[] buildExternalStorageAppCacheDirs(String packageName) { throwIfUserRequired(); return sCurrentUser.buildExternalStorageAppCacheDirs(packageName); @@ -1021,6 +1040,7 @@ public class Environment { * * @hide */ + @UnsupportedAppUsage public static File[] buildPaths(File[] base, String... segments) { File[] result = new File[base.length]; for (int i = 0; i < base.length; i++) { @@ -1060,6 +1080,7 @@ public class Environment { * * @hide */ + @UnsupportedAppUsage public static File maybeTranslateEmulatedPathToInternal(File path) { return StorageManager.maybeTranslateEmulatedPathToInternal(path); } diff --git a/core/java/android/os/FileObserver.java b/core/java/android/os/FileObserver.java index dd85e1584f0e..2a88e32a0b0a 100644 --- a/core/java/android/os/FileObserver.java +++ b/core/java/android/os/FileObserver.java @@ -17,6 +17,7 @@ package android.os; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.util.Log; import java.lang.ref.WeakReference; @@ -103,6 +104,7 @@ public abstract class FileObserver { stopWatching(m_fd, descriptor); } + @UnsupportedAppUsage public void onEvent(int wfd, int mask, String path) { // look up our observer, fixing up the map if necessary... FileObserver observer = null; @@ -133,6 +135,7 @@ public abstract class FileObserver { private native void stopWatching(int fd, int wfd); } + @UnsupportedAppUsage private static ObserverThread s_observerThread; static { diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java index ddeb8380c331..d3b791c2d941 100644 --- a/core/java/android/os/FileUtils.java +++ b/core/java/android/os/FileUtils.java @@ -35,6 +35,7 @@ import static android.system.OsConstants.S_ISREG; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.provider.DocumentsContract.Document; import android.system.ErrnoException; import android.system.Os; @@ -118,6 +119,7 @@ public class FileUtils { * @param gid to apply through {@code chown}, or -1 to leave unchanged * @return 0 on success, otherwise errno. */ + @UnsupportedAppUsage public static int setPermissions(File path, int mode, int uid, int gid) { return setPermissions(path.getAbsolutePath(), mode, uid, gid); } @@ -130,6 +132,7 @@ public class FileUtils { * @param gid to apply through {@code chown}, or -1 to leave unchanged * @return 0 on success, otherwise errno. */ + @UnsupportedAppUsage public static int setPermissions(String path, int mode, int uid, int gid) { try { Os.chmod(path, mode); @@ -158,6 +161,7 @@ public class FileUtils { * @param gid to apply through {@code chown}, or -1 to leave unchanged * @return 0 on success, otherwise errno. */ + @UnsupportedAppUsage public static int setPermissions(FileDescriptor fd, int mode, int uid, int gid) { try { Os.fchmod(fd, mode); @@ -203,6 +207,7 @@ public class FileUtils { * Perform an fsync on the given FileOutputStream. The stream at this * point must be flushed but not yet closed. */ + @UnsupportedAppUsage public static boolean sync(FileOutputStream stream) { try { if (stream != null) { @@ -217,6 +222,7 @@ public class FileUtils { /** * @deprecated use {@link #copy(File, File)} instead. */ + @UnsupportedAppUsage @Deprecated public static boolean copyFile(File srcFile, File destFile) { try { @@ -240,6 +246,7 @@ public class FileUtils { /** * @deprecated use {@link #copy(InputStream, OutputStream)} instead. */ + @UnsupportedAppUsage @Deprecated public static boolean copyToFile(InputStream inputStream, File destFile) { try { @@ -507,6 +514,7 @@ public class FileUtils { * Check if a filename is "safe" (no metacharacters or spaces). * @param file The file to check */ + @UnsupportedAppUsage public static boolean isFilenameSafe(File file) { // Note, we check whether it matches what's known to be safe, // rather than what's known to be unsafe. Non-ASCII, control @@ -522,6 +530,7 @@ public class FileUtils { * @return the contents of the file, possibly truncated * @throws IOException if something goes wrong reading the file */ + @UnsupportedAppUsage public static String readTextFile(File file, int max, String ellipsis) throws IOException { InputStream input = new FileInputStream(file); // wrapping a BufferedInputStream around it because when reading /proc with unbuffered @@ -575,6 +584,7 @@ public class FileUtils { } } + @UnsupportedAppUsage public static void stringToFile(File file, String string) throws IOException { stringToFile(file.getAbsolutePath(), string); } @@ -605,6 +615,7 @@ public class FileUtils { * @param string * @throws IOException */ + @UnsupportedAppUsage public static void stringToFile(String filename, String string) throws IOException { bytesToFile(filename, string.getBytes(StandardCharsets.UTF_8)); } @@ -616,6 +627,7 @@ public class FileUtils { * @param file the file to checksum, must not be null * @return the checksum value or an exception is thrown. */ + @UnsupportedAppUsage public static long checksumCrc32(File file) throws FileNotFoundException, IOException { CRC32 checkSummer = new CRC32(); CheckedInputStream cis = null; @@ -645,6 +657,7 @@ public class FileUtils { * @param minAgeMs Always keep files younger than this age, in milliseconds. * @return if any files were deleted. */ + @UnsupportedAppUsage public static boolean deleteOlderFiles(File dir, int minCount, long minAgeMs) { if (minCount < 0 || minAgeMs < 0) { throw new IllegalArgumentException("Constraints must be positive or 0"); @@ -726,6 +739,7 @@ public class FileUtils { } } + @UnsupportedAppUsage public static boolean deleteContents(File dir) { File[] files = dir.listFiles(); boolean success = true; diff --git a/core/java/android/os/Handler.java b/core/java/android/os/Handler.java index 2b5f3da5431e..4c2637b2d2b0 100644 --- a/core/java/android/os/Handler.java +++ b/core/java/android/os/Handler.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.util.Log; import android.util.Printer; @@ -168,6 +169,7 @@ public class Handler { * * @hide */ + @UnsupportedAppUsage public Handler(boolean async) { this(null, async); } @@ -229,6 +231,7 @@ public class Handler { * * @hide */ + @UnsupportedAppUsage public Handler(Looper looper, Callback callback, boolean async) { mLooper = looper; mQueue = looper.mQueue; @@ -274,6 +277,7 @@ public class Handler { } /** @hide */ + @UnsupportedAppUsage @NonNull public static Handler getMain() { if (MAIN_THREAD_HANDLER == null) { @@ -801,6 +805,7 @@ public class Handler { * * @hide */ + @UnsupportedAppUsage public final boolean hasCallbacks(Runnable r) { return mQueue.hasMessages(this, r, null); } @@ -839,6 +844,7 @@ public class Handler { + "}"; } + @UnsupportedAppUsage final IMessenger getIMessenger() { synchronized (mQueue) { if (mMessenger != null) { @@ -862,6 +868,7 @@ public class Handler { return m; } + @UnsupportedAppUsage private static Message getPostMessage(Runnable r, Object token) { Message m = Message.obtain(); m.obj = token; @@ -873,10 +880,13 @@ public class Handler { message.callback.run(); } + @UnsupportedAppUsage final Looper mLooper; final MessageQueue mQueue; + @UnsupportedAppUsage final Callback mCallback; final boolean mAsynchronous; + @UnsupportedAppUsage IMessenger mMessenger; private static final class BlockingRunnable implements Runnable { diff --git a/core/java/android/os/HwBinder.java b/core/java/android/os/HwBinder.java index 9e3e83e14a48..09afdc7f934e 100644 --- a/core/java/android/os/HwBinder.java +++ b/core/java/android/os/HwBinder.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import libcore.util.NativeAllocationRegistry; @@ -151,6 +152,7 @@ public abstract class HwBinder implements IHwBinder { * * @hide */ + @UnsupportedAppUsage public static void reportSyspropChanged() { native_report_sysprop_change(); } diff --git a/core/java/android/os/HwParcel.java b/core/java/android/os/HwParcel.java index dc640c95b515..cfb582ef442e 100644 --- a/core/java/android/os/HwParcel.java +++ b/core/java/android/os/HwParcel.java @@ -21,6 +21,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import libcore.util.NativeAllocationRegistry; @@ -49,6 +50,7 @@ public class HwParcel { private static final NativeAllocationRegistry sNativeRegistry; + @UnsupportedAppUsage private HwParcel(boolean allocate) { native_setup(allocate); diff --git a/core/java/android/os/HwRemoteBinder.java b/core/java/android/os/HwRemoteBinder.java index a07e42c720c5..72ec958ca6d6 100644 --- a/core/java/android/os/HwRemoteBinder.java +++ b/core/java/android/os/HwRemoteBinder.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import libcore.util.NativeAllocationRegistry; /** @hide */ @@ -24,6 +25,7 @@ public class HwRemoteBinder implements IHwBinder { private static final NativeAllocationRegistry sNativeRegistry; + @UnsupportedAppUsage public HwRemoteBinder() { native_setup_empty(); diff --git a/core/java/android/os/IBinder.java b/core/java/android/os/IBinder.java index e74b0bb9e3f0..83f88ad41cfc 100644 --- a/core/java/android/os/IBinder.java +++ b/core/java/android/os/IBinder.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import java.io.FileDescriptor; @@ -149,6 +150,7 @@ public interface IBinder { int LIKE_TRANSACTION = ('_'<<24)|('L'<<16)|('I'<<8)|'K'; /** @hide */ + @UnsupportedAppUsage int SYSPROPS_TRANSACTION = ('_'<<24)|('S'<<16)|('P'<<8)|'R'; /** diff --git a/core/java/android/os/IDeviceIdleController.aidl b/core/java/android/os/IDeviceIdleController.aidl index 827170144dea..974745f5f0cb 100644 --- a/core/java/android/os/IDeviceIdleController.aidl +++ b/core/java/android/os/IDeviceIdleController.aidl @@ -39,6 +39,7 @@ interface IDeviceIdleController { int[] getAppIdTempWhitelist(); boolean isPowerSaveWhitelistExceptIdleApp(String name); boolean isPowerSaveWhitelistApp(String name); + @UnsupportedAppUsage void addPowerSaveTempWhitelistApp(String name, long duration, int userId, String reason); long addPowerSaveTempWhitelistAppForMms(String name, int userId, String reason); long addPowerSaveTempWhitelistAppForSms(String name, int userId, String reason); diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl index 8ced7225b0d4..f62a999a7d39 100644 --- a/core/java/android/os/INetworkManagementService.aidl +++ b/core/java/android/os/INetworkManagementService.aidl @@ -38,11 +38,13 @@ interface INetworkManagementService /** * Register an observer to receive events. */ + @UnsupportedAppUsage void registerObserver(INetworkManagementEventObserver obs); /** * Unregister an observer from receiving events. */ + @UnsupportedAppUsage void unregisterObserver(INetworkManagementEventObserver obs); /** @@ -54,16 +56,19 @@ interface INetworkManagementService * Retrieves the specified interface config * */ + @UnsupportedAppUsage InterfaceConfiguration getInterfaceConfig(String iface); /** * Sets the configuration of the specified interface */ + @UnsupportedAppUsage void setInterfaceConfig(String iface, in InterfaceConfiguration cfg); /** * Clear all IP addresses on the specified interface */ + @UnsupportedAppUsage void clearInterfaceAddresses(String iface); /** @@ -79,22 +84,26 @@ interface INetworkManagementService /** * Set interface IPv6 privacy extensions */ + @UnsupportedAppUsage void setInterfaceIpv6PrivacyExtensions(String iface, boolean enable); /** * Disable IPv6 on an interface */ + @UnsupportedAppUsage void disableIpv6(String iface); /** * Enable IPv6 on an interface */ + @UnsupportedAppUsage void enableIpv6(String iface); /** * Set IPv6 autoconf address generation mode. * This is a no-op if an unsupported mode is requested. */ + @UnsupportedAppUsage void setIPv6AddrGenMode(String iface, int mode); /** @@ -124,37 +133,44 @@ interface INetworkManagementService /** * Returns true if IP forwarding is enabled */ + @UnsupportedAppUsage boolean getIpForwardingEnabled(); /** * Enables/Disables IP Forwarding */ + @UnsupportedAppUsage void setIpForwardingEnabled(boolean enabled); /** * Start tethering services with the specified dhcp server range * arg is a set of start end pairs defining the ranges. */ + @UnsupportedAppUsage void startTethering(in String[] dhcpRanges); /** * Stop currently running tethering services */ + @UnsupportedAppUsage void stopTethering(); /** * Returns true if tethering services are started */ + @UnsupportedAppUsage boolean isTetheringStarted(); /** * Tethers the specified interface */ + @UnsupportedAppUsage void tetherInterface(String iface); /** * Untethers the specified interface */ + @UnsupportedAppUsage void untetherInterface(String iface); /** @@ -189,11 +205,13 @@ interface INetworkManagementService * The address and netmask of the external interface is used for * the NAT'ed network. */ + @UnsupportedAppUsage void enableNat(String internalInterface, String externalInterface); /** * Disables Network Address Translation between two interfaces. */ + @UnsupportedAppUsage void disableNat(String internalInterface, String externalInterface); /** @@ -311,6 +329,7 @@ interface INetworkManagementService /** * Return status of bandwidth control module. */ + @UnsupportedAppUsage boolean isBandwidthControlEnabled(); /** diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index 13e4e38df5f6..93b80aa9fee9 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -40,10 +40,14 @@ interface IPowerManager void updateWakeLockWorkSource(IBinder lock, in WorkSource ws, String historyTag); boolean isWakeLockLevelSupported(int level); + @UnsupportedAppUsage void userActivity(long time, int event, int flags); + @UnsupportedAppUsage void wakeUp(long time, String reason, String opPackageName); + @UnsupportedAppUsage void goToSleep(long time, int reason, int flags); void nap(long time); + @UnsupportedAppUsage boolean isInteractive(); boolean isPowerSaveMode(); PowerSaveState getPowerSaveState(int serviceType); @@ -51,6 +55,7 @@ interface IPowerManager boolean isDeviceIdleMode(); boolean isLightDeviceIdleMode(); + @UnsupportedAppUsage void reboot(boolean confirm, String reason, boolean wait); void rebootSafeMode(boolean confirm, boolean wait); void shutdown(boolean confirm, String reason, boolean wait); diff --git a/core/java/android/os/IRemoteCallback.aidl b/core/java/android/os/IRemoteCallback.aidl index f0c6c73ee8fd..71f3b066bb80 100644 --- a/core/java/android/os/IRemoteCallback.aidl +++ b/core/java/android/os/IRemoteCallback.aidl @@ -21,5 +21,6 @@ import android.os.Bundle; /** @hide */ oneway interface IRemoteCallback { + @UnsupportedAppUsage void sendResult(in Bundle data); } diff --git a/core/java/android/os/IServiceManager.java b/core/java/android/os/IServiceManager.java index 89bf7b98a6c0..bc0690dbceab 100644 --- a/core/java/android/os/IServiceManager.java +++ b/core/java/android/os/IServiceManager.java @@ -16,6 +16,8 @@ package android.os; +import android.annotation.UnsupportedAppUsage; + /** * Basic interface for finding and publishing system services. * @@ -33,12 +35,14 @@ public interface IServiceManager extends IInterface * service manager. Blocks for a few seconds waiting for it to be * published if it does not already exist. */ + @UnsupportedAppUsage IBinder getService(String name) throws RemoteException; /** * Retrieve an existing service called @a name from the * service manager. Non-blocking. */ + @UnsupportedAppUsage IBinder checkService(String name) throws RemoteException; /** diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl index 3017f258ed2d..24afb56da1c0 100644 --- a/core/java/android/os/IUserManager.aidl +++ b/core/java/android/os/IUserManager.aidl @@ -59,6 +59,7 @@ interface IUserManager { boolean canAddMoreManagedProfiles(int userHandle, boolean allowedToRemoveOne); UserInfo getProfileParent(int userHandle); boolean isSameProfileGroup(int userHandle, int otherUserHandle); + @UnsupportedAppUsage UserInfo getUserInfo(int userHandle); String getUserAccount(int userHandle); void setUserAccount(int userHandle, String accountName); diff --git a/core/java/android/os/LocaleList.java b/core/java/android/os/LocaleList.java index 87e1b7d21f53..6da72aaf8aa4 100644 --- a/core/java/android/os/LocaleList.java +++ b/core/java/android/os/LocaleList.java @@ -20,6 +20,7 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Size; +import android.annotation.UnsupportedAppUsage; import android.content.LocaleProto; import android.icu.util.ULocale; import android.util.proto.ProtoOutputStream; @@ -558,6 +559,7 @@ public final class LocaleList implements Parcelable { * * {@hide} */ + @UnsupportedAppUsage public static void setDefault(@NonNull @Size(min=1) LocaleList locales, int localeIndex) { if (locales == null) { throw new NullPointerException("locales is null"); diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java index 684a8ee43c87..a7d59e5c1553 100644 --- a/core/java/android/os/Looper.java +++ b/core/java/android/os/Looper.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.os.LooperProto; import android.util.Log; import android.util.Printer; @@ -68,12 +69,16 @@ public final class Looper { private static final String TAG = "Looper"; // sThreadLocal.get() will return null unless you've called prepare(). + @UnsupportedAppUsage static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); + @UnsupportedAppUsage private static Looper sMainLooper; // guarded by Looper.class + @UnsupportedAppUsage final MessageQueue mQueue; final Thread mThread; + @UnsupportedAppUsage private Printer mLogging; private long mTraceTag; @@ -290,6 +295,7 @@ public final class Looper { } /** {@hide} */ + @UnsupportedAppUsage public void setTraceTag(long traceTag) { mTraceTag = traceTag; } diff --git a/core/java/android/os/MemoryFile.java b/core/java/android/os/MemoryFile.java index ff3258f806c9..5a1e3d429830 100644 --- a/core/java/android/os/MemoryFile.java +++ b/core/java/android/os/MemoryFile.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.system.ErrnoException; import java.io.FileDescriptor; @@ -40,7 +41,9 @@ public class MemoryFile { private static String TAG = "MemoryFile"; // Returns 'true' if purged, 'false' otherwise + @UnsupportedAppUsage private static native boolean native_pin(FileDescriptor fd, boolean pin) throws IOException; + @UnsupportedAppUsage private static native int native_get_size(FileDescriptor fd) throws IOException; private SharedMemory mSharedMemory; @@ -79,6 +82,7 @@ public class MemoryFile { * * @hide */ + @UnsupportedAppUsage void deactivate() { if (mMapping != null) { SharedMemory.unmap(mMapping); @@ -222,6 +226,7 @@ public class MemoryFile { * * @hide */ + @UnsupportedAppUsage public FileDescriptor getFileDescriptor() throws IOException { return mSharedMemory.getFileDescriptor(); } @@ -234,6 +239,7 @@ public class MemoryFile { * * @hide */ + @UnsupportedAppUsage public static int getSize(FileDescriptor fd) throws IOException { return native_get_size(fd); } diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java index 47659a295c50..3d77711b7c61 100644 --- a/core/java/android/os/Message.java +++ b/core/java/android/os/Message.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.os.MessageProto; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; @@ -96,17 +97,22 @@ public final class Message implements Parcelable { /** Flags to clear in the copyFrom method */ /*package*/ static final int FLAGS_TO_CLEAR_ON_COPY_FROM = FLAG_IN_USE; + @UnsupportedAppUsage /*package*/ int flags; + @UnsupportedAppUsage /*package*/ long when; /*package*/ Bundle data; + @UnsupportedAppUsage /*package*/ Handler target; + @UnsupportedAppUsage /*package*/ Runnable callback; // sometimes we store linked lists of these things + @UnsupportedAppUsage /*package*/ Message next; @@ -292,6 +298,7 @@ public final class Message implements Parcelable { * Recycles a Message that may be in-use. * Used internally by the MessageQueue and Looper when disposing of queued Messages. */ + @UnsupportedAppUsage void recycleUnchecked() { // Mark the message as in use while it remains in the recycled object pool. // Clear out all other details. @@ -373,6 +380,7 @@ public final class Message implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public Message setCallback(Runnable r) { callback = r; return this; @@ -486,6 +494,7 @@ public final class Message implements Parcelable { return ((flags & FLAG_IN_USE) == FLAG_IN_USE); } + @UnsupportedAppUsage /*package*/ void markInUse() { flags |= FLAG_IN_USE; } @@ -500,6 +509,7 @@ public final class Message implements Parcelable { return toString(SystemClock.uptimeMillis()); } + @UnsupportedAppUsage String toString(long now) { StringBuilder b = new StringBuilder(); b.append("{ when="); diff --git a/core/java/android/os/MessageQueue.java b/core/java/android/os/MessageQueue.java index b1c33c2dac00..183ef8b281ee 100644 --- a/core/java/android/os/MessageQueue.java +++ b/core/java/android/os/MessageQueue.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.os.MessageQueueProto; import android.util.Log; import android.util.Printer; @@ -42,12 +43,16 @@ public final class MessageQueue { private static final boolean DEBUG = false; // True if the message queue can be quit. + @UnsupportedAppUsage private final boolean mQuitAllowed; + @UnsupportedAppUsage @SuppressWarnings("unused") private long mPtr; // used by native code + @UnsupportedAppUsage Message mMessages; + @UnsupportedAppUsage private final ArrayList<IdleHandler> mIdleHandlers = new ArrayList<IdleHandler>(); private SparseArray<FileDescriptorRecord> mFileDescriptorRecords; private IdleHandler[] mPendingIdleHandlers; @@ -58,10 +63,12 @@ public final class MessageQueue { // The next barrier token. // Barriers are indicated by messages with a null target whose arg1 field carries the token. + @UnsupportedAppUsage private int mNextBarrierToken; private native static long nativeInit(); private native static void nativeDestroy(long ptr); + @UnsupportedAppUsage private native void nativePollOnce(long ptr, int timeoutMillis); /*non-static for callbacks*/ private native static void nativeWake(long ptr); private native static boolean nativeIsPolling(long ptr); @@ -259,6 +266,7 @@ public final class MessageQueue { } // Called from native code. + @UnsupportedAppUsage private int dispatchEvents(int fd, int events) { // Get the file descriptor record and any state that might change. final FileDescriptorRecord record; @@ -307,6 +315,7 @@ public final class MessageQueue { return newWatchedEvents; } + @UnsupportedAppUsage Message next() { // Return here if the message loop has already quit and been disposed. // This can happen if the application tries to restart a looper after quit @@ -458,6 +467,7 @@ public final class MessageQueue { * * @hide */ + @UnsupportedAppUsage public int postSyncBarrier() { return postSyncBarrier(SystemClock.uptimeMillis()); } @@ -501,6 +511,7 @@ public final class MessageQueue { * * @hide */ + @UnsupportedAppUsage public void removeSyncBarrier(int token) { // Remove a sync barrier token from the queue. // If the queue is no longer stalled by a barrier then wake it. @@ -604,6 +615,7 @@ public final class MessageQueue { } } + @UnsupportedAppUsage boolean hasMessages(Handler h, Runnable r, Object object) { if (h == null) { return false; diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 210404ce4d71..ae743fbda482 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -17,6 +17,7 @@ package android.os; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; @@ -196,6 +197,7 @@ public final class Parcel { private static final boolean DEBUG_ARRAY_MAP = false; private static final String TAG = "Parcel"; + @UnsupportedAppUsage @SuppressWarnings({"UnusedDeclaration"}) private long mNativePtr; // used by native code @@ -445,9 +447,11 @@ public final class Parcel { } /** @hide */ + @UnsupportedAppUsage public static native long getGlobalAllocSize(); /** @hide */ + @UnsupportedAppUsage public static native long getGlobalAllocCount(); /** @@ -641,6 +645,7 @@ public final class Parcel { * {@hide} * {@SystemApi} */ + @UnsupportedAppUsage public final void writeBlob(byte[] b) { writeBlob(b, 0, (b != null) ? b.length : 0); } @@ -724,6 +729,7 @@ public final class Parcel { * growing dataCapacity() if needed. * @hide */ + @UnsupportedAppUsage public final void writeCharSequence(CharSequence val) { TextUtils.writeToParcel(val, this, 0); } @@ -882,6 +888,7 @@ public final class Parcel { /** * @hide For testing only. */ + @UnsupportedAppUsage public void writeArrayMap(ArrayMap<String, Object> val) { writeArrayMapInternal(val); } @@ -893,6 +900,7 @@ public final class Parcel { * * @hide */ + @UnsupportedAppUsage public void writeArraySet(@Nullable ArraySet<? extends Object> val) { final int size = (val != null) ? val.size() : -1; writeInt(size); @@ -1454,6 +1462,7 @@ public final class Parcel { * @see #readParcelableList(List, ClassLoader) * @hide */ + @UnsupportedAppUsage public final <T extends Parcelable> void writeParcelableList(List<T> val, int flags) { if (val == null) { writeInt(-1); @@ -1683,6 +1692,7 @@ public final class Parcel { } /** @hide */ + @UnsupportedAppUsage public final void writeParcelableCreator(Parcelable p) { String name = p.getClass().getName(); writeString(name); @@ -1881,6 +1891,7 @@ public final class Parcel { * * @hide */ + @UnsupportedAppUsage public final int readExceptionCode() { int code = readInt(); if (code == EX_HAS_REPLY_HEADER) { @@ -2023,6 +2034,7 @@ public final class Parcel { * Read a CharSequence value from the parcel at the current dataPosition(). * @hide */ + @UnsupportedAppUsage public final CharSequence readCharSequence() { return TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(this); } @@ -2043,6 +2055,7 @@ public final class Parcel { } /** {@hide} */ + @UnsupportedAppUsage public final FileDescriptor readRawFileDescriptor() { return nativeReadFileDescriptor(mNativePtr); } @@ -2225,6 +2238,7 @@ public final class Parcel { * {@hide} * {@SystemApi} */ + @UnsupportedAppUsage public final byte[] readBlob() { return nativeReadBlob(mNativePtr); } @@ -2233,6 +2247,7 @@ public final class Parcel { * Read and return a String[] object from the parcel. * {@hide} */ + @UnsupportedAppUsage public final String[] readStringArray() { String[] array = null; @@ -2519,6 +2534,7 @@ public final class Parcel { * @see #writeParcelableList(List, int) * @hide */ + @UnsupportedAppUsage public final <T extends Parcelable> List<T> readParcelableList(List<T> list, ClassLoader cl) { final int N = readInt(); if (N == -1) { @@ -2761,6 +2777,7 @@ public final class Parcel { } /** @hide */ + @UnsupportedAppUsage @SuppressWarnings("unchecked") public final <T extends Parcelable> T readCreator(Parcelable.Creator<?> creator, ClassLoader loader) { @@ -2773,6 +2790,7 @@ public final class Parcel { } /** @hide */ + @UnsupportedAppUsage public final Parcelable.Creator<?> readParcelableCreator(ClassLoader loader) { String name = readString(); if (name == null) { @@ -3050,6 +3068,7 @@ public final class Parcel { /** * @hide For testing only. */ + @UnsupportedAppUsage public void readArrayMap(ArrayMap outVal, ClassLoader loader) { final int N = readInt(); if (N < 0) { @@ -3065,6 +3084,7 @@ public final class Parcel { * * @hide */ + @UnsupportedAppUsage public @Nullable ArraySet<? extends Object> readArraySet(ClassLoader loader) { final int size = readInt(); if (size < 0) { diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java index a89fc095b403..36ffd7a738c8 100644 --- a/core/java/android/os/ParcelFileDescriptor.java +++ b/core/java/android/os/ParcelFileDescriptor.java @@ -33,6 +33,7 @@ import static android.system.OsConstants.S_ISLNK; import static android.system.OsConstants.S_ISREG; import static android.system.OsConstants.S_IWOTH; +import android.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.ContentProvider; import android.os.MessageQueue.OnFileDescriptorEventListener; @@ -178,6 +179,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { } /** {@hide} */ + @UnsupportedAppUsage public ParcelFileDescriptor(FileDescriptor fd) { this(fd, null); } @@ -375,7 +377,11 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { /** * Take ownership of a raw native fd in to a new ParcelFileDescriptor. * The returned ParcelFileDescriptor now owns the given fd, and will be - * responsible for closing it. You must not close the fd yourself. + * responsible for closing it. + * <p> + * <strong>WARNING:</strong> You must not close the fd yourself after + * this call, and ownership of the file descriptor must have been + * released prior to the call to this function. * * @param fd The native fd that the ParcelFileDescriptor should adopt. * @@ -394,6 +400,16 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { * ParcelFileDescriptor holds a dup of the original FileDescriptor in * the Socket, so you must still close the Socket as well as the new * ParcelFileDescriptor. + * <p> + * <strong>WARNING:</strong> Prior to API level 29, this function would not + * actually dup the Socket's FileDescriptor, and would take a + * reference to the its internal FileDescriptor instead. If the Socket + * gets garbage collected before the ParcelFileDescriptor, this may + * lead to the ParcelFileDescriptor being unexpectedly closed. To avoid + * this, the following pattern can be used: + * <pre>{@code + * ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket).dup(); + * }</pre> * * @param socket The Socket whose FileDescriptor is used to create * a new ParcelFileDescriptor. @@ -417,6 +433,16 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { * new ParcelFileDescriptor holds a dup of the original FileDescriptor in * the DatagramSocket, so you must still close the DatagramSocket as well * as the new ParcelFileDescriptor. + * <p> + * <strong>WARNING:</strong> Prior to API level 29, this function would not + * actually dup the DatagramSocket's FileDescriptor, and would take a + * reference to the its internal FileDescriptor instead. If the DatagramSocket + * gets garbage collected before the ParcelFileDescriptor, this may + * lead to the ParcelFileDescriptor being unexpectedly closed. To avoid + * this, the following pattern can be used: + * <pre>{@code + * ParcelFileDescriptor pfd = ParcelFileDescriptor.fromDatagramSocket(socket).dup(); + * }</pre> * * @param datagramSocket The DatagramSocket whose FileDescriptor is used * to create a new ParcelFileDescriptor. @@ -553,6 +579,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { * @return A ParcelFileDescriptor. * @throws IOException if there is an error while creating the shared memory area. */ + @UnsupportedAppUsage @Deprecated public static ParcelFileDescriptor fromData(byte[] data, String name) throws IOException { if (data == null) return null; @@ -605,6 +632,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { * * @hide */ + @UnsupportedAppUsage public static File getFile(FileDescriptor fd) throws IOException { try { final String path = Os.readlink("/proc/self/fd/" + fd.getInt$()); @@ -658,6 +686,7 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { * and I really don't think we want it to be public. * @hide */ + @UnsupportedAppUsage public long seekTo(long pos) throws IOException { if (mWrapped != null) { return mWrapped.seekTo(pos); @@ -674,6 +703,9 @@ public class ParcelFileDescriptor implements Parcelable, Closeable { * Return the native fd int for this ParcelFileDescriptor. The * ParcelFileDescriptor still owns the fd, and it still must be closed * through this API. + * <p> + * <strong>WARNING:</strong> Do not call close on the return value of this + * function or pass it to a function that assumes ownership of the fd. */ public int getFd() { if (mWrapped != null) { diff --git a/core/java/android/os/ParcelableParcel.java b/core/java/android/os/ParcelableParcel.java index 5bbe6488d514..61f39686c9e6 100644 --- a/core/java/android/os/ParcelableParcel.java +++ b/core/java/android/os/ParcelableParcel.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.util.MathUtils; /** @@ -26,6 +27,7 @@ public class ParcelableParcel implements Parcelable { final Parcel mParcel; final ClassLoader mClassLoader; + @UnsupportedAppUsage public ParcelableParcel(ClassLoader loader) { mParcel = Parcel.obtain(); mClassLoader = loader; @@ -44,11 +46,13 @@ public class ParcelableParcel implements Parcelable { mParcel.appendFrom(src, pos, size); } + @UnsupportedAppUsage public Parcel getParcel() { mParcel.setDataPosition(0); return mParcel; } + @UnsupportedAppUsage public ClassLoader getClassLoader() { return mClassLoader; } @@ -64,6 +68,7 @@ public class ParcelableParcel implements Parcelable { dest.appendFrom(mParcel, 0, mParcel.dataSize()); } + @UnsupportedAppUsage public static final Parcelable.ClassLoaderCreator<ParcelableParcel> CREATOR = new Parcelable.ClassLoaderCreator<ParcelableParcel>() { public ParcelableParcel createFromParcel(Parcel in) { diff --git a/core/java/android/os/PerformanceCollector.java b/core/java/android/os/PerformanceCollector.java index be1cf6df6b92..33c86b8b05b9 100644 --- a/core/java/android/os/PerformanceCollector.java +++ b/core/java/android/os/PerformanceCollector.java @@ -17,6 +17,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import java.util.ArrayList; /** @@ -285,6 +286,7 @@ public class PerformanceCollector { private long mCpuTime; private long mExecTime; + @UnsupportedAppUsage public PerformanceCollector() { } @@ -302,6 +304,7 @@ public class PerformanceCollector { * @param label description of code block between beginSnapshot and * endSnapshot, used to label output */ + @UnsupportedAppUsage public void beginSnapshot(String label) { if (mPerfWriter != null) mPerfWriter.writeBeginSnapshot(label); @@ -346,6 +349,7 @@ public class PerformanceCollector { * <li>{@link #METRIC_KEY_OTHER_SHARED_DIRTY other_shared_dirty} * </ul> */ + @UnsupportedAppUsage public Bundle endSnapshot() { endPerformanceSnapshot(); if (mPerfWriter != null) @@ -359,6 +363,7 @@ public class PerformanceCollector { * @param label description of code block between startTiming and * stopTiming, used to label output */ + @UnsupportedAppUsage public void startTiming(String label) { if (mPerfWriter != null) mPerfWriter.writeStartTiming(label); @@ -408,6 +413,7 @@ public class PerformanceCollector { * between calls to startTiming and stopTiming. List of iterations * is keyed by {@link #METRIC_KEY_ITERATIONS iterations}. */ + @UnsupportedAppUsage public Bundle stopTiming(String label) { addIteration(label); if (mPerfWriter != null) diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 9c258487447e..cae54f5c16d3 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -22,6 +22,7 @@ import android.annotation.SdkConstant; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.util.Log; import android.util.proto.ProtoOutputStream; @@ -282,6 +283,7 @@ public final class PowerManager { * Brightness value for fully on. * @hide */ + @UnsupportedAppUsage public static final int BRIGHTNESS_ON = 255; /** @@ -364,6 +366,7 @@ public final class PowerManager { * Go to sleep reason code: Going to sleep due to a screen timeout. * @hide */ + @UnsupportedAppUsage public static final int GO_TO_SLEEP_REASON_TIMEOUT = 2; /** @@ -608,6 +611,7 @@ public final class PowerManager { public @interface LocationPowerSaveMode {} final Context mContext; + @UnsupportedAppUsage final IPowerManager mService; final Handler mHandler; @@ -628,6 +632,7 @@ public final class PowerManager { * this is the minimum value that can be set by the user. * @hide */ + @UnsupportedAppUsage public int getMinimumScreenBrightnessSetting() { return mContext.getResources().getInteger( com.android.internal.R.integer.config_screenBrightnessSettingMinimum); @@ -639,6 +644,7 @@ public final class PowerManager { * this is the maximum value that can be set by the user. * @hide */ + @UnsupportedAppUsage public int getMaximumScreenBrightnessSetting() { return mContext.getResources().getInteger( com.android.internal.R.integer.config_screenBrightnessSettingMaximum); @@ -648,6 +654,7 @@ public final class PowerManager { * Gets the default screen brightness setting. * @hide */ + @UnsupportedAppUsage public int getDefaultScreenBrightnessSetting() { return mContext.getResources().getInteger( com.android.internal.R.integer.config_screenBrightnessSettingDefault); @@ -762,6 +769,7 @@ public final class PowerManager { } /** @hide */ + @UnsupportedAppUsage public static void validateWakeLockParameters(int levelAndFlags, String tag) { switch (levelAndFlags & WAKE_LOCK_LEVEL_MASK) { case PARTIAL_WAKE_LOCK: @@ -894,6 +902,7 @@ public final class PowerManager { * * @hide Requires signature permission. */ + @UnsupportedAppUsage public void goToSleep(long time, int reason, int flags) { try { mService.goToSleep(time, reason, flags); @@ -932,6 +941,7 @@ public final class PowerManager { /** * @hide */ + @UnsupportedAppUsage public void wakeUp(long time, String reason) { try { mService.wakeUp(time, reason, mContext.getOpPackageName()); @@ -1142,6 +1152,7 @@ public final class PowerManager { * * @hide */ + @UnsupportedAppUsage public boolean setPowerSaveMode(boolean mode) { try { return mService.setPowerSaveMode(mode); @@ -1217,6 +1228,7 @@ public final class PowerManager { * restrictions have been lifted. * @hide */ + @UnsupportedAppUsage public boolean isLightDeviceIdleMode() { try { return mService.isLightDeviceIdleMode(); @@ -1339,6 +1351,7 @@ public final class PowerManager { * This broadcast is only sent to registered receivers. * @hide */ + @UnsupportedAppUsage @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED = "android.os.action.LIGHT_DEVICE_IDLE_MODE_CHANGED"; @@ -1365,11 +1378,13 @@ public final class PowerManager { * * @hide */ + @UnsupportedAppUsage @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_POWER_SAVE_MODE_CHANGING = "android.os.action.POWER_SAVE_MODE_CHANGING"; /** @hide */ + @UnsupportedAppUsage public static final String EXTRA_POWER_SAVE_MODE = "mode"; /** @@ -1401,7 +1416,9 @@ public final class PowerManager { * </p> */ public final class WakeLock { + @UnsupportedAppUsage private int mFlags; + @UnsupportedAppUsage private String mTag; private final String mPackageName; private final IBinder mToken; diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 64d14c0b51ca..b986669ed198 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -17,6 +17,7 @@ package android.os; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.system.Os; import android.system.OsConstants; import android.webkit.WebViewZygote; @@ -58,30 +59,35 @@ public class Process { * Defines the UID/GID for the log group. * @hide */ + @UnsupportedAppUsage public static final int LOG_UID = 1007; /** * Defines the UID/GID for the WIFI supplicant process. * @hide */ + @UnsupportedAppUsage public static final int WIFI_UID = 1010; /** * Defines the UID/GID for the mediaserver process. * @hide */ + @UnsupportedAppUsage public static final int MEDIA_UID = 1013; /** * Defines the UID/GID for the DRM process. * @hide */ + @UnsupportedAppUsage public static final int DRM_UID = 1019; /** * Defines the UID/GID for the group that controls VPN services. * @hide */ + @UnsupportedAppUsage public static final int VPN_UID = 1016; /** @@ -94,6 +100,7 @@ public class Process { * Defines the UID/GID for the NFC service process. * @hide */ + @UnsupportedAppUsage public static final int NFC_UID = 1027; /** @@ -565,6 +572,7 @@ public class Process { * Returns the identifier of this process' parent. * @hide */ + @UnsupportedAppUsage public static final int myPpid() { return Os.getppid(); } @@ -623,6 +631,7 @@ public class Process { } /** {@hide} */ + @UnsupportedAppUsage public static final boolean isIsolated(int uid) { uid = UserHandle.getAppId(uid); return uid >= FIRST_ISOLATED_UID && uid <= LAST_ISOLATED_UID; @@ -648,6 +657,7 @@ public class Process { * @return the uid of the process, or -1 if the process is not running. * @hide pending API council review */ + @UnsupportedAppUsage public static final int getUidForPid(int pid) { String[] procStatusLabels = { "Uid:" }; long[] procStatusValues = new long[1]; @@ -662,6 +672,7 @@ public class Process { * @return the parent process id of the process, or -1 if the process is not running. * @hide */ + @UnsupportedAppUsage public static final int getParentPid(int pid) { String[] procStatusLabels = { "PPid:" }; long[] procStatusValues = new long[1]; @@ -765,6 +776,7 @@ public class Process { * * Always sets cpusets. */ + @UnsupportedAppUsage public static final native void setProcessGroup(int pid, int group) throws IllegalArgumentException, SecurityException; @@ -906,6 +918,7 @@ public class Process { * * {@hide} */ + @UnsupportedAppUsage public static final native void setArgV0(String text); /** @@ -956,50 +969,67 @@ public class Process { public static final native void sendSignalQuiet(int pid, int signal); /** @hide */ + @UnsupportedAppUsage public static final native long getFreeMemory(); /** @hide */ + @UnsupportedAppUsage public static final native long getTotalMemory(); /** @hide */ + @UnsupportedAppUsage public static final native void readProcLines(String path, String[] reqFields, long[] outSizes); /** @hide */ + @UnsupportedAppUsage public static final native int[] getPids(String path, int[] lastArray); /** @hide */ + @UnsupportedAppUsage public static final int PROC_TERM_MASK = 0xff; /** @hide */ + @UnsupportedAppUsage public static final int PROC_ZERO_TERM = 0; /** @hide */ + @UnsupportedAppUsage public static final int PROC_SPACE_TERM = (int)' '; /** @hide */ + @UnsupportedAppUsage public static final int PROC_TAB_TERM = (int)'\t'; /** @hide */ + @UnsupportedAppUsage public static final int PROC_COMBINE = 0x100; /** @hide */ + @UnsupportedAppUsage public static final int PROC_PARENS = 0x200; /** @hide */ + @UnsupportedAppUsage public static final int PROC_QUOTES = 0x400; /** @hide */ public static final int PROC_CHAR = 0x800; /** @hide */ + @UnsupportedAppUsage public static final int PROC_OUT_STRING = 0x1000; /** @hide */ + @UnsupportedAppUsage public static final int PROC_OUT_LONG = 0x2000; /** @hide */ + @UnsupportedAppUsage public static final int PROC_OUT_FLOAT = 0x4000; /** @hide */ + @UnsupportedAppUsage public static final native boolean readProcFile(String file, int[] format, String[] outStrings, long[] outLongs, float[] outFloats); /** @hide */ + @UnsupportedAppUsage public static final native boolean parseProcLine(byte[] buffer, int startIndex, int endIndex, int[] format, String[] outStrings, long[] outLongs, float[] outFloats); /** @hide */ + @UnsupportedAppUsage public static final native int[] getPidsForCommands(String[] cmds); /** @@ -1010,6 +1040,7 @@ public class Process { * or -1 if the value cannot be determined * @hide */ + @UnsupportedAppUsage public static final native long getPss(int pid); /** diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java index 3ee54ceebaa9..6a01e56cdf52 100644 --- a/core/java/android/os/RecoverySystem.java +++ b/core/java/android/os/RecoverySystem.java @@ -22,6 +22,7 @@ import android.annotation.RequiresPermission; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.ContentResolver; @@ -355,6 +356,7 @@ public class RecoverySystem { * * @return the verification result. */ + @UnsupportedAppUsage private static boolean verifyPackageCompatibility(InputStream inputStream) throws IOException { ArrayList<String> list = new ArrayList<>(); ZipInputStream zis = new ZipInputStream(inputStream); diff --git a/core/java/android/os/Registrant.java b/core/java/android/os/Registrant.java index 705cc5d75b72..8fb123aa3da4 100644 --- a/core/java/android/os/Registrant.java +++ b/core/java/android/os/Registrant.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.os.Handler; import android.os.Message; @@ -24,6 +25,7 @@ import java.lang.ref.WeakReference; /** @hide */ public class Registrant { + @UnsupportedAppUsage public Registrant(Handler h, int what, Object obj) { @@ -32,6 +34,7 @@ public class Registrant userObj = obj; } + @UnsupportedAppUsage public void clear() { @@ -39,12 +42,14 @@ public class Registrant userObj = null; } + @UnsupportedAppUsage public void notifyRegistrant() { internalNotifyRegistrant (null, null); } + @UnsupportedAppUsage public void notifyResult(Object result) { @@ -60,6 +65,7 @@ public class Registrant /** * This makes a copy of @param ar */ + @UnsupportedAppUsage public void notifyRegistrant(AsyncResult ar) { @@ -88,6 +94,7 @@ public class Registrant * NOTE: May return null if weak reference has been collected */ + @UnsupportedAppUsage public Message messageForRegistrant() { diff --git a/core/java/android/os/RegistrantList.java b/core/java/android/os/RegistrantList.java index 9ab61f5954cc..6e562ffc88ea 100644 --- a/core/java/android/os/RegistrantList.java +++ b/core/java/android/os/RegistrantList.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.os.Handler; import java.util.ArrayList; @@ -25,12 +26,14 @@ public class RegistrantList { ArrayList registrants = new ArrayList(); // of Registrant + @UnsupportedAppUsage public synchronized void add(Handler h, int what, Object obj) { add(new Registrant(h, what, obj)); } + @UnsupportedAppUsage public synchronized void addUnique(Handler h, int what, Object obj) { @@ -39,6 +42,7 @@ public class RegistrantList add(new Registrant(h, what, obj)); } + @UnsupportedAppUsage public synchronized void add(Registrant r) { @@ -46,6 +50,7 @@ public class RegistrantList registrants.add(r); } + @UnsupportedAppUsage public synchronized void removeCleared() { @@ -58,6 +63,7 @@ public class RegistrantList } } + @UnsupportedAppUsage public synchronized int size() { @@ -79,6 +85,7 @@ public class RegistrantList } } + @UnsupportedAppUsage public /*synchronized*/ void notifyRegistrants() { @@ -91,6 +98,7 @@ public class RegistrantList internalNotifyRegistrants (null, exception); } + @UnsupportedAppUsage public /*synchronized*/ void notifyResult(Object result) { @@ -98,12 +106,14 @@ public class RegistrantList } + @UnsupportedAppUsage public /*synchronized*/ void notifyRegistrants(AsyncResult ar) { internalNotifyRegistrants(ar.result, ar.exception); } + @UnsupportedAppUsage public synchronized void remove(Handler h) { diff --git a/core/java/android/os/RemoteCallbackList.java b/core/java/android/os/RemoteCallbackList.java index bbb8a7b5d5f6..b13e68df3e7c 100644 --- a/core/java/android/os/RemoteCallbackList.java +++ b/core/java/android/os/RemoteCallbackList.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.util.ArrayMap; import android.util.Slog; @@ -53,6 +54,7 @@ import java.util.function.Consumer; public class RemoteCallbackList<E extends IInterface> { private static final String TAG = "RemoteCallbackList"; + @UnsupportedAppUsage /*package*/ ArrayMap<IBinder, Callback> mCallbacks = new ArrayMap<IBinder, Callback>(); private Object[] mActiveBroadcast; diff --git a/core/java/android/os/RemoteException.java b/core/java/android/os/RemoteException.java index 4e8b9716e852..2e673a857a93 100644 --- a/core/java/android/os/RemoteException.java +++ b/core/java/android/os/RemoteException.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.util.AndroidException; /** @@ -54,6 +55,7 @@ public class RemoteException extends AndroidException { * * @hide */ + @UnsupportedAppUsage public RuntimeException rethrowFromSystemServer() { if (this instanceof DeadObjectException) { throw new RuntimeException(new DeadSystemException()); diff --git a/core/java/android/os/SELinux.java b/core/java/android/os/SELinux.java index a96618a92cc6..8ffafe4bc364 100644 --- a/core/java/android/os/SELinux.java +++ b/core/java/android/os/SELinux.java @@ -42,12 +42,14 @@ public class SELinux { * Determine whether SELinux is disabled or enabled. * @return a boolean indicating whether SELinux is enabled. */ + @UnsupportedAppUsage public static final native boolean isSELinuxEnabled(); /** * Determine whether SELinux is permissive or enforcing. * @return a boolean indicating whether SELinux is enforcing. */ + @UnsupportedAppUsage public static final native boolean isSELinuxEnforced(); /** @@ -91,6 +93,7 @@ public class SELinux { * Gets the security context of the current process. * @return a String representing the security context of the current process. */ + @UnsupportedAppUsage public static final native String getContext(); /** @@ -98,6 +101,7 @@ public class SELinux { * @param pid an int representing the process id to check. * @return a String representing the security context of the given pid. */ + @UnsupportedAppUsage public static final native String getPidContext(int pid); /** @@ -108,6 +112,7 @@ public class SELinux { * @param perm The permission name. * @return a boolean indicating whether permission was granted. */ + @UnsupportedAppUsage public static final native boolean checkSELinuxAccess(String scon, String tcon, String tclass, String perm); /** @@ -167,6 +172,7 @@ public class SELinux { * * @return a boolean indicating whether the relabeling succeeded. */ + @UnsupportedAppUsage public static boolean restoreconRecursive(File file) { try { return native_restorecon(file.getCanonicalPath(), SELINUX_ANDROID_RESTORECON_RECURSE); diff --git a/core/java/android/os/ServiceManager.java b/core/java/android/os/ServiceManager.java index 165276d5c17e..b2ba92849133 100644 --- a/core/java/android/os/ServiceManager.java +++ b/core/java/android/os/ServiceManager.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.util.Log; import com.android.internal.annotations.GuardedBy; @@ -30,11 +31,13 @@ public final class ServiceManager { private static final String TAG = "ServiceManager"; private static final Object sLock = new Object(); + @UnsupportedAppUsage private static IServiceManager sServiceManager; /** * Cache for the "well known" services, such as WM and AM. */ + @UnsupportedAppUsage private static HashMap<String, IBinder> sCache = new HashMap<String, IBinder>(); /** @@ -98,6 +101,7 @@ public final class ServiceManager { "getService()", }); + @UnsupportedAppUsage private static IServiceManager getIServiceManager() { if (sServiceManager != null) { return sServiceManager; @@ -115,6 +119,7 @@ public final class ServiceManager { * @param name the name of the service to get * @return a reference to the service, or <code>null</code> if the service doesn't exist */ + @UnsupportedAppUsage public static IBinder getService(String name) { try { IBinder service = sCache.get(name); @@ -151,6 +156,7 @@ public final class ServiceManager { * @param name the name of the new service * @param service the service object */ + @UnsupportedAppUsage public static void addService(String name, IBinder service) { addService(name, service, false, IServiceManager.DUMP_FLAG_PRIORITY_DEFAULT); } @@ -164,6 +170,7 @@ public final class ServiceManager { * @param allowIsolated set to true to allow isolated sandboxed processes * to access this service */ + @UnsupportedAppUsage public static void addService(String name, IBinder service, boolean allowIsolated) { addService(name, service, allowIsolated, IServiceManager.DUMP_FLAG_PRIORITY_DEFAULT); } @@ -178,6 +185,7 @@ public final class ServiceManager { * @param dumpPriority supported dump priority levels as a bitmask * to access this service */ + @UnsupportedAppUsage public static void addService(String name, IBinder service, boolean allowIsolated, int dumpPriority) { try { @@ -191,6 +199,7 @@ public final class ServiceManager { * Retrieve an existing service called @a name from the * service manager. Non-blocking. */ + @UnsupportedAppUsage public static IBinder checkService(String name) { try { IBinder service = sCache.get(name); @@ -210,6 +219,7 @@ public final class ServiceManager { * @return an array of all currently running services, or <code>null</code> in * case of an exception */ + @UnsupportedAppUsage public static String[] listServices() { try { return getIServiceManager().listServices(IServiceManager.DUMP_FLAG_PRIORITY_ALL); diff --git a/core/java/android/os/ServiceManagerNative.java b/core/java/android/os/ServiceManagerNative.java index 589b8c492ab3..b7c026c7f87c 100644 --- a/core/java/android/os/ServiceManagerNative.java +++ b/core/java/android/os/ServiceManagerNative.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import java.util.ArrayList; @@ -30,6 +31,7 @@ public abstract class ServiceManagerNative extends Binder implements IServiceMan * Cast a Binder object into a service manager interface, generating * a proxy if needed. */ + @UnsupportedAppUsage static public IServiceManager asInterface(IBinder obj) { if (obj == null) { @@ -117,6 +119,7 @@ class ServiceManagerProxy implements IServiceManager { return mRemote; } + @UnsupportedAppUsage public IBinder getService(String name) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); @@ -196,5 +199,6 @@ class ServiceManagerProxy implements IServiceManager { data.recycle(); } + @UnsupportedAppUsage private IBinder mRemote; } diff --git a/core/java/android/os/SharedMemory.java b/core/java/android/os/SharedMemory.java index e6c7a1716941..6025c348853c 100644 --- a/core/java/android/os/SharedMemory.java +++ b/core/java/android/os/SharedMemory.java @@ -18,6 +18,7 @@ package android.os; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.system.ErrnoException; import android.system.Os; import android.system.OsConstants; @@ -156,6 +157,7 @@ public final class SharedMemory implements Parcelable, Closeable { * * @hide Exposed for native ASharedMemory_dupFromJava() */ + @UnsupportedAppUsage public int getFd() { return mFileDescriptor.getInt$(); } diff --git a/core/java/android/os/ShellCommand.java b/core/java/android/os/ShellCommand.java index fa05a5e1b22e..0d61a6044097 100644 --- a/core/java/android/os/ShellCommand.java +++ b/core/java/android/os/ShellCommand.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.util.Slog; import com.android.internal.util.FastPrintWriter; @@ -300,6 +301,7 @@ public abstract class ShellCommand { } } + @UnsupportedAppUsage public String peekNextArg() { if (mCurArgData != null) { return mCurArgData; diff --git a/core/java/android/os/StatFs.java b/core/java/android/os/StatFs.java index 4e0b23806555..881d0b4d9c8e 100644 --- a/core/java/android/os/StatFs.java +++ b/core/java/android/os/StatFs.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.system.ErrnoException; import android.system.Os; import android.system.StructStatVfs; @@ -25,6 +26,7 @@ import android.system.StructStatVfs; * wrapper for Unix statvfs(). */ public class StatFs { + @UnsupportedAppUsage private StructStatVfs mStat; /** diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java index f22455047ae5..b396f757dd42 100644 --- a/core/java/android/os/StrictMode.java +++ b/core/java/android/os/StrictMode.java @@ -19,6 +19,7 @@ import android.animation.ValueAnimator; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.IActivityManager; @@ -448,6 +449,7 @@ public final class StrictMode { /** The default, lax policy which doesn't catch anything. */ public static final ThreadPolicy LAX = new ThreadPolicy(0, null, null); + @UnsupportedAppUsage final int mask; final OnThreadViolationListener mListener; final Executor mCallbackExecutor; @@ -738,6 +740,7 @@ public final class StrictMode { /** The default, lax policy which doesn't catch anything. */ public static final VmPolicy LAX = new VmPolicy(0, EMPTY_CLASS_LIMIT_MAP, null, null); + @UnsupportedAppUsage final int mask; final OnVmViolationListener mListener; final Executor mCallbackExecutor; @@ -783,6 +786,7 @@ public final class StrictMode { * </pre> */ public static final class Builder { + @UnsupportedAppUsage private int mMask; private OnVmViolationListener mListener; private Executor mExecutor; @@ -1173,6 +1177,7 @@ public final class StrictMode { * @return the bitmask of all the DETECT_* and PENALTY_* bits currently enabled * @hide */ + @UnsupportedAppUsage public static int getThreadPolicyMask() { return BlockGuard.getThreadPolicy().getPolicyMask(); } @@ -1372,6 +1377,7 @@ public final class StrictMode { * * @hide */ + @UnsupportedAppUsage public static void enableDeathOnFileUriExposure() { sVmPolicy = new VmPolicy( @@ -1389,6 +1395,7 @@ public final class StrictMode { * * @hide */ + @UnsupportedAppUsage public static void disableDeathOnFileUriExposure() { sVmPolicy = new VmPolicy( @@ -1426,6 +1433,7 @@ public final class StrictMode { } } + @UnsupportedAppUsage private static final ThreadLocal<ArrayList<ViolationInfo>> violationsBeingTimed = new ThreadLocal<ArrayList<ViolationInfo>>() { @Override @@ -1840,6 +1848,7 @@ public final class StrictMode { } /** @hide */ + @UnsupportedAppUsage public static void conditionallyCheckInstanceCounts() { VmPolicy policy = getVmPolicy(); int policySize = policy.classInstanceLimit.size(); @@ -1996,6 +2005,7 @@ public final class StrictMode { } /** @hide */ + @UnsupportedAppUsage public static void onWebViewMethodCalledOnWrongThread(Throwable originStack) { onVmPolicyViolation(new WebViewMethodCalledOnWrongThreadViolation(originStack)); } @@ -2063,6 +2073,7 @@ public final class StrictMode { } // Map from VM violation fingerprint to uptime millis. + @UnsupportedAppUsage private static final HashMap<Integer, Long> sLastVmViolationTime = new HashMap<>(); /** @hide */ @@ -2188,6 +2199,7 @@ public final class StrictMode { * Binder for its current (native) thread-local policy value and synchronize it to libcore's * (Java) thread-local policy value. */ + @UnsupportedAppUsage private static void onBinderStrictModePolicyChange(int newPolicy) { setBlockGuardPolicy(newPolicy); } @@ -2224,6 +2236,7 @@ public final class StrictMode { * * @hide */ + @UnsupportedAppUsage public void finish() { ThreadSpanState state = mContainerState; synchronized (state) { @@ -2295,6 +2308,7 @@ public final class StrictMode { } }; + @UnsupportedAppUsage private static Singleton<IWindowManager> sWindowManager = new Singleton<IWindowManager>() { protected IWindowManager create() { @@ -2315,6 +2329,7 @@ public final class StrictMode { * * @hide */ + @UnsupportedAppUsage public static Span enterCriticalSpan(String name) { if (Build.IS_USER) { return NO_OP_SPAN; @@ -2424,6 +2439,7 @@ public final class StrictMode { } /** @hide */ + @UnsupportedAppUsage public static void incrementExpectedActivityCount(Class klass) { if (klass == null) { return; diff --git a/core/java/android/os/SystemClock.java b/core/java/android/os/SystemClock.java index b254166303bc..e695a1b21593 100644 --- a/core/java/android/os/SystemClock.java +++ b/core/java/android/os/SystemClock.java @@ -17,6 +17,7 @@ package android.os; import android.annotation.NonNull; +import android.annotation.UnsupportedAppUsage; import android.app.IAlarmManager; import android.content.Context; import android.util.Slog; @@ -104,6 +105,7 @@ public final class SystemClock { /** * This class is uninstantiable. */ + @UnsupportedAppUsage private SystemClock() { // This space intentionally left blank. } @@ -241,6 +243,7 @@ public final class SystemClock { * * @hide */ + @UnsupportedAppUsage @CriticalNative public static native long currentThreadTimeMicro(); @@ -251,6 +254,7 @@ public final class SystemClock { * * @hide */ + @UnsupportedAppUsage @CriticalNative public static native long currentTimeMicro(); diff --git a/core/java/android/os/SystemProperties.java b/core/java/android/os/SystemProperties.java index 7d3ba6a3cf26..abb47b4fee0f 100644 --- a/core/java/android/os/SystemProperties.java +++ b/core/java/android/os/SystemProperties.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.util.Log; import android.util.MutableInt; @@ -46,11 +47,13 @@ public class SystemProperties { * uses reflection to read this whenever text is selected (http://b/36095274). * @hide */ + @UnsupportedAppUsage public static final int PROP_NAME_MAX = Integer.MAX_VALUE; /** @hide */ public static final int PROP_VALUE_MAX = 91; + @UnsupportedAppUsage @GuardedBy("sChangeCallbacks") private static final ArrayList<Runnable> sChangeCallbacks = new ArrayList<Runnable>(); @@ -78,9 +81,11 @@ public class SystemProperties { } } + @UnsupportedAppUsage private static native String native_get(String key); private static native String native_get(String key, String def); private static native int native_get_int(String key, int def); + @UnsupportedAppUsage private static native long native_get_long(String key, long def); private static native boolean native_get_boolean(String key, boolean def); private static native void native_set(String key, String def); @@ -174,6 +179,7 @@ public class SystemProperties { * @throws IllegalArgumentException if the {@code val} exceeds 91 characters * @hide */ + @UnsupportedAppUsage public static void set(@NonNull String key, @Nullable String val) { if (val != null && !val.startsWith("ro.") && val.length() > PROP_VALUE_MAX) { throw new IllegalArgumentException("value of system property '" + key @@ -190,6 +196,7 @@ public class SystemProperties { * changes. * @hide */ + @UnsupportedAppUsage public static void addChangeCallback(@NonNull Runnable callback) { synchronized (sChangeCallbacks) { if (sChangeCallbacks.size() == 0) { @@ -222,10 +229,12 @@ public class SystemProperties { * Notifies listeners that a system property has changed * @hide */ + @UnsupportedAppUsage public static void reportSyspropChanged() { native_report_sysprop_change(); } + @UnsupportedAppUsage private SystemProperties() { } } diff --git a/core/java/android/os/SystemService.java b/core/java/android/os/SystemService.java index 41e7546784b2..968c761c5ff0 100644 --- a/core/java/android/os/SystemService.java +++ b/core/java/android/os/SystemService.java @@ -18,6 +18,7 @@ package android.os; import com.google.android.collect.Maps; +import android.annotation.UnsupportedAppUsage; import java.util.HashMap; import java.util.concurrent.TimeoutException; @@ -58,11 +59,13 @@ public class SystemService { } /** Request that the init daemon start a named service. */ + @UnsupportedAppUsage public static void start(String name) { SystemProperties.set("ctl.start", name); } /** Request that the init daemon stop a named service. */ + @UnsupportedAppUsage public static void stop(String name) { SystemProperties.set("ctl.stop", name); } diff --git a/core/java/android/os/SystemVibrator.java b/core/java/android/os/SystemVibrator.java index f776c17e56be..c5c113903c0d 100644 --- a/core/java/android/os/SystemVibrator.java +++ b/core/java/android/os/SystemVibrator.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.media.AudioAttributes; import android.util.Log; @@ -31,10 +32,12 @@ public class SystemVibrator extends Vibrator { private final IVibratorService mService; private final Binder mToken = new Binder(); + @UnsupportedAppUsage public SystemVibrator() { mService = IVibratorService.Stub.asInterface(ServiceManager.getService("vibrator")); } + @UnsupportedAppUsage public SystemVibrator(Context context) { super(context); mService = IVibratorService.Stub.asInterface(ServiceManager.getService("vibrator")); diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java index 583f060f2e0c..38e6842cf45c 100644 --- a/core/java/android/os/Trace.java +++ b/core/java/android/os/Trace.java @@ -18,6 +18,7 @@ package android.os; import com.android.internal.os.Zygote; +import android.annotation.UnsupportedAppUsage; import dalvik.annotation.optimization.FastNative; /** @@ -50,6 +51,7 @@ public final class Trace { /** @hide */ public static final long TRACE_TAG_INPUT = 1L << 2; /** @hide */ + @UnsupportedAppUsage public static final long TRACE_TAG_VIEW = 1L << 3; /** @hide */ public static final long TRACE_TAG_WEBVIEW = 1L << 4; @@ -68,6 +70,7 @@ public final class Trace { /** @hide */ public static final long TRACE_TAG_HAL = 1L << 11; /** @hide */ + @UnsupportedAppUsage public static final long TRACE_TAG_APP = 1L << 12; /** @hide */ public static final long TRACE_TAG_RESOURCES = 1L << 13; @@ -100,10 +103,12 @@ public final class Trace { private static final int MAX_SECTION_NAME_LEN = 127; // Must be volatile to avoid word tearing. + @UnsupportedAppUsage private static volatile long sEnabledTags = TRACE_TAG_NOT_READY; private static int sZygoteDebugFlags = 0; + @UnsupportedAppUsage private static native long nativeGetEnabledTags(); private static native void nativeSetAppTracingAllowed(boolean allowed); private static native void nativeSetTracingEnabled(boolean allowed); @@ -167,6 +172,7 @@ public final class Trace { * * @hide */ + @UnsupportedAppUsage public static boolean isTagEnabled(long traceTag) { long tags = sEnabledTags; if (tags == TRACE_TAG_NOT_READY) { @@ -184,6 +190,7 @@ public final class Trace { * * @hide */ + @UnsupportedAppUsage public static void traceCounter(long traceTag, String counterName, int counterValue) { if (isTagEnabled(traceTag)) { nativeTraceCounter(traceTag, counterName, counterValue); @@ -196,6 +203,7 @@ public final class Trace { * * @hide */ + @UnsupportedAppUsage public static void setAppTracingAllowed(boolean allowed) { nativeSetAppTracingAllowed(allowed); @@ -231,6 +239,7 @@ public final class Trace { * * @hide */ + @UnsupportedAppUsage public static void traceBegin(long traceTag, String methodName) { if (isTagEnabled(traceTag)) { nativeTraceBegin(traceTag, methodName); @@ -245,6 +254,7 @@ public final class Trace { * * @hide */ + @UnsupportedAppUsage public static void traceEnd(long traceTag) { if (isTagEnabled(traceTag)) { nativeTraceEnd(traceTag); @@ -264,6 +274,7 @@ public final class Trace { * * @hide */ + @UnsupportedAppUsage public static void asyncTraceBegin(long traceTag, String methodName, int cookie) { if (isTagEnabled(traceTag)) { nativeAsyncTraceBegin(traceTag, methodName, cookie); @@ -281,6 +292,7 @@ public final class Trace { * * @hide */ + @UnsupportedAppUsage public static void asyncTraceEnd(long traceTag, String methodName, int cookie) { if (isTagEnabled(traceTag)) { nativeAsyncTraceEnd(traceTag, methodName, cookie); diff --git a/core/java/android/os/UEventObserver.java b/core/java/android/os/UEventObserver.java index 69a3922585ce..dc98c4267a37 100644 --- a/core/java/android/os/UEventObserver.java +++ b/core/java/android/os/UEventObserver.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.util.Log; import java.util.ArrayList; @@ -49,6 +50,7 @@ public abstract class UEventObserver { private static native void nativeAddMatch(String match); private static native void nativeRemoveMatch(String match); + @UnsupportedAppUsage public UEventObserver() { } @@ -93,6 +95,7 @@ public abstract class UEventObserver { * are expensive to parse. For example, some devices may send one netlink message * for each vsync period. */ + @UnsupportedAppUsage public final void startObserving(String match) { if (match == null || match.isEmpty()) { throw new IllegalArgumentException("match substring must be non-empty"); @@ -107,6 +110,7 @@ public abstract class UEventObserver { * This process's UEvent thread will never call onUEvent() on this * UEventObserver after this call. Repeated calls have no effect. */ + @UnsupportedAppUsage public final void stopObserving() { final UEventThread t = peekThread(); if (t != null) { @@ -118,6 +122,7 @@ public abstract class UEventObserver { * Subclasses of UEventObserver should override this method to handle * UEvents. */ + @UnsupportedAppUsage public abstract void onUEvent(UEvent event); /** @@ -146,10 +151,12 @@ public abstract class UEventObserver { } } + @UnsupportedAppUsage public String get(String key) { return mMap.get(key); } + @UnsupportedAppUsage public String get(String key, String defaultValue) { String result = mMap.get(key); return (result == null ? defaultValue : result); diff --git a/core/java/android/os/UpdateLock.java b/core/java/android/os/UpdateLock.java index 40603268fa26..ea273cea8835 100644 --- a/core/java/android/os/UpdateLock.java +++ b/core/java/android/os/UpdateLock.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.util.Log; @@ -50,6 +51,7 @@ public class UpdateLock { * locker releases theirs. The broadcast is sticky but is sent only to * registered receivers. */ + @UnsupportedAppUsage public static final String UPDATE_LOCK_CHANGED = "android.os.UpdateLock.UPDATE_LOCK_CHANGED"; /** @@ -58,6 +60,7 @@ public class UpdateLock { * update operation. True means that updates are okay right now; false indicates * that perhaps later would be a better time. */ + @UnsupportedAppUsage public static final String NOW_IS_CONVENIENT = "nowisconvenient"; /** @@ -66,6 +69,7 @@ public class UpdateLock { * in the System.currentTimeMillis() time base, which may be non-monotonic especially * around reboots. */ + @UnsupportedAppUsage public static final String TIMESTAMP = "timestamp"; /** @@ -90,6 +94,7 @@ public class UpdateLock { /** * Is this lock currently held? */ + @UnsupportedAppUsage public boolean isHeld() { synchronized (mToken) { return mHeld; @@ -99,6 +104,7 @@ public class UpdateLock { /** * Acquire an update lock. */ + @UnsupportedAppUsage public void acquire() { if (DEBUG) { Log.v(TAG, "acquire() : " + this, new RuntimeException("here")); @@ -125,6 +131,7 @@ public class UpdateLock { /** * Release this update lock. */ + @UnsupportedAppUsage public void release() { if (DEBUG) Log.v(TAG, "release() : " + this, new RuntimeException("here")); checkService(); diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java index de41ce2e08c5..1a2b971c0a6a 100644 --- a/core/java/android/os/UserHandle.java +++ b/core/java/android/os/UserHandle.java @@ -19,6 +19,7 @@ package android.os; import android.annotation.AppIdInt; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import java.io.PrintWriter; @@ -32,9 +33,11 @@ public final class UserHandle implements Parcelable { /** * @hide Range of uids allocated for a user. */ + @UnsupportedAppUsage public static final int PER_USER_RANGE = 100000; /** @hide A user id to indicate all users on the device */ + @UnsupportedAppUsage public static final @UserIdInt int USER_ALL = -1; /** @hide A user handle to indicate all users on the device */ @@ -43,6 +46,7 @@ public final class UserHandle implements Parcelable { public static final UserHandle ALL = new UserHandle(USER_ALL); /** @hide A user id to indicate the currently active user */ + @UnsupportedAppUsage public static final @UserIdInt int USER_CURRENT = -2; /** @hide A user handle to indicate the current user of the device */ @@ -53,14 +57,17 @@ public final class UserHandle implements Parcelable { /** @hide A user id to indicate that we would like to send to the current * user, but if this is calling from a user process then we will send it * to the caller's user instead of failing with a security exception */ + @UnsupportedAppUsage public static final @UserIdInt int USER_CURRENT_OR_SELF = -3; /** @hide A user handle to indicate that we would like to send to the current * user, but if this is calling from a user process then we will send it * to the caller's user instead of failing with a security exception */ + @UnsupportedAppUsage public static final UserHandle CURRENT_OR_SELF = new UserHandle(USER_CURRENT_OR_SELF); /** @hide An undefined user id */ + @UnsupportedAppUsage public static final @UserIdInt int USER_NULL = -10000; /** @@ -68,6 +75,7 @@ public final class UserHandle implements Parcelable { * @deprecated Consider using either {@link UserHandle#USER_SYSTEM} constant or * check the target user's flag {@link android.content.pm.UserInfo#isAdmin}. */ + @UnsupportedAppUsage @Deprecated public static final @UserIdInt int USER_OWNER = 0; @@ -76,13 +84,16 @@ public final class UserHandle implements Parcelable { * @deprecated Consider using either {@link UserHandle#SYSTEM} constant or * check the target user's flag {@link android.content.pm.UserInfo#isAdmin}. */ + @UnsupportedAppUsage @Deprecated public static final UserHandle OWNER = new UserHandle(USER_OWNER); /** @hide A user id constant to indicate the "system" user of the device */ + @UnsupportedAppUsage public static final @UserIdInt int USER_SYSTEM = 0; /** @hide A user serial constant to indicate the "system" user of the device */ + @UnsupportedAppUsage public static final int USER_SERIAL_SYSTEM = 0; /** @hide A user handle to indicate the "system" user of the device */ @@ -94,21 +105,29 @@ public final class UserHandle implements Parcelable { * @hide Enable multi-user related side effects. Set this to false if * there are problems with single user use-cases. */ + @UnsupportedAppUsage public static final boolean MU_ENABLED = true; /** @hide */ + @UnsupportedAppUsage public static final int ERR_GID = -1; /** @hide */ + @UnsupportedAppUsage public static final int AID_ROOT = android.os.Process.ROOT_UID; /** @hide */ + @UnsupportedAppUsage public static final int AID_APP_START = android.os.Process.FIRST_APPLICATION_UID; /** @hide */ + @UnsupportedAppUsage public static final int AID_APP_END = android.os.Process.LAST_APPLICATION_UID; /** @hide */ + @UnsupportedAppUsage public static final int AID_SHARED_GID_START = android.os.Process.FIRST_SHARED_APPLICATION_GID; /** @hide */ + @UnsupportedAppUsage public static final int AID_CACHE_GID_START = android.os.Process.FIRST_APPLICATION_CACHE_GID; + @UnsupportedAppUsage final int mHandle; /** @@ -128,6 +147,7 @@ public final class UserHandle implements Parcelable { * @return whether the appId is the same for both uids * @hide */ + @UnsupportedAppUsage public static boolean isSameApp(int uid1, int uid2) { return getAppId(uid1) == getAppId(uid2); } @@ -136,6 +156,7 @@ public final class UserHandle implements Parcelable { * Whether a UID is an "isolated" UID. * @hide */ + @UnsupportedAppUsage public static boolean isIsolated(int uid) { if (uid > 0) { final int appId = getAppId(uid); @@ -150,6 +171,7 @@ public final class UserHandle implements Parcelable { * "it's system", because of isolated UIDs. Use {@link #isCore} for that. * @hide */ + @UnsupportedAppUsage public static boolean isApp(int uid) { if (uid > 0) { final int appId = getAppId(uid); @@ -185,6 +207,7 @@ public final class UserHandle implements Parcelable { * Returns the user id for a given uid. * @hide */ + @UnsupportedAppUsage public static @UserIdInt int getUserId(int uid) { if (MU_ENABLED) { return uid / PER_USER_RANGE; @@ -194,6 +217,7 @@ public final class UserHandle implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public static @UserIdInt int getCallingUserId() { return getUserId(Binder.getCallingUid()); } @@ -213,6 +237,7 @@ public final class UserHandle implements Parcelable { * Returns the uid that is composed from the userId and the appId. * @hide */ + @UnsupportedAppUsage public static int getUid(@UserIdInt int userId, @AppIdInt int appId) { if (MU_ENABLED) { return userId * PER_USER_RANGE + (appId % PER_USER_RANGE); @@ -259,6 +284,7 @@ public final class UserHandle implements Parcelable { * Returns the app id for a given shared app gid. Returns -1 if the ID is invalid. * @hide */ + @UnsupportedAppUsage public static @AppIdInt int getAppIdFromSharedAppGid(int gid) { final int appId = getAppId(gid) + Process.FIRST_APPLICATION_UID - Process.FIRST_SHARED_APPLICATION_GID; @@ -394,6 +420,7 @@ public final class UserHandle implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public UserHandle(int h) { mHandle = h; } diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index b5918519d872..3edd06b38905 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -25,6 +25,7 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UnsupportedAppUsage; import android.annotation.UserIdInt; import android.annotation.WorkerThread; import android.app.Activity; @@ -69,6 +70,7 @@ import java.util.List; public class UserManager { private static final String TAG = "UserManager"; + @UnsupportedAppUsage private final IUserManager mService; private final Context mContext; @@ -781,6 +783,7 @@ public class UserManager { * @see #getUserRestrictions() * @hide */ + @UnsupportedAppUsage public static final String DISALLOW_RECORD_AUDIO = "no_record_audio"; /** @@ -1123,6 +1126,7 @@ public class UserManager { } /** @hide */ + @UnsupportedAppUsage public static UserManager get(Context context) { return (UserManager) context.getSystemService(Context.USER_SERVICE); } @@ -1188,6 +1192,7 @@ public class UserManager { * @return the user handle of this process. * @hide */ + @UnsupportedAppUsage public @UserIdInt int getUserHandle() { return UserHandle.myUserId(); } @@ -1259,6 +1264,7 @@ public class UserManager { * Returns whether the caller is running as an admin user. There can be more than one admin * user. */ + @UnsupportedAppUsage public boolean isAdminUser() { return isUserAdmin(UserHandle.myUserId()); } @@ -1268,6 +1274,7 @@ public class UserManager { * Returns whether the provided user is an admin user. There can be more than one admin * user. */ + @UnsupportedAppUsage public boolean isUserAdmin(@UserIdInt int userId) { UserInfo user = getUserInfo(userId); return user != null && user.isAdmin(); @@ -1277,6 +1284,7 @@ public class UserManager { * @hide * @deprecated Use {@link #isRestrictedProfile()} */ + @UnsupportedAppUsage @Deprecated public boolean isLinkedUser() { return isRestrictedProfile(); @@ -1328,6 +1336,7 @@ public class UserManager { * @return whether user is a guest user. * @hide */ + @UnsupportedAppUsage public boolean isGuestUser(int id) { UserInfo user = getUserInfo(id); return user != null && user.isGuest(); @@ -1534,6 +1543,7 @@ public class UserManager { } /** {@hide} */ + @UnsupportedAppUsage public boolean isUserUnlocked(@UserIdInt int userId) { try { return mService.isUserUnlocked(userId); @@ -1562,6 +1572,7 @@ public class UserManager { * * @hide */ + @UnsupportedAppUsage public long getUserStartRealtime() { try { return mService.getUserStartRealtime(); @@ -1576,6 +1587,7 @@ public class UserManager { * * @hide */ + @UnsupportedAppUsage public long getUserUnlockRealtime() { try { return mService.getUserUnlockRealtime(); @@ -1591,6 +1603,7 @@ public class UserManager { * @return the UserInfo object for a specific user. * @hide */ + @UnsupportedAppUsage public UserInfo getUserInfo(@UserIdInt int userHandle) { try { return mService.getUserInfo(userHandle); @@ -1670,6 +1683,7 @@ public class UserManager { * @param restrictionKey the string key representing the restriction * @param userHandle the UserHandle of the user for whom to retrieve the restrictions. */ + @UnsupportedAppUsage public boolean hasBaseUserRestriction(String restrictionKey, UserHandle userHandle) { try { return mService.hasBaseUserRestriction(restrictionKey, userHandle.getIdentifier()); @@ -1752,6 +1766,7 @@ public class UserManager { * @param restrictionKey the string key representing the restriction * @param userHandle the UserHandle of the user for whom to retrieve the restrictions. */ + @UnsupportedAppUsage public boolean hasUserRestriction(String restrictionKey, UserHandle userHandle) { try { return mService.hasUserRestriction(restrictionKey, @@ -1812,6 +1827,7 @@ public class UserManager { * @return the UserInfo object for the created user, or null if the user could not be created. * @hide */ + @UnsupportedAppUsage public UserInfo createUser(String name, int flags) { UserInfo user = null; try { @@ -1860,6 +1876,7 @@ public class UserManager { * could not be created. * @hide */ + @UnsupportedAppUsage public UserInfo createProfileForUser(String name, int flags, @UserIdInt int userHandle) { return createProfileForUser(name, flags, userHandle, null); } @@ -2148,6 +2165,7 @@ public class UserManager { * @return the list of users that exist on the device. * @hide */ + @UnsupportedAppUsage public List<UserInfo> getUsers() { try { return mService.getUsers(false); @@ -2273,6 +2291,7 @@ public class UserManager { * @return the list of profiles. * @hide */ + @UnsupportedAppUsage public List<UserInfo> getProfiles(@UserIdInt int userHandle) { try { return mService.getProfiles(userHandle, false /* enabledOnly */); @@ -2306,6 +2325,7 @@ public class UserManager { * @return the list of profiles. * @hide */ + @UnsupportedAppUsage public List<UserInfo> getEnabledProfiles(@UserIdInt int userHandle) { try { return mService.getProfiles(userHandle, true /* enabledOnly */); @@ -2351,6 +2371,7 @@ public class UserManager { * @see #getProfileIds(int, boolean) * @hide */ + @UnsupportedAppUsage public int[] getProfileIdsWithDisabled(@UserIdInt int userId) { return getProfileIds(userId, false /* enabledOnly */); } @@ -2384,6 +2405,7 @@ public class UserManager { * * @hide */ + @UnsupportedAppUsage public UserInfo getProfileParent(@UserIdInt int userHandle) { try { return mService.getProfileParent(userHandle); @@ -2532,6 +2554,7 @@ public class UserManager { * @return the list of users that were created. * @hide */ + @UnsupportedAppUsage public @NonNull List<UserInfo> getUsers(boolean excludeDying) { try { return mService.getUsers(excludeDying); @@ -2546,6 +2569,7 @@ public class UserManager { * @param userHandle the integer handle of the user, where 0 is the primary user. * @hide */ + @UnsupportedAppUsage public boolean removeUser(@UserIdInt int userHandle) { try { return mService.removeUser(userHandle); @@ -2607,6 +2631,7 @@ public class UserManager { * @see com.android.internal.util.UserIcons#getDefaultUserIcon for a default. * @hide */ + @UnsupportedAppUsage public Bitmap getUserIcon(@UserIdInt int userHandle) { try { ParcelFileDescriptor fd = mService.getUserIcon(userHandle); @@ -2632,6 +2657,7 @@ public class UserManager { * @hide * @return a value greater than or equal to 1 */ + @UnsupportedAppUsage public static int getMaxSupportedUsers() { // Don't allow multiple users on certain builds if (android.os.Build.ID.startsWith("JVP")) return 1; @@ -2681,6 +2707,7 @@ public class UserManager { /** * @hide */ + @UnsupportedAppUsage public static boolean isDeviceInDemoMode(Context context) { return Settings.Global.getInt(context.getContentResolver(), Settings.Global.DEVICE_DEMO_MODE, 0) > 0; @@ -2693,6 +2720,7 @@ public class UserManager { * @return a serial number associated with that user, or -1 if the userHandle is not valid. * @hide */ + @UnsupportedAppUsage public int getUserSerialNumber(@UserIdInt int userHandle) { try { return mService.getUserSerialNumber(userHandle); @@ -2710,6 +2738,7 @@ public class UserManager { * is not valid. * @hide */ + @UnsupportedAppUsage public @UserIdInt int getUserHandle(int userSerialNumber) { try { return mService.getUserHandle(userSerialNumber); diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java index d2d8f1e159e5..0e92e357884f 100644 --- a/core/java/android/os/Vibrator.java +++ b/core/java/android/os/Vibrator.java @@ -19,6 +19,7 @@ package android.os; import android.annotation.IntDef; import android.annotation.RequiresPermission; import android.annotation.SystemService; +import android.annotation.UnsupportedAppUsage; import android.app.ActivityThread; import android.content.Context; import android.media.AudioAttributes; @@ -82,6 +83,7 @@ public abstract class Vibrator { /** * @hide to prevent subclassing from outside of the framework */ + @UnsupportedAppUsage public Vibrator() { mPackageName = ActivityThread.currentPackageName(); final Context ctx = ActivityThread.currentActivityThread().getSystemContext(); diff --git a/core/java/android/os/VintfObject.java b/core/java/android/os/VintfObject.java index fb22194098b6..c63dc0576298 100644 --- a/core/java/android/os/VintfObject.java +++ b/core/java/android/os/VintfObject.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import java.util.Map; @@ -33,6 +34,7 @@ public class VintfObject { * If any error in getting one of the manifests, it is not included in * the list. */ + @UnsupportedAppUsage public static native String[] report(); /** @@ -66,11 +68,13 @@ public class VintfObject { * ["android.hidl.manager@1.0", "android.hardware.camera.device@1.0", * "android.hardware.camera.device@3.2"]. There are no duplicates. */ + @UnsupportedAppUsage public static native String[] getHalNamesAndVersions(); /** * @return the BOARD_SEPOLICY_VERS build flag available in device manifest. */ + @UnsupportedAppUsage public static native String getSepolicyVersion(); /** @@ -79,6 +83,7 @@ public class VintfObject { * [("27", ["libjpeg.so", "libbase.so"]), * ("28", ["libjpeg.so", "libbase.so"])] */ + @UnsupportedAppUsage public static native Map<String, String[]> getVndkSnapshots(); /** @@ -86,5 +91,6 @@ public class VintfObject { * indicating the FCM version that the device manifest implements. Null if * device manifest doesn't specify this number (for legacy devices). */ + @UnsupportedAppUsage public static native Long getTargetFrameworkCompatibilityMatrixVersion(); } diff --git a/core/java/android/os/VintfRuntimeInfo.java b/core/java/android/os/VintfRuntimeInfo.java index 29698b9fa684..77e61bc0bdd4 100644 --- a/core/java/android/os/VintfRuntimeInfo.java +++ b/core/java/android/os/VintfRuntimeInfo.java @@ -16,6 +16,8 @@ package android.os; +import android.annotation.UnsupportedAppUsage; + /** * Java API for ::android::vintf::RuntimeInfo. Methods return null / 0 on any error. * @@ -32,31 +34,38 @@ public class VintfRuntimeInfo { /** * @return content of /proc/cpuinfo */ + @UnsupportedAppUsage public static native String getCpuInfo(); /** * @return os name extracted from uname() native call */ + @UnsupportedAppUsage public static native String getOsName(); /** * @return node name extracted from uname() native call */ + @UnsupportedAppUsage public static native String getNodeName(); /** * @return os release extracted from uname() native call */ + @UnsupportedAppUsage public static native String getOsRelease(); /** * @return os version extracted from uname() native call */ + @UnsupportedAppUsage public static native String getOsVersion(); /** * @return hardware id extracted from uname() native call */ + @UnsupportedAppUsage public static native String getHardwareId(); /** * @return kernel version extracted from uname() native call. Format is * {@code x.y.z}. */ + @UnsupportedAppUsage public static native String getKernelVersion(); /** * @return libavb version in OS. Format is {@code x.y}. diff --git a/core/java/android/os/WorkSource.java b/core/java/android/os/WorkSource.java index 327071906e18..43f579d21ce2 100644 --- a/core/java/android/os/WorkSource.java +++ b/core/java/android/os/WorkSource.java @@ -2,6 +2,7 @@ package android.os; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.os.WorkSourceProto; import android.provider.Settings; @@ -23,8 +24,11 @@ public class WorkSource implements Parcelable { static final String TAG = "WorkSource"; static final boolean DEBUG = false; + @UnsupportedAppUsage int mNum; + @UnsupportedAppUsage int[] mUids; + @UnsupportedAppUsage String[] mNames; private ArrayList<WorkChain> mChains; @@ -83,6 +87,7 @@ public class WorkSource implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public WorkSource(int uid) { mNum = 1; mUids = new int[] { uid, 0 }; @@ -101,6 +106,7 @@ public class WorkSource implements Parcelable { mChains = null; } + @UnsupportedAppUsage WorkSource(Parcel in) { mNum = in.readInt(); mUids = in.createIntArray(); @@ -127,16 +133,19 @@ public class WorkSource implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public int size() { return mNum; } /** @hide */ + @UnsupportedAppUsage public int get(int index) { return mUids[index]; } /** @hide */ + @UnsupportedAppUsage public String getName(int index) { return mNames != null ? mNames[index] : null; } @@ -327,6 +336,7 @@ public class WorkSource implements Parcelable { * @deprecated for internal use only. WorkSources are opaque and no external callers should need * to be aware of internal differences. */ + @UnsupportedAppUsage @Deprecated public WorkSource[] setReturningDiffs(WorkSource other) { synchronized (sTmpWorkSource) { @@ -378,6 +388,7 @@ public class WorkSource implements Parcelable { * @hide * @deprecated meant for unit testing use only. Will be removed in a future API revision. */ + @UnsupportedAppUsage @Deprecated public WorkSource addReturningNewbs(WorkSource other) { synchronized (sTmpWorkSource) { @@ -388,6 +399,7 @@ public class WorkSource implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public boolean add(int uid) { if (mNum <= 0) { mNames = null; @@ -407,6 +419,7 @@ public class WorkSource implements Parcelable { } /** @hide */ + @UnsupportedAppUsage public boolean add(int uid, String name) { if (mNum <= 0) { insert(0, uid, name); diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index 66ace2d69603..e8f46417dd7d 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.UnsupportedAppUsage; import android.net.LocalSocket; import android.net.LocalSocketAddress; import android.util.Log; @@ -37,10 +38,12 @@ import java.util.List; import java.util.UUID; /*package*/ class ZygoteStartFailedEx extends Exception { + @UnsupportedAppUsage ZygoteStartFailedEx(String s) { super(s); } + @UnsupportedAppUsage ZygoteStartFailedEx(Throwable cause) { super(cause); } diff --git a/core/java/android/preference/DialogPreference.java b/core/java/android/preference/DialogPreference.java index a615f2dfc9df..0fb7e38b0a0b 100644 --- a/core/java/android/preference/DialogPreference.java +++ b/core/java/android/preference/DialogPreference.java @@ -19,6 +19,7 @@ package android.preference; import android.annotation.CallSuper; import android.annotation.DrawableRes; +import android.annotation.Nullable; import android.annotation.StringRes; import android.annotation.UnsupportedAppUsage; import android.app.AlertDialog; @@ -347,6 +348,7 @@ public abstract class DialogPreference extends Preference implements * @return the DecorView for the current dialog window, if it exists. * If the window does not exist, null is returned. */ + @Nullable private View getDecorView() { if (mDialog != null && mDialog.getWindow() != null) { return mDialog.getWindow().getDecorView(); diff --git a/core/java/android/util/OWNERS b/core/java/android/util/OWNERS index 86ed1229b28e..98297fba8ef3 100644 --- a/core/java/android/util/OWNERS +++ b/core/java/android/util/OWNERS @@ -1,2 +1,3 @@ per-file FeatureFlagUtils.java = sbasi@google.com per-file FeatureFlagUtils.java = zhfan@google.com +per-file FeatureFlagUtils.java = asapperstein@google.com diff --git a/core/java/com/android/internal/os/KernelWakelockReader.java b/core/java/com/android/internal/os/KernelWakelockReader.java index 46667d1ea688..86b2a90dd64e 100644 --- a/core/java/com/android/internal/os/KernelWakelockReader.java +++ b/core/java/com/android/internal/os/KernelWakelockReader.java @@ -66,7 +66,7 @@ public class KernelWakelockReader { */ public final KernelWakelockStats readKernelWakelockStats(KernelWakelockStats staleStats) { byte[] buffer = new byte[32*1024]; - int len; + int len = 0; boolean wakeup_sources; final long startTime = SystemClock.uptimeMillis(); @@ -87,7 +87,11 @@ public class KernelWakelockReader { } } - len = is.read(buffer); + int cnt; + while ((cnt = is.read(buffer, len, buffer.length - len)) > 0) { + len += cnt; + } + is.close(); } catch (java.io.IOException e) { Slog.wtf(TAG, "failed to read kernel wakelocks", e); diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index e132abd7e4cb..c6303518d9ae 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -125,6 +125,12 @@ public class ZygoteInit { private static boolean sPreloadComplete; + /** + * Cached classloader to use for the system server. Will only be populated in the system + * server process. + */ + private static ClassLoader sCachedSystemServerClassLoader = null; + static void preload(TimingsTraceLog bootTimingsTraceLog) { Log.d(TAG, "begin preload"); bootTimingsTraceLog.traceBegin("BeginPreload"); @@ -446,7 +452,13 @@ public class ZygoteInit { final String systemServerClasspath = Os.getenv("SYSTEMSERVERCLASSPATH"); if (systemServerClasspath != null) { - performSystemServerDexOpt(systemServerClasspath); + if (performSystemServerDexOpt(systemServerClasspath)) { + // Throw away the cached classloader. If we compiled here, the classloader would + // not have had AoT-ed artifacts. + // Note: This only works in a very special environment where selinux enforcement is + // disabled, e.g., Mac builds. + sCachedSystemServerClassLoader = null; + } // Capturing profiles is only supported for debug or eng builds since selinux normally // prevents it. boolean profileSystemServer = SystemProperties.getBoolean( @@ -479,10 +491,9 @@ public class ZygoteInit { throw new IllegalStateException("Unexpected return from WrapperInit.execApplication"); } else { - ClassLoader cl = null; - if (systemServerClasspath != null) { - cl = createPathClassLoader(systemServerClasspath, parsedArgs.mTargetSdkVersion); - + createSystemServerClassLoader(); + ClassLoader cl = sCachedSystemServerClassLoader; + if (cl != null) { Thread.currentThread().setContextClassLoader(cl); } @@ -497,6 +508,24 @@ public class ZygoteInit { } /** + * Create the classloader for the system server and store it in + * {@link sCachedSystemServerClassLoader}. This function may be called through JNI in + * system server startup, when the runtime is in a critically low state. Do not do + * extended computation etc here. + */ + private static void createSystemServerClassLoader() { + if (sCachedSystemServerClassLoader != null) { + return; + } + final String systemServerClasspath = Os.getenv("SYSTEMSERVERCLASSPATH"); + // TODO: Should we run optimization here? + if (systemServerClasspath != null) { + sCachedSystemServerClassLoader = createPathClassLoader(systemServerClasspath, + VMRuntime.SDK_VERSION_CUR_DEVELOPMENT); + } + } + + /** * Note that preparing the profiles for system server does not require special selinux * permissions. From the installer perspective the system server is a regular package which can * capture profile information. @@ -560,15 +589,16 @@ public class ZygoteInit { /** * Performs dex-opt on the elements of {@code classPath}, if needed. We choose the instruction - * set of the current runtime. + * set of the current runtime. If something was compiled, return true. */ - private static void performSystemServerDexOpt(String classPath) { + private static boolean performSystemServerDexOpt(String classPath) { final String[] classPathElements = classPath.split(":"); final IInstalld installd = IInstalld.Stub .asInterface(ServiceManager.getService("installd")); final String instructionSet = VMRuntime.getRuntime().vmInstructionSet(); String classPathForElement = ""; + boolean compiledSomething = false; for (String classPathElement : classPathElements) { // System server is fully AOTed and never profiled // for profile guided compilation. @@ -610,6 +640,7 @@ public class ZygoteInit { uuid, classLoaderContext, seInfo, false /* downgrade */, targetSdkVersion, /*profileName*/ null, /*dexMetadataPath*/ null, "server-dexopt"); + compiledSomething = true; } catch (RemoteException | ServiceSpecificException e) { // Ignore (but log), we need this on the classpath for fallback mode. Log.w(TAG, "Failed compiling classpath element for system server: " @@ -620,6 +651,8 @@ public class ZygoteInit { classPathForElement = encodeSystemServerClassPath( classPathForElement, classPathElement); } + + return compiledSomething; } /** diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java index a07c96ceba2e..9632d0ddb157 100644 --- a/core/java/com/android/server/SystemConfig.java +++ b/core/java/com/android/server/SystemConfig.java @@ -175,6 +175,8 @@ public class SystemConfig { final ArrayMap<String, ArrayMap<String, Boolean>> mOemPermissions = new ArrayMap<>(); + private final ArraySet<String> mBugreportWhitelistedPackages = new ArraySet<>(); + public static SystemConfig getInstance() { synchronized (SystemConfig.class) { if (sInstance == null) { @@ -288,6 +290,10 @@ public class SystemConfig { return Collections.emptyMap(); } + public ArraySet<String> getBugreportWhitelistedPackages() { + return mBugreportWhitelistedPackages; + } + SystemConfig() { // Read configuration from system readPermissions(Environment.buildPath( @@ -707,6 +713,15 @@ public class SystemConfig { mHiddenApiPackageWhitelist.add(pkgname); } XmlUtils.skipCurrentTag(parser); + } else if ("bugreport-whitelisted".equals(name)) { + String pkgname = parser.getAttributeValue(null, "package"); + if (pkgname == null) { + Slog.w(TAG, "<" + name + "> without package in " + permFile + + " at " + parser.getPositionDescription()); + } else { + mBugreportWhitelistedPackages.add(pkgname); + } + XmlUtils.skipCurrentTag(parser); } else { Slog.w(TAG, "Tag " + name + " is unknown or not allowed in " + permFile.getParent()); diff --git a/core/jni/Android.bp b/core/jni/Android.bp index f9813fdb65ab..6024f68a1c3a 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -134,7 +134,6 @@ cc_library_shared { "android/graphics/GIFMovie.cpp", "android/graphics/GraphicBuffer.cpp", "android/graphics/Graphics.cpp", - "android/graphics/HarfBuzzNGFaceSkia.cpp", "android/graphics/ImageDecoder.cpp", "android/graphics/Interpolator.cpp", "android/graphics/MaskFilter.cpp", diff --git a/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp b/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp deleted file mode 100644 index dcb787462a13..000000000000 --- a/core/jni/android/graphics/HarfBuzzNGFaceSkia.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (c) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#define LOG_TAG "TextLayoutCache" - -#include "HarfBuzzNGFaceSkia.h" - -#include <stdlib.h> - -#include <log/log.h> - -#include <SkPaint.h> -#include <SkPath.h> -#include <SkPoint.h> -#include <SkRect.h> -#include <SkTypeface.h> - -#include <hb.h> - -namespace android { - -static const bool kDebugGlyphs = false; - -// Our implementation of the callbacks which Harfbuzz requires by using Skia -// calls. See the Harfbuzz source for references about what these callbacks do. - -struct HarfBuzzFontData { - explicit HarfBuzzFontData(SkPaint* paint) : m_paint(paint) { } - SkPaint* m_paint; -}; - -static void SkiaGetGlyphWidthAndExtents(SkPaint* paint, hb_codepoint_t codepoint, hb_position_t* width, hb_glyph_extents_t* extents) -{ - ALOG_ASSERT(codepoint <= 0xFFFF); - paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding); - - SkScalar skWidth; - SkRect skBounds; - uint16_t glyph = codepoint; - - paint->getTextWidths(&glyph, sizeof(glyph), &skWidth, &skBounds); - if (kDebugGlyphs) { - ALOGD("returned glyph for %i: width = %f", codepoint, skWidth); - } - if (width) - *width = SkScalarToHBFixed(skWidth); - if (extents) { - // Invert y-axis because Skia is y-grows-down but we set up harfbuzz to be y-grows-up. - extents->x_bearing = SkScalarToHBFixed(skBounds.fLeft); - extents->y_bearing = SkScalarToHBFixed(-skBounds.fTop); - extents->width = SkScalarToHBFixed(skBounds.width()); - extents->height = SkScalarToHBFixed(-skBounds.height()); - } -} - -static hb_bool_t harfbuzzGetGlyph(hb_font_t* hbFont, void* fontData, hb_codepoint_t unicode, hb_codepoint_t variationSelector, hb_codepoint_t* glyph, void* userData) -{ - HarfBuzzFontData* hbFontData = reinterpret_cast<HarfBuzzFontData*>(fontData); - SkPaint* paint = hbFontData->m_paint; - paint->setTextEncoding(SkPaint::kUTF32_TextEncoding); - - if (unicode > 0x10ffff) { - unicode = 0xfffd; - } - SkUnichar unichar = unicode; - - uint16_t glyph16; - paint->textToGlyphs(&unichar, sizeof(unichar), &glyph16); - *glyph = glyph16; - return !!*glyph; -} - -static hb_position_t harfbuzzGetGlyphHorizontalAdvance(hb_font_t* hbFont, void* fontData, hb_codepoint_t glyph, void* userData) -{ - HarfBuzzFontData* hbFontData = reinterpret_cast<HarfBuzzFontData*>(fontData); - hb_position_t advance = 0; - - SkiaGetGlyphWidthAndExtents(hbFontData->m_paint, glyph, &advance, 0); - return advance; -} - -static hb_bool_t harfbuzzGetGlyphHorizontalOrigin(hb_font_t* hbFont, void* fontData, hb_codepoint_t glyph, hb_position_t* x, hb_position_t* y, void* userData) -{ - // Just return true, following the way that Harfbuzz-FreeType - // implementation does. - return true; -} - -static hb_bool_t harfbuzzGetGlyphExtents(hb_font_t* hbFont, void* fontData, hb_codepoint_t glyph, hb_glyph_extents_t* extents, void* userData) -{ - HarfBuzzFontData* hbFontData = reinterpret_cast<HarfBuzzFontData*>(fontData); - - SkiaGetGlyphWidthAndExtents(hbFontData->m_paint, glyph, 0, extents); - return true; -} - -static hb_font_funcs_t* harfbuzzSkiaGetFontFuncs() -{ - static hb_font_funcs_t* harfbuzzSkiaFontFuncs = 0; - - // We don't set callback functions which we can't support. - // Harfbuzz will use the fallback implementation if they aren't set. - if (!harfbuzzSkiaFontFuncs) { - harfbuzzSkiaFontFuncs = hb_font_funcs_create(); - hb_font_funcs_set_glyph_func(harfbuzzSkiaFontFuncs, harfbuzzGetGlyph, 0, 0); - hb_font_funcs_set_glyph_h_advance_func(harfbuzzSkiaFontFuncs, harfbuzzGetGlyphHorizontalAdvance, 0, 0); - hb_font_funcs_set_glyph_h_origin_func(harfbuzzSkiaFontFuncs, harfbuzzGetGlyphHorizontalOrigin, 0, 0); - hb_font_funcs_set_glyph_extents_func(harfbuzzSkiaFontFuncs, harfbuzzGetGlyphExtents, 0, 0); - hb_font_funcs_make_immutable(harfbuzzSkiaFontFuncs); - } - return harfbuzzSkiaFontFuncs; -} - -hb_blob_t* harfbuzzSkiaReferenceTable(hb_face_t* face, hb_tag_t tag, void* userData) -{ - SkTypeface* typeface = reinterpret_cast<SkTypeface*>(userData); - - const size_t tableSize = typeface->getTableSize(tag); - if (!tableSize) - return 0; - - char* buffer = reinterpret_cast<char*>(malloc(tableSize)); - if (!buffer) - return 0; - size_t actualSize = typeface->getTableData(tag, 0, tableSize, buffer); - if (tableSize != actualSize) { - free(buffer); - return 0; - } - - return hb_blob_create(const_cast<char*>(buffer), tableSize, - HB_MEMORY_MODE_WRITABLE, buffer, free); -} - -static void destroyHarfBuzzFontData(void* data) { - delete (HarfBuzzFontData*)data; -} - -hb_font_t* createFont(hb_face_t* face, SkPaint* paint, float sizeX, float sizeY) { - hb_font_t* font = hb_font_create(face); - - // Note: this needs to be reworked when we do subpixels - int x_ppem = floor(sizeX + 0.5); - int y_ppem = floor(sizeY + 0.5); - hb_font_set_ppem(font, x_ppem, y_ppem); - hb_font_set_scale(font, HBFloatToFixed(sizeX), HBFloatToFixed(sizeY)); - - HarfBuzzFontData* data = new HarfBuzzFontData(paint); - hb_font_set_funcs(font, harfbuzzSkiaGetFontFuncs(), data, destroyHarfBuzzFontData); - - return font; -} - -} // namespace android diff --git a/core/jni/android/graphics/HarfBuzzNGFaceSkia.h b/core/jni/android/graphics/HarfBuzzNGFaceSkia.h deleted file mode 100644 index 3308d5d51b58..000000000000 --- a/core/jni/android/graphics/HarfBuzzNGFaceSkia.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2011, The Android Open Source Project - * Copyright 2011, Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _ANDROID_GRAPHICS_HARF_BUZZ_NG_FACE_SKIA_H_ -#define _ANDROID_GRAPHICS_HARF_BUZZ_NG_FACE_SKIA_H_ - -#include <SkScalar.h> -#include <SkPaint.h> - -#include <hb.h> - -namespace android { - -static inline float -HBFixedToFloat (hb_position_t v) -{ - return scalbnf (v, -8); -} - -static inline hb_position_t -HBFloatToFixed (float v) -{ - return scalbnf (v, +8); -} - -static inline hb_position_t SkScalarToHBFixed(SkScalar value) { - return HBFloatToFixed(SkScalarToFloat(value)); -} - -hb_blob_t* harfbuzzSkiaReferenceTable(hb_face_t* face, hb_tag_t tag, void* userData); - -hb_font_t* createFont(hb_face_t* face, SkPaint* paint, float sizeX, float sizeY); - -} // namespace android - -#endif // _ANDROID_GRAPHICS_HARF_BUZZ_NG_FACE_SKIA_H_ diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index 8216b616915c..d8c68b436bb3 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -108,11 +108,15 @@ typedef const std::function<void(std::string)>& fail_fn_t; static pid_t gSystemServerPid = 0; -static const char kZygoteClassName[] = "com/android/internal/os/Zygote"; +static constexpr const char* kZygoteClassName = "com/android/internal/os/Zygote"; static jclass gZygoteClass; static jmethodID gCallPostForkSystemServerHooks; static jmethodID gCallPostForkChildHooks; +static constexpr const char* kZygoteInitClassName = "com/android/internal/os/ZygoteInit"; +static jclass gZygoteInitClass; +static jmethodID gCreateSystemServerClassLoader; + static bool g_is_security_enforced = true; /** @@ -1047,6 +1051,15 @@ static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray gids, fail_fn("Error calling post fork system server hooks."); } + // Prefetch the classloader for the system server. This is done early to + // allow a tie-down of the proper system server selinux domain. + env->CallStaticVoidMethod(gZygoteInitClass, gCreateSystemServerClassLoader); + if (env->ExceptionCheck()) { + // Be robust here. The Java code will attempt to create the classloader + // at a later point (but may not have rights to use AoT artifacts). + env->ExceptionClear(); + } + // TODO(oth): Remove hardcoded label here (b/117874058). static const char* kSystemServerLabel = "u:r:system_server:s0"; if (selinux_android_setcon(kSystemServerLabel) != 0) { @@ -1566,6 +1579,13 @@ int register_com_android_internal_os_Zygote(JNIEnv* env) { gCallPostForkChildHooks = GetStaticMethodIDOrDie(env, gZygoteClass, "callPostForkChildHooks", "(IZZLjava/lang/String;)V"); - return RegisterMethodsOrDie(env, "com/android/internal/os/Zygote", gMethods, NELEM(gMethods)); + gZygoteInitClass = MakeGlobalRefOrDie(env, FindClassOrDie(env, kZygoteInitClassName)); + gCreateSystemServerClassLoader = GetStaticMethodIDOrDie(env, gZygoteInitClass, + "createSystemServerClassLoader", + "()V"); + + RegisterMethodsOrDie(env, "com/android/internal/os/Zygote", gMethods, NELEM(gMethods)); + + return JNI_OK; } } // namespace android diff --git a/core/proto/android/server/connectivity/data_stall_event.proto b/core/proto/android/server/connectivity/data_stall_event.proto index 21717d886266..a82326f67d74 100644 --- a/core/proto/android/server/connectivity/data_stall_event.proto +++ b/core/proto/android/server/connectivity/data_stall_event.proto @@ -25,6 +25,7 @@ enum ProbeResult { VALID = 1; INVALID = 2; PORTAL = 3; + PARTIAL = 4; } enum ApBand { @@ -86,4 +87,4 @@ message DnsEvent { repeated int32 dns_return_code = 1; // Indicate the timestamp of the dns event. repeated int64 dns_time = 2; -}
\ No newline at end of file +} diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 35bc46ae33ab..3d0b12d3f7e6 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1384,6 +1384,13 @@ <permission android:name="android.permission.MANAGE_IPSEC_TUNNELS" android:protectionLevel="signature|appop" /> + <!-- @hide Allows apps to create and manage Test Networks. + <p>Granted only to shell. CTS tests will use + UiAutomation.AdoptShellPermissionIdentity() to gain access. + --> + <permission android:name="android.permission.MANAGE_TEST_NETWORKS" + android:protectionLevel="signature" /> + <!-- @SystemApi @hide Allows applications to read Wi-Fi credential. <p>Not for use by third-party applications. --> <permission android:name="android.permission.READ_WIFI_CREDENTIAL" diff --git a/core/tests/coretests/src/android/content/pm/AndroidHidlUpdaterTest.java b/core/tests/coretests/src/android/content/pm/AndroidHidlUpdaterTest.java index 2acb08da4ef0..f557ef9835da 100644 --- a/core/tests/coretests/src/android/content/pm/AndroidHidlUpdaterTest.java +++ b/core/tests/coretests/src/android/content/pm/AndroidHidlUpdaterTest.java @@ -40,8 +40,17 @@ public class AndroidHidlUpdaterTest extends PackageSharedLibraryUpdaterTest { PackageBuilder before = builder() .targetSdkVersion(Build.VERSION_CODES.P); + // no change, not system + checkBackwardsCompatibility(before, before); + } + + @Test + public void targeted_at_P_system() { + PackageBuilder before = builder().asSystemApp() + .targetSdkVersion(Build.VERSION_CODES.P); + // Should add both HIDL libraries - PackageBuilder after = builder() + PackageBuilder after = builder().asSystemApp() .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(ANDROID_HIDL_MANAGER, ANDROID_HIDL_BASE); @@ -54,9 +63,19 @@ public class AndroidHidlUpdaterTest extends PackageSharedLibraryUpdaterTest { .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(OTHER_LIBRARY); + // no change, not system + checkBackwardsCompatibility(before, before); + } + + @Test + public void targeted_at_P_not_empty_usesLibraries_system() { + PackageBuilder before = builder().asSystemApp() + .targetSdkVersion(Build.VERSION_CODES.P) + .requiredLibraries(OTHER_LIBRARY); + // The hidl jars should be added at the start of the list because it // is not on the bootclasspath and the package targets pre-P. - PackageBuilder after = builder() + PackageBuilder after = builder().asSystemApp() .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(ANDROID_HIDL_MANAGER, ANDROID_HIDL_BASE, OTHER_LIBRARY); @@ -69,8 +88,21 @@ public class AndroidHidlUpdaterTest extends PackageSharedLibraryUpdaterTest { .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(ANDROID_HIDL_MANAGER, ANDROID_HIDL_BASE); - // No change is required because although the HIDL libraries has been removed from - // the bootclasspath the package explicitly requests it. + PackageBuilder after = builder() + .targetSdkVersion(Build.VERSION_CODES.P); + + // Libraries are removed because they are not available for non-system apps + checkBackwardsCompatibility(before, after); + } + + @Test + public void targeted_at_P_in_usesLibraries_system() { + PackageBuilder before = builder().asSystemApp() + .targetSdkVersion(Build.VERSION_CODES.P) + .requiredLibraries(ANDROID_HIDL_MANAGER, ANDROID_HIDL_BASE); + + // No change is required because the package explicitly requests the HIDL libraries + // and is targeted at the current version so does not need backwards compatibility. checkBackwardsCompatibility(before, before); } @@ -81,8 +113,7 @@ public class AndroidHidlUpdaterTest extends PackageSharedLibraryUpdaterTest { // Dependency is removed, it is not available. PackageBuilder after = builder(); - // No change is required because the package explicitly requests the HIDL libraries - // and is targeted at the current version so does not need backwards compatibility. + // Libraries are removed because they are not available for apps targetting Q+ checkBackwardsCompatibility(before, after); } @@ -93,8 +124,7 @@ public class AndroidHidlUpdaterTest extends PackageSharedLibraryUpdaterTest { // Dependency is removed, it is not available. PackageBuilder after = builder(); - // No change is required because the package explicitly requests the HIDL libraries - // and is targeted at the current version so does not need backwards compatibility. + // Libraries are removed because they are not available for apps targetting Q+ checkBackwardsCompatibility(before, after); } diff --git a/core/tests/coretests/src/android/content/pm/PackageBuilder.java b/core/tests/coretests/src/android/content/pm/PackageBuilder.java index 4ceed834aab7..f5be3f79191a 100644 --- a/core/tests/coretests/src/android/content/pm/PackageBuilder.java +++ b/core/tests/coretests/src/android/content/pm/PackageBuilder.java @@ -30,6 +30,8 @@ class PackageBuilder { private int mTargetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT; + private int mFlags = 0; + private ArrayList<String> mRequiredLibraries; private ArrayList<String> mOptionalLibraries; @@ -41,6 +43,7 @@ class PackageBuilder { public PackageParser.Package build() { PackageParser.Package pkg = new PackageParser.Package("org.package.name"); pkg.applicationInfo.targetSdkVersion = mTargetSdkVersion; + pkg.applicationInfo.flags = mFlags; pkg.usesLibraries = mRequiredLibraries; pkg.usesOptionalLibraries = mOptionalLibraries; return pkg; @@ -51,6 +54,11 @@ class PackageBuilder { return this; } + PackageBuilder asSystemApp() { + this.mFlags |= ApplicationInfo.FLAG_SYSTEM; + return this; + } + PackageBuilder requiredLibraries(String... names) { this.mRequiredLibraries = arrayListOrNull(names); return this; diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java index 105af6e829f8..51c42520ccc9 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java @@ -16,7 +16,6 @@ package android.security.keystore; -import libcore.util.EmptyArray; import android.security.Credentials; import android.security.GateKeeper; import android.security.KeyStore; @@ -31,6 +30,8 @@ import android.security.keystore.SecureKeyImportUnavailableException; import android.security.keystore.WrappedKeyEntry; import android.util.Log; +import libcore.util.EmptyArray; + import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -123,7 +124,14 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi { final Certificate[] caList; - final byte[] caBytes = mKeyStore.get(Credentials.CA_CERTIFICATE + alias, mUid); + // Suppress the key not found warning for this call. It seems that this error is exclusively + // being thrown when there is a self signed certificate chain, so when the keystore service + // attempts to query for the CA details, it obviously fails to find them and returns a + // key not found exception. This is WAI, and throwing a stack trace here can be very + // misleading since the trace is not clear. + final byte[] caBytes = mKeyStore.get(Credentials.CA_CERTIFICATE + alias, + mUid, + true /* suppressKeyNotFoundWarning */); if (caBytes != null) { final Collection<X509Certificate> caChain = toCertificates(caBytes); diff --git a/media/OWNERS b/media/OWNERS index eb26367d3d29..72c89529974b 100644 --- a/media/OWNERS +++ b/media/OWNERS @@ -3,7 +3,9 @@ dwkang@google.com elaurent@google.com etalvala@google.com gkasten@google.com +hdmoon@google.com hunga@google.com +insun@google.com jaewan@google.com jmtrivi@google.com jsharkey@android.com diff --git a/media/java/android/media/MediaHTTPConnection.java b/media/java/android/media/MediaHTTPConnection.java index d72476269e18..3838a99969f0 100644 --- a/media/java/android/media/MediaHTTPConnection.java +++ b/media/java/android/media/MediaHTTPConnection.java @@ -37,6 +37,7 @@ import java.net.URL; import java.net.UnknownServiceException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; /** @hide */ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { @@ -46,27 +47,23 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { // connection timeout - 30 sec private static final int CONNECT_TIMEOUT_MS = 30 * 1000; - @UnsupportedAppUsage - private long mCurrentOffset = -1; - @UnsupportedAppUsage - private URL mURL = null; - @UnsupportedAppUsage - private Map<String, String> mHeaders = null; - @UnsupportedAppUsage - private HttpURLConnection mConnection = null; - @UnsupportedAppUsage - private long mTotalSize = -1; - private InputStream mInputStream = null; - - @UnsupportedAppUsage - private boolean mAllowCrossDomainRedirect = true; - @UnsupportedAppUsage - private boolean mAllowCrossProtocolRedirect = true; - // from com.squareup.okhttp.internal.http private final static int HTTP_TEMP_REDIRECT = 307; private final static int MAX_REDIRECTS = 20; + class ConnectionState { + public HttpURLConnection mConnection = null; + public InputStream mInputStream = null; + public long mCurrentOffset = -1; + public Map<String, String> mHeaders = null; + public URL mURL = null; + public long mTotalSize = -1; + public boolean mAllowCrossDomainRedirect = true; + public boolean mAllowCrossProtocolRedirect = true; + } + private final AtomicReference<ConnectionState> mConnectionStateHolder = + new AtomicReference<ConnectionState>(); + @UnsupportedAppUsage public MediaHTTPConnection() { CookieHandler cookieHandler = CookieHandler.getDefault(); @@ -84,13 +81,23 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { Log.d(TAG, "connect: uri=" + uri + ", headers=" + headers); } + ConnectionState connectionState = mConnectionStateHolder.get(); + synchronized (this) { + if (connectionState == null) { + connectionState = new ConnectionState(); + mConnectionStateHolder.set(connectionState); + } + } + try { disconnect(); - mAllowCrossDomainRedirect = true; - mURL = new URL(uri); - mHeaders = convertHeaderStringToMap(headers); + connectionState.mAllowCrossDomainRedirect = true; + connectionState.mURL = new URL(uri); + connectionState.mHeaders = convertHeaderStringToMap(headers, connectionState); } catch (MalformedURLException e) { return null; + } finally { + mConnectionStateHolder.set(connectionState); } return native_getIMemory(); @@ -106,18 +113,21 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { } /* returns true iff header is internal */ - private boolean filterOutInternalHeaders(String key, String val) { + private boolean filterOutInternalHeaders( + String key, String val, ConnectionState connectionState) { if ("android-allow-cross-domain-redirect".equalsIgnoreCase(key)) { - mAllowCrossDomainRedirect = parseBoolean(val); + connectionState.mAllowCrossDomainRedirect = parseBoolean(val); // cross-protocol redirects are also controlled by this flag - mAllowCrossProtocolRedirect = mAllowCrossDomainRedirect; + connectionState.mAllowCrossProtocolRedirect = + connectionState.mAllowCrossDomainRedirect; } else { return false; } return true; } - private Map<String, String> convertHeaderStringToMap(String headers) { + private Map<String, String> convertHeaderStringToMap(String headers, + ConnectionState connectionState) { HashMap<String, String> map = new HashMap<String, String>(); String[] pairs = headers.split("\r\n"); @@ -127,7 +137,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { String key = pair.substring(0, colonPos); String val = pair.substring(colonPos + 1); - if (!filterOutInternalHeaders(key, val)) { + if (!filterOutInternalHeaders(key, val, connectionState)) { map.put(key, val); } } @@ -139,25 +149,28 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { @Override @UnsupportedAppUsage public void disconnect() { - teardownConnection(); - mHeaders = null; - mURL = null; + ConnectionState connectionState = mConnectionStateHolder.getAndSet(null); + if (connectionState != null) { + teardownConnection(connectionState); + connectionState.mHeaders = null; + connectionState.mURL = null; + } } - private void teardownConnection() { - if (mConnection != null) { - if (mInputStream != null) { + private void teardownConnection(ConnectionState connectionState) { + if (connectionState.mConnection != null) { + if (connectionState.mInputStream != null) { try { - mInputStream.close(); + connectionState.mInputStream.close(); } catch (IOException e) { } - mInputStream = null; + connectionState.mInputStream = null; } - mConnection.disconnect(); - mConnection = null; + connectionState.mConnection.disconnect(); + connectionState.mConnection = null; - mCurrentOffset = -1; + connectionState.mCurrentOffset = -1; } } @@ -184,42 +197,44 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { return false; } - private void seekTo(long offset) throws IOException { - teardownConnection(); + private void seekTo(long offset, ConnectionState connectionState) throws IOException { + teardownConnection(connectionState); try { int response; int redirectCount = 0; - URL url = mURL; + URL url = connectionState.mURL; // do not use any proxy for localhost (127.0.0.1) boolean noProxy = isLocalHost(url); while (true) { if (noProxy) { - mConnection = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY); + connectionState.mConnection = + (HttpURLConnection) url.openConnection(Proxy.NO_PROXY); } else { - mConnection = (HttpURLConnection)url.openConnection(); + connectionState.mConnection = (HttpURLConnection) url.openConnection(); } - mConnection.setConnectTimeout(CONNECT_TIMEOUT_MS); + connectionState.mConnection.setConnectTimeout(CONNECT_TIMEOUT_MS); // handle redirects ourselves if we do not allow cross-domain redirect - mConnection.setInstanceFollowRedirects(mAllowCrossDomainRedirect); + connectionState.mConnection.setInstanceFollowRedirects( + connectionState.mAllowCrossDomainRedirect); - if (mHeaders != null) { - for (Map.Entry<String, String> entry : mHeaders.entrySet()) { - mConnection.setRequestProperty( + if (connectionState.mHeaders != null) { + for (Map.Entry<String, String> entry : connectionState.mHeaders.entrySet()) { + connectionState.mConnection.setRequestProperty( entry.getKey(), entry.getValue()); } } if (offset > 0) { - mConnection.setRequestProperty( + connectionState.mConnection.setRequestProperty( "Range", "bytes=" + offset + "-"); } - response = mConnection.getResponseCode(); + response = connectionState.mConnection.getResponseCode(); if (response != HttpURLConnection.HTTP_MULT_CHOICE && response != HttpURLConnection.HTTP_MOVED_PERM && response != HttpURLConnection.HTTP_MOVED_TEMP && @@ -233,7 +248,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { throw new NoRouteToHostException("Too many redirects: " + redirectCount); } - String method = mConnection.getRequestMethod(); + String method = connectionState.mConnection.getRequestMethod(); if (response == HTTP_TEMP_REDIRECT && !method.equals("GET") && !method.equals("HEAD")) { // "If the 307 status code is received in response to a @@ -241,34 +256,35 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { // automatically redirect the request" throw new NoRouteToHostException("Invalid redirect"); } - String location = mConnection.getHeaderField("Location"); + String location = connectionState.mConnection.getHeaderField("Location"); if (location == null) { throw new NoRouteToHostException("Invalid redirect"); } - url = new URL(mURL /* TRICKY: don't use url! */, location); + url = new URL(connectionState.mURL /* TRICKY: don't use url! */, location); if (!url.getProtocol().equals("https") && !url.getProtocol().equals("http")) { throw new NoRouteToHostException("Unsupported protocol redirect"); } - boolean sameProtocol = mURL.getProtocol().equals(url.getProtocol()); - if (!mAllowCrossProtocolRedirect && !sameProtocol) { + boolean sameProtocol = + connectionState.mURL.getProtocol().equals(url.getProtocol()); + if (!connectionState.mAllowCrossProtocolRedirect && !sameProtocol) { throw new NoRouteToHostException("Cross-protocol redirects are disallowed"); } - boolean sameHost = mURL.getHost().equals(url.getHost()); - if (!mAllowCrossDomainRedirect && !sameHost) { + boolean sameHost = connectionState.mURL.getHost().equals(url.getHost()); + if (!connectionState.mAllowCrossDomainRedirect && !sameHost) { throw new NoRouteToHostException("Cross-domain redirects are disallowed"); } if (response != HTTP_TEMP_REDIRECT) { // update effective URL, unless it is a Temporary Redirect - mURL = url; + connectionState.mURL = url; } } - if (mAllowCrossDomainRedirect) { + if (connectionState.mAllowCrossDomainRedirect) { // remember the current, potentially redirected URL if redirects // were handled by HttpURLConnection - mURL = mConnection.getURL(); + connectionState.mURL = connectionState.mConnection.getURL(); } if (response == HttpURLConnection.HTTP_PARTIAL) { @@ -276,10 +292,9 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { // because what we want is not just the length of the range // returned but the size of the full content if available. - String contentRange = - mConnection.getHeaderField("Content-Range"); + String contentRange = connectionState.mConnection.getHeaderField("Content-Range"); - mTotalSize = -1; + connectionState.mTotalSize = -1; if (contentRange != null) { // format is "bytes xxx-yyy/zzz // where "zzz" is the total number of bytes of the @@ -291,7 +306,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { contentRange.substring(lastSlashPos + 1); try { - mTotalSize = Long.parseLong(total); + connectionState.mTotalSize = Long.parseLong(total); } catch (NumberFormatException e) { } } @@ -299,7 +314,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { } else if (response != HttpURLConnection.HTTP_OK) { throw new IOException(); } else { - mTotalSize = mConnection.getContentLength(); + connectionState.mTotalSize = connectionState.mConnection.getContentLength(); } if (offset > 0 && response != HttpURLConnection.HTTP_PARTIAL) { @@ -308,14 +323,14 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { throw new ProtocolException(); } - mInputStream = - new BufferedInputStream(mConnection.getInputStream()); + connectionState.mInputStream = + new BufferedInputStream(connectionState.mConnection.getInputStream()); - mCurrentOffset = offset; + connectionState.mCurrentOffset = offset; } catch (IOException e) { - mTotalSize = -1; - teardownConnection(); - mCurrentOffset = -1; + connectionState.mTotalSize = -1; + teardownConnection(connectionState); + connectionState.mCurrentOffset = -1; throw e; } @@ -324,10 +339,14 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { @Override @UnsupportedAppUsage public int readAt(long offset, int size) { - return native_readAt(offset, size); + ConnectionState connectionState = mConnectionStateHolder.get(); + if (connectionState != null) { + return native_readAt(offset, size, connectionState); + } + return -1; } - private int readAt(long offset, byte[] data, int size) { + private int readAt(long offset, byte[] data, int size, ConnectionState connectionState) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); @@ -335,12 +354,12 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { try { synchronized(this) { - if (offset != mCurrentOffset) { - seekTo(offset); + if (offset != connectionState.mCurrentOffset) { + seekTo(offset, connectionState); } } - int n = mInputStream.read(data, 0, size); + int n = connectionState.mInputStream.read(data, 0, size); if (n == -1) { // InputStream signals EOS using a -1 result, our semantics @@ -348,7 +367,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { n = 0; } - mCurrentOffset += n; + connectionState.mCurrentOffset += n; if (VERBOSE) { Log.d(TAG, "readAt " + offset + " / " + size + " => " + n); @@ -380,35 +399,47 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { @Override public synchronized long getSize() { - if (mConnection == null) { - try { - seekTo(0); - } catch (IOException e) { - return -1; + ConnectionState connectionState = mConnectionStateHolder.get(); + if (connectionState != null) { + if (connectionState.mConnection == null) { + try { + seekTo(0, connectionState); + } catch (IOException e) { + return -1; + } } + return connectionState.mTotalSize; } - return mTotalSize; + return -1; } @Override @UnsupportedAppUsage public synchronized String getMIMEType() { - if (mConnection == null) { - try { - seekTo(0); - } catch (IOException e) { - return "application/octet-stream"; + ConnectionState connectionState = mConnectionStateHolder.get(); + if (connectionState != null) { + if (connectionState.mConnection == null) { + try { + seekTo(0, connectionState); + } catch (IOException e) { + return "application/octet-stream"; + } } + return connectionState.mConnection.getContentType(); } - return mConnection.getContentType(); + return null; } @Override @UnsupportedAppUsage public String getUri() { - return mURL.toString(); + ConnectionState connectionState = mConnectionStateHolder.get(); + if (connectionState != null) { + return connectionState.mURL.toString(); + } + return null; } @Override @@ -421,7 +452,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { private native final void native_finalize(); private native final IBinder native_getIMemory(); - private native final int native_readAt(long offset, int size); + private native int native_readAt(long offset, int size, ConnectionState connectionState); static { System.loadLibrary("media_jni"); diff --git a/media/jni/android_media_MediaHTTPConnection.cpp b/media/jni/android_media_MediaHTTPConnection.cpp index 365e045689f0..d28c15c98d16 100644 --- a/media/jni/android_media_MediaHTTPConnection.cpp +++ b/media/jni/android_media_MediaHTTPConnection.cpp @@ -109,7 +109,8 @@ static void android_media_MediaHTTPConnection_native_init(JNIEnv *env) { gFields.context = env->GetFieldID(clazz.get(), "mNativeContext", "J"); CHECK(gFields.context != NULL); - gFields.readAtMethodID = env->GetMethodID(clazz.get(), "readAt", "(J[BI)I"); + gFields.readAtMethodID = env->GetMethodID( + clazz.get(), "readAt", "(J[BILandroid/media/MediaHTTPConnection$ConnectionState;)I"); } static void android_media_MediaHTTPConnection_native_setup( @@ -132,7 +133,7 @@ static jobject android_media_MediaHTTPConnection_native_getIMemory( } static jint android_media_MediaHTTPConnection_native_readAt( - JNIEnv *env, jobject thiz, jlong offset, jint size) { + JNIEnv *env, jobject thiz, jlong offset, jint size, jobject connectionState) { sp<JMediaHTTPConnection> conn = getObject(env, thiz); if (size > JMediaHTTPConnection::kBufferSize) { size = JMediaHTTPConnection::kBufferSize; @@ -141,7 +142,7 @@ static jint android_media_MediaHTTPConnection_native_readAt( jbyteArray byteArrayObj = conn->getByteArrayObj(); jint n = env->CallIntMethod( - thiz, gFields.readAtMethodID, offset, byteArrayObj, size); + thiz, gFields.readAtMethodID, offset, byteArrayObj, size, connectionState); if (n > 0) { env->GetByteArrayRegion( @@ -158,7 +159,7 @@ static const JNINativeMethod gMethods[] = { { "native_getIMemory", "()Landroid/os/IBinder;", (void *)android_media_MediaHTTPConnection_native_getIMemory }, - { "native_readAt", "(JI)I", + { "native_readAt", "(JILandroid/media/MediaHTTPConnection$ConnectionState;)I", (void *)android_media_MediaHTTPConnection_native_readAt }, { "native_init", "()V", diff --git a/media/mca/Android.mk b/media/mca/Android.mk deleted file mode 100644 index b1ce91ee8d8c..000000000000 --- a/media/mca/Android.mk +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2011 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. -# - -# -# Build all native libraries -# -include $(call all-subdir-makefiles) - - diff --git a/media/mca/samples/Android.mk b/media/mca/samples/Android.mk deleted file mode 100644 index b1ce91ee8d8c..000000000000 --- a/media/mca/samples/Android.mk +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2011 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. -# - -# -# Build all native libraries -# -include $(call all-subdir-makefiles) - - diff --git a/media/mca/samples/CameraEffectsRecordingSample/Android.bp b/media/mca/samples/CameraEffectsRecordingSample/Android.bp new file mode 100644 index 000000000000..96e81ab9b9cc --- /dev/null +++ b/media/mca/samples/CameraEffectsRecordingSample/Android.bp @@ -0,0 +1,26 @@ +// Copyright (C) 2011 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. +// + +// Build activity + +android_test { + name: "CameraEffectsRecordingSample", + srcs: ["**/*.java"], + platform_apis: true, + optimize: { + enabled: false, + }, +} + diff --git a/media/mca/samples/CameraEffectsRecordingSample/Android.mk b/media/mca/samples/CameraEffectsRecordingSample/Android.mk deleted file mode 100644 index c81f2fc57dc3..000000000000 --- a/media/mca/samples/CameraEffectsRecordingSample/Android.mk +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2011 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. -# - -# Build activity - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := CameraEffectsRecordingSample -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - -# ============================================================ - -# Also build all of the sub-targets under this one: the shared library. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/media/mca/tests/Android.bp b/media/mca/tests/Android.bp new file mode 100644 index 000000000000..6b11dd9db7ba --- /dev/null +++ b/media/mca/tests/Android.bp @@ -0,0 +1,12 @@ +android_test { + name: "CameraEffectsTests", + libs: [ + "android.test.runner", + "android.test.base", + ], + static_libs: ["junit"], + // Include all test java files. + srcs: ["src/**/*.java"], + platform_apis: true, + instrumentation_for: "CameraEffectsRecordingSample", +} diff --git a/media/mca/tests/Android.mk b/media/mca/tests/Android.mk deleted file mode 100644 index 648af4e48493..000000000000 --- a/media/mca/tests/Android.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base -LOCAL_STATIC_JAVA_LIBRARIES := junit - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := CameraEffectsTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_INSTRUMENTATION_FOR := CameraEffectsRecordingSample - -include $(BUILD_PACKAGE) - - diff --git a/media/packages/BluetoothMidiService/Android.bp b/media/packages/BluetoothMidiService/Android.bp new file mode 100644 index 000000000000..f45114a277aa --- /dev/null +++ b/media/packages/BluetoothMidiService/Android.bp @@ -0,0 +1,6 @@ +android_app { + name: "BluetoothMidiService", + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", +} diff --git a/media/packages/BluetoothMidiService/Android.mk b/media/packages/BluetoothMidiService/Android.mk deleted file mode 100644 index 6f262bf6007a..000000000000 --- a/media/packages/BluetoothMidiService/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES += \ - $(call all-java-files-under,src) - -LOCAL_PACKAGE_NAME := BluetoothMidiService -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/media/tests/CameraBrowser/Android.bp b/media/tests/CameraBrowser/Android.bp new file mode 100644 index 000000000000..8e3ca1943b17 --- /dev/null +++ b/media/tests/CameraBrowser/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "CameraBrowser", + srcs: ["**/*.java"], + sdk_version: "current", +} diff --git a/media/tests/CameraBrowser/Android.mk b/media/tests/CameraBrowser/Android.mk deleted file mode 100644 index 46596a739451..000000000000 --- a/media/tests/CameraBrowser/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := CameraBrowser - -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) diff --git a/media/tests/EffectsTest/Android.bp b/media/tests/EffectsTest/Android.bp new file mode 100644 index 000000000000..214e8c02f742 --- /dev/null +++ b/media/tests/EffectsTest/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "EffectsTest", + srcs: ["**/*.java"], + platform_apis: true, +} diff --git a/media/tests/EffectsTest/Android.mk b/media/tests/EffectsTest/Android.mk deleted file mode 100644 index a066950985a9..000000000000 --- a/media/tests/EffectsTest/Android.mk +++ /dev/null @@ -1,11 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := EffectsTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) diff --git a/media/tests/MediaDump/Android.bp b/media/tests/MediaDump/Android.bp new file mode 100644 index 000000000000..0eba8b24f6cd --- /dev/null +++ b/media/tests/MediaDump/Android.bp @@ -0,0 +1,6 @@ +android_app { + name: "MediaDump", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + sdk_version: "current", +} diff --git a/media/tests/MediaDump/Android.mk b/media/tests/MediaDump/Android.mk deleted file mode 100644 index 74afdd00b97b..000000000000 --- a/media/tests/MediaDump/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := MediaDump - -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) - -# Use the following include to make our test apk. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/media/tests/ScoAudioTest/Android.bp b/media/tests/ScoAudioTest/Android.bp new file mode 100644 index 000000000000..ad2b91716145 --- /dev/null +++ b/media/tests/ScoAudioTest/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "scoaudiotest", + platform_apis: true, + srcs: ["**/*.java"], +} diff --git a/media/tests/ScoAudioTest/Android.mk b/media/tests/ScoAudioTest/Android.mk deleted file mode 100644 index 2ad91a4c36a2..000000000000 --- a/media/tests/ScoAudioTest/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -#LOCAL_SDK_VERSION := current -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := scoaudiotest - -include $(BUILD_PACKAGE) diff --git a/media/tests/SoundPoolTest/Android.bp b/media/tests/SoundPoolTest/Android.bp new file mode 100644 index 000000000000..473f531f675b --- /dev/null +++ b/media/tests/SoundPoolTest/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "SoundPoolTest", + srcs: ["**/*.java"], + platform_apis: true, +} diff --git a/media/tests/SoundPoolTest/Android.mk b/media/tests/SoundPoolTest/Android.mk deleted file mode 100644 index 9ca33c8c2ef2..000000000000 --- a/media/tests/SoundPoolTest/Android.mk +++ /dev/null @@ -1,11 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := SoundPoolTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) diff --git a/media/tests/players/Android.bp b/media/tests/players/Android.bp new file mode 100644 index 000000000000..23c5f04c93a6 --- /dev/null +++ b/media/tests/players/Android.bp @@ -0,0 +1,31 @@ +// Copyright (C) 2009 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. + +cc_test_library { + name: "invoke_mock_media_player", + srcs: ["invoke_mock_media_player.cpp"], + shared_libs: [ + "libbinder", + "libmedia", + "libutils", + "liblog", + ], + cflags: [ + "-Wall", + "-Werror", + "-Wunused", + "-Wunreachable-code", + ], + gtest: false, +} diff --git a/media/tests/players/Android.mk b/media/tests/players/Android.mk deleted file mode 100644 index ee9d85099104..000000000000 --- a/media/tests/players/Android.mk +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (C) 2009 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. - -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES:= invoke_mock_media_player.cpp - -LOCAL_SHARED_LIBRARIES:= \ - libbinder \ - libmedia \ - libutils \ - liblog - -LOCAL_MODULE:= invoke_mock_media_player -LOCAL_MODULE_TAGS := tests - -LOCAL_CFLAGS += -Wall -Werror -Wunused -Wunreachable-code - -include $(BUILD_SHARED_LIBRARY) diff --git a/packages/NetworkStack/Android.bp b/packages/NetworkStack/Android.bp index 190247aecb2e..8872147b65ed 100644 --- a/packages/NetworkStack/Android.bp +++ b/packages/NetworkStack/Android.bp @@ -25,6 +25,7 @@ android_library { ":services-networkstack-shared-srcs", ], static_libs: [ + "ipmemorystore-client", "netd_aidl_interface-java", "networkstack-aidl-interfaces-java", "datastallprotosnano", diff --git a/packages/NetworkStack/src/android/net/NetworkStackIpMemoryStore.java b/packages/NetworkStack/src/android/net/NetworkStackIpMemoryStore.java new file mode 100644 index 000000000000..475f8261fdc1 --- /dev/null +++ b/packages/NetworkStack/src/android/net/NetworkStackIpMemoryStore.java @@ -0,0 +1,42 @@ +/* + * 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; + +import android.annotation.NonNull; +import android.content.Context; + +/** + * service used to communicate with the ip memory store service in network stack, + * which is running in the same module. + * @see com.android.server.connectivity.ipmemorystore.IpMemoryStoreService + * @hide + */ +public class NetworkStackIpMemoryStore extends IpMemoryStoreClient { + @NonNull private final IIpMemoryStore mService; + + public NetworkStackIpMemoryStore(@NonNull final Context context, + @NonNull final IIpMemoryStore service) { + super(context); + mService = service; + } + + @Override + @NonNull + protected IIpMemoryStore getService() { + return mService; + } +} diff --git a/packages/NetworkStack/src/android/net/ip/IpClient.java b/packages/NetworkStack/src/android/net/ip/IpClient.java index b1f6d246563e..b68fe235647a 100644 --- a/packages/NetworkStack/src/android/net/ip/IpClient.java +++ b/packages/NetworkStack/src/android/net/ip/IpClient.java @@ -18,8 +18,6 @@ package android.net.ip; import static android.net.RouteInfo.RTN_UNICAST; import static android.net.shared.IpConfigurationParcelableUtil.toStableParcelable; -import static android.net.shared.LinkPropertiesParcelableUtil.fromStableParcelable; -import static android.net.shared.LinkPropertiesParcelableUtil.toStableParcelable; import static com.android.server.util.PermissionUtil.checkNetworkStackCallingPermission; @@ -31,9 +29,9 @@ import android.net.INetd; import android.net.IpPrefix; import android.net.LinkAddress; import android.net.LinkProperties; +import android.net.NetworkStackIpMemoryStore; import android.net.ProvisioningConfigurationParcelable; import android.net.ProxyInfo; -import android.net.ProxyInfoParcelable; import android.net.RouteInfo; import android.net.TcpKeepalivePacketDataParcelable; import android.net.apf.ApfCapabilities; @@ -64,6 +62,7 @@ import com.android.internal.util.State; import com.android.internal.util.StateMachine; import com.android.internal.util.WakeupMessage; import com.android.server.NetworkObserverRegistry; +import com.android.server.NetworkStackService.NetworkStackServiceManager; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -103,6 +102,7 @@ public class IpClient extends StateMachine { // One holds StateMachine logs and the other connectivity packet logs. private static final ConcurrentHashMap<String, SharedLog> sSmLogs = new ConcurrentHashMap<>(); private static final ConcurrentHashMap<String, LocalLog> sPktLogs = new ConcurrentHashMap<>(); + private final NetworkStackIpMemoryStore mIpMemoryStore; /** * Dump all state machine and connectivity packet logs to the specified writer. @@ -201,7 +201,7 @@ public class IpClient extends StateMachine { public void onProvisioningSuccess(LinkProperties newLp) { log("onProvisioningSuccess({" + newLp + "})"); try { - mCallback.onProvisioningSuccess(toStableParcelable(newLp)); + mCallback.onProvisioningSuccess(newLp); } catch (RemoteException e) { log("Failed to call onProvisioningSuccess", e); } @@ -210,7 +210,7 @@ public class IpClient extends StateMachine { public void onProvisioningFailure(LinkProperties newLp) { log("onProvisioningFailure({" + newLp + "})"); try { - mCallback.onProvisioningFailure(toStableParcelable(newLp)); + mCallback.onProvisioningFailure(newLp); } catch (RemoteException e) { log("Failed to call onProvisioningFailure", e); } @@ -219,7 +219,7 @@ public class IpClient extends StateMachine { public void onLinkPropertiesChange(LinkProperties newLp) { log("onLinkPropertiesChange({" + newLp + "})"); try { - mCallback.onLinkPropertiesChange(toStableParcelable(newLp)); + mCallback.onLinkPropertiesChange(newLp); } catch (RemoteException e) { log("Failed to call onLinkPropertiesChange", e); } @@ -391,13 +391,14 @@ public class IpClient extends StateMachine { } public IpClient(Context context, String ifName, IIpClientCallbacks callback, - NetworkObserverRegistry observerRegistry) { - this(context, ifName, callback, observerRegistry, new Dependencies()); + NetworkObserverRegistry observerRegistry, NetworkStackServiceManager nssManager) { + this(context, ifName, callback, observerRegistry, nssManager, new Dependencies()); } @VisibleForTesting IpClient(Context context, String ifName, IIpClientCallbacks callback, - NetworkObserverRegistry observerRegistry, Dependencies deps) { + NetworkObserverRegistry observerRegistry, NetworkStackServiceManager nssManager, + Dependencies deps) { super(IpClient.class.getSimpleName() + "." + ifName); Preconditions.checkNotNull(ifName); Preconditions.checkNotNull(callback); @@ -411,6 +412,8 @@ public class IpClient extends StateMachine { mShutdownLatch = new CountDownLatch(1); mCm = mContext.getSystemService(ConnectivityManager.class); mObserverRegistry = observerRegistry; + mIpMemoryStore = + new NetworkStackIpMemoryStore(context, nssManager.getIpMemoryStoreService()); sSmLogs.putIfAbsent(mInterfaceName, new SharedLog(MAX_LOG_RECORDS, mTag)); mLog = sSmLogs.get(mInterfaceName); @@ -525,9 +528,9 @@ public class IpClient extends StateMachine { IpClient.this.setTcpBufferSizes(tcpBufferSizes); } @Override - public void setHttpProxy(ProxyInfoParcelable proxyInfo) { + public void setHttpProxy(ProxyInfo proxyInfo) { checkNetworkStackCallingPermission(); - IpClient.this.setHttpProxy(fromStableParcelable(proxyInfo)); + IpClient.this.setHttpProxy(proxyInfo); } @Override public void setMulticastFilter(boolean enabled) { diff --git a/packages/NetworkStack/src/android/net/metrics/DataStallStatsUtils.java b/packages/NetworkStack/src/android/net/metrics/DataStallStatsUtils.java index 17a36ad4e6d2..c96411e1e39f 100644 --- a/packages/NetworkStack/src/android/net/metrics/DataStallStatsUtils.java +++ b/packages/NetworkStack/src/android/net/metrics/DataStallStatsUtils.java @@ -46,6 +46,8 @@ public class DataStallStatsUtils { return DataStallEventProto.VALID; } else if (result.isPortal()) { return DataStallEventProto.PORTAL; + } else if (result.isPartialConnectivity()) { + return DataStallEventProto.PARTIAL; } else { return DataStallEventProto.INVALID; } diff --git a/packages/NetworkStack/src/com/android/server/NetworkStackService.java b/packages/NetworkStack/src/com/android/server/NetworkStackService.java index 72955bb22a00..335d9513bddb 100644 --- a/packages/NetworkStack/src/com/android/server/NetworkStackService.java +++ b/packages/NetworkStack/src/com/android/server/NetworkStackService.java @@ -19,7 +19,6 @@ package com.android.server; import static android.net.dhcp.IDhcpServer.STATUS_INVALID_ARGUMENT; import static android.net.dhcp.IDhcpServer.STATUS_SUCCESS; import static android.net.dhcp.IDhcpServer.STATUS_UNKNOWN_ERROR; -import static android.net.shared.NetworkParcelableUtil.fromStableParcelable; import static com.android.server.util.PermissionUtil.checkDumpPermission; import static com.android.server.util.PermissionUtil.checkNetworkStackCallingPermission; @@ -30,12 +29,13 @@ import android.app.Service; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; +import android.net.IIpMemoryStore; +import android.net.IIpMemoryStoreCallbacks; import android.net.INetd; import android.net.INetworkMonitor; import android.net.INetworkMonitorCallbacks; import android.net.INetworkStackConnector; import android.net.Network; -import android.net.NetworkParcelable; import android.net.PrivateDnsConfigParcel; import android.net.dhcp.DhcpServer; import android.net.dhcp.DhcpServingParams; @@ -51,6 +51,7 @@ import android.os.RemoteException; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.IndentingPrintWriter; import com.android.server.connectivity.NetworkMonitor; +import com.android.server.connectivity.ipmemorystore.IpMemoryStoreService; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -88,7 +89,19 @@ public class NetworkStackService extends Service { return makeConnector(this); } - private static class NetworkStackConnector extends INetworkStackConnector.Stub { + /** + * An interface for internal clients of the network stack service that can return + * or create inline instances of the service it manages. + */ + public interface NetworkStackServiceManager { + /** + * Get an instance of the IpMemoryStoreService. + */ + IIpMemoryStore getIpMemoryStoreService(); + } + + private static class NetworkStackConnector extends INetworkStackConnector.Stub + implements NetworkStackServiceManager { private static final int NUM_VALIDATION_LOG_LINES = 20; private final Context mContext; private final INetd mNetd; @@ -96,6 +109,7 @@ public class NetworkStackService extends Service { private final ConnectivityManager mCm; @GuardedBy("mIpClients") private final ArrayList<WeakReference<IpClient>> mIpClients = new ArrayList<>(); + private final IpMemoryStoreService mIpMemoryStoreService; private static final int MAX_VALIDATION_LOGS = 10; @GuardedBy("mValidationLogs") @@ -118,6 +132,7 @@ public class NetworkStackService extends Service { (IBinder) context.getSystemService(Context.NETD_SERVICE)); mObserverRegistry = new NetworkObserverRegistry(); mCm = context.getSystemService(ConnectivityManager.class); + mIpMemoryStoreService = new IpMemoryStoreService(context); try { mObserverRegistry.register(mNetd); @@ -152,18 +167,16 @@ public class NetworkStackService extends Service { } @Override - public void makeNetworkMonitor( - NetworkParcelable network, String name, INetworkMonitorCallbacks cb) + public void makeNetworkMonitor(Network network, String name, INetworkMonitorCallbacks cb) throws RemoteException { - final Network parsedNetwork = fromStableParcelable(network); - final SharedLog log = addValidationLogs(parsedNetwork, name); - final NetworkMonitor nm = new NetworkMonitor(mContext, cb, parsedNetwork, log); + final SharedLog log = addValidationLogs(network, name); + final NetworkMonitor nm = new NetworkMonitor(mContext, cb, network, log); cb.onNetworkMonitorCreated(new NetworkMonitorImpl(nm)); } @Override public void makeIpClient(String ifName, IIpClientCallbacks cb) throws RemoteException { - final IpClient ipClient = new IpClient(mContext, ifName, cb, mObserverRegistry); + final IpClient ipClient = new IpClient(mContext, ifName, cb, mObserverRegistry, this); synchronized (mIpClients) { final Iterator<WeakReference<IpClient>> it = mIpClients.iterator(); @@ -180,6 +193,17 @@ public class NetworkStackService extends Service { } @Override + public IIpMemoryStore getIpMemoryStoreService() { + return mIpMemoryStoreService; + } + + @Override + public void fetchIpMemoryStore(@NonNull final IIpMemoryStoreCallbacks cb) + throws RemoteException { + cb.onIpMemoryStoreFetched(mIpMemoryStoreService); + } + + @Override protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout, @Nullable String[] args) { checkDumpPermission(); diff --git a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java index fc56da7eacd8..b238ae4a066a 100644 --- a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java +++ b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java @@ -72,7 +72,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.telephony.AccessNetworkConstants; import android.telephony.CellSignalStrength; -import android.telephony.NetworkRegistrationState; +import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; @@ -1615,9 +1615,9 @@ public class NetworkMonitor extends StateMachine { return; } // See if the data sub is registered for PS services on cell. - final NetworkRegistrationState nrs = dataSs.getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, - AccessNetworkConstants.TransportType.WWAN); + final NetworkRegistrationInfo nrs = dataSs.getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, + AccessNetworkConstants.TRANSPORT_TYPE_WWAN); latencyBroadcast.putExtra( NetworkMonitorUtils.EXTRA_CELL_ID, nrs == null ? null : nrs.getCellIdentity()); diff --git a/services/ipmemorystore/java/com/android/server/net/ipmemorystore/IpMemoryStoreDatabase.java b/packages/NetworkStack/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreDatabase.java index bbecc6359a40..4d4ceed9cb52 100644 --- a/services/ipmemorystore/java/com/android/server/net/ipmemorystore/IpMemoryStoreDatabase.java +++ b/packages/NetworkStack/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreDatabase.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.net.ipmemorystore; +package com.android.server.connectivity.ipmemorystore; import static android.net.shared.Inet4AddressUtils.inet4AddressToIntHTH; import static android.net.shared.Inet4AddressUtils.intToInet4AddressHTH; diff --git a/services/ipmemorystore/java/com/android/server/net/ipmemorystore/IpMemoryStoreService.java b/packages/NetworkStack/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreService.java index d43dc6a24260..f801b355c43e 100644 --- a/services/ipmemorystore/java/com/android/server/net/ipmemorystore/IpMemoryStoreService.java +++ b/packages/NetworkStack/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreService.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package com.android.server.net.ipmemorystore; +package com.android.server.connectivity.ipmemorystore; import static android.net.ipmemorystore.Status.ERROR_DATABASE_CANNOT_BE_OPENED; import static android.net.ipmemorystore.Status.ERROR_GENERIC; import static android.net.ipmemorystore.Status.ERROR_ILLEGAL_ARGUMENT; import static android.net.ipmemorystore.Status.SUCCESS; -import static com.android.server.net.ipmemorystore.IpMemoryStoreDatabase.EXPIRY_ERROR; +import static com.android.server.connectivity.ipmemorystore.IpMemoryStoreDatabase.EXPIRY_ERROR; import android.annotation.NonNull; import android.annotation.Nullable; @@ -40,7 +40,6 @@ import android.net.ipmemorystore.NetworkAttributesParcelable; import android.net.ipmemorystore.SameL3NetworkResponse; import android.net.ipmemorystore.Status; import android.net.ipmemorystore.StatusParcelable; -import android.net.ipmemorystore.Utils; import android.os.RemoteException; import android.util.Log; diff --git a/services/ipmemorystore/java/com/android/server/net/ipmemorystore/RelevanceUtils.java b/packages/NetworkStack/src/com/android/server/connectivity/ipmemorystore/RelevanceUtils.java index aa454008958d..38d55448aa2a 100644 --- a/services/ipmemorystore/java/com/android/server/net/ipmemorystore/RelevanceUtils.java +++ b/packages/NetworkStack/src/com/android/server/connectivity/ipmemorystore/RelevanceUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.net.ipmemorystore; +package com.android.server.connectivity.ipmemorystore; import com.android.internal.annotations.VisibleForTesting; diff --git a/core/java/android/net/ipmemorystore/Utils.java b/packages/NetworkStack/src/com/android/server/connectivity/ipmemorystore/Utils.java index b361aca5a6f7..9cbf490505f4 100644 --- a/core/java/android/net/ipmemorystore/Utils.java +++ b/packages/NetworkStack/src/com/android/server/connectivity/ipmemorystore/Utils.java @@ -14,10 +14,11 @@ * limitations under the License. */ -package android.net.ipmemorystore; +package com.android.server.connectivity.ipmemorystore; import android.annotation.NonNull; import android.annotation.Nullable; +import android.net.ipmemorystore.Blob; /** {@hide} */ public class Utils { diff --git a/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java b/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java index bd488ea4145f..eee12d6f8c7c 100644 --- a/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java +++ b/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java @@ -16,13 +16,10 @@ package android.net.ip; -import static android.net.shared.LinkPropertiesParcelableUtil.fromStableParcelable; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.eq; @@ -54,6 +51,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; import com.android.server.NetworkObserver; import com.android.server.NetworkObserverRegistry; +import com.android.server.NetworkStackService; import org.junit.Before; import org.junit.Test; @@ -93,6 +91,7 @@ public class IpClientTest { @Mock private AlarmManager mAlarm; @Mock private IpClient.Dependencies mDependencies; @Mock private ContentResolver mContentResolver; + @Mock private NetworkStackService.NetworkStackServiceManager mNetworkStackServiceManager; private NetworkObserver mObserver; private InterfaceParams mIfParams; @@ -121,7 +120,8 @@ public class IpClientTest { private IpClient makeIpClient(String ifname) throws Exception { setTestInterfaceParams(ifname); - final IpClient ipc = new IpClient(mContext, ifname, mCb, mObserverRegistry, mDependencies); + final IpClient ipc = new IpClient(mContext, ifname, mCb, mObserverRegistry, + mNetworkStackServiceManager, mDependencies); verify(mNetd, timeout(TEST_TIMEOUT_MS).times(1)).interfaceSetEnableIPv6(ifname, false); verify(mNetd, timeout(TEST_TIMEOUT_MS).times(1)).interfaceClearAddrs(ifname); ArgumentCaptor<NetworkObserver> arg = ArgumentCaptor.forClass(NetworkObserver.class); @@ -145,8 +145,8 @@ public class IpClientTest { public void testNullInterfaceNameMostDefinitelyThrows() throws Exception { setTestInterfaceParams(null); try { - final IpClient ipc = new IpClient( - mContext, null, mCb, mObserverRegistry, mDependencies); + final IpClient ipc = new IpClient(mContext, null, mCb, mObserverRegistry, + mNetworkStackServiceManager, mDependencies); ipc.shutdown(); fail(); } catch (NullPointerException npe) { @@ -159,8 +159,8 @@ public class IpClientTest { final String ifname = "lo"; setTestInterfaceParams(ifname); try { - final IpClient ipc = new IpClient( - mContext, ifname, null, mObserverRegistry, mDependencies); + final IpClient ipc = new IpClient(mContext, ifname, null, mObserverRegistry, + mNetworkStackServiceManager, mDependencies); ipc.shutdown(); fail(); } catch (NullPointerException npe) { @@ -171,16 +171,16 @@ public class IpClientTest { @Test public void testInvalidInterfaceDoesNotThrow() throws Exception { setTestInterfaceParams(TEST_IFNAME); - final IpClient ipc = new IpClient( - mContext, TEST_IFNAME, mCb, mObserverRegistry, mDependencies); + final IpClient ipc = new IpClient(mContext, TEST_IFNAME, mCb, mObserverRegistry, + mNetworkStackServiceManager, mDependencies); ipc.shutdown(); } @Test public void testInterfaceNotFoundFailsImmediately() throws Exception { setTestInterfaceParams(null); - final IpClient ipc = new IpClient( - mContext, TEST_IFNAME, mCb, mObserverRegistry, mDependencies); + final IpClient ipc = new IpClient(mContext, TEST_IFNAME, mCb, mObserverRegistry, + mNetworkStackServiceManager, mDependencies); ipc.startProvisioning(new ProvisioningConfiguration()); verify(mCb, times(1)).onProvisioningFailure(any()); ipc.shutdown(); @@ -207,8 +207,7 @@ public class IpClientTest { verify(mNetd, timeout(TEST_TIMEOUT_MS).times(1)).interfaceSetEnableIPv6(iface, false); verify(mNetd, timeout(TEST_TIMEOUT_MS).times(1)).interfaceClearAddrs(iface); verify(mCb, timeout(TEST_TIMEOUT_MS).times(1)) - .onLinkPropertiesChange(argThat( - lp -> fromStableParcelable(lp).equals(makeEmptyLinkProperties(iface)))); + .onLinkPropertiesChange(makeEmptyLinkProperties(iface)); } @Test @@ -253,15 +252,13 @@ public class IpClientTest { mObserver.onInterfaceAddressUpdated(new LinkAddress(addresses[lastAddr]), iface); LinkProperties want = linkproperties(links(addresses), routes(prefixes)); want.setInterfaceName(iface); - verify(mCb, timeout(TEST_TIMEOUT_MS).times(1)).onProvisioningSuccess(argThat( - lp -> fromStableParcelable(lp).equals(want))); + verify(mCb, timeout(TEST_TIMEOUT_MS).times(1)).onProvisioningSuccess(want); ipc.shutdown(); verify(mNetd, timeout(TEST_TIMEOUT_MS).times(1)).interfaceSetEnableIPv6(iface, false); verify(mNetd, timeout(TEST_TIMEOUT_MS).times(1)).interfaceClearAddrs(iface); verify(mCb, timeout(TEST_TIMEOUT_MS).times(1)) - .onLinkPropertiesChange(argThat( - lp -> fromStableParcelable(lp).equals(makeEmptyLinkProperties(iface)))); + .onLinkPropertiesChange(makeEmptyLinkProperties(iface)); } @Test diff --git a/tests/net/java/com/android/server/net/ipmemorystore/IpMemoryStoreServiceTest.java b/packages/NetworkStack/tests/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreServiceTest.java index be1068065b05..d0e58b817e9d 100644 --- a/tests/net/java/com/android/server/net/ipmemorystore/IpMemoryStoreServiceTest.java +++ b/packages/NetworkStack/tests/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreServiceTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.net.ipmemorystore; +package com.android.server.connectivity.ipmemorystore; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/tests/net/java/com/android/server/net/ipmemorystore/RelevanceUtilsTests.java b/packages/NetworkStack/tests/src/com/android/server/connectivity/ipmemorystore/RelevanceUtilsTests.java index 7413b914dbe9..3d3aabc66e70 100644 --- a/tests/net/java/com/android/server/net/ipmemorystore/RelevanceUtilsTests.java +++ b/packages/NetworkStack/tests/src/com/android/server/connectivity/ipmemorystore/RelevanceUtilsTests.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.android.server.net.ipmemorystore; +package com.android.server.connectivity.ipmemorystore; -import static com.android.server.net.ipmemorystore.RelevanceUtils.CAPPED_RELEVANCE; +import static com.android.server.connectivity.ipmemorystore.RelevanceUtils.CAPPED_RELEVANCE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index 40c8b01578b7..2687c682b28a 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -159,6 +159,9 @@ <uses-permission android:name="android.permission.CONTROL_KEYGUARD" /> + <!-- Permission needed to run network tests in CTS --> + <uses-permission android:name="android.permission.MANAGE_TEST_NETWORKS" /> + <application android:label="@string/app_label" android:defaultToDeviceProtectedStorage="true" android:directBootAware="true"> diff --git a/packages/SystemUI/res/drawable/ic_5g_mobiledata.xml b/packages/SystemUI/res/drawable/ic_5g_mobiledata.xml new file mode 100644 index 000000000000..2aa6e57f6f82 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_5g_mobiledata.xml @@ -0,0 +1,27 @@ +<!-- + Copyright (C) 2018 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="14dp" + android:height="17dp" + android:viewportWidth="14" + android:viewportHeight="17"> + <path + android:fillColor="#FF000000" + android:pathData="M13.9,12.24l-0.22,0.27c-0.63,0.73 -1.55,1.1 -2.76,1.1c-1.08,0 -1.92,-0.36 -2.53,-1.07s-0.93,-1.72 -0.94,-3.02V7.56c0,-1.39 0.28,-2.44 0.84,-3.13s1.39,-1.04 2.51,-1.04c0.95,0 1.69,0.26 2.23,0.79s0.83,1.28 0.89,2.26h-1.25c-0.05,-0.62 -0.22,-1.1 -0.52,-1.45s-0.74,-0.52 -1.34,-0.52c-0.72,0 -1.24,0.23 -1.57,0.7S8.72,6.37 8.71,7.4v2.03c0,1 0.19,1.77 0.57,2.31c0.38,0.54 0.93,0.8 1.65,0.8c0.67,0 1.19,-0.16 1.54,-0.49l0.18,-0.17V9.59h-1.82V8.52h3.07V12.24z"/> + <path + android:fillColor="#FF000000" + android:pathData="M1.15,8.47l0.43,-4.96h4.33v1.17H2.6L2.37,7.39C2.78,7.1 3.22,6.96 3.69,6.96c0.77,0 1.38,0.3 1.83,0.9s0.66,1.41 0.66,2.43c0,1.03 -0.24,1.84 -0.72,2.43S4.32,13.6 3.48,13.6c-0.75,0 -1.36,-0.24 -1.83,-0.73s-0.74,-1.16 -0.81,-2.02h1.13c0.07,0.57 0.23,1 0.49,1.29c0.26,0.29 0.59,0.43 1.01,0.43c0.47,0 0.84,-0.2 1.1,-0.61c0.26,-0.41 0.4,-0.96 0.4,-1.65c0,-0.65 -0.14,-1.18 -0.43,-1.59S3.88,8.09 3.4,8.09c-0.4,0 -0.72,0.1 -0.96,0.31L2.11,8.73L1.15,8.47z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/ic_5g_plus_mobiledata.xml b/packages/SystemUI/res/drawable/ic_5g_plus_mobiledata.xml new file mode 100644 index 000000000000..10bbcc7b3737 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_5g_plus_mobiledata.xml @@ -0,0 +1,33 @@ +<!-- + Copyright (C) 2018 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:viewportWidth="22" + android:viewportHeight="17" + android:width="22dp" + android:height="17dp"> + <group> + <group> + <path android:fillColor="#FF000000" + android:pathData="M1.03 8.47l0.43-4.96h4.33v1.17H2.48L2.25 7.39C2.66 7.1 3.1 6.96 3.57 6.96c0.77 0 1.38 0.3 1.83 0.9 s0.66 1.41 0.66 2.43c0 1.03-0.24 1.84-0.72 2.43S4.2 13.6 3.36 13.6c-0.75 0-1.36-0.24-1.83-0.73s-0.74-1.16-0.81-2.02h1.13 c0.07 0.57 0.23 1 0.49 1.29s0.59 0.43 1.01 0.43c0.47 0 0.84-0.2 1.1-0.61c0.26-0.41 0.4-0.96 0.4-1.65 c0-0.65-0.14-1.18-0.43-1.59S3.76 8.09 3.28 8.09c-0.4 0-0.72 0.1-0.96 0.31L1.99 8.73L1.03 8.47z"/> + </group> + <group> + <path android:fillColor="#FF000000" + android:pathData="M 18.93,5.74 L 18.93,3.39 L 17.63,3.39 L 17.63,5.74 L 15.28,5.74 L 15.28,7.04 L 17.63,7.04 L 17.63,9.39 L 18.93,9.39 L 18.93,7.04 L 21.28,7.04 L 21.28,5.74 z"/> + </group> + <path android:fillColor="#FF000000" + android:pathData="M13.78 12.24l-0.22 0.27c-0.63 0.73-1.55 1.1-2.76 1.1c-1.08 0-1.92-0.36-2.53-1.07s-0.93-1.72-0.94-3.02V7.56 c0-1.39 0.28-2.44 0.84-3.13s1.39-1.04 2.51-1.04c0.95 0 1.69 0.26 2.23 0.79s0.83 1.28 0.89 2.26h-1.25 c-0.05-0.62-0.22-1.1-0.52-1.45s-0.74-0.52-1.34-0.52c-0.72 0-1.24 0.23-1.57 0.7S8.6 6.37 8.59 7.4v2.03c0 1 0.19 1.77 0.57 2.31 c0.38 0.54 0.93 0.8 1.65 0.8c0.67 0 1.19-0.16 1.54-0.49l0.18-0.17V9.59h-1.82V8.52h3.07V12.24z"/> + </group> +</vector> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 997b50b8a5a2..4437f49fd335 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -390,6 +390,12 @@ <!-- Content description of the data connection type LTE+. [CHAR LIMIT=NONE] --> <string name="data_connection_lte_plus">LTE+</string> + <!-- Content description of the data connection type 5G. [CHAR LIMIT=NONE] --> + <string name="data_connection_5g" translate="false">5G</string> + + <!-- Content description of the data connection type 5G+. [CHAR LIMIT=NONE] --> + <string name="data_connection_5g_plus" translate="false">5G+</string> + <!-- Content description of the data connection type CDMA. [CHAR LIMIT=NONE] --> <string name="data_connection_cdma">1X</string> diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java index 2a4bb607673e..7148351cef03 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java @@ -127,12 +127,12 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha @Override public void onTuningChanged(String key, String newValue) { if (ALLOW_FANCY_ANIMATION.equals(key)) { - mAllowFancy = newValue == null || Integer.parseInt(newValue) != 0; + mAllowFancy = TunerService.parseIntegerSwitch(newValue, true); if (!mAllowFancy) { clearAnimationState(); } } else if (MOVE_FULL_ROWS.equals(key)) { - mFullRows = newValue == null || Integer.parseInt(newValue) != 0; + mFullRows = TunerService.parseIntegerSwitch(newValue, true); } else if (QuickQSPanel.NUM_QUICK_TILES.equals(key)) { mNumQuickTiles = mQuickQsPanel.getNumQuickTiles(mQs.getContext()); clearAnimationState(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 3fc258b1e8e9..bdc73d9bf4c4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -191,7 +191,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne } private void updateViewVisibilityForTuningValue(View view, @Nullable String newValue) { - view.setVisibility(newValue == null || Integer.parseInt(newValue) != 0 ? VISIBLE : GONE); + view.setVisibility(TunerService.parseIntegerSwitch(newValue, true) ? VISIBLE : GONE); } public void openDetails(String subPanel) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java index 8517d9086fc7..9c2060dfc2c2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java @@ -274,7 +274,7 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C @Override public void onTuningChanged(String key, String newValue) { if (CLOCK_SECONDS.equals(key)) { - mShowSeconds = newValue != null && Integer.parseInt(newValue) != 0; + mShowSeconds = TunerService.parseIntegerSwitch(newValue, false); updateShowSeconds(); } else { setClockVisibleByUser(!StatusBarIconController.getIconBlacklist(newValue) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index a0466754eb96..e2ac0420395b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -22,6 +22,7 @@ import android.net.NetworkCapabilities; import android.os.Handler; import android.os.Looper; import android.provider.Settings.Global; +import android.telephony.NetworkRegistrationInfo; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.SignalStrength; @@ -457,7 +458,13 @@ public class MobileSignalController extends SignalController< mCurrentState.level = mSignalStrength.getLevel(); } } - if (mNetworkToIconLookup.indexOfKey(mDataNetType) >= 0) { + + // When the device is camped on a 5G Non-Standalone network, the data network type is still + // LTE. In this case, we first check which 5G icon should be shown. + MobileIconGroup nr5GIconGroup = getNr5GIconGroup(); + if (nr5GIconGroup != null) { + mCurrentState.iconGroup = nr5GIconGroup; + } else if (mNetworkToIconLookup.indexOfKey(mDataNetType) >= 0) { mCurrentState.iconGroup = mNetworkToIconLookup.get(mDataNetType); } else { mCurrentState.iconGroup = mDefaultIcons; @@ -484,6 +491,36 @@ public class MobileSignalController extends SignalController< notifyListenersIfNecessary(); } + private MobileIconGroup getNr5GIconGroup() { + if (mServiceState == null) return null; + + int nrStatus = mServiceState.getNrStatus(); + if (nrStatus == NetworkRegistrationInfo.NR_STATUS_CONNECTED) { + // Check if the NR 5G is using millimeter wave and the icon is config. + if (mServiceState.getNrFrequencyRange() == ServiceState.FREQUENCY_RANGE_MMWAVE) { + if (mConfig.nr5GIconMap.containsKey(Config.NR_CONNECTED_MMWAVE)) { + return mConfig.nr5GIconMap.get(Config.NR_CONNECTED_MMWAVE); + } + } + + // If NR 5G is not using millimeter wave or there is no icon for millimeter wave, we + // check the normal 5G icon. + if (mConfig.nr5GIconMap.containsKey(Config.NR_CONNECTED)) { + return mConfig.nr5GIconMap.get(Config.NR_CONNECTED); + } + } else if (nrStatus == NetworkRegistrationInfo.NR_STATUS_NOT_RESTRICTED) { + if (mConfig.nr5GIconMap.containsKey(Config.NR_NOT_RESTRICTED)) { + return mConfig.nr5GIconMap.get(Config.NR_NOT_RESTRICTED); + } + } else if (nrStatus == NetworkRegistrationInfo.NR_STATUS_RESTRICTED) { + if (mConfig.nr5GIconMap.containsKey(Config.NR_RESTRICTED)) { + return mConfig.nr5GIconMap.get(Config.NR_RESTRICTED); + } + } + + return null; + } + private boolean isDataDisabled() { return !mPhone.getDataEnabled(mSubscriptionInfo.getSubscriptionId()); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index 326147df184d..b83fa6252a27 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.policy; +import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -54,18 +56,18 @@ import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.settings.CurrentUserTracker; import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; +import com.android.systemui.statusbar.policy.MobileSignalController.MobileIconGroup; -import com.android.systemui.statusbar.policy.MobileSignalController.MobileState; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.BitSet; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.List; import java.util.Locale; - -import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; +import java.util.Map; /** Platform implementation of the network controller. **/ public class NetworkControllerImpl extends BroadcastReceiver @@ -1026,6 +1028,13 @@ public class NetworkControllerImpl extends BroadcastReceiver @VisibleForTesting static class Config { + static final int NR_CONNECTED_MMWAVE = 1; + static final int NR_CONNECTED = 2; + static final int NR_NOT_RESTRICTED = 3; + static final int NR_RESTRICTED = 4; + + Map<Integer, MobileIconGroup> nr5GIconMap = new HashMap<>(); + boolean showAtLeast3G = false; boolean alwaysShowCdmaRssi = false; boolean show4gForLte = false; @@ -1034,6 +1043,19 @@ public class NetworkControllerImpl extends BroadcastReceiver boolean inflateSignalStrengths = false; boolean alwaysShowDataRatIcon = false; + /** + * Mapping from NR 5G status string to an integer. The NR 5G status string should match + * those in carrier config. + */ + private static final Map<String, Integer> NR_STATUS_STRING_TO_INDEX; + static { + NR_STATUS_STRING_TO_INDEX = new HashMap<>(4); + NR_STATUS_STRING_TO_INDEX.put("connected_mmwave", NR_CONNECTED_MMWAVE); + NR_STATUS_STRING_TO_INDEX.put("connected", NR_CONNECTED); + NR_STATUS_STRING_TO_INDEX.put("not_restricted", NR_NOT_RESTRICTED); + NR_STATUS_STRING_TO_INDEX.put("restricted", NR_RESTRICTED); + } + static Config readConfig(Context context) { Config config = new Config(); Resources res = context.getResources(); @@ -1058,8 +1080,46 @@ public class NetworkControllerImpl extends BroadcastReceiver CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL); config.hideLtePlus = b.getBoolean( CarrierConfigManager.KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL); + String nr5GIconConfiguration = + b.getString(CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING); + if (!TextUtils.isEmpty(nr5GIconConfiguration)) { + String[] nr5GIconConfigPairs = nr5GIconConfiguration.trim().split(","); + for (String pair : nr5GIconConfigPairs) { + add5GIconMapping(pair, config); + } + } } + return config; } + + /** + * Add a mapping from NR 5G status to the 5G icon. All the icon resources come from + * {@link TelephonyIcons}. + * + * @param keyValuePair the NR 5G status and icon name separated by a colon. + * @param config container that used to store the parsed configs. + */ + @VisibleForTesting + static void add5GIconMapping(String keyValuePair, Config config) { + String[] kv = (keyValuePair.trim().toLowerCase()).split(":"); + + if (kv.length != 2) { + if (DEBUG) Log.e(TAG, "Invalid 5G icon configuration, config = " + keyValuePair); + return; + } + + String key = kv[0], value = kv[1]; + + // There is no icon config for the specific 5G status. + if (value.equals("none")) return; + + if (NR_STATUS_STRING_TO_INDEX.containsKey(key) + && TelephonyIcons.ICON_NAME_TO_ICON.containsKey(value)) { + config.nr5GIconMap.put( + NR_STATUS_STRING_TO_INDEX.get(key), + TelephonyIcons.ICON_NAME_TO_ICON.get(value)); + } + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java index bd768202aa7a..7347f66de8ce 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java @@ -19,6 +19,9 @@ package com.android.systemui.statusbar.policy; import com.android.systemui.R; import com.android.systemui.statusbar.policy.MobileSignalController.MobileIconGroup; +import java.util.HashMap; +import java.util.Map; + class TelephonyIcons { //***** Data connection icons static final int FLIGHT_MODE_ICON = R.drawable.stat_sys_airplane_mode; @@ -33,6 +36,8 @@ class TelephonyIcons { static final int ICON_4G = R.drawable.ic_4g_mobiledata; static final int ICON_4G_PLUS = R.drawable.ic_4g_plus_mobiledata; static final int ICON_1X = R.drawable.ic_1x_mobiledata; + static final int ICON_5G = R.drawable.ic_5g_mobiledata; + static final int ICON_5G_PLUS = R.drawable.ic_5g_plus_mobiledata; static final MobileIconGroup CARRIER_NETWORK_CHANGE = new MobileIconGroup( "CARRIER_NETWORK_CHANGE", @@ -199,6 +204,34 @@ class TelephonyIcons { TelephonyIcons.ICON_LTE_PLUS, true); + static final MobileIconGroup NR_5G = new MobileIconGroup( + "5G", + null, + null, + AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH, + 0, + 0, + 0, + 0, + AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0], + R.string.data_connection_5g, + TelephonyIcons.ICON_5G, + true); + + static final MobileIconGroup NR_5G_PLUS = new MobileIconGroup( + "5G_PLUS", + null, + null, + AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH, + 0, + 0, + 0, + 0, + AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0], + R.string.data_connection_5g_plus, + TelephonyIcons.ICON_5G_PLUS, + true); + static final MobileIconGroup DATA_DISABLED = new MobileIconGroup( "DataDisabled", null, @@ -211,5 +244,27 @@ class TelephonyIcons { R.string.cell_data_off_content_description, 0, false); + + /** Mapping icon name(lower case) to the icon object. */ + static final Map<String, MobileIconGroup> ICON_NAME_TO_ICON; + static { + ICON_NAME_TO_ICON = new HashMap<>(); + ICON_NAME_TO_ICON.put("carrier_network_change", CARRIER_NETWORK_CHANGE); + ICON_NAME_TO_ICON.put("3g", THREE_G); + ICON_NAME_TO_ICON.put("wfc", WFC); + ICON_NAME_TO_ICON.put("unknown", UNKNOWN); + ICON_NAME_TO_ICON.put("e", E); + ICON_NAME_TO_ICON.put("1x", ONE_X); + ICON_NAME_TO_ICON.put("g", G); + ICON_NAME_TO_ICON.put("h", H); + ICON_NAME_TO_ICON.put("h+", H_PLUS); + ICON_NAME_TO_ICON.put("4g", FOUR_G); + ICON_NAME_TO_ICON.put("4g+", FOUR_G_PLUS); + ICON_NAME_TO_ICON.put("lte", LTE); + ICON_NAME_TO_ICON.put("lte+", LTE_PLUS); + ICON_NAME_TO_ICON.put("5g", NR_5G); + ICON_NAME_TO_ICON.put("5g_plus", NR_5G_PLUS); + ICON_NAME_TO_ICON.put("datadisable", DATA_DISABLED); + } } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java index 3a9d1c7caeb8..35ade2cb5830 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java @@ -109,4 +109,12 @@ public abstract class TunerService { }); dialog.show(); } + + public static boolean parseIntegerSwitch(String value, boolean defaultValue) { + try { + return value != null ? Integer.parseInt(value) != 0 : defaultValue; + } catch (NumberFormatException e) { + return defaultValue; + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java index f53d51690712..89049f8188b8 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java @@ -38,7 +38,7 @@ public class TunerSwitch extends SwitchPreference implements Tunable { @Override public void onTuningChanged(String key, String newValue) { - setChecked(newValue != null ? Integer.parseInt(newValue) != 0 : mDefault); + setChecked(TunerService.parseIntegerSwitch(newValue, mDefault)); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java index dd552646955a..d089b2ff5c52 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java @@ -108,28 +108,23 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna @Override public void onTuningChanged(String key, String newValue) { + boolean volumeDownToEnterSilent = mVolumePolicy.volumeDownToEnterSilent; + boolean volumeUpToExitSilent = mVolumePolicy.volumeUpToExitSilent; + boolean doNotDisturbWhenSilent = mVolumePolicy.doNotDisturbWhenSilent; + if (VOLUME_DOWN_SILENT.equals(key)) { - final boolean volumeDownToEnterSilent = newValue != null - ? Integer.parseInt(newValue) != 0 - : DEFAULT_VOLUME_DOWN_TO_ENTER_SILENT; - setVolumePolicy(volumeDownToEnterSilent, - mVolumePolicy.volumeUpToExitSilent, mVolumePolicy.doNotDisturbWhenSilent, - mVolumePolicy.vibrateToSilentDebounce); + volumeDownToEnterSilent = + TunerService.parseIntegerSwitch(newValue, DEFAULT_VOLUME_DOWN_TO_ENTER_SILENT); } else if (VOLUME_UP_SILENT.equals(key)) { - final boolean volumeUpToExitSilent = newValue != null - ? Integer.parseInt(newValue) != 0 - : DEFAULT_VOLUME_UP_TO_EXIT_SILENT; - setVolumePolicy(mVolumePolicy.volumeDownToEnterSilent, - volumeUpToExitSilent, mVolumePolicy.doNotDisturbWhenSilent, - mVolumePolicy.vibrateToSilentDebounce); + volumeUpToExitSilent = + TunerService.parseIntegerSwitch(newValue, DEFAULT_VOLUME_UP_TO_EXIT_SILENT); } else if (VOLUME_SILENT_DO_NOT_DISTURB.equals(key)) { - final boolean doNotDisturbWhenSilent = newValue != null - ? Integer.parseInt(newValue) != 0 - : DEFAULT_DO_NOT_DISTURB_WHEN_SILENT; - setVolumePolicy(mVolumePolicy.volumeDownToEnterSilent, - mVolumePolicy.volumeUpToExitSilent, doNotDisturbWhenSilent, - mVolumePolicy.vibrateToSilentDebounce); + doNotDisturbWhenSilent = + TunerService.parseIntegerSwitch(newValue, DEFAULT_DO_NOT_DISTURB_WHEN_SILENT); } + + setVolumePolicy(volumeDownToEnterSilent, volumeUpToExitSilent, doNotDisturbWhenSilent, + mVolumePolicy.vibrateToSilentDebounce); } private void setVolumePolicy(boolean volumeDownToEnterSilent, boolean volumeUpToExitSilent, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java index 55b4d27ff354..c1f88855ac24 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java @@ -213,6 +213,11 @@ public class NetworkControllerBaseTest extends SysuiTestCase { NetworkCapabilities.TRANSPORT_CELLULAR, true, true); } + public void setupDefaultNr5GIconConfiguration() { + NetworkControllerImpl.Config.add5GIconMapping("connected_mmwave:5g_plus", mConfig); + NetworkControllerImpl.Config.add5GIconMapping("connected:5g", mConfig); + } + public void setConnectivityViaBroadcast( int networkType, boolean validated, boolean isConnected) { setConnectivityCommon(networkType, validated, isConnected); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java index d42940a3d2a2..5786796d980f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java @@ -1,11 +1,14 @@ package com.android.systemui.statusbar.policy; import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import android.net.NetworkCapabilities; import android.os.Looper; +import android.telephony.NetworkRegistrationInfo; +import android.telephony.ServiceState; import android.telephony.TelephonyManager; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; @@ -16,6 +19,7 @@ import com.android.settingslib.net.DataUsageController; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; @SmallTest @RunWith(AndroidTestingRunner.class) @@ -141,6 +145,47 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { } @Test + public void testNr5GIcon_NrConnectedWithoutMMWave_show5GIcon() { + setupDefaultNr5GIconConfiguration(); + setupDefaultSignal(); + updateDataConnectionState(TelephonyManager.DATA_CONNECTED, + TelephonyManager.NETWORK_TYPE_LTE); + ServiceState ss = Mockito.mock(ServiceState.class); + doReturn(NetworkRegistrationInfo.NR_STATUS_CONNECTED).when(ss).getNrStatus(); + doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange(); + mPhoneStateListener.onServiceStateChanged(ss); + + verifyDataIndicators(TelephonyIcons.ICON_5G); + } + + @Test + public void testNr5GIcon_NrConnectedWithMMWave_show5GPlusIcon() { + setupDefaultNr5GIconConfiguration(); + setupDefaultSignal(); + updateDataConnectionState(TelephonyManager.DATA_CONNECTED, + TelephonyManager.NETWORK_TYPE_LTE); + ServiceState ss = Mockito.mock(ServiceState.class); + doReturn(NetworkRegistrationInfo.NR_STATUS_CONNECTED).when(ss).getNrStatus(); + doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss).getNrFrequencyRange(); + mPhoneStateListener.onServiceStateChanged(ss); + + verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS); + } + + @Test + public void testNr5GIcon_NrRestricted_showLteIcon() { + setupDefaultNr5GIconConfiguration(); + setupDefaultSignal(); + updateDataConnectionState(TelephonyManager.DATA_CONNECTED, + TelephonyManager.NETWORK_TYPE_LTE); + ServiceState ss = Mockito.mock(ServiceState.class); + doReturn(NetworkRegistrationInfo.NR_STATUS_RESTRICTED).when(ss).getNrStatus(); + mPhoneStateListener.onServiceStateChanged(mServiceState); + + verifyDataIndicators(TelephonyIcons.ICON_LTE); + } + + @Test public void testDataDisabledIcon_UserNotSetup() { setupNetworkController(); when(mMockTm.getDataEnabled(mSubId)).thenReturn(false); @@ -222,5 +267,4 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest { true, DEFAULT_QS_SIGNAL_STRENGTH, dataIcon, false, false); } - } diff --git a/services/Android.bp b/services/Android.bp index a416ca0b6977..bea51be321c9 100644 --- a/services/Android.bp +++ b/services/Android.bp @@ -23,7 +23,6 @@ java_library { "services.companion", "services.coverage", "services.devicepolicy", - "services.ipmemorystore", "services.midi", "services.net", "services.print", diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 524d5c66b393..4416b4d103aa 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -41,7 +41,6 @@ import static android.net.NetworkCapabilities.TRANSPORT_VPN; import static android.net.NetworkPolicyManager.RULE_NONE; import static android.net.NetworkPolicyManager.uidRulesToString; import static android.net.shared.NetworkMonitorUtils.isValidationRequired; -import static android.net.shared.NetworkParcelableUtil.toStableParcelable; import static android.os.Process.INVALID_UID; import static android.system.OsConstants.IPPROTO_TCP; import static android.system.OsConstants.IPPROTO_UDP; @@ -73,6 +72,7 @@ import android.net.INetworkMonitorCallbacks; import android.net.INetworkPolicyListener; import android.net.INetworkPolicyManager; import android.net.INetworkStatsService; +import android.net.ISocketKeepaliveCallback; import android.net.ITetheringEventCallback; import android.net.InetAddresses; import android.net.IpPrefix; @@ -299,6 +299,15 @@ public class ConnectivityService extends IConnectivityManager.Stub private INetworkPolicyManager mPolicyManager; private NetworkPolicyManagerInternal mPolicyManagerInternal; + /** + * TestNetworkService (lazily) created upon first usage. Locked to prevent creation of multiple + * instances. + */ + @GuardedBy("mTNSLock") + private TestNetworkService mTNS; + + private final Object mTNSLock = new Object(); + private String mCurrentTcpBufferSizes; private static final SparseArray<String> sMagicDecoderRing = MessageUtils.findMessageNames( @@ -5380,7 +5389,7 @@ public class ConnectivityService extends IConnectivityManager.Stub final long token = Binder.clearCallingIdentity(); try { getNetworkStack().makeNetworkMonitor( - toStableParcelable(nai.network), name, new NetworkMonitorCallbacks(nai)); + nai.network, name, new NetworkMonitorCallbacks(nai)); } finally { Binder.restoreCallingIdentity(token); } @@ -6690,32 +6699,32 @@ public class ConnectivityService extends IConnectivityManager.Stub } @Override - public void startNattKeepalive(Network network, int intervalSeconds, Messenger messenger, - IBinder binder, String srcAddr, int srcPort, String dstAddr) { + public void startNattKeepalive(Network network, int intervalSeconds, + ISocketKeepaliveCallback cb, String srcAddr, int srcPort, String dstAddr) { enforceKeepalivePermission(); mKeepaliveTracker.startNattKeepalive( getNetworkAgentInfoForNetwork(network), - intervalSeconds, messenger, binder, + intervalSeconds, cb, srcAddr, srcPort, dstAddr, NattSocketKeepalive.NATT_PORT); } @Override public void startNattKeepaliveWithFd(Network network, FileDescriptor fd, int resourceId, - int intervalSeconds, Messenger messenger, IBinder binder, String srcAddr, + int intervalSeconds, ISocketKeepaliveCallback cb, String srcAddr, String dstAddr) { enforceKeepalivePermission(); mKeepaliveTracker.startNattKeepalive( getNetworkAgentInfoForNetwork(network), fd, resourceId, - intervalSeconds, messenger, binder, + intervalSeconds, cb, srcAddr, dstAddr, NattSocketKeepalive.NATT_PORT); } @Override public void startTcpKeepalive(Network network, FileDescriptor fd, int intervalSeconds, - Messenger messenger, IBinder binder) { + ISocketKeepaliveCallback cb) { enforceKeepalivePermission(); mKeepaliveTracker.startTcpKeepalive( - getNetworkAgentInfoForNetwork(network), fd, intervalSeconds, messenger, binder); + getNetworkAgentInfoForNetwork(network), fd, intervalSeconds, cb); } @Override @@ -6958,4 +6967,22 @@ public class ConnectivityService extends IConnectivityManager.Stub return vpn != null && vpn.getLockdown(); } } + + /** + * Returns a IBinder to a TestNetworkService. Will be lazily created as needed. + * + * <p>The TestNetworkService must be run in the system server due to TUN creation. + */ + @Override + public IBinder startOrGetTestNetworkService() { + synchronized (mTNSLock) { + TestNetworkService.enforceTestNetworkPermissions(mContext); + + if (mTNS == null) { + mTNS = new TestNetworkService(mContext, mNMS); + } + + return mTNS; + } + } } diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index 7b02a4fb3fd8..f4b6aa87da27 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -2582,24 +2582,9 @@ public class LocationManagerService extends ILocationManager.Stub { long identity = Binder.clearCallingIdentity(); try { synchronized (mLock) { - final String allowedProviders = Settings.Secure.getStringForUser( - mContext.getContentResolver(), - Settings.Secure.LOCATION_PROVIDERS_ALLOWED, - userId); - if (allowedProviders == null) { - return false; - } - final List<String> providerList = Arrays.asList(allowedProviders.split(",")); - for(String provider : mRealProviders.keySet()) { - if (provider.equals(LocationManager.PASSIVE_PROVIDER) - || provider.equals(LocationManager.FUSED_PROVIDER)) { - continue; - } - if (providerList.contains(provider)) { - return true; - } - } - return false; + return Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF, userId) + != Settings.Secure.LOCATION_MODE_OFF; } } finally { Binder.restoreCallingIdentity(identity); @@ -2624,41 +2609,10 @@ public class LocationManagerService extends ILocationManager.Stub { long identity = Binder.clearCallingIdentity(); try { synchronized (mLock) { - final Set<String> allRealProviders = mRealProviders.keySet(); - // Update all providers on device plus gps and network provider when disabling - // location - Set<String> allProvidersSet = new ArraySet<>(allRealProviders.size() + 2); - allProvidersSet.addAll(allRealProviders); - // When disabling location, disable gps and network provider that could have been - // enabled by location mode api. - if (enabled == false) { - allProvidersSet.add(LocationManager.GPS_PROVIDER); - allProvidersSet.add(LocationManager.NETWORK_PROVIDER); - } - if (allProvidersSet.isEmpty()) { - return; - } - // to ensure thread safety, we write the provider name with a '+' or '-' - // and let the SettingsProvider handle it rather than reading and modifying - // the list of enabled providers. - final String prefix = enabled ? "+" : "-"; - StringBuilder locationProvidersAllowed = new StringBuilder(); - for (String provider : allProvidersSet) { - if (provider.equals(LocationManager.PASSIVE_PROVIDER) - || provider.equals(LocationManager.FUSED_PROVIDER)) { - continue; - } - locationProvidersAllowed.append(prefix); - locationProvidersAllowed.append(provider); - locationProvidersAllowed.append(","); - } - // Remove the trailing comma - locationProvidersAllowed.setLength(locationProvidersAllowed.length() - 1); - Settings.Secure.putStringForUser( - mContext.getContentResolver(), - Settings.Secure.LOCATION_PROVIDERS_ALLOWED, - locationProvidersAllowed.toString(), - userId); + int locationMode = enabled ? Settings.Secure.LOCATION_MODE_HIGH_ACCURACY + : Settings.Secure.LOCATION_MODE_OFF; + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.LOCATION_MODE, locationMode, userId); } } finally { Binder.restoreCallingIdentity(identity); diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index e78ae5547b5a..d2a0d7bc23fa 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -1806,7 +1806,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { synchronized (mRecords) { TelephonyManager tm = (TelephonyManager) mContext.getSystemService( Context.TELEPHONY_SERVICE); - mEmergencyNumberList = tm.getCurrentEmergencyNumberList(); + mEmergencyNumberList = tm.getEmergencyNumberList(); for (Record r : mRecords) { if (r.matchPhoneStateListenerEvent( diff --git a/services/core/java/com/android/server/am/OWNERS b/services/core/java/com/android/server/am/OWNERS index 2649807b5024..aae31408b375 100644 --- a/services/core/java/com/android/server/am/OWNERS +++ b/services/core/java/com/android/server/am/OWNERS @@ -23,6 +23,9 @@ roosa@google.com svetoslavganov@google.com toddke@google.com +# Battery Stats +joeo@google.com + # Londoners michaelwr@google.com narayan@google.com diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 4746e12e2838..3f48e28d5780 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -383,14 +383,14 @@ class UserController implements Handler.Callback { * Step from {@link UserState#STATE_RUNNING_LOCKED} to * {@link UserState#STATE_RUNNING_UNLOCKING}. */ - private void finishUserUnlocking(final UserState uss) { + private boolean finishUserUnlocking(final UserState uss) { final int userId = uss.mHandle.getIdentifier(); // Only keep marching forward if user is actually unlocked - if (!StorageManager.isUserKeyUnlocked(userId)) return; + if (!StorageManager.isUserKeyUnlocked(userId)) return false; synchronized (mLock) { // Do not proceed if unexpected state or a stale user if (mStartedUsers.get(userId) != uss || uss.state != STATE_RUNNING_LOCKED) { - return; + return false; } } uss.mUnlockProgress.start(); @@ -421,6 +421,7 @@ class UserController implements Handler.Callback { mHandler.obtainMessage(SYSTEM_USER_UNLOCK_MSG, userId, 0, uss) .sendToTarget(); }); + return true; } /** @@ -1180,7 +1181,10 @@ class UserController implements Handler.Callback { return false; } - finishUserUnlocking(uss); + if (!finishUserUnlocking(uss)) { + notifyFinished(userId, listener); + return false; + } // We just unlocked a user, so let's now attempt to unlock any // managed profiles under that user. diff --git a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java index cc4c173fba31..35d6860080d1 100644 --- a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java +++ b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java @@ -21,8 +21,8 @@ import static android.net.NetworkAgent.CMD_ADD_KEEPALIVE_PACKET_FILTER; import static android.net.NetworkAgent.CMD_REMOVE_KEEPALIVE_PACKET_FILTER; import static android.net.NetworkAgent.CMD_START_SOCKET_KEEPALIVE; import static android.net.NetworkAgent.CMD_STOP_SOCKET_KEEPALIVE; -import static android.net.NetworkAgent.EVENT_SOCKET_KEEPALIVE; import static android.net.SocketKeepalive.BINDER_DIED; +import static android.net.SocketKeepalive.DATA_RECEIVED; import static android.net.SocketKeepalive.ERROR_INVALID_INTERVAL; import static android.net.SocketKeepalive.ERROR_INVALID_IP_ADDRESS; import static android.net.SocketKeepalive.ERROR_INVALID_NETWORK; @@ -34,6 +34,7 @@ import static android.net.SocketKeepalive.SUCCESS; import android.annotation.NonNull; import android.annotation.Nullable; +import android.net.ISocketKeepaliveCallback; import android.net.KeepalivePacketData; import android.net.NattKeepalivePacketData; import android.net.NetworkAgent; @@ -47,7 +48,6 @@ import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.Message; -import android.os.Messenger; import android.os.Process; import android.os.RemoteException; import android.system.ErrnoException; @@ -99,8 +99,7 @@ public class KeepaliveTracker { */ class KeepaliveInfo implements IBinder.DeathRecipient { // Bookkeeping data. - private final Messenger mMessenger; - private final IBinder mBinder; + private final ISocketKeepaliveCallback mCallback; private final int mUid; private final int mPid; private final NetworkAgentInfo mNai; @@ -124,15 +123,13 @@ public class KeepaliveTracker { private static final int STARTED = 3; private int mStartedState = NOT_STARTED; - KeepaliveInfo(@NonNull Messenger messenger, - @NonNull IBinder binder, + KeepaliveInfo(@NonNull ISocketKeepaliveCallback callback, @NonNull NetworkAgentInfo nai, @NonNull KeepalivePacketData packet, int interval, int type, @NonNull FileDescriptor fd) { - mMessenger = messenger; - mBinder = binder; + mCallback = callback; mPid = Binder.getCallingPid(); mUid = Binder.getCallingUid(); @@ -143,7 +140,7 @@ public class KeepaliveTracker { mFd = fd; try { - mBinder.linkToDeath(this, 0); + mCallback.asBinder().linkToDeath(this, 0); } catch (RemoteException e) { binderDied(); } @@ -176,22 +173,14 @@ public class KeepaliveTracker { + " ]"; } - /** Sends a message back to the application via its SocketKeepalive.Callback. */ - void notifyMessenger(int slot, int err) { - if (DBG) { - Log.d(TAG, "notify keepalive " + mSlot + " on " + mNai.network + " for " + err); - } - KeepaliveTracker.this.notifyMessenger(mMessenger, slot, err); - } - /** Called when the application process is killed. */ public void binderDied() { stop(BINDER_DIED); } void unlinkDeathRecipient() { - if (mBinder != null) { - mBinder.unlinkToDeath(this, 0); + if (mCallback != null) { + mCallback.asBinder().unlinkToDeath(this, 0); } } @@ -283,9 +272,23 @@ public class KeepaliveTracker { Log.wtf(TAG, "Stopping keepalive with unknown type: " + mType); } } - // TODO: at the moment we unconditionally return failure here. In cases where the - // NetworkAgent is alive, should we ask it to reply, so it can return failure? - notifyMessenger(mSlot, reason); + + if (reason == SUCCESS) { + try { + mCallback.onStopped(); + } catch (RemoteException e) { + Log.w(TAG, "Discarded onStop callback: " + reason); + } + } else if (reason == DATA_RECEIVED) { + try { + mCallback.onDataReceived(); + } catch (RemoteException e) { + Log.w(TAG, "Discarded onDataReceived callback: " + reason); + } + } else { + notifyErrorCallback(mCallback, reason); + } + unlinkDeathRecipient(); } @@ -294,16 +297,12 @@ public class KeepaliveTracker { } } - void notifyMessenger(Messenger messenger, int slot, int err) { - Message message = Message.obtain(); - message.what = EVENT_SOCKET_KEEPALIVE; - message.arg1 = slot; - message.arg2 = err; - message.obj = null; + void notifyErrorCallback(ISocketKeepaliveCallback cb, int error) { + if (DBG) Log.w(TAG, "Sending onError(" + error + ") callback"); try { - messenger.send(message); + cb.onError(error); } catch (RemoteException e) { - // Process died? + Log.w(TAG, "Discarded onError(" + error + ") callback"); } } @@ -414,7 +413,11 @@ public class KeepaliveTracker { // Keepalive successfully started. if (DBG) Log.d(TAG, "Started keepalive " + slot + " on " + nai.name()); ki.mStartedState = KeepaliveInfo.STARTED; - ki.notifyMessenger(slot, reason); + try { + ki.mCallback.onStarted(slot); + } catch (RemoteException e) { + Log.w(TAG, "Discarded onStarted(" + slot + ") callback"); + } } else { // Keepalive successfully stopped, or error. ki.mStartedState = KeepaliveInfo.NOT_STARTED; @@ -436,14 +439,13 @@ public class KeepaliveTracker { **/ public void startNattKeepalive(@Nullable NetworkAgentInfo nai, int intervalSeconds, - @NonNull Messenger messenger, - @NonNull IBinder binder, + @NonNull ISocketKeepaliveCallback cb, @NonNull String srcAddrString, int srcPort, @NonNull String dstAddrString, int dstPort) { if (nai == null) { - notifyMessenger(messenger, NO_KEEPALIVE, ERROR_INVALID_NETWORK); + notifyErrorCallback(cb, ERROR_INVALID_NETWORK); return; } @@ -452,7 +454,7 @@ public class KeepaliveTracker { srcAddress = NetworkUtils.numericToInetAddress(srcAddrString); dstAddress = NetworkUtils.numericToInetAddress(dstAddrString); } catch (IllegalArgumentException e) { - notifyMessenger(messenger, NO_KEEPALIVE, ERROR_INVALID_IP_ADDRESS); + notifyErrorCallback(cb, ERROR_INVALID_IP_ADDRESS); return; } @@ -461,11 +463,12 @@ public class KeepaliveTracker { packet = NattKeepalivePacketData.nattKeepalivePacket( srcAddress, srcPort, dstAddress, NATT_PORT); } catch (InvalidPacketException e) { - notifyMessenger(messenger, NO_KEEPALIVE, e.error); + notifyErrorCallback(cb, e.error); return; } - KeepaliveInfo ki = new KeepaliveInfo(messenger, binder, nai, packet, intervalSeconds, + KeepaliveInfo ki = new KeepaliveInfo(cb, nai, packet, intervalSeconds, KeepaliveInfo.TYPE_NATT, null); + Log.d(TAG, "Created keepalive: " + ki.toString()); mConnectivityServiceHandler.obtainMessage( NetworkAgent.CMD_START_SOCKET_KEEPALIVE, ki).sendToTarget(); } @@ -483,10 +486,9 @@ public class KeepaliveTracker { public void startTcpKeepalive(@Nullable NetworkAgentInfo nai, @NonNull FileDescriptor fd, int intervalSeconds, - @NonNull Messenger messenger, - @NonNull IBinder binder) { + @NonNull ISocketKeepaliveCallback cb) { if (nai == null) { - notifyMessenger(messenger, NO_KEEPALIVE, ERROR_INVALID_NETWORK); + notifyErrorCallback(cb, ERROR_INVALID_NETWORK); return; } @@ -500,10 +502,10 @@ public class KeepaliveTracker { } catch (ErrnoException e1) { Log.e(TAG, "Couldn't move fd out of repair mode after failure to start keepalive"); } - notifyMessenger(messenger, NO_KEEPALIVE, e.error); + notifyErrorCallback(cb, e.error); return; } - KeepaliveInfo ki = new KeepaliveInfo(messenger, binder, nai, packet, intervalSeconds, + KeepaliveInfo ki = new KeepaliveInfo(cb, nai, packet, intervalSeconds, KeepaliveInfo.TYPE_TCP, fd); Log.d(TAG, "Created keepalive: " + ki.toString()); mConnectivityServiceHandler.obtainMessage(CMD_START_SOCKET_KEEPALIVE, ki).sendToTarget(); @@ -520,14 +522,13 @@ public class KeepaliveTracker { @Nullable FileDescriptor fd, int resourceId, int intervalSeconds, - @NonNull Messenger messenger, - @NonNull IBinder binder, + @NonNull ISocketKeepaliveCallback cb, @NonNull String srcAddrString, @NonNull String dstAddrString, int dstPort) { // Ensure that the socket is created by IpSecService. if (!isNattKeepaliveSocketValid(fd, resourceId)) { - notifyMessenger(messenger, NO_KEEPALIVE, ERROR_INVALID_SOCKET); + notifyErrorCallback(cb, ERROR_INVALID_SOCKET); } // Get src port to adopt old API. @@ -536,11 +537,11 @@ public class KeepaliveTracker { final SocketAddress srcSockAddr = Os.getsockname(fd); srcPort = ((InetSocketAddress) srcSockAddr).getPort(); } catch (ErrnoException e) { - notifyMessenger(messenger, NO_KEEPALIVE, ERROR_INVALID_SOCKET); + notifyErrorCallback(cb, ERROR_INVALID_SOCKET); } // Forward request to old API. - startNattKeepalive(nai, intervalSeconds, messenger, binder, srcAddrString, srcPort, + startNattKeepalive(nai, intervalSeconds, cb, srcAddrString, srcPort, dstAddrString, dstPort); } diff --git a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java index 053da0d5b1e2..828a1e58868a 100644 --- a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java +++ b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java @@ -28,6 +28,7 @@ import android.content.Intent; import android.content.res.Resources; import android.net.wifi.WifiInfo; import android.os.UserHandle; +import android.telephony.AccessNetworkConstants.TransportType; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Slog; @@ -92,7 +93,7 @@ public class NetworkNotificationManager { return -1; } - private static String getTransportName(int transportType) { + private static String getTransportName(@TransportType int transportType) { Resources r = Resources.getSystem(); String[] networkTypes = r.getStringArray(R.array.network_switch_type_name); try { diff --git a/services/core/java/com/android/server/connectivity/PermissionMonitor.java b/services/core/java/com/android/server/connectivity/PermissionMonitor.java index d84a4d2db993..123564eb4fdb 100644 --- a/services/core/java/com/android/server/connectivity/PermissionMonitor.java +++ b/services/core/java/com/android/server/connectivity/PermissionMonitor.java @@ -46,13 +46,11 @@ import android.util.Log; import android.util.Slog; import android.util.SparseIntArray; -import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.server.LocalServices; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -84,20 +82,14 @@ public class PermissionMonitor { // Keys are App IDs. Values are true for SYSTEM permission and false for NETWORK permission. private final Map<Integer, Boolean> mApps = new HashMap<>(); - // Keys are App packageNames, Values are app uids. . We need to keep track of this information - // because PackageListObserver#onPackageRemoved does not pass the UID. - @GuardedBy("mPackageNameUidMap") - private final Map<String, Integer> mPackageNameUidMap = new HashMap<>(); - private class PackageListObserver implements PackageManagerInternal.PackageListObserver { @Override - public void onPackageAdded(String packageName) { + 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; } - int uid = (app.applicationInfo != null) ? app.applicationInfo.uid : INVALID_UID; if (uid == INVALID_UID) { Slog.wtf(TAG, "Failed to get the uid of installed package: " + packageName + "uid: " + uid); @@ -107,29 +99,21 @@ public class PermissionMonitor { return; } sendPackagePermissionsForUid(uid, - filterPermission(Arrays.asList(app.requestedPermissions))); - synchronized (mPackageNameUidMap) { - mPackageNameUidMap.put(packageName, uid); - } + getNetdPermissionMask(app.requestedPermissions)); } @Override - public void onPackageRemoved(String packageName) { - int uid; - synchronized (mPackageNameUidMap) { - if (!mPackageNameUidMap.containsKey(packageName)) { - return; - } - uid = mPackageNameUidMap.get(packageName); - mPackageNameUidMap.remove(packageName); - } + public void onPackageRemoved(String packageName, 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. 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 |= filterPermission(Arrays.asList(app.requestedPermissions)); + permission |= getNetdPermissionMask(app.requestedPermissions); } } } @@ -184,12 +168,9 @@ public class PermissionMonitor { //TODO: unify the management of the permissions into one codepath. if (app.requestedPermissions != null) { - int otherNetdPerms = filterPermission(Arrays.asList(app.requestedPermissions)); + int otherNetdPerms = getNetdPermissionMask(app.requestedPermissions); if (otherNetdPerms != 0) { netdPermsUids.put(uid, netdPermsUids.get(uid) | otherNetdPerms); - synchronized (mPackageNameUidMap) { - mPackageNameUidMap.put(app.applicationInfo.packageName, uid); - } } } } @@ -422,13 +403,15 @@ public class PermissionMonitor { } } - private static int filterPermission(List<String> requestedPermissions) { + private static int getNetdPermissionMask(String[] requestedPermissions) { int permissions = 0; - if (requestedPermissions.contains(INTERNET)) { - permissions |= INetd.PERMISSION_INTERNET; - } - if (requestedPermissions.contains(UPDATE_DEVICE_STATS)) { - permissions |= INetd.PERMISSION_UPDATE_DEVICE_STATS; + for (String permissionName : requestedPermissions) { + if (permissionName.equals(INTERNET)) { + permissions |= INetd.PERMISSION_INTERNET; + } + if (permissionName.equals(UPDATE_DEVICE_STATS)) { + permissions |= INetd.PERMISSION_UPDATE_DEVICE_STATS; + } } return permissions; } @@ -439,8 +422,6 @@ public class PermissionMonitor { | MATCH_ANY_USER); return app; } catch (NameNotFoundException e) { - // App not found. - loge("NameNotFoundException " + packageName); return null; } } diff --git a/services/core/java/com/android/server/media/OWNERS b/services/core/java/com/android/server/media/OWNERS index 8adea0e85d12..4bc937347e04 100644 --- a/services/core/java/com/android/server/media/OWNERS +++ b/services/core/java/com/android/server/media/OWNERS @@ -1,4 +1,6 @@ -lajos@google.com elaurent@google.com -sungsoo@google.com +hdmoon@google.com +insun@google.com jaewan@google.com +lajos@google.com +sungsoo@google.com diff --git a/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java b/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java index f4454ae2a180..5c0874d7977a 100644 --- a/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java +++ b/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java @@ -31,17 +31,15 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserManager; +import android.util.ArraySet; import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; +import com.android.server.SystemConfig; import java.io.FileDescriptor; -// TODO(b/111441001): -// Intercept onFinished() & implement death recipient here and shutdown -// bugreportd service. - /** * Implementation of the service that provides a privileged API to capture and consume bugreports. * @@ -55,10 +53,13 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub { private final Object mLock = new Object(); private final Context mContext; private final AppOpsManager mAppOps; + private final ArraySet<String> mBugreportWhitelistedPackages; BugreportManagerServiceImpl(Context context) { mContext = context; mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); + mBugreportWhitelistedPackages = + SystemConfig.getInstance().getBugreportWhitelistedPackages(); } @Override @@ -78,11 +79,20 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub { Preconditions.checkNotNull(bugreportFd); Preconditions.checkNotNull(listener); validateBugreportMode(bugreportMode); - ensureIsPrimaryUser(); + final long identity = Binder.clearCallingIdentity(); + try { + ensureIsPrimaryUser(); + } finally { + Binder.restoreCallingIdentity(identity); + } int callingUid = Binder.getCallingUid(); mAppOps.checkPackage(callingUid, callingPackage); + if (!mBugreportWhitelistedPackages.contains(callingPackage)) { + throw new SecurityException( + callingPackage + " is not whitelisted to use Bugreport API"); + } synchronized (mLock) { startBugreportLocked(callingUid, callingPackage, bugreportFd, screenshotFd, bugreportMode, listener); @@ -157,9 +167,12 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub { reportError(listener, IDumpstateListener.BUGREPORT_ERROR_RUNTIME_ERROR); return; } + + // Wrap the listener so we can intercept binder events directly. + IDumpstateListener myListener = new DumpstateListener(listener, ds); try { ds.startBugreport(callingUid, callingPackage, - bugreportFd, screenshotFd, bugreportMode, listener); + bugreportFd, screenshotFd, bugreportMode, myListener); } catch (RemoteException e) { reportError(listener, IDumpstateListener.BUGREPORT_ERROR_RUNTIME_ERROR); } @@ -226,4 +239,73 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub { Slog.w(TAG, message); throw new IllegalArgumentException(message); } + + + private final class DumpstateListener extends IDumpstateListener.Stub + implements DeathRecipient { + private final IDumpstateListener mListener; + private final IDumpstate mDs; + private boolean mDone = false; + + DumpstateListener(IDumpstateListener listener, IDumpstate ds) { + mListener = listener; + mDs = ds; + try { + mDs.asBinder().linkToDeath(this, 0); + } catch (RemoteException e) { + Slog.e(TAG, "Unable to register Death Recipient for IDumpstate", e); + } + } + + @Override + public void onProgress(int progress) throws RemoteException { + mListener.onProgress(progress); + } + + @Override + public void onError(int errorCode) throws RemoteException { + synchronized (mLock) { + mDone = true; + } + mListener.onError(errorCode); + } + + @Override + public void onFinished() throws RemoteException { + synchronized (mLock) { + mDone = true; + } + mListener.onFinished(); + } + + @Override + public void binderDied() { + synchronized (mLock) { + if (!mDone) { + // If we have not gotten a "done" callback this must be a crash. + Slog.e(TAG, "IDumpstate likely crashed. Notifying listener"); + try { + mListener.onError(IDumpstateListener.BUGREPORT_ERROR_RUNTIME_ERROR); + } catch (RemoteException ignored) { + // If listener is not around, there isn't anything to do here. + } + } + } + mDs.asBinder().unlinkToDeath(this, 0); + } + + // Old methods; unused in the API flow. + @Override + public void onProgressUpdated(int progress) throws RemoteException { + } + + @Override + public void onMaxProgressUpdated(int maxProgress) throws RemoteException { + } + + @Override + public void onSectionComplete(String title, int status, int size, int durationMs) + throws RemoteException { + } + } } diff --git a/services/core/java/com/android/server/pm/OWNERS b/services/core/java/com/android/server/pm/OWNERS index 3c1ee3ece7ad..af9b12a43f25 100644 --- a/services/core/java/com/android/server/pm/OWNERS +++ b/services/core/java/com/android/server/pm/OWNERS @@ -10,76 +10,48 @@ toddke@android.com toddke@google.com # apex support -per-file ApexManager.java = dariofreni@google.com, narayan@google.com, toddke@android.com, toddke@google.com -per-file StagingManager.java = dariofreni@google.com, narayan@google.com, toddke@android.com, toddke@google.com +per-file ApexManager.java = dariofreni@google.com +per-file StagingManager.java = dariofreni@google.com # dex -per-file AbstractStatsBase.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file AbstractStatsBase.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file AbstractStatsBase.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com -per-file BackgroundDexOptService.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file BackgroundDexOptService.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file BackgroundDexOptService.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com -per-file CompilerStats.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file CompilerStats.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file CompilerStats.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com -per-file DynamicCodeLoggingService.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file DynamicCodeLoggingService.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file DynamicCodeLoggingService.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com -per-file InstructionSets.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file InstructionSets.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file InstructionSets.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com -per-file OtaDexoptService.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file OtaDexoptService.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file OtaDexoptService.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com -per-file OtaDexoptShellCommand.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file OtaDexoptShellCommand.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file OtaDexoptShellCommand.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com -per-file PackageDexOptimizer.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file PackageDexOptimizer.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file PackageDexOptimizer.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com -per-file PackageManagerServiceCompilerMapping.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file PackageManagerServiceCompilerMapping.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file PackageManagerServiceCompilerMapping.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com -per-file PackageUsage.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com -per-file PackageUsage.java = calin@google.com, toddke@google.com, svetoslavganov@google.com -per-file PackageUsage.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file AbstractStatsBase.java = agampe@google.com, calin@google.com, ngeoffray@google.com +per-file BackgroundDexOptService.java = agampe@google.com, calin@google.com, ngeoffray@google.com +per-file CompilerStats.java = agampe@google.com, calin@google.com, ngeoffray@google.com +per-file DynamicCodeLoggingService.java = alanstokes@google.com, agampe@google.com, calin@google.com, ngeoffray@google.com +per-file InstructionSets.java = agampe@google.com, calin@google.com, ngeoffray@google.com +per-file OtaDexoptService.java = agampe@google.com, calin@google.com, ngeoffray@google.com +per-file OtaDexoptShellCommand.java = agampe@google.com, calin@google.com, ngeoffray@google.com +per-file PackageDexOptimizer.java = agampe@google.com, calin@google.com, ngeoffray@google.com +per-file PackageManagerServiceCompilerMapping.java = agampe@google.com, calin@google.com, ngeoffray@google.com +per-file PackageUsage.java = agampe@google.com, calin@google.com, ngeoffray@google.com # multi user / cross profile -per-file CrossProfileAppsServiceImpl.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file CrossProfileAppsServiceImpl.java = yamasani@google.com, omakoto@google.com, hackbod@google.com -per-file CrossProfileAppsService.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file CrossProfileAppsService.java = yamasani@google.com, omakoto@google.com, hackbod@google.com -per-file CrossProfileIntentFilter.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file CrossProfileIntentFilter.java = yamasani@google.com, omakoto@google.com, hackbod@google.com -per-file CrossProfileIntentResolver.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file CrossProfileIntentResolver.java = yamasani@google.com, omakoto@google.com, hackbod@google.com -per-file UserManagerService.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file UserManagerService.java = yamasani@google.com, omakoto@google.com, hackbod@google.com -per-file UserRestrictionsUtils.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file UserRestrictionsUtils.java = yamasani@google.com, omakoto@google.com, hackbod@google.com -per-file UserRestrictionsUtils.java = rubinxu@google.com, yamasani@google.com, hackbod@google.com -per-file UserRestrictionsUtils.java = sandness@google.com, yamasani@google.com, hackbod@google.com +per-file CrossProfileAppsServiceImpl.java = omakoto@google.com, yamasani@google.com +per-file CrossProfileAppsService.java = omakoto@google.com, yamasani@google.com +per-file CrossProfileIntentFilter.java = omakoto@google.com, yamasani@google.com +per-file CrossProfileIntentResolver.java = omakoto@google.com, yamasani@google.com +per-file UserManagerService.java = omakoto@google.com, yamasani@google.com +per-file UserRestrictionsUtils.java = omakoto@google.com, rubinxu@google.com, sandness@google.com, yamasani@google.com # security -per-file KeySetHandle.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com -per-file KeySetManagerService.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com -per-file PackageKeySetData.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com -per-file PackageSignatures.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com -per-file SELinuxMMAC.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com +per-file KeySetHandle.java = cbrubaker@google.com +per-file KeySetManagerService.java = cbrubaker@google.com +per-file PackageKeySetData.java = cbrubaker@google.com +per-file PackageSignatures.java = cbrubaker@google.com +per-file SELinuxMMAC.java = cbrubaker@google.com # shortcuts -per-file LauncherAppsService.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShareTargetInfo.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutBitmapSaver.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutDumpFiles.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutLauncher.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutNonPersistentUser.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutPackage.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutPackageInfo.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutPackageItem.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutParser.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutRequestPinProcessor.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutService.java = omakoto@google.com, yamasani@google.com, hackbod@google.com -per-file ShortcutUser.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file LauncherAppsService.java = omakoto@google.com, yamasani@google.com +per-file ShareTargetInfo.java = omakoto@google.com, yamasani@google.com +per-file ShortcutBitmapSaver.java = omakoto@google.com, yamasani@google.com +per-file ShortcutDumpFiles.java = omakoto@google.com, yamasani@google.com +per-file ShortcutLauncher.java = omakoto@google.com, yamasani@google.com +per-file ShortcutNonPersistentUser.java = omakoto@google.com, yamasani@google.com +per-file ShortcutPackage.java = omakoto@google.com, yamasani@google.com +per-file ShortcutPackageInfo.java = omakoto@google.com, yamasani@google.com +per-file ShortcutPackageItem.java = omakoto@google.com, yamasani@google.com +per-file ShortcutParser.java = omakoto@google.com, yamasani@google.com +per-file ShortcutRequestPinProcessor.java = omakoto@google.com, yamasani@google.com +per-file ShortcutService.java = omakoto@google.com, yamasani@google.com +per-file ShortcutUser.java = omakoto@google.com, yamasani@google.com diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index a98e2d3fd0da..790e6e1431ef 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -168,6 +168,7 @@ import android.content.pm.InstantAppRequest; import android.content.pm.InstantAppResolveInfo; import android.content.pm.InstrumentationInfo; import android.content.pm.IntentFilterVerificationInfo; +import android.content.pm.PackageBackwardCompatibility; import android.content.pm.KeySet; import android.content.pm.PackageCleanItem; import android.content.pm.PackageInfo; @@ -2156,7 +2157,7 @@ public class PackageManagerService extends IPackageManager.Stub } if (allNewUsers && !update) { - notifyPackageAdded(packageName); + notifyPackageAdded(packageName, res.uid); } // Log current value of "unknown sources" setting @@ -11043,6 +11044,8 @@ public class PackageManagerService extends IPackageManager.Stub pkg.mRealPackage = null; pkg.mAdoptPermissions = null; } + + PackageBackwardCompatibility.modifySharedLibraries(pkg); } private static @NonNull <T> T assertNotNull(@Nullable T object, String message) @@ -13725,7 +13728,7 @@ public class PackageManagerService extends IPackageManager.Stub } @Override - public void notifyPackageAdded(String packageName) { + public void notifyPackageAdded(String packageName, int uid) { final PackageListObserver[] observers; synchronized (mPackages) { if (mPackageListObservers.size() == 0) { @@ -13736,12 +13739,12 @@ public class PackageManagerService extends IPackageManager.Stub observers = mPackageListObservers.toArray(observerArray); } for (int i = observers.length - 1; i >= 0; --i) { - observers[i].onPackageAdded(packageName); + observers[i].onPackageAdded(packageName, uid); } } @Override - public void notifyPackageRemoved(String packageName) { + public void notifyPackageRemoved(String packageName, int uid) { final PackageListObserver[] observers; synchronized (mPackages) { if (mPackageListObservers.size() == 0) { @@ -13752,7 +13755,7 @@ public class PackageManagerService extends IPackageManager.Stub observers = mPackageListObservers.toArray(observerArray); } for (int i = observers.length - 1; i >= 0; --i) { - observers[i].onPackageRemoved(packageName); + observers[i].onPackageRemoved(packageName, uid); } } @@ -18559,7 +18562,8 @@ public class PackageManagerService extends IPackageManager.Stub return; } Bundle extras = new Bundle(2); - extras.putInt(Intent.EXTRA_UID, removedAppId >= 0 ? removedAppId : uid); + final int removedUid = removedAppId >= 0 ? removedAppId : uid; + extras.putInt(Intent.EXTRA_UID, removedUid); extras.putBoolean(Intent.EXTRA_DATA_REMOVED, dataRemoved); extras.putBoolean(Intent.EXTRA_DONT_KILL_APP, !killApp); if (isUpdate || isRemovedPackageSystemUpdate) { @@ -18580,7 +18584,7 @@ public class PackageManagerService extends IPackageManager.Stub removedPackage, extras, Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND, null, null, broadcastUsers, instantUserIds); - packageSender.notifyPackageRemoved(removedPackage); + packageSender.notifyPackageRemoved(removedPackage, removedUid); } } if (removedAppId >= 0) { @@ -24943,6 +24947,6 @@ interface PackageSender { final IIntentReceiver finishedReceiver, final int[] userIds, int[] instantUserIds); void sendPackageAddedForNewUsers(String packageName, boolean sendBootCompleted, boolean includeStopped, int appId, int[] userIds, int[] instantUserIds); - void notifyPackageAdded(String packageName); - void notifyPackageRemoved(String packageName); + void notifyPackageAdded(String packageName, int uid); + void notifyPackageRemoved(String packageName, int uid); } diff --git a/services/ipmemorystore/Android.bp b/services/ipmemorystore/Android.bp deleted file mode 100644 index 013cf5616904..000000000000 --- a/services/ipmemorystore/Android.bp +++ /dev/null @@ -1,4 +0,0 @@ -java_library_static { - name: "services.ipmemorystore", - srcs: ["java/**/*.java"], -} diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index d33d7f57df9a..ed5928f7d820 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -98,7 +98,6 @@ import com.android.server.media.MediaUpdateService; import com.android.server.media.projection.MediaProjectionManagerService; import com.android.server.net.NetworkPolicyManagerService; import com.android.server.net.NetworkStatsService; -import com.android.server.net.ipmemorystore.IpMemoryStoreService; import com.android.server.net.watchlist.NetworkWatchlistService; import com.android.server.notification.NotificationManagerService; import com.android.server.oemlock.OemLockService; @@ -1118,24 +1117,24 @@ public final class SystemServer { mSystemServiceManager.startService(ClipboardService.class); traceEnd(); - traceBeginAndSlog("StartNetworkManagementService"); + traceBeginAndSlog("InitNetworkStackClient"); try { - networkManagement = NetworkManagementService.create(context); - ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement); + NetworkStackClient.getInstance().init(); } catch (Throwable e) { - reportWtf("starting NetworkManagement Service", e); + reportWtf("initializing NetworkStackClient", e); } traceEnd(); - traceBeginAndSlog("StartIpMemoryStoreService"); + traceBeginAndSlog("StartNetworkManagementService"); try { - ServiceManager.addService(Context.IP_MEMORY_STORE_SERVICE, - new IpMemoryStoreService(context)); + networkManagement = NetworkManagementService.create(context); + ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement); } catch (Throwable e) { - reportWtf("starting IP Memory Store Service", e); + reportWtf("starting NetworkManagement Service", e); } traceEnd(); + traceBeginAndSlog("StartIpSecService"); try { ipSecService = IpSecService.create(context); diff --git a/services/net/Android.bp b/services/net/Android.bp index 8ad4d7679107..486d15d918bf 100644 --- a/services/net/Android.bp +++ b/services/net/Android.bp @@ -7,6 +7,19 @@ java_library_static { ] } +java_library_static { + name: "ipmemorystore-client", + sdk_version: "system_current", + srcs: [ + ":framework-annotations", + "java/android/net/IpMemoryStoreClient.java", + "java/android/net/ipmemorystore/**.java", + ], + static_libs: [ + "ipmemorystore-aidl-interfaces-java", + ] +} + filegroup { name: "services-networkstack-shared-srcs", srcs: [ diff --git a/services/net/java/android/net/IpMemoryStore.java b/services/net/java/android/net/IpMemoryStore.java new file mode 100644 index 000000000000..9248299e178d --- /dev/null +++ b/services/net/java/android/net/IpMemoryStore.java @@ -0,0 +1,62 @@ +/* + * 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; + +import android.annotation.NonNull; +import android.content.Context; + +import com.android.internal.annotations.VisibleForTesting; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +/** + * Manager class used to communicate with the ip memory store service in the network stack, + * which is running in a separate module. + * @hide +*/ +public class IpMemoryStore extends IpMemoryStoreClient { + private final CompletableFuture<IIpMemoryStore> mService; + + public IpMemoryStore(@NonNull final Context context) { + super(context); + mService = new CompletableFuture<>(); + getNetworkStackClient().fetchIpMemoryStore( + new IIpMemoryStoreCallbacks.Stub() { + @Override + public void onIpMemoryStoreFetched(final IIpMemoryStore memoryStore) { + mService.complete(memoryStore); + } + }); + } + + @Override + protected IIpMemoryStore getService() throws InterruptedException, ExecutionException { + return mService.get(); + } + + @VisibleForTesting + protected NetworkStackClient getNetworkStackClient() { + return NetworkStackClient.getInstance(); + } + + /** Gets an instance of the memory store */ + @NonNull + public static IpMemoryStore getMemoryStore(final Context context) { + return new IpMemoryStore(context); + } +} diff --git a/core/java/android/net/IpMemoryStore.java b/services/net/java/android/net/IpMemoryStoreClient.java index 2f4d9bc6a89a..2f4fdbd8a4a7 100644 --- a/core/java/android/net/IpMemoryStore.java +++ b/services/net/java/android/net/IpMemoryStoreClient.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 The Android Open Source Project + * 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. @@ -18,7 +18,6 @@ package android.net; import android.annotation.NonNull; import android.annotation.Nullable; -import android.annotation.SystemService; import android.content.Context; import android.net.ipmemorystore.Blob; import android.net.ipmemorystore.IOnBlobRetrievedListener; @@ -27,23 +26,34 @@ import android.net.ipmemorystore.IOnNetworkAttributesRetrieved; import android.net.ipmemorystore.IOnSameNetworkResponseListener; import android.net.ipmemorystore.IOnStatusListener; import android.net.ipmemorystore.NetworkAttributes; +import android.net.ipmemorystore.Status; +import android.net.ipmemorystore.StatusParcelable; import android.os.RemoteException; +import android.util.Log; -import com.android.internal.util.Preconditions; +import java.util.concurrent.ExecutionException; /** - * The interface for system components to access the IP memory store. - * @see com.android.server.net.ipmemorystore.IpMemoryStoreService + * service used to communicate with the ip memory store service in network stack, + * which is running in a separate module. * @hide */ -@SystemService(Context.IP_MEMORY_STORE_SERVICE) -public class IpMemoryStore { - @NonNull final Context mContext; - @NonNull final IIpMemoryStore mService; +public abstract class IpMemoryStoreClient { + private static final String TAG = IpMemoryStoreClient.class.getSimpleName(); + private final Context mContext; - public IpMemoryStore(@NonNull final Context context, @NonNull final IIpMemoryStore service) { - mContext = Preconditions.checkNotNull(context, "missing context"); - mService = Preconditions.checkNotNull(service, "missing IIpMemoryStore"); + public IpMemoryStoreClient(@NonNull final Context context) { + if (context == null) throw new IllegalArgumentException("missing context"); + mContext = context; + } + + @NonNull + protected abstract IIpMemoryStore getService() throws InterruptedException, ExecutionException; + + protected StatusParcelable internalErrorStatus() { + final StatusParcelable error = new StatusParcelable(); + error.resultCode = Status.ERROR_UNKNOWN; + return error; } /** @@ -66,9 +76,13 @@ public class IpMemoryStore { @NonNull final NetworkAttributes attributes, @Nullable final IOnStatusListener listener) { try { - mService.storeNetworkAttributes(l2Key, attributes.toParcelable(), listener); + try { + getService().storeNetworkAttributes(l2Key, attributes.toParcelable(), listener); + } catch (InterruptedException | ExecutionException m) { + listener.onComplete(internalErrorStatus()); + } } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + Log.e(TAG, "Error storing network attributes", e); } } @@ -87,9 +101,13 @@ public class IpMemoryStore { @NonNull final String name, @NonNull final Blob data, @Nullable final IOnStatusListener listener) { try { - mService.storeBlob(l2Key, clientId, name, data, listener); + try { + getService().storeBlob(l2Key, clientId, name, data, listener); + } catch (InterruptedException | ExecutionException m) { + listener.onComplete(internalErrorStatus()); + } } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + Log.e(TAG, "Error storing blob", e); } } @@ -110,9 +128,13 @@ public class IpMemoryStore { public void findL2Key(@NonNull final NetworkAttributes attributes, @NonNull final IOnL2KeyResponseListener listener) { try { - mService.findL2Key(attributes.toParcelable(), listener); + try { + getService().findL2Key(attributes.toParcelable(), listener); + } catch (InterruptedException | ExecutionException m) { + listener.onL2KeyResponse(internalErrorStatus(), null); + } } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + Log.e(TAG, "Error finding L2 Key", e); } } @@ -128,9 +150,13 @@ public class IpMemoryStore { public void isSameNetwork(@NonNull final String l2Key1, @NonNull final String l2Key2, @NonNull final IOnSameNetworkResponseListener listener) { try { - mService.isSameNetwork(l2Key1, l2Key2, listener); + try { + getService().isSameNetwork(l2Key1, l2Key2, listener); + } catch (InterruptedException | ExecutionException m) { + listener.onSameNetworkResponse(internalErrorStatus(), null); + } } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + Log.e(TAG, "Error checking for network sameness", e); } } @@ -146,9 +172,13 @@ public class IpMemoryStore { public void retrieveNetworkAttributes(@NonNull final String l2Key, @NonNull final IOnNetworkAttributesRetrieved listener) { try { - mService.retrieveNetworkAttributes(l2Key, listener); + try { + getService().retrieveNetworkAttributes(l2Key, listener); + } catch (InterruptedException | ExecutionException m) { + listener.onNetworkAttributesRetrieved(internalErrorStatus(), null, null); + } } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + Log.e(TAG, "Error retrieving network attributes", e); } } @@ -166,14 +196,13 @@ public class IpMemoryStore { public void retrieveBlob(@NonNull final String l2Key, @NonNull final String clientId, @NonNull final String name, @NonNull final IOnBlobRetrievedListener listener) { try { - mService.retrieveBlob(l2Key, clientId, name, listener); + try { + getService().retrieveBlob(l2Key, clientId, name, listener); + } catch (InterruptedException | ExecutionException m) { + listener.onBlobRetrieved(internalErrorStatus(), null, null, null); + } } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); + Log.e(TAG, "Error retrieving blob", e); } } - - /** Gets an instance of the memory store */ - public static IpMemoryStore getMemoryStore(final Context context) { - return (IpMemoryStore) context.getSystemService(Context.IP_MEMORY_STORE_SERVICE); - } } diff --git a/services/net/java/android/net/NetworkStackClient.java b/services/net/java/android/net/NetworkStackClient.java index a8f4a77a91b4..7befd0870c00 100644 --- a/services/net/java/android/net/NetworkStackClient.java +++ b/services/net/java/android/net/NetworkStackClient.java @@ -120,8 +120,7 @@ public class NetworkStackClient { * * <p>The INetworkMonitor will be returned asynchronously through the provided callbacks. */ - public void makeNetworkMonitor( - NetworkParcelable network, String name, INetworkMonitorCallbacks cb) { + public void makeNetworkMonitor(Network network, String name, INetworkMonitorCallbacks cb) { requestConnector(connector -> { try { connector.makeNetworkMonitor(network, name, cb); @@ -131,6 +130,21 @@ public class NetworkStackClient { }); } + /** + * Get an instance of the IpMemoryStore. + * + * <p>The IpMemoryStore will be returned asynchronously through the provided callbacks. + */ + public void fetchIpMemoryStore(IIpMemoryStoreCallbacks cb) { + requestConnector(connector -> { + try { + connector.fetchIpMemoryStore(cb); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } + }); + } + private class NetworkStackConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { @@ -165,6 +179,15 @@ public class NetworkStackClient { } /** + * Initialize the network stack. Should be called only once on device startup, before any + * client attempts to use the network stack. + */ + public void init() { + log("Network stack init"); + mNetworkStackStartRequested = true; + } + + /** * Start the network stack. Should be called only once on device startup. * * <p>This method will start the network stack either in the network stack process, or inside @@ -174,8 +197,6 @@ public class NetworkStackClient { */ public void start(Context context) { log("Starting network stack"); - mNetworkStackStartRequested = true; - final PackageManager pm = context.getPackageManager(); // Try to bind in-process if the device was shipped with an in-process version diff --git a/services/net/java/android/net/ip/IpClientUtil.java b/services/net/java/android/net/ip/IpClientUtil.java index bf917bf88b2d..90624e0518f8 100644 --- a/services/net/java/android/net/ip/IpClientUtil.java +++ b/services/net/java/android/net/ip/IpClientUtil.java @@ -17,12 +17,10 @@ package android.net.ip; import static android.net.shared.IpConfigurationParcelableUtil.fromStableParcelable; -import static android.net.shared.LinkPropertiesParcelableUtil.fromStableParcelable; import android.content.Context; import android.net.DhcpResultsParcelable; import android.net.LinkProperties; -import android.net.LinkPropertiesParcelable; import android.net.NetworkStackClient; import android.os.ConditionVariable; @@ -122,18 +120,18 @@ public class IpClientUtil { } @Override - public void onProvisioningSuccess(LinkPropertiesParcelable newLp) { - mCb.onProvisioningSuccess(fromStableParcelable(newLp)); + public void onProvisioningSuccess(LinkProperties newLp) { + mCb.onProvisioningSuccess(newLp); } @Override - public void onProvisioningFailure(LinkPropertiesParcelable newLp) { - mCb.onProvisioningFailure(fromStableParcelable(newLp)); + public void onProvisioningFailure(LinkProperties newLp) { + mCb.onProvisioningFailure(newLp); } // Invoked on LinkProperties changes. @Override - public void onLinkPropertiesChange(LinkPropertiesParcelable newLp) { - mCb.onLinkPropertiesChange(fromStableParcelable(newLp)); + public void onLinkPropertiesChange(LinkProperties newLp) { + mCb.onLinkPropertiesChange(newLp); } // Called when the internal IpReachabilityMonitor (if enabled) has diff --git a/core/java/android/net/ipmemorystore/NetworkAttributes.java b/services/net/java/android/net/ipmemorystore/NetworkAttributes.java index 6a9eae00e3ff..6a9eae00e3ff 100644 --- a/core/java/android/net/ipmemorystore/NetworkAttributes.java +++ b/services/net/java/android/net/ipmemorystore/NetworkAttributes.java diff --git a/core/java/android/net/ipmemorystore/SameL3NetworkResponse.java b/services/net/java/android/net/ipmemorystore/SameL3NetworkResponse.java index 291aca8fc611..291aca8fc611 100644 --- a/core/java/android/net/ipmemorystore/SameL3NetworkResponse.java +++ b/services/net/java/android/net/ipmemorystore/SameL3NetworkResponse.java diff --git a/core/java/android/net/ipmemorystore/Status.java b/services/net/java/android/net/ipmemorystore/Status.java index cacd42d713c2..13242c03ce01 100644 --- a/core/java/android/net/ipmemorystore/Status.java +++ b/services/net/java/android/net/ipmemorystore/Status.java @@ -32,6 +32,7 @@ public class Status { public static final int ERROR_ILLEGAL_ARGUMENT = -2; public static final int ERROR_DATABASE_CANNOT_BE_OPENED = -3; public static final int ERROR_STORAGE = -4; + public static final int ERROR_UNKNOWN = -5; public final int resultCode; diff --git a/services/net/java/android/net/shared/InitialConfiguration.java b/services/net/java/android/net/shared/InitialConfiguration.java index 4ad71381da04..e423d62da7c9 100644 --- a/services/net/java/android/net/shared/InitialConfiguration.java +++ b/services/net/java/android/net/shared/InitialConfiguration.java @@ -23,13 +23,12 @@ import static android.text.TextUtils.join; import android.net.InetAddresses; import android.net.InitialConfigurationParcelable; import android.net.IpPrefix; -import android.net.IpPrefixParcelable; import android.net.LinkAddress; -import android.net.LinkAddressParcelable; import android.net.RouteInfo; import java.net.Inet4Address; import java.net.InetAddress; +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -148,10 +147,8 @@ public class InitialConfiguration { */ public InitialConfigurationParcelable toStableParcelable() { final InitialConfigurationParcelable p = new InitialConfigurationParcelable(); - p.ipAddresses = toParcelableArray(ipAddresses, - LinkPropertiesParcelableUtil::toStableParcelable, LinkAddressParcelable.class); - p.directlyConnectedRoutes = toParcelableArray(directlyConnectedRoutes, - LinkPropertiesParcelableUtil::toStableParcelable, IpPrefixParcelable.class); + p.ipAddresses = ipAddresses.toArray(new LinkAddress[0]); + p.directlyConnectedRoutes = directlyConnectedRoutes.toArray(new IpPrefix[0]); p.dnsServers = toParcelableArray( dnsServers, IpConfigurationParcelableUtil::parcelAddress, String.class); return p; @@ -164,10 +161,8 @@ public class InitialConfiguration { public static InitialConfiguration fromStableParcelable(InitialConfigurationParcelable p) { if (p == null) return null; final InitialConfiguration config = new InitialConfiguration(); - config.ipAddresses.addAll(fromParcelableArray( - p.ipAddresses, LinkPropertiesParcelableUtil::fromStableParcelable)); - config.directlyConnectedRoutes.addAll(fromParcelableArray( - p.directlyConnectedRoutes, LinkPropertiesParcelableUtil::fromStableParcelable)); + config.ipAddresses.addAll(Arrays.asList(p.ipAddresses)); + config.directlyConnectedRoutes.addAll(Arrays.asList(p.directlyConnectedRoutes)); config.dnsServers.addAll( fromParcelableArray(p.dnsServers, IpConfigurationParcelableUtil::unparcelAddress)); return config; diff --git a/services/net/java/android/net/shared/IpConfigurationParcelableUtil.java b/services/net/java/android/net/shared/IpConfigurationParcelableUtil.java index 1f0525e4da88..6b5826f8b095 100644 --- a/services/net/java/android/net/shared/IpConfigurationParcelableUtil.java +++ b/services/net/java/android/net/shared/IpConfigurationParcelableUtil.java @@ -44,7 +44,7 @@ public final class IpConfigurationParcelableUtil { @Nullable StaticIpConfiguration config) { if (config == null) return null; final StaticIpConfigurationParcelable p = new StaticIpConfigurationParcelable(); - p.ipAddress = LinkPropertiesParcelableUtil.toStableParcelable(config.getIpAddress()); + p.ipAddress = config.getIpAddress(); p.gateway = parcelAddress(config.getGateway()); p.dnsServers = toParcelableArray( config.getDnsServers(), IpConfigurationParcelableUtil::parcelAddress, String.class); @@ -59,7 +59,7 @@ public final class IpConfigurationParcelableUtil { @Nullable StaticIpConfigurationParcelable p) { if (p == null) return null; final StaticIpConfiguration config = new StaticIpConfiguration(); - config.setIpAddress(LinkPropertiesParcelableUtil.fromStableParcelable(p.ipAddress)); + config.setIpAddress(p.ipAddress); config.setGateway(unparcelAddress(p.gateway)); for (InetAddress addr : fromParcelableArray( p.dnsServers, IpConfigurationParcelableUtil::unparcelAddress)) { diff --git a/services/net/java/android/net/shared/LinkPropertiesParcelableUtil.java b/services/net/java/android/net/shared/LinkPropertiesParcelableUtil.java index 51d955d5c2ad..1729da6eb141 100644 --- a/services/net/java/android/net/shared/LinkPropertiesParcelableUtil.java +++ b/services/net/java/android/net/shared/LinkPropertiesParcelableUtil.java @@ -16,25 +16,9 @@ package android.net.shared; -import static android.net.shared.IpConfigurationParcelableUtil.parcelAddress; -import static android.net.shared.IpConfigurationParcelableUtil.unparcelAddress; -import static android.net.shared.ParcelableUtil.fromParcelableArray; -import static android.net.shared.ParcelableUtil.toParcelableArray; - import android.annotation.Nullable; -import android.net.IpPrefix; -import android.net.IpPrefixParcelable; -import android.net.LinkAddress; -import android.net.LinkAddressParcelable; import android.net.LinkProperties; -import android.net.LinkPropertiesParcelable; import android.net.ProxyInfo; -import android.net.ProxyInfoParcelable; -import android.net.RouteInfo; -import android.net.RouteInfoParcelable; -import android.net.Uri; - -import java.util.Arrays; /** * Collection of utility methods to convert to and from stable AIDL parcelables for LinkProperties @@ -42,177 +26,22 @@ import java.util.Arrays; * @hide */ public final class LinkPropertiesParcelableUtil { + // Temporary methods to facilitate migrating clients away from LinkPropertiesParcelable + // TODO: remove the following methods after migrating clients. /** - * Convert a ProxyInfo to a ProxyInfoParcelable - */ - public static ProxyInfoParcelable toStableParcelable(@Nullable ProxyInfo proxyInfo) { - if (proxyInfo == null) { - return null; - } - final ProxyInfoParcelable parcel = new ProxyInfoParcelable(); - parcel.host = proxyInfo.getHost(); - parcel.port = proxyInfo.getPort(); - parcel.exclusionList = proxyInfo.getExclusionList(); - parcel.pacFileUrl = proxyInfo.getPacFileUrl().toString(); - return parcel; - } - - /** - * Convert a ProxyInfoParcelable to a ProxyInfo - */ - public static ProxyInfo fromStableParcelable(@Nullable ProxyInfoParcelable parcel) { - if (parcel == null) { - return null; - } - if (Uri.EMPTY.toString().equals(parcel.pacFileUrl)) { - return ProxyInfo.buildDirectProxy( - parcel.host, parcel.port, Arrays.asList(parcel.exclusionList)); - } else { - return ProxyInfo.buildPacProxy(Uri.parse(parcel.pacFileUrl)); - } - } - - /** - * Convert an IpPrefixParcelable to an IpPrefix - */ - public static IpPrefixParcelable toStableParcelable(@Nullable IpPrefix ipPrefix) { - if (ipPrefix == null) { - return null; - } - final IpPrefixParcelable parcel = new IpPrefixParcelable(); - parcel.address = parcelAddress(ipPrefix.getAddress()); - parcel.prefixLength = ipPrefix.getPrefixLength(); - return parcel; - } - - /** - * Convert an IpPrefix to an IpPrefixParcelable - */ - public static IpPrefix fromStableParcelable(@Nullable IpPrefixParcelable parcel) { - if (parcel == null) { - return null; - } - return new IpPrefix(unparcelAddress(parcel.address), parcel.prefixLength); - } - - /** - * Convert a RouteInfoParcelable to a RouteInfo + * @deprecated conversion to stable parcelable is no longer necessary. */ - public static RouteInfoParcelable toStableParcelable(@Nullable RouteInfo routeInfo) { - if (routeInfo == null) { - return null; - } - final RouteInfoParcelable parcel = new RouteInfoParcelable(); - parcel.destination = toStableParcelable(routeInfo.getDestination()); - parcel.gatewayAddr = parcelAddress(routeInfo.getGateway()); - parcel.ifaceName = routeInfo.getInterface(); - parcel.type = routeInfo.getType(); - return parcel; - } - - /** - * Convert a RouteInfo to a RouteInfoParcelable - */ - public static RouteInfo fromStableParcelable(@Nullable RouteInfoParcelable parcel) { - if (parcel == null) { - return null; - } - final IpPrefix destination = fromStableParcelable(parcel.destination); - return new RouteInfo( - destination, unparcelAddress(parcel.gatewayAddr), - parcel.ifaceName, parcel.type); - } - - /** - * Convert a LinkAddressParcelable to a LinkAddress - */ - public static LinkAddressParcelable toStableParcelable(@Nullable LinkAddress la) { - if (la == null) { - return null; - } - final LinkAddressParcelable parcel = new LinkAddressParcelable(); - parcel.address = parcelAddress(la.getAddress()); - parcel.prefixLength = la.getPrefixLength(); - parcel.flags = la.getFlags(); - parcel.scope = la.getScope(); - return parcel; - } - - /** - * Convert a LinkAddress to a LinkAddressParcelable - */ - public static LinkAddress fromStableParcelable(@Nullable LinkAddressParcelable parcel) { - if (parcel == null) { - return null; - } - return new LinkAddress( - unparcelAddress(parcel.address), - parcel.prefixLength, - parcel.flags, - parcel.scope); - } - - /** - * Convert a LinkProperties to a LinkPropertiesParcelable - */ - public static LinkPropertiesParcelable toStableParcelable(@Nullable LinkProperties lp) { - if (lp == null) { - return null; - } - final LinkPropertiesParcelable parcel = new LinkPropertiesParcelable(); - parcel.ifaceName = lp.getInterfaceName(); - parcel.linkAddresses = toParcelableArray( - lp.getLinkAddresses(), - LinkPropertiesParcelableUtil::toStableParcelable, - LinkAddressParcelable.class); - parcel.dnses = toParcelableArray( - lp.getDnsServers(), IpConfigurationParcelableUtil::parcelAddress, String.class); - parcel.pcscfs = toParcelableArray( - lp.getPcscfServers(), IpConfigurationParcelableUtil::parcelAddress, String.class); - parcel.validatedPrivateDnses = toParcelableArray(lp.getValidatedPrivateDnsServers(), - IpConfigurationParcelableUtil::parcelAddress, String.class); - parcel.usePrivateDns = lp.isPrivateDnsActive(); - parcel.privateDnsServerName = lp.getPrivateDnsServerName(); - parcel.domains = lp.getDomains(); - parcel.routes = toParcelableArray( - lp.getRoutes(), LinkPropertiesParcelableUtil::toStableParcelable, - RouteInfoParcelable.class); - parcel.httpProxy = toStableParcelable(lp.getHttpProxy()); - parcel.mtu = lp.getMtu(); - parcel.tcpBufferSizes = lp.getTcpBufferSizes(); - parcel.nat64Prefix = toStableParcelable(lp.getNat64Prefix()); - return parcel; + @Deprecated + public static LinkProperties toStableParcelable(@Nullable LinkProperties lp) { + return lp; } /** - * Convert a LinkPropertiesParcelable to a LinkProperties + * @deprecated conversion to stable parcelable is no longer necessary. */ - public static LinkProperties fromStableParcelable(@Nullable LinkPropertiesParcelable parcel) { - if (parcel == null) { - return null; - } - final LinkProperties lp = new LinkProperties(); - lp.setInterfaceName(parcel.ifaceName); - lp.setLinkAddresses(fromParcelableArray(parcel.linkAddresses, - LinkPropertiesParcelableUtil::fromStableParcelable)); - lp.setDnsServers(fromParcelableArray( - parcel.dnses, IpConfigurationParcelableUtil::unparcelAddress)); - lp.setPcscfServers(fromParcelableArray( - parcel.pcscfs, IpConfigurationParcelableUtil::unparcelAddress)); - lp.setValidatedPrivateDnsServers( - fromParcelableArray(parcel.validatedPrivateDnses, - IpConfigurationParcelableUtil::unparcelAddress)); - lp.setUsePrivateDns(parcel.usePrivateDns); - lp.setPrivateDnsServerName(parcel.privateDnsServerName); - lp.setDomains(parcel.domains); - for (RouteInfoParcelable route : parcel.routes) { - lp.addRoute(fromStableParcelable(route)); - } - lp.setHttpProxy(fromStableParcelable(parcel.httpProxy)); - lp.setMtu(parcel.mtu); - lp.setTcpBufferSizes(parcel.tcpBufferSizes); - lp.setNat64Prefix(fromStableParcelable(parcel.nat64Prefix)); - return lp; + @Deprecated + public static ProxyInfo toStableParcelable(@Nullable ProxyInfo info) { + return info; } } diff --git a/services/net/java/android/net/shared/NetworkParcelableUtil.java b/services/net/java/android/net/shared/NetworkParcelableUtil.java deleted file mode 100644 index d0b54b8b81d0..000000000000 --- a/services/net/java/android/net/shared/NetworkParcelableUtil.java +++ /dev/null @@ -1,50 +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.shared; - -import android.annotation.Nullable; -import android.net.Network; -import android.net.NetworkParcelable; - -/** - * Utility methods to convert to/from stable AIDL parcelables for network attribute classes. - * @hide - */ -public final class NetworkParcelableUtil { - /** - * Convert from a Network to a NetworkParcelable. - */ - public static NetworkParcelable toStableParcelable(@Nullable Network network) { - if (network == null) { - return null; - } - final NetworkParcelable p = new NetworkParcelable(); - p.networkHandle = network.getNetworkHandle(); - - return p; - } - - /** - * Convert from a NetworkParcelable to a Network. - */ - public static Network fromStableParcelable(@Nullable NetworkParcelable p) { - if (p == null) { - return null; - } - return Network.fromNetworkHandle(p.networkHandle); - } -} diff --git a/services/net/java/android/net/shared/ProvisioningConfiguration.java b/services/net/java/android/net/shared/ProvisioningConfiguration.java index f9370653411e..0aceb2278660 100644 --- a/services/net/java/android/net/shared/ProvisioningConfiguration.java +++ b/services/net/java/android/net/shared/ProvisioningConfiguration.java @@ -239,7 +239,7 @@ public class ProvisioningConfiguration { p.apfCapabilities = IpConfigurationParcelableUtil.toStableParcelable(mApfCapabilities); p.provisioningTimeoutMs = mProvisioningTimeoutMs; p.ipv6AddrGenMode = mIPv6AddrGenMode; - p.network = NetworkParcelableUtil.toStableParcelable(mNetwork); + p.network = mNetwork; p.displayName = mDisplayName; return p; } @@ -263,7 +263,7 @@ public class ProvisioningConfiguration { p.apfCapabilities); config.mProvisioningTimeoutMs = p.provisioningTimeoutMs; config.mIPv6AddrGenMode = p.ipv6AddrGenMode; - config.mNetwork = NetworkParcelableUtil.fromStableParcelable(p.network); + config.mNetwork = p.network; config.mDisplayName = p.displayName; return config; } diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java index e379cd09f0f8..68728af9528c 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java @@ -56,11 +56,11 @@ public class PackageManagerServiceTest { } @Override - public void notifyPackageAdded(String packageName) { + public void notifyPackageAdded(String packageName, int uid) { } @Override - public void notifyPackageRemoved(String packageName) { + public void notifyPackageRemoved(String packageName, int uid) { } } diff --git a/telecomm/java/android/telecom/AudioState.java b/telecomm/java/android/telecom/AudioState.java index eb202a798568..a9b75a391255 100644 --- a/telecomm/java/android/telecom/AudioState.java +++ b/telecomm/java/android/telecom/AudioState.java @@ -18,6 +18,7 @@ package android.telecom; import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; @@ -54,11 +55,11 @@ public class AudioState implements Parcelable { private static final int ROUTE_ALL = ROUTE_EARPIECE | ROUTE_BLUETOOTH | ROUTE_WIRED_HEADSET | ROUTE_SPEAKER; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 127403196) private final boolean isMuted; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 127403196) private final int route; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 127403196) private final int supportedRouteMask; public AudioState(boolean muted, int route, int supportedRouteMask) { diff --git a/telecomm/java/android/telecom/CallRedirectionService.java b/telecomm/java/android/telecom/CallRedirectionService.java index 329911776993..d01c889864f2 100644 --- a/telecomm/java/android/telecom/CallRedirectionService.java +++ b/telecomm/java/android/telecom/CallRedirectionService.java @@ -17,6 +17,7 @@ package android.telecom; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SdkConstant; import android.app.Service; import android.content.Intent; @@ -62,16 +63,20 @@ public abstract class CallRedirectionService extends Service { private ICallRedirectionAdapter mCallRedirectionAdapter; /** - * Telecom calls this method to inform the implemented {@link CallRedirectionService} of - * a new outgoing call which is being placed. Telecom does not request to redirect emergency - * calls and does not request to redirect calls with gateway information. + * Telecom calls this method once upon binding to a {@link CallRedirectionService} to inform + * it of a new outgoing call which is being placed. Telecom does not request to redirect + * emergency calls and does not request to redirect calls with gateway information. * * <p>Telecom will cancel the call if Telecom does not receive a response in 5 seconds from * the implemented {@link CallRedirectionService} set by users. * * <p>The implemented {@link CallRedirectionService} can call {@link #placeCallUnmodified()}, * {@link #redirectCall(Uri, PhoneAccountHandle, boolean)}, and {@link #cancelCall()} only - * from here. + * from here. Calls to these methods are assumed by the Telecom framework to be the response + * for the phone call for which {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)} was + * invoked by Telecom. The Telecom framework will only invoke + * {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)} once each time it binds to a + * {@link CallRedirectionService}. * * @param handle the phone number dialed by the user, represented in E.164 format if possible * @param initialPhoneAccount the {@link PhoneAccountHandle} on which the call will be placed. @@ -91,13 +96,15 @@ public abstract class CallRedirectionService extends Service { * no changes are required to the outgoing call, and that the call should be placed as-is. * * <p>This can only be called from implemented - * {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)}. + * {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)}. The response corresponds to the + * latest request via {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)}. * */ public final void placeCallUnmodified() { try { mCallRedirectionAdapter.placeCallUnmodified(); } catch (RemoteException e) { + e.rethrowAsRuntimeException(); } } @@ -109,7 +116,8 @@ public abstract class CallRedirectionService extends Service { * replies Telecom a handle for an emergency number. * * <p>This can only be called from implemented - * {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)}. + * {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)}. The response corresponds to the + * latest request via {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)}. * * @param handle the new phone number to dial * @param targetPhoneAccount the {@link PhoneAccountHandle} to use when placing the call. @@ -126,6 +134,7 @@ public abstract class CallRedirectionService extends Service { try { mCallRedirectionAdapter.redirectCall(handle, targetPhoneAccount, confirmFirst); } catch (RemoteException e) { + e.rethrowAsRuntimeException(); } } @@ -135,13 +144,15 @@ public abstract class CallRedirectionService extends Service { * an outgoing call should be canceled entirely. * * <p>This can only be called from implemented - * {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)}. + * {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)}. The response corresponds to the + * latest request via {@link #onPlaceCall(Uri, PhoneAccountHandle, boolean)}. * */ public final void cancelCall() { try { mCallRedirectionAdapter.cancelCall(); } catch (RemoteException e) { + e.rethrowAsRuntimeException(); } } @@ -196,12 +207,12 @@ public abstract class CallRedirectionService extends Service { } @Override - public final IBinder onBind(Intent intent) { + public final @Nullable IBinder onBind(@NonNull Intent intent) { return new CallRedirectionBinder(); } @Override - public final boolean onUnbind(Intent intent) { + public final boolean onUnbind(@NonNull Intent intent) { return false; } } diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index bd0d4ae27800..5f0fa4963322 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -555,6 +555,15 @@ public abstract class Connection extends Conferenceable { public static final String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED"; /** + * Connection event used to inform Telecom when a hold operation on a call has failed. + * Not intended for use by the UI at this time. + * Sent via {@link #sendConnectionEvent(String, Bundle)}. The {@link Bundle} parameter is + * expected to be null when this connection event is used. + * @hide + */ + public static final String EVENT_CALL_HOLD_FAILED = "android.telecom.event.CALL_HOLD_FAILED"; + + /** * Connection event used to inform {@link InCallService}s when the process of merging a * Connection into a conference has begun. * <p> diff --git a/telecomm/java/android/telecom/Phone.java b/telecomm/java/android/telecom/Phone.java index d3ccd2cadbf5..0cc052ef340d 100644 --- a/telecomm/java/android/telecom/Phone.java +++ b/telecomm/java/android/telecom/Phone.java @@ -19,6 +19,7 @@ package android.telecom; import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; import android.bluetooth.BluetoothDevice; +import android.os.Build; import android.os.Bundle; import android.os.RemoteException; import android.util.ArrayMap; @@ -328,10 +329,12 @@ public final class Phone { * become active, and the touch screen and display will be turned off when the user's face * is detected to be in close proximity to the screen. This operation is a no-op on devices * that do not have a proximity sensor. - * + * <p> + * This API does not actually turn on the proximity sensor; apps should do this on their own if + * required. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 127403196) public final void setProximitySensorOn() { mInCallAdapter.turnProximitySensorOn(); } @@ -344,10 +347,12 @@ public final class Phone { * @param screenOnImmediately If true, the screen will be turned on immediately if it was * previously off. Otherwise, the screen will only be turned on after the proximity sensor * is no longer triggered. - * + * <p> + * This API does not actually turn of the proximity sensor; apps should do this on their own if + * required. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 127403196) public final void setProximitySensorOff(boolean screenOnImmediately) { mInCallAdapter.turnProximitySensorOff(screenOnImmediately); } diff --git a/telecomm/java/android/telecom/PhoneAccountHandle.java b/telecomm/java/android/telecom/PhoneAccountHandle.java index 5dedb045566c..e25c17df4994 100644 --- a/telecomm/java/android/telecom/PhoneAccountHandle.java +++ b/telecomm/java/android/telecom/PhoneAccountHandle.java @@ -42,7 +42,7 @@ import java.util.Objects; * See {@link PhoneAccount}, {@link TelecomManager}. */ public final class PhoneAccountHandle implements Parcelable { - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 127403196) private final ComponentName mComponentName; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private final String mId; diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index 84b223826c45..558d8d495d5c 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -1589,7 +1589,7 @@ public class TelecomManager { Build.VERSION_CODES.O_MR1) { Log.e("TAG", "addNewIncomingCall failed. Use public api " + "acceptHandover for API > O-MR1"); - // TODO add "return" after DUO team adds support for new handover API + return; } getTelecomService().addNewIncomingCall( phoneAccount, extras == null ? new Bundle() : extras); diff --git a/telecomm/java/android/telecom/VideoCallImpl.java b/telecomm/java/android/telecom/VideoCallImpl.java index 2c7fecb5e3c4..cb74012e2b81 100644 --- a/telecomm/java/android/telecom/VideoCallImpl.java +++ b/telecomm/java/android/telecom/VideoCallImpl.java @@ -18,6 +18,7 @@ package android.telecom; import android.annotation.UnsupportedAppUsage; import android.net.Uri; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.Looper; @@ -218,7 +219,7 @@ public class VideoCallImpl extends VideoCall { mTargetSdkVersion = sdkVersion; } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 127403196) public void destroy() { unregisterCallback(mCallback); } diff --git a/telephony/java/android/telephony/AccessNetworkConstants.java b/telephony/java/android/telephony/AccessNetworkConstants.java index 75165afe097e..81553a3bc0f8 100644 --- a/telephony/java/android/telephony/AccessNetworkConstants.java +++ b/telephony/java/android/telephony/AccessNetworkConstants.java @@ -16,13 +16,59 @@ package android.telephony; +import android.annotation.IntDef; import android.annotation.SystemApi; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Contains access network related constants. */ public final class AccessNetworkConstants { + /** + * Wireless transportation type + * + * @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(prefix = {"TRANSPORT_TYPE_"}, + value = { + TRANSPORT_TYPE_INVALID, + TRANSPORT_TYPE_WWAN, + TRANSPORT_TYPE_WLAN}) + public @interface TransportType {} + + /** + * Invalid transport type + * @hide + */ + @SystemApi + public static final int TRANSPORT_TYPE_INVALID = -1; + + /** + * Transport type for Wireless Wide Area Networks (i.e. Cellular) + * @hide + */ + @SystemApi + public static final int TRANSPORT_TYPE_WWAN = 1; + + /** + * Transport type for Wireless Local Area Networks (i.e. Wifi) + * @hide + */ + @SystemApi + public static final int TRANSPORT_TYPE_WLAN = 2; + + /** @hide */ + public static String transportTypeToString(@TransportType int transportType) { + switch (transportType) { + case TRANSPORT_TYPE_WWAN: return "WWAN"; + case TRANSPORT_TYPE_WLAN: return "WLAN"; + default: return Integer.toString(transportType); + } + } + public static final class AccessNetworkType { public static final int UNKNOWN = 0; public static final int GERAN = 1; @@ -49,39 +95,7 @@ public final class AccessNetworkConstants { } /** - * Wireless transportation type - * @hide - */ - @SystemApi - public static final class TransportType { - /** - * Invalid transport type. - * @hide - */ - public static final int INVALID = -1; - - /** Wireless Wide Area Networks (i.e. Cellular) */ - public static final int WWAN = 1; - - /** Wireless Local Area Networks (i.e. Wifi) */ - public static final int WLAN = 2; - - /** @hide */ - private TransportType() {} - - /** @hide */ - public static String toString(int type) { - switch (type) { - case INVALID: return "INVALID"; - case WWAN: return "WWAN"; - case WLAN: return "WLAN"; - default: return Integer.toString(type); - } - } - } - - /** - * Frenquency bands for GERAN. + * Frequency bands for GERAN. * http://www.etsi.org/deliver/etsi_ts/145000_145099/145005/14.00.00_60/ts_145005v140000p.pdf */ public static final class GeranBand { diff --git a/telephony/java/android/telephony/AvailableNetworkInfo.java b/telephony/java/android/telephony/AvailableNetworkInfo.java index b407b2a03bc4..8286e1e1712b 100644 --- a/telephony/java/android/telephony/AvailableNetworkInfo.java +++ b/telephony/java/android/telephony/AvailableNetworkInfo.java @@ -16,6 +16,7 @@ package android.telephony; +import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; @@ -62,11 +63,22 @@ public final class AvailableNetworkInfo implements Parcelable { /** * Describes the List of PLMN ids (MCC-MNC) associated with mSubId. * If this entry is left empty, then the platform software will not scan the network - * to revalidate the input. + * to revalidate the input else platform will scan and verify specified PLMNs are available. */ private ArrayList<String> mMccMncs; /** + * Returns the frequency bands associated with the {@link #getMccMncs() MCC/MNCs}. + * Opportunistic network service will use these bands to scan. + * + * When no specific bands are specified (empty array or null) CBRS band (B48) will be + * used for network scan. + * + * See {@link AccessNetworkConstants} for details. + */ + private ArrayList<Integer> mBands; + + /** * Return subscription Id of the available network. * This value must be one of the entry retrieved from * {@link SubscriptionManager#getOpportunisticSubscriptions} @@ -91,10 +103,20 @@ public final class AvailableNetworkInfo implements Parcelable { * to revalidate the input. * @return list of PLMN ids */ - public List<String> getMccMncs() { + public @NonNull List<String> getMccMncs() { return (List<String>) mMccMncs.clone(); } + /** + * Returns the frequency bands that need to be scanned by opportunistic network service + * + * The returned value is defined in either of {@link AccessNetworkConstants.GeranBand}, + * {@link AccessNetworkConstants.UtranBand} and {@link AccessNetworkConstants.EutranBand} + */ + public @NonNull List<Integer> getBands() { + return (List<Integer>) mBands.clone(); + } + @Override public int describeContents() { return 0; @@ -105,6 +127,7 @@ public final class AvailableNetworkInfo implements Parcelable { dest.writeInt(mSubId); dest.writeInt(mPriority); dest.writeStringList(mMccMncs); + dest.writeList(mBands); } private AvailableNetworkInfo(Parcel in) { @@ -112,12 +135,16 @@ public final class AvailableNetworkInfo implements Parcelable { mPriority = in.readInt(); mMccMncs = new ArrayList<>(); in.readStringList(mMccMncs); + mBands = new ArrayList<>(); + in.readList(mBands, Integer.class.getClassLoader()); } - public AvailableNetworkInfo(int subId, int priority, List<String> mccMncs) { + public AvailableNetworkInfo(int subId, int priority, @NonNull List<String> mccMncs, + @NonNull List<Integer> bands) { mSubId = subId; mPriority = priority; mMccMncs = new ArrayList<String>(mccMncs); + mBands = new ArrayList<Integer>(bands); } @Override @@ -135,14 +162,15 @@ public final class AvailableNetworkInfo implements Parcelable { } return (mSubId == ani.mSubId - && mPriority == ani.mPriority - && (((mMccMncs != null) - && mMccMncs.equals(ani.mMccMncs)))); + && mPriority == ani.mPriority + && (((mMccMncs != null) + && mMccMncs.equals(ani.mMccMncs))) + && mBands.equals(ani.mBands)); } @Override public int hashCode() { - return Objects.hash(mSubId, mPriority, mMccMncs); + return Objects.hash(mSubId, mPriority, mMccMncs, mBands); } public static final Parcelable.Creator<AvailableNetworkInfo> CREATOR = @@ -161,9 +189,9 @@ public final class AvailableNetworkInfo implements Parcelable { @Override public String toString() { return ("AvailableNetworkInfo:" - + " mSubId: " + mSubId - + " mPriority: " + mPriority - + " mMccMncs: " + Arrays.toString(mMccMncs.toArray())); + + " mSubId: " + mSubId + + " mPriority: " + mPriority + + " mMccMncs: " + Arrays.toString(mMccMncs.toArray()) + + " mBands: " + Arrays.toString(mBands.toArray())); } } - diff --git a/telephony/java/android/telephony/INetworkService.aidl b/telephony/java/android/telephony/INetworkService.aidl index 9ef7186e8ae1..67e5650ab359 100644 --- a/telephony/java/android/telephony/INetworkService.aidl +++ b/telephony/java/android/telephony/INetworkService.aidl @@ -25,7 +25,7 @@ oneway interface INetworkService { void createNetworkServiceProvider(int slotId); void removeNetworkServiceProvider(int slotId); - void getNetworkRegistrationState(int slotId, int domain, INetworkServiceCallback callback); - void registerForNetworkRegistrationStateChanged(int slotId, INetworkServiceCallback callback); - void unregisterForNetworkRegistrationStateChanged(int slotId, INetworkServiceCallback callback); + void getNetworkRegistrationInfo(int slotId, int domain, INetworkServiceCallback callback); + void registerForNetworkRegistrationInfoChanged(int slotId, INetworkServiceCallback callback); + void unregisterForNetworkRegistrationInfoChanged(int slotId, INetworkServiceCallback callback); } diff --git a/telephony/java/android/telephony/INetworkServiceCallback.aidl b/telephony/java/android/telephony/INetworkServiceCallback.aidl index 520598ff9144..33b3ac0940b5 100644 --- a/telephony/java/android/telephony/INetworkServiceCallback.aidl +++ b/telephony/java/android/telephony/INetworkServiceCallback.aidl @@ -16,7 +16,7 @@ package android.telephony; -import android.telephony.NetworkRegistrationState; +import android.telephony.NetworkRegistrationInfo; /** * Network service call back interface @@ -24,6 +24,6 @@ import android.telephony.NetworkRegistrationState; */ oneway interface INetworkServiceCallback { - void onGetNetworkRegistrationStateComplete(int result, in NetworkRegistrationState state); + void onGetNetworkRegistrationInfoComplete(int result, in NetworkRegistrationInfo state); void onNetworkStateChanged(); } diff --git a/telephony/java/android/telephony/NetworkRegistrationState.aidl b/telephony/java/android/telephony/NetworkRegistrationInfo.aidl index 98cba7720603..5c803bf69f69 100644 --- a/telephony/java/android/telephony/NetworkRegistrationState.aidl +++ b/telephony/java/android/telephony/NetworkRegistrationInfo.aidl @@ -16,4 +16,4 @@ package android.telephony; -parcelable NetworkRegistrationState; +parcelable NetworkRegistrationInfo; diff --git a/telephony/java/android/telephony/NetworkRegistrationState.java b/telephony/java/android/telephony/NetworkRegistrationInfo.java index 4d97f8104c26..c31a14edff10 100644 --- a/telephony/java/android/telephony/NetworkRegistrationState.java +++ b/telephony/java/android/telephony/NetworkRegistrationInfo.java @@ -32,11 +32,11 @@ import java.util.Objects; import java.util.stream.Collectors; /** - * Description of a mobile network registration state + * Description of a mobile network registration info * @hide */ @SystemApi -public class NetworkRegistrationState implements Parcelable { +public class NetworkRegistrationInfo implements Parcelable { /** * Network domain * @hide @@ -129,7 +129,6 @@ public class NetworkRegistrationState implements Parcelable { @Domain private final int mDomain; - /** {@link TransportType} */ private final int mTransportType; @RegState @@ -165,14 +164,15 @@ public class NetworkRegistrationState implements Parcelable { private DataSpecificRegistrationStates mDataSpecificStates; /** - * @param domain Network domain. Must be a {@link Domain}. For {@link TransportType#WLAN} - * transport, this must set to {@link #DOMAIN_PS}. - * @param transportType Transport type. Must be one of the{@link TransportType}. + * @param domain Network domain. Must be a {@link Domain}. For transport type + * {@link AccessNetworkConstants#TRANSPORT_TYPE_WLAN}, this must set to {@link #DOMAIN_PS}. + * @param transportType Transport type. * @param regState Network registration state. Must be one of the {@link RegState}. For - * {@link TransportType#WLAN} transport, only {@link #REG_STATE_HOME} and - * {@link #REG_STATE_NOT_REG_NOT_SEARCHING} are valid states. - * @param accessNetworkTechnology Access network technology.For {@link TransportType#WLAN} - * transport, set to {@link TelephonyManager#NETWORK_TYPE_IWLAN}. + * transport type {@link AccessNetworkConstants#TRANSPORT_TYPE_WLAN}, only + * {@link #REG_STATE_HOME} and {@link #REG_STATE_NOT_REG_NOT_SEARCHING} are valid states. + * @param accessNetworkTechnology Access network technology.For transport type + * {@link AccessNetworkConstants#TRANSPORT_TYPE_WLAN}, set to + * {@link TelephonyManager#NETWORK_TYPE_IWLAN}. * @param rejectCause Reason for denial if the registration state is {@link #REG_STATE_DENIED}. * Depending on {@code accessNetworkTechnology}, the values are defined in 3GPP TS 24.008 * 10.5.3.6 for UMTS, 3GPP TS 24.301 9.9.3.9 for LTE, and 3GPP2 A.S0001 6.2.2.44 for CDMA. If @@ -184,11 +184,12 @@ public class NetworkRegistrationState implements Parcelable { * @param cellIdentity The identity representing a unique cell or wifi AP. Set to null if the * information is not available. */ - public NetworkRegistrationState(@Domain int domain, int transportType, @RegState int regState, - @NetworkType int accessNetworkTechnology, int rejectCause, - boolean emergencyOnly, - @NonNull @ServiceType int[] availableServices, - @Nullable CellIdentity cellIdentity) { + public NetworkRegistrationInfo(@Domain int domain, @TransportType int transportType, + @RegState int regState, + @NetworkType int accessNetworkTechnology, int rejectCause, + boolean emergencyOnly, + @NonNull @ServiceType int[] availableServices, + @Nullable CellIdentity cellIdentity) { mDomain = domain; mTransportType = transportType; mRegState = regState; @@ -203,13 +204,15 @@ public class NetworkRegistrationState implements Parcelable { } /** - * Constructor for voice network registration states. + * Constructor for voice network registration info. * @hide */ - public NetworkRegistrationState(int domain, int transportType, int regState, - int accessNetworkTechnology, int rejectCause, boolean emergencyOnly, - int[] availableServices, @Nullable CellIdentity cellIdentity, boolean cssSupported, - int roamingIndicator, int systemIsInPrl, int defaultRoamingIndicator) { + public NetworkRegistrationInfo(int domain, @TransportType int transportType, int regState, + int accessNetworkTechnology, int rejectCause, + boolean emergencyOnly, int[] availableServices, + @Nullable CellIdentity cellIdentity, boolean cssSupported, + int roamingIndicator, int systemIsInPrl, + int defaultRoamingIndicator) { this(domain, transportType, regState, accessNetworkTechnology, rejectCause, emergencyOnly, availableServices, cellIdentity); @@ -218,14 +221,16 @@ public class NetworkRegistrationState implements Parcelable { } /** - * Constructor for data network registration states. + * Constructor for data network registration info. * @hide */ - public NetworkRegistrationState(int domain, int transportType, int regState, - int accessNetworkTechnology, int rejectCause, boolean emergencyOnly, - int[] availableServices, @Nullable CellIdentity cellIdentity, int maxDataCalls, - boolean isDcNrRestricted, boolean isNrAvailable, boolean isEndcAvailable, - LteVopsSupportInfo lteVopsSupportInfo) { + public NetworkRegistrationInfo(int domain, @TransportType int transportType, int regState, + int accessNetworkTechnology, int rejectCause, + boolean emergencyOnly, int[] availableServices, + @Nullable CellIdentity cellIdentity, int maxDataCalls, + boolean isDcNrRestricted, boolean isNrAvailable, + boolean isEndcAvailable, + LteVopsSupportInfo lteVopsSupportInfo) { this(domain, transportType, regState, accessNetworkTechnology, rejectCause, emergencyOnly, availableServices, cellIdentity); @@ -234,7 +239,7 @@ public class NetworkRegistrationState implements Parcelable { updateNrStatus(mDataSpecificStates); } - private NetworkRegistrationState(Parcel source) { + private NetworkRegistrationInfo(Parcel source) { mDomain = source.readInt(); mTransportType = source.readInt(); mRegState = source.readInt(); @@ -432,9 +437,10 @@ public class NetworkRegistrationState implements Parcelable { @Override public String toString() { - return new StringBuilder("NetworkRegistrationState{") + return new StringBuilder("NetworkRegistrationInfo{") .append(" domain=").append((mDomain == DOMAIN_CS) ? "CS" : "PS") - .append(" transportType=").append(TransportType.toString(mTransportType)) + .append(" transportType=").append( + AccessNetworkConstants.transportTypeToString(mTransportType)) .append(" regState=").append(regStateToString(mRegState)) .append(" roamingType=").append(ServiceState.roamingTypeToString(mRoamingType)) .append(" accessNetworkTechnology=") @@ -463,11 +469,11 @@ public class NetworkRegistrationState implements Parcelable { public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof NetworkRegistrationState)) { + if (!(o instanceof NetworkRegistrationInfo)) { return false; } - NetworkRegistrationState other = (NetworkRegistrationState) o; + NetworkRegistrationInfo other = (NetworkRegistrationInfo) o; return mDomain == other.mDomain && mTransportType == other.mTransportType && mRegState == other.mRegState @@ -526,46 +532,46 @@ public class NetworkRegistrationState implements Parcelable { } } - public static final Parcelable.Creator<NetworkRegistrationState> CREATOR = - new Parcelable.Creator<NetworkRegistrationState>() { - @Override - public NetworkRegistrationState createFromParcel(Parcel source) { - return new NetworkRegistrationState(source); - } + public static final @NonNull Parcelable.Creator<NetworkRegistrationInfo> CREATOR = + new Parcelable.Creator<NetworkRegistrationInfo>() { + @Override + public NetworkRegistrationInfo createFromParcel(Parcel source) { + return new NetworkRegistrationInfo(source); + } - @Override - public NetworkRegistrationState[] newArray(int size) { - return new NetworkRegistrationState[size]; - } - }; + @Override + public NetworkRegistrationInfo[] newArray(int size) { + return new NetworkRegistrationInfo[size]; + } + }; /** * @hide */ - public NetworkRegistrationState sanitizeLocationInfo() { - NetworkRegistrationState result = copy(); + public NetworkRegistrationInfo sanitizeLocationInfo() { + NetworkRegistrationInfo result = copy(); result.mCellIdentity = null; return result; } - private NetworkRegistrationState copy() { + private NetworkRegistrationInfo copy() { Parcel p = Parcel.obtain(); this.writeToParcel(p, 0); p.setDataPosition(0); - NetworkRegistrationState result = new NetworkRegistrationState(p); + NetworkRegistrationInfo result = new NetworkRegistrationInfo(p); p.recycle(); return result; } /** - * Provides a convenient way to set the fields of a {@link NetworkRegistrationState} when + * Provides a convenient way to set the fields of a {@link NetworkRegistrationInfo} when * creating a new instance. * - * <p>The example below shows how you might create a new {@code NetworkRegistrationState}: + * <p>The example below shows how you might create a new {@code NetworkRegistrationInfo}: * * <pre><code> * - * NetworkRegistrationState nrs = new NetworkRegistrationState.Builder() + * NetworkRegistrationInfo nrs = new NetworkRegistrationInfo.Builder() * .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) * .setApnName("apn.example.com") * .setEntryName("Example Carrier APN") @@ -627,7 +633,7 @@ public class NetworkRegistrationState implements Parcelable { * * @return The same instance of the builder. */ - public @NonNull Builder setTransportType(int transportType) { + public @NonNull Builder setTransportType(@TransportType int transportType) { mTransportType = transportType; return this; } @@ -734,12 +740,12 @@ public class NetworkRegistrationState implements Parcelable { } /** - * Build the NetworkRegistrationState. + * Build the NetworkRegistrationInfo. * - * @return the NetworkRegistrationState object. + * @return the NetworkRegistrationInfo object. */ - public @NonNull NetworkRegistrationState build() { - return new NetworkRegistrationState(mDomain, mTransportType, mRegState, + public @NonNull NetworkRegistrationInfo build() { + return new NetworkRegistrationInfo(mDomain, mTransportType, mRegState, mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, mAvailableServices, mCellIdentity); } diff --git a/telephony/java/android/telephony/NetworkService.java b/telephony/java/android/telephony/NetworkService.java index f1240e9fcf34..bc989dd8c5ad 100644 --- a/telephony/java/android/telephony/NetworkService.java +++ b/telephony/java/android/telephony/NetworkService.java @@ -27,7 +27,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.RemoteException; -import android.telephony.NetworkRegistrationState.Domain; +import android.telephony.NetworkRegistrationInfo.Domain; import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; @@ -59,10 +59,10 @@ public abstract class NetworkService extends Service { private static final int NETWORK_SERVICE_CREATE_NETWORK_SERVICE_PROVIDER = 1; private static final int NETWORK_SERVICE_REMOVE_NETWORK_SERVICE_PROVIDER = 2; private static final int NETWORK_SERVICE_REMOVE_ALL_NETWORK_SERVICE_PROVIDERS = 3; - private static final int NETWORK_SERVICE_GET_REGISTRATION_STATE = 4; - private static final int NETWORK_SERVICE_REGISTER_FOR_STATE_CHANGE = 5; - private static final int NETWORK_SERVICE_UNREGISTER_FOR_STATE_CHANGE = 6; - private static final int NETWORK_SERVICE_INDICATION_NETWORK_STATE_CHANGED = 7; + private static final int NETWORK_SERVICE_GET_REGISTRATION_INFO = 4; + private static final int NETWORK_SERVICE_REGISTER_FOR_INFO_CHANGE = 5; + private static final int NETWORK_SERVICE_UNREGISTER_FOR_INFO_CHANGE = 6; + private static final int NETWORK_SERVICE_INDICATION_NETWORK_INFO_CHANGED = 7; private final HandlerThread mHandlerThread; @@ -86,7 +86,7 @@ public abstract class NetworkService extends Service { private final int mSlotIndex; private final List<INetworkServiceCallback> - mNetworkRegistrationStateChangedCallbacks = new ArrayList<>(); + mNetworkRegistrationInfoChangedCallbacks = new ArrayList<>(); /** * Constructor @@ -104,38 +104,38 @@ public abstract class NetworkService extends Service { } /** - * API to get network registration state. The result will be passed to the callback. + * API to get network registration info. The result will be passed to the callback. * @param domain Network domain - * @param callback The callback for reporting network registration state + * @param callback The callback for reporting network registration info */ - public void getNetworkRegistrationState(@Domain int domain, - @NonNull NetworkServiceCallback callback) { - callback.onGetNetworkRegistrationStateComplete( + public void getNetworkRegistrationInfo(@Domain int domain, + @NonNull NetworkServiceCallback callback) { + callback.onGetNetworkRegistrationInfoComplete( NetworkServiceCallback.RESULT_ERROR_UNSUPPORTED, null); } /** - * Notify the system that network registration state is changed. + * Notify the system that network registration info is changed. */ - public final void notifyNetworkRegistrationStateChanged() { - mHandler.obtainMessage(NETWORK_SERVICE_INDICATION_NETWORK_STATE_CHANGED, + public final void notifyNetworkRegistrationInfoChanged() { + mHandler.obtainMessage(NETWORK_SERVICE_INDICATION_NETWORK_INFO_CHANGED, mSlotIndex, 0, null).sendToTarget(); } - private void registerForStateChanged(@NonNull INetworkServiceCallback callback) { - synchronized (mNetworkRegistrationStateChangedCallbacks) { - mNetworkRegistrationStateChangedCallbacks.add(callback); + private void registerForInfoChanged(@NonNull INetworkServiceCallback callback) { + synchronized (mNetworkRegistrationInfoChangedCallbacks) { + mNetworkRegistrationInfoChangedCallbacks.add(callback); } } - private void unregisterForStateChanged(@NonNull INetworkServiceCallback callback) { - synchronized (mNetworkRegistrationStateChangedCallbacks) { - mNetworkRegistrationStateChangedCallbacks.remove(callback); + private void unregisterForInfoChanged(@NonNull INetworkServiceCallback callback) { + synchronized (mNetworkRegistrationInfoChangedCallbacks) { + mNetworkRegistrationInfoChangedCallbacks.remove(callback); } } - private void notifyStateChangedToCallbacks() { - for (INetworkServiceCallback callback : mNetworkRegistrationStateChangedCallbacks) { + private void notifyInfoChangedToCallbacks() { + for (INetworkServiceCallback callback : mNetworkRegistrationInfoChangedCallbacks) { try { callback.onNetworkStateChanged(); } catch (RemoteException exception) { @@ -189,24 +189,24 @@ public abstract class NetworkService extends Service { } mServiceMap.clear(); break; - case NETWORK_SERVICE_GET_REGISTRATION_STATE: + case NETWORK_SERVICE_GET_REGISTRATION_INFO: if (serviceProvider == null) break; int domainId = message.arg2; - serviceProvider.getNetworkRegistrationState(domainId, + serviceProvider.getNetworkRegistrationInfo(domainId, new NetworkServiceCallback(callback)); break; - case NETWORK_SERVICE_REGISTER_FOR_STATE_CHANGE: + case NETWORK_SERVICE_REGISTER_FOR_INFO_CHANGE: if (serviceProvider == null) break; - serviceProvider.registerForStateChanged(callback); + serviceProvider.registerForInfoChanged(callback); break; - case NETWORK_SERVICE_UNREGISTER_FOR_STATE_CHANGE: + case NETWORK_SERVICE_UNREGISTER_FOR_INFO_CHANGE: if (serviceProvider == null) break; - serviceProvider.unregisterForStateChanged(callback); + serviceProvider.unregisterForInfoChanged(callback); break; - case NETWORK_SERVICE_INDICATION_NETWORK_STATE_CHANGED: + case NETWORK_SERVICE_INDICATION_NETWORK_INFO_CHANGED: if (serviceProvider == null) break; - serviceProvider.notifyStateChangedToCallbacks(); + serviceProvider.notifyInfoChangedToCallbacks(); break; default: break; @@ -280,23 +280,23 @@ public abstract class NetworkService extends Service { } @Override - public void getNetworkRegistrationState( + public void getNetworkRegistrationInfo( int slotIndex, int domain, INetworkServiceCallback callback) { - mHandler.obtainMessage(NETWORK_SERVICE_GET_REGISTRATION_STATE, slotIndex, + mHandler.obtainMessage(NETWORK_SERVICE_GET_REGISTRATION_INFO, slotIndex, domain, callback).sendToTarget(); } @Override - public void registerForNetworkRegistrationStateChanged( + public void registerForNetworkRegistrationInfoChanged( int slotIndex, INetworkServiceCallback callback) { - mHandler.obtainMessage(NETWORK_SERVICE_REGISTER_FOR_STATE_CHANGE, slotIndex, + mHandler.obtainMessage(NETWORK_SERVICE_REGISTER_FOR_INFO_CHANGE, slotIndex, 0, callback).sendToTarget(); } @Override - public void unregisterForNetworkRegistrationStateChanged( + public void unregisterForNetworkRegistrationInfoChanged( int slotIndex, INetworkServiceCallback callback) { - mHandler.obtainMessage(NETWORK_SERVICE_UNREGISTER_FOR_STATE_CHANGE, slotIndex, + mHandler.obtainMessage(NETWORK_SERVICE_UNREGISTER_FOR_INFO_CHANGE, slotIndex, 0, callback).sendToTarget(); } } diff --git a/telephony/java/android/telephony/NetworkServiceCallback.java b/telephony/java/android/telephony/NetworkServiceCallback.java index c2fcfb7a0759..cc2524000091 100644 --- a/telephony/java/android/telephony/NetworkServiceCallback.java +++ b/telephony/java/android/telephony/NetworkServiceCallback.java @@ -28,8 +28,8 @@ import java.lang.ref.WeakReference; /** * Network service callback. Object of this class is passed to NetworkServiceProvider upon - * calling getNetworkRegistrationState, to receive asynchronous feedback from NetworkServiceProvider - * upon onGetNetworkRegistrationStateComplete. It's like a wrapper of INetworkServiceCallback + * calling getNetworkRegistrationInfo, to receive asynchronous feedback from NetworkServiceProvider + * upon onGetNetworkRegistrationInfoComplete. It's like a wrapper of INetworkServiceCallback * because INetworkServiceCallback can't be a parameter type in public APIs. * * @hide @@ -70,20 +70,20 @@ public class NetworkServiceCallback { /** * Called to indicate result of - * {@link NetworkServiceProvider#getNetworkRegistrationState(int, NetworkServiceCallback)} + * {@link NetworkServiceProvider#getNetworkRegistrationInfo(int, NetworkServiceCallback)} * * @param result Result status like {@link NetworkServiceCallback#RESULT_SUCCESS} or * {@link NetworkServiceCallback#RESULT_ERROR_UNSUPPORTED} * @param state The state information to be returned to callback. */ - public void onGetNetworkRegistrationStateComplete(int result, - @Nullable NetworkRegistrationState state) { + public void onGetNetworkRegistrationInfoComplete(int result, + @Nullable NetworkRegistrationInfo state) { INetworkServiceCallback callback = mCallback.get(); if (callback != null) { try { - callback.onGetNetworkRegistrationStateComplete(result, state); + callback.onGetNetworkRegistrationInfoComplete(result, state); } catch (RemoteException e) { - Rlog.e(mTag, "Failed to onGetNetworkRegistrationStateComplete on the remote"); + Rlog.e(mTag, "Failed to onGetNetworkRegistrationInfoComplete on the remote"); } } else { Rlog.e(mTag, "Weak reference of callback is null."); diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java index 4dcb410e277a..549c04420ce0 100644 --- a/telephony/java/android/telephony/PhoneNumberUtils.java +++ b/telephony/java/android/telephony/PhoneNumberUtils.java @@ -25,12 +25,11 @@ import android.annotation.IntDef; import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.Intent; -import android.content.res.Resources; import android.database.Cursor; import android.location.CountryDetector; import android.net.Uri; -import android.os.SystemProperties; import android.os.PersistableBundle; +import android.os.SystemProperties; import android.provider.Contacts; import android.provider.ContactsContract; import android.telecom.PhoneAccount; @@ -1738,7 +1737,7 @@ public class PhoneNumberUtils { * @return true if the number is in the list of emergency numbers * listed in the RIL / SIM, otherwise return false. * - * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)} instead. + * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)} instead. */ @Deprecated public static boolean isEmergencyNumber(String number) { @@ -1754,7 +1753,7 @@ public class PhoneNumberUtils { * @return true if the number is in the list of emergency numbers * listed in the RIL / SIM, otherwise return false. * - * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)} * instead. * * @hide @@ -1785,7 +1784,7 @@ public class PhoneNumberUtils { * listed in the RIL / SIM, *or* if the number starts with the * same digits as any of those emergency numbers. * - * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)} * instead. * * @hide @@ -1814,7 +1813,7 @@ public class PhoneNumberUtils { * listed in the RIL / SIM, *or* if the number starts with the * same digits as any of those emergency numbers. * - * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)} * instead. * * @hide @@ -1883,7 +1882,7 @@ public class PhoneNumberUtils { * @return if the number is an emergency number for the specific country, then return true, * otherwise false * - * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)} * instead. * * @hide @@ -1903,7 +1902,7 @@ public class PhoneNumberUtils { * @return if the number is an emergency number for the specific country, then return true, * otherwise false * - * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)} * instead. * * @hide @@ -1934,7 +1933,7 @@ public class PhoneNumberUtils { * country, *or* if the number starts with the same digits as * any of those emergency numbers. * - * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)} * instead. * * @hide @@ -1964,7 +1963,7 @@ public class PhoneNumberUtils { * country, *or* if the number starts with the same digits as * any of those emergency numbers. * - * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)} * instead. * * @hide @@ -2017,7 +2016,7 @@ public class PhoneNumberUtils { private static boolean isEmergencyNumberInternal(int subId, String number, String defaultCountryIso, boolean useExactMatch) { - return TelephonyManager.getDefault().isCurrentEmergencyNumber(number); + return TelephonyManager.getDefault().isEmergencyNumber(number); } /** @@ -2028,7 +2027,7 @@ public class PhoneNumberUtils { * @return true if the specified number is an emergency number for the country the user * is currently in. * - * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)} * instead. */ @Deprecated @@ -2045,7 +2044,7 @@ public class PhoneNumberUtils { * @return true if the specified number is an emergency number for the country the user * is currently in. * - * @deprecated Please use {@link TelephonyManager#isCurrentEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isEmergencyNumber(String)} * instead. * * @hide @@ -2079,7 +2078,7 @@ public class PhoneNumberUtils { * * @see android.location.CountryDetector * - * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)} * instead. * * @hide @@ -2110,7 +2109,7 @@ public class PhoneNumberUtils { * @return true if the specified number is an emergency number for a local country, based on the * CountryDetector. * - * @deprecated Please use {@link TelephonyManager#isCurrentPotentialEmergencyNumber(String)} + * @deprecated Please use {@link TelephonyManager#isPotentialEmergencyNumber(String)} * instead. * * @hide diff --git a/telephony/java/android/telephony/RadioAccessFamily.java b/telephony/java/android/telephony/RadioAccessFamily.java index eb889c6171a0..3317c22da4b5 100644 --- a/telephony/java/android/telephony/RadioAccessFamily.java +++ b/telephony/java/android/telephony/RadioAccessFamily.java @@ -397,81 +397,4 @@ public class RadioAccessFamily implements Parcelable { } return result; } - - /** - * convert RAF from {@link android.hardware.radio.V1_0.RadioAccessFamily} to - * {@link TelephonyManager.NetworkTypeBitMask}, the bitmask represented by - * {@link TelephonyManager.NetworkType}. - * - * @param raf {@link android.hardware.radio.V1_0.RadioAccessFamily} - * @return {@link TelephonyManager.NetworkTypeBitMask} - */ - public static int convertToNetworkTypeBitMask(int raf) { - int networkTypeRaf = 0; - - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.GSM) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_GSM; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.GPRS) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_GPRS; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EDGE) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EDGE; - } - // convert both IS95A/IS95B to CDMA as network mode doesn't support CDMA - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.IS95A) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.IS95B) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.ONE_X_RTT) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_0) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_A) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_B) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EHRPD) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSUPA) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSDPA) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSDPA; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSPA) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSPA; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSPAP) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSPAP; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.UMTS) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_UMTS; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.TD_SCDMA) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_TD_SCDMA; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.LTE) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_LTE; - } - if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.LTE_CA) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_LTE_CA; - } - if ((raf & android.hardware.radio.V1_4.RadioAccessFamily.NR) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_NR; - } - // TODO: need hal definition - if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN)) != 0) { - networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_IWLAN; - } - - return (networkTypeRaf == 0) ? TelephonyManager.NETWORK_TYPE_UNKNOWN : networkTypeRaf; - } } diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index 611812996b28..522920a5aa00 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -28,8 +28,9 @@ import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.telephony.AccessNetworkConstants.AccessNetworkType; -import android.telephony.NetworkRegistrationState.Domain; -import android.telephony.NetworkRegistrationState.NRStatus; +import android.telephony.AccessNetworkConstants.TransportType; +import android.telephony.NetworkRegistrationInfo.Domain; +import android.telephony.NetworkRegistrationInfo.NRStatus; import android.text.TextUtils; import java.lang.annotation.Retention; @@ -52,6 +53,9 @@ import java.util.stream.Collectors; * <li>Operator name, short name and numeric id * <li>Network selection mode * </ul> + * + * For historical reasons this class is not declared as final; however, + * it should be treated as though it were final. */ public class ServiceState implements Parcelable { @@ -348,7 +352,7 @@ public class ServiceState implements Parcelable { * Reference: 3GPP TS 36.104 5.4.3 */ private int mLteEarfcnRsrpBoost = 0; - private List<NetworkRegistrationState> mNetworkRegistrationStates = new ArrayList<>(); + private List<NetworkRegistrationInfo> mNetworkRegistrationInfos = new ArrayList<>(); /** * get String description of roaming type @@ -431,8 +435,8 @@ public class ServiceState implements Parcelable { mCellBandwidths = s.mCellBandwidths == null ? null : Arrays.copyOf(s.mCellBandwidths, s.mCellBandwidths.length); mLteEarfcnRsrpBoost = s.mLteEarfcnRsrpBoost; - mNetworkRegistrationStates = s.mNetworkRegistrationStates == null ? null : - new ArrayList<>(s.mNetworkRegistrationStates); + mNetworkRegistrationInfos = s.mNetworkRegistrationInfos == null ? null : + new ArrayList<>(s.mNetworkRegistrationInfos); mNrFrequencyRange = s.mNrFrequencyRange; } @@ -465,8 +469,8 @@ public class ServiceState implements Parcelable { mIsEmergencyOnly = in.readInt() != 0; mIsUsingCarrierAggregation = in.readInt() != 0; mLteEarfcnRsrpBoost = in.readInt(); - mNetworkRegistrationStates = new ArrayList<>(); - in.readList(mNetworkRegistrationStates, NetworkRegistrationState.class.getClassLoader()); + mNetworkRegistrationInfos = new ArrayList<>(); + in.readList(mNetworkRegistrationInfos, NetworkRegistrationInfo.class.getClassLoader()); mChannelNumber = in.readInt(); mCellBandwidths = in.createIntArray(); mNrFrequencyRange = in.readInt(); @@ -494,7 +498,7 @@ public class ServiceState implements Parcelable { out.writeInt(mIsEmergencyOnly ? 1 : 0); out.writeInt(mIsUsingCarrierAggregation ? 1 : 0); out.writeInt(mLteEarfcnRsrpBoost); - out.writeList(mNetworkRegistrationStates); + out.writeList(mNetworkRegistrationInfos); out.writeInt(mChannelNumber); out.writeIntArray(mCellBandwidths); out.writeInt(mNrFrequencyRange); @@ -619,8 +623,8 @@ public class ServiceState implements Parcelable { */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) public @RoamingType int getVoiceRoamingType() { - final NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_CS, AccessNetworkConstants.TransportType.WWAN); + final NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (regState != null) { return regState.getRoamingType(); } @@ -643,10 +647,10 @@ public class ServiceState implements Parcelable { * @hide */ public boolean getDataRoamingFromRegistration() { - final NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WWAN); + final NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (regState != null) { - return (regState.getRegState() == NetworkRegistrationState.REG_STATE_ROAMING); + return (regState.getRegState() == NetworkRegistrationInfo.REG_STATE_ROAMING); } return false; } @@ -658,8 +662,8 @@ public class ServiceState implements Parcelable { */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) public @RoamingType int getDataRoamingType() { - final NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WWAN); + final NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (regState != null) { return regState.getRoamingType(); } @@ -837,7 +841,7 @@ public class ServiceState implements Parcelable { mVoiceRegState, mDataRegState, mChannelNumber, - mCellBandwidths, + Arrays.hashCode(mCellBandwidths), mVoiceOperatorAlphaLong, mVoiceOperatorAlphaShort, mVoiceOperatorNumeric, @@ -857,7 +861,7 @@ public class ServiceState implements Parcelable { mIsEmergencyOnly, mIsUsingCarrierAggregation, mLteEarfcnRsrpBoost, - mNetworkRegistrationStates, + mNetworkRegistrationInfos, mNrFrequencyRange); } @@ -887,9 +891,9 @@ public class ServiceState implements Parcelable { s.mCdmaDefaultRoamingIndicator) && mIsEmergencyOnly == s.mIsEmergencyOnly && mIsUsingCarrierAggregation == s.mIsUsingCarrierAggregation) - && (mNetworkRegistrationStates == null ? s.mNetworkRegistrationStates == null : - s.mNetworkRegistrationStates != null && - mNetworkRegistrationStates.containsAll(s.mNetworkRegistrationStates)) + && (mNetworkRegistrationInfos == null + ? s.mNetworkRegistrationInfos == null : s.mNetworkRegistrationInfos != null + && mNetworkRegistrationInfos.containsAll(s.mNetworkRegistrationInfos)) && mNrFrequencyRange == s.mNrFrequencyRange; } @@ -1042,7 +1046,7 @@ public class ServiceState implements Parcelable { .append(", mIsEmergencyOnly=").append(mIsEmergencyOnly) .append(", mIsUsingCarrierAggregation=").append(mIsUsingCarrierAggregation) .append(", mLteEarfcnRsrpBoost=").append(mLteEarfcnRsrpBoost) - .append(", mNetworkRegistrationStates=").append(mNetworkRegistrationStates) + .append(", mNetworkRegistrationInfos=").append(mNetworkRegistrationInfos) .append(", mNrFrequencyRange=").append(mNrFrequencyRange) .append("}").toString(); } @@ -1072,7 +1076,7 @@ public class ServiceState implements Parcelable { mIsEmergencyOnly = false; mIsUsingCarrierAggregation = false; mLteEarfcnRsrpBoost = 0; - mNetworkRegistrationStates = new ArrayList<>(); + mNetworkRegistrationInfos = new ArrayList<>(); mNrFrequencyRange = FREQUENCY_RANGE_UNKNOWN; } @@ -1129,14 +1133,14 @@ public class ServiceState implements Parcelable { /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public void setVoiceRoamingType(@RoamingType int type) { - NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_CS, AccessNetworkConstants.TransportType.WWAN); + NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (regState == null) { - regState = new NetworkRegistrationState( - NetworkRegistrationState.DOMAIN_CS, AccessNetworkConstants.TransportType.WWAN, + regState = new NetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN, ServiceState.ROAMING_TYPE_NOT_ROAMING, TelephonyManager.NETWORK_TYPE_UNKNOWN, 0, false, null, null); - addNetworkRegistrationState(regState); + addNetworkRegistrationInfo(regState); } regState.setRoamingType(type); } @@ -1150,14 +1154,14 @@ public class ServiceState implements Parcelable { /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public void setDataRoamingType(@RoamingType int type) { - NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WWAN); + NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (regState == null) { - regState = new NetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WWAN, + regState = new NetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN, ServiceState.ROAMING_TYPE_NOT_ROAMING, TelephonyManager.NETWORK_TYPE_UNKNOWN, 0, false, null, null); - addNetworkRegistrationState(regState); + addNetworkRegistrationInfo(regState); } regState.setRoamingType(type); } @@ -1325,14 +1329,14 @@ public class ServiceState implements Parcelable { this.mRilVoiceRadioTechnology = rt; // sync to network registration state - NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_CS, AccessNetworkConstants.TransportType.WWAN); + NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (regState == null) { - regState = new NetworkRegistrationState( - NetworkRegistrationState.DOMAIN_CS, AccessNetworkConstants.TransportType.WWAN, + regState = new NetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN, ServiceState.ROAMING_TYPE_NOT_ROAMING, TelephonyManager.NETWORK_TYPE_UNKNOWN, 0, false, null, null); - addNetworkRegistrationState(regState); + addNetworkRegistrationInfo(regState); } regState.setAccessNetworkTechnology( rilRadioTechnologyToNetworkType(mRilVoiceRadioTechnology)); @@ -1352,15 +1356,15 @@ public class ServiceState implements Parcelable { mRilDataRadioTechnology); // sync to network registration state - NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WWAN); + NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (regState == null) { - regState = new NetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WWAN, + regState = new NetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN, ServiceState.ROAMING_TYPE_NOT_ROAMING, TelephonyManager.NETWORK_TYPE_UNKNOWN, 0, false, null, null); - addNetworkRegistrationState(regState); + addNetworkRegistrationInfo(regState); } regState.setAccessNetworkTechnology( rilRadioTechnologyToNetworkType(mRilDataRadioTechnology)); @@ -1390,9 +1394,9 @@ public class ServiceState implements Parcelable { * @hide */ public @NRStatus int getNrStatus() { - final NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WWAN); - if (regState == null) return NetworkRegistrationState.NR_STATUS_NONE; + final NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); + if (regState == null) return NetworkRegistrationInfo.NR_STATUS_NONE; return regState.getNrStatus(); } @@ -1575,19 +1579,19 @@ public class ServiceState implements Parcelable { /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) public @TelephonyManager.NetworkType int getDataNetworkType() { - final NetworkRegistrationState iwlanRegState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WLAN); + final NetworkRegistrationInfo iwlanRegState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WLAN); if (iwlanRegState != null - && iwlanRegState.getRegState() == NetworkRegistrationState.REG_STATE_HOME) { + && iwlanRegState.getRegState() == NetworkRegistrationInfo.REG_STATE_HOME) { // If the device is on IWLAN, return IWLAN as the network type. This is to simulate the // behavior of legacy mode device. In the future caller should use - // getNetworkRegistrationState() to retrieve the actual data network type on cellular + // getNetworkRegistrationInfo() to retrieve the actual data network type on cellular // or on IWLAN. return iwlanRegState.getAccessNetworkTechnology(); } - final NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WWAN); + final NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (regState != null) { return regState.getAccessNetworkTechnology(); } @@ -1597,8 +1601,8 @@ public class ServiceState implements Parcelable { /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) public @TelephonyManager.NetworkType int getVoiceNetworkType() { - final NetworkRegistrationState regState = getNetworkRegistrationState( - NetworkRegistrationState.DOMAIN_CS, AccessNetworkConstants.TransportType.WWAN); + final NetworkRegistrationInfo regState = getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); if (regState != null) { return regState.getAccessNetworkTechnology(); } @@ -1761,52 +1765,36 @@ public class ServiceState implements Parcelable { } /** - * Get all of the available network registration states. + * Get all of the available network registration info. * - * @return List of {@link NetworkRegistrationState} + * @return List of {@link NetworkRegistrationInfo} * @hide */ @NonNull @SystemApi - public List<NetworkRegistrationState> getNetworkRegistrationStates() { - synchronized (mNetworkRegistrationStates) { - return new ArrayList<>(mNetworkRegistrationStates); + public List<NetworkRegistrationInfo> getNetworkRegistrationInfoList() { + synchronized (mNetworkRegistrationInfos) { + return new ArrayList<>(mNetworkRegistrationInfos); } } /** - * Get the network registration states for the transport type. - * - * @param transportType The {@link AccessNetworkConstants.TransportType transport type} - * @return List of {@link NetworkRegistrationState} - * @hide - * - * @deprecated Use {@link #getNetworkRegistrationStatesFromTransportType(int)} - */ - @NonNull - @Deprecated - @SystemApi - public List<NetworkRegistrationState> getNetworkRegistrationStates(int transportType) { - return getNetworkRegistrationStatesForTransportType(transportType); - } - - /** - * Get the network registration states for the transport type. + * Get the network registration info list for the transport type. * - * @param transportType The {@link AccessNetworkConstants.TransportType transport type} - * @return List of {@link NetworkRegistrationState} + * @param transportType The transport type + * @return List of {@link NetworkRegistrationInfo} * @hide */ @NonNull @SystemApi - public List<NetworkRegistrationState> getNetworkRegistrationStatesForTransportType( - int transportType) { - List<NetworkRegistrationState> list = new ArrayList<>(); - - synchronized (mNetworkRegistrationStates) { - for (NetworkRegistrationState networkRegistrationState : mNetworkRegistrationStates) { - if (networkRegistrationState.getTransportType() == transportType) { - list.add(networkRegistrationState); + public List<NetworkRegistrationInfo> getNetworkRegistrationInfoListForTransportType( + @TransportType int transportType) { + List<NetworkRegistrationInfo> list = new ArrayList<>(); + + synchronized (mNetworkRegistrationInfos) { + for (NetworkRegistrationInfo networkRegistrationInfo : mNetworkRegistrationInfos) { + if (networkRegistrationInfo.getTransportType() == transportType) { + list.add(networkRegistrationInfo); } } } @@ -1815,22 +1803,22 @@ public class ServiceState implements Parcelable { } /** - * Get the network registration states for the network domain. + * Get the network registration info list for the network domain. * - * @param domain The network {@link NetworkRegistrationState.Domain domain} - * @return List of {@link NetworkRegistrationState} + * @param domain The network {@link NetworkRegistrationInfo.Domain domain} + * @return List of {@link NetworkRegistrationInfo} * @hide */ @NonNull @SystemApi - public List<NetworkRegistrationState> getNetworkRegistrationStatesForDomain( + public List<NetworkRegistrationInfo> getNetworkRegistrationInfoListForDomain( @Domain int domain) { - List<NetworkRegistrationState> list = new ArrayList<>(); + List<NetworkRegistrationInfo> list = new ArrayList<>(); - synchronized (mNetworkRegistrationStates) { - for (NetworkRegistrationState networkRegistrationState : mNetworkRegistrationStates) { - if (networkRegistrationState.getDomain() == domain) { - list.add(networkRegistrationState); + synchronized (mNetworkRegistrationInfos) { + for (NetworkRegistrationInfo networkRegistrationInfo : mNetworkRegistrationInfos) { + if (networkRegistrationInfo.getDomain() == domain) { + list.add(networkRegistrationInfo); } } } @@ -1841,39 +1829,21 @@ public class ServiceState implements Parcelable { /** * Get the network registration state for the transport type and network domain. * - * @param domain The network {@link NetworkRegistrationState.Domain domain} - * @param transportType The {@link AccessNetworkConstants.TransportType transport type} - * @return The matching {@link NetworkRegistrationState} - * @hide - * - * @deprecated Use {@link #getNetworkRegistrationState(int, int)} - */ - @Nullable - @Deprecated - @SystemApi - public NetworkRegistrationState getNetworkRegistrationStates(@Domain int domain, - int transportType) { - return getNetworkRegistrationState(domain, transportType); - } - - /** - * Get the network registration state for the transport type and network domain. - * - * @param domain The network {@link NetworkRegistrationState.Domain domain} - * @param transportType The {@link AccessNetworkConstants.TransportType transport type} - * @return The matching {@link NetworkRegistrationState} + * @param domain The network {@link NetworkRegistrationInfo.Domain domain} + * @param transportType The transport type + * @return The matching {@link NetworkRegistrationInfo} * @hide * */ @Nullable @SystemApi - public NetworkRegistrationState getNetworkRegistrationState(@Domain int domain, - int transportType) { - synchronized (mNetworkRegistrationStates) { - for (NetworkRegistrationState networkRegistrationState : mNetworkRegistrationStates) { - if (networkRegistrationState.getTransportType() == transportType - && networkRegistrationState.getDomain() == domain) { - return networkRegistrationState; + public NetworkRegistrationInfo getNetworkRegistrationInfo(@Domain int domain, + @TransportType int transportType) { + synchronized (mNetworkRegistrationInfos) { + for (NetworkRegistrationInfo networkRegistrationInfo : mNetworkRegistrationInfos) { + if (networkRegistrationInfo.getTransportType() == transportType + && networkRegistrationInfo.getDomain() == domain) { + return networkRegistrationInfo; } } } @@ -1884,20 +1854,20 @@ public class ServiceState implements Parcelable { /** * @hide */ - public void addNetworkRegistrationState(NetworkRegistrationState regState) { + public void addNetworkRegistrationInfo(NetworkRegistrationInfo regState) { if (regState == null) return; - synchronized (mNetworkRegistrationStates) { - for (int i = 0; i < mNetworkRegistrationStates.size(); i++) { - NetworkRegistrationState curRegState = mNetworkRegistrationStates.get(i); + synchronized (mNetworkRegistrationInfos) { + for (int i = 0; i < mNetworkRegistrationInfos.size(); i++) { + NetworkRegistrationInfo curRegState = mNetworkRegistrationInfos.get(i); if (curRegState.getTransportType() == regState.getTransportType() && curRegState.getDomain() == regState.getDomain()) { - mNetworkRegistrationStates.remove(i); + mNetworkRegistrationInfos.remove(i); break; } } - mNetworkRegistrationStates.add(regState); + mNetworkRegistrationInfos.add(regState); } } @@ -1912,15 +1882,15 @@ public class ServiceState implements Parcelable { /** * Returns a copy of self with location-identifying information removed. - * Always clears the NetworkRegistrationState's CellIdentity fields, but if removeCoarseLocation + * Always clears the NetworkRegistrationInfo's CellIdentity fields, but if removeCoarseLocation * is true, clears other info as well. * @hide */ public ServiceState sanitizeLocationInfo(boolean removeCoarseLocation) { ServiceState state = new ServiceState(this); - if (state.mNetworkRegistrationStates != null) { - state.mNetworkRegistrationStates = state.mNetworkRegistrationStates.stream() - .map(NetworkRegistrationState::sanitizeLocationInfo) + if (state.mNetworkRegistrationInfos != null) { + state.mNetworkRegistrationInfos = state.mNetworkRegistrationInfos.stream() + .map(NetworkRegistrationInfo::sanitizeLocationInfo) .collect(Collectors.toList()); } if (!removeCoarseLocation) return state; diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 1662d6e33cf7..0bbf054d7563 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -2008,21 +2008,27 @@ public class SubscriptionManager { } /** - * Checks if the supplied subscription ID is valid. - * Note: a valid subscription ID does not necessarily correspond to an active subscription. + * Check if the supplied subscription ID is valid. + * + * <p>A valid subscription ID is not necessarily an active subscription ID + * (see {@link #isActiveSubscriptionId(int)}) or an usable subscription ID + * (see {@link #isUsableSubscriptionId(int)}). Unless specifically noted, subscription + * APIs work with a valid subscription ID. * * @param subscriptionId The subscription ID. - * @return true if the supplied subscriptionId is valid; false otherwise. + * @return {@code true} if the supplied subscriptionId is valid; {@code false} otherwise. */ public static boolean isValidSubscriptionId(int subscriptionId) { return subscriptionId > INVALID_SUBSCRIPTION_ID; } /** - * Check if the subscription ID is usable. + * Check if the supplied subscription ID is usable. * - * A usable subscription ID has a valid value except some special values such as - * {@link #DEFAULT_SUBSCRIPTION_ID}. It can be used for subscription functions. + * <p>A usable subscription ID is a valid subscription ID, but not necessarily an active + * subscription ID (see {@link #isActiveSubscriptionId(int)}). Some subscription APIs + * require a usable subscription ID, and this is noted in their documentation; otherwise, a + * subscription ID does not need to be usable for subscription functions, only valid. * * @param subscriptionId the subscription ID * @return {@code true} if the subscription ID is usable; {@code false} otherwise. @@ -2280,7 +2286,8 @@ public class SubscriptionManager { } /** - * Checks if the supplied subscription ID corresponds to an active subscription. + * Checks if the supplied subscription ID corresponds to a subscription which is actively in + * use on the device. An active subscription ID is a valid and usable subscription ID. * * @param subscriptionId the subscription ID. * @return {@code true} if the supplied subscription ID corresponds to an active subscription; @@ -2599,7 +2606,7 @@ public class SubscriptionManager { @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int subId, boolean needValidation, - @NonNull @CallbackExecutor Executor executor, Consumer<Integer> callback) { + @Nullable @CallbackExecutor Executor executor, @Nullable Consumer<Integer> callback) { if (VDBG) logd("[setPreferredDataSubscriptionId]+ subId:" + subId); try { ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); @@ -2608,10 +2615,11 @@ public class SubscriptionManager { ISetOpportunisticDataCallback callbackStub = new ISetOpportunisticDataCallback.Stub() { @Override public void onComplete(int result) { + if (executor == null || callback == null) { + return; + } Binder.withCleanCallingIdentity(() -> executor.execute(() -> { - if (callback != null) { - callback.accept(result); - } + callback.accept(result); })); } }; diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 3e7b7e12249c..973cd77916b5 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -58,6 +58,8 @@ import android.os.SystemProperties; import android.os.WorkSource; import android.provider.Settings.SettingNotFoundException; import android.service.carrier.CarrierIdentifier; +import android.telecom.CallScreeningService; +import android.telecom.InCallService; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; @@ -81,6 +83,7 @@ import com.android.internal.telephony.CellNetworkScanResult; import com.android.internal.telephony.INumberVerificationCallback; import com.android.internal.telephony.IOns; import com.android.internal.telephony.IPhoneSubInfo; +import com.android.internal.telephony.ISetOpportunisticDataCallback; import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.ITelephonyRegistry; import com.android.internal.telephony.IUpdateAvailableNetworksCallback; @@ -95,6 +98,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -615,7 +619,13 @@ public class TelephonyManager { * <p class="note"> * Retrieve with * {@link android.content.Intent#getStringExtra(String)}. + * <p> + * + * @deprecated Companion apps for wearable devices should use the {@link InCallService} API + * to retrieve the phone number for calls instead. Apps performing call screening should use + * the {@link CallScreeningService} API instead. */ + @Deprecated public static final String EXTRA_INCOMING_NUMBER = "incoming_number"; /** @@ -3298,26 +3308,25 @@ public class TelephonyManager { } /** - * Get the mapping from logical slots to physical slots. The mapping represent by a pair list. - * The key of the piar is the logical slot id and the value of the pair is the physical - * slots id mapped to this logical slot id. + * Get the mapping from logical slots to physical slots. The key of the map is the logical slot + * id and the value is the physical slots id mapped to this logical slot id. * - * @return an pair list indicates the mapping from logical slots to physical slots. The size of - * the list should be {@link #getPhoneCount()} if success, otherwise return an empty list. + * @return a map indicates the mapping from logical slots to physical slots. The size of the map + * should be {@link #getPhoneCount()} if success, otherwise return an empty map. * * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @NonNull - public List<Pair<Integer, Integer>> getLogicalToPhysicalSlotMapping() { - List<Pair<Integer, Integer>> slotMapping = new ArrayList<>(); + public Map<Integer, Integer> getLogicalToPhysicalSlotMapping() { + Map<Integer, Integer> slotMapping = new HashMap<>(); try { ITelephony telephony = getITelephony(); if (telephony != null) { int[] slotMappingArray = telephony.getSlotsMapping(); for (int i = 0; i < slotMappingArray.length; i++) { - slotMapping.add(new Pair(i, slotMappingArray[i])); + slotMapping.put(i, slotMappingArray[i]); } } } catch (RemoteException e) { @@ -5163,6 +5172,40 @@ public class TelephonyManager { } /** + * Opens a logical channel to the ICC card using the physical slot index. + * + * Use this method when no subscriptions are available on the SIM and the operation must be + * performed using the physical slot index. + * + * Input parameters equivalent to TS 27.007 AT+CCHO command. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}. + * + * @param slotIndex the physical slot index of the ICC card + * @param aid Application id. See ETSI 102.221 and 101.220. + * @param p2 P2 parameter (described in ISO 7816-4). + * @return an IccOpenLogicalChannelResponse object. + * @hide + */ + @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + @SystemApi + @Nullable + public IccOpenLogicalChannelResponse iccOpenLogicalChannelBySlot(int slotIndex, + @Nullable String aid, int p2) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.iccOpenLogicalChannelBySlot(slotIndex, getOpPackageName(), aid, + p2); + } + } catch (RemoteException ex) { + } catch (NullPointerException ex) { + } + return null; + } + + /** * Opens a logical channel to the ICC card. * * Input parameters equivalent to TS 27.007 AT+CCHO command. @@ -5206,6 +5249,38 @@ public class TelephonyManager { } /** + * Closes a previously opened logical channel to the ICC card using the physical slot index. + * + * Use this method when no subscriptions are available on the SIM and the operation must be + * performed using the physical slot index. + * + * Input parameters equivalent to TS 27.007 AT+CCHC command. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}. + * + * @param slotIndex the physical slot index of the ICC card + * @param channel is the channel id to be closed as returned by a successful + * iccOpenLogicalChannel. + * @return true if the channel was closed successfully. + * @hide + */ + @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + @SystemApi + @Nullable + public boolean iccCloseLogicalChannelBySlot(int slotIndex, int channel) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.iccCloseLogicalChannelBySlot(slotIndex, channel); + } + } catch (RemoteException ex) { + } catch (NullPointerException ex) { + } + return false; + } + + /** * Closes a previously opened logical channel to the ICC card. * * Input parameters equivalent to TS 27.007 AT+CCHC command. @@ -5214,7 +5289,7 @@ public class TelephonyManager { * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the calling * app has carrier privileges (see {@link #hasCarrierPrivileges}). * - * @param channel is the channel id to be closed as retruned by a successful + * @param channel is the channel id to be closed as returned by a successful * iccOpenLogicalChannel. * @return true if the channel was closed successfully. */ @@ -5232,7 +5307,7 @@ public class TelephonyManager { * app has carrier privileges (see {@link #hasCarrierPrivileges}). * * @param subId The subscription to use. - * @param channel is the channel id to be closed as retruned by a successful + * @param channel is the channel id to be closed as returned by a successful * iccOpenLogicalChannel. * @return true if the channel was closed successfully. * @hide @@ -5249,6 +5324,48 @@ public class TelephonyManager { } /** + * Transmit an APDU to the ICC card over a logical channel using the physical slot index. + * + * Use this method when no subscriptions are available on the SIM and the operation must be + * performed using the physical slot index. + * + * Input parameters equivalent to TS 27.007 AT+CGLA command. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}. + * + * @param slotIndex the physical slot index of the ICC card + * @param channel is the channel id to be closed as returned by a successful + * iccOpenLogicalChannel. + * @param cla Class of the APDU command. + * @param instruction Instruction of the APDU command. + * @param p1 P1 value of the APDU command. + * @param p2 P2 value of the APDU command. + * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU + * is sent to the SIM. + * @param data Data to be sent with the APDU. + * @return The APDU response from the ICC card with the status appended at + * the end. + * @hide + */ + @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + @SystemApi + @Nullable + public String iccTransmitApduLogicalChannelBySlot(int slotIndex, int channel, int cla, + int instruction, int p1, int p2, int p3, @Nullable String data) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.iccTransmitApduLogicalChannelBySlot(slotIndex, channel, cla, + instruction, p1, p2, p3, data); + } + } catch (RemoteException ex) { + } catch (NullPointerException ex) { + } + return null; + } + + /** * Transmit an APDU to the ICC card over a logical channel. * * Input parameters equivalent to TS 27.007 AT+CGLA command. @@ -5312,6 +5429,46 @@ public class TelephonyManager { } /** + * Transmit an APDU to the ICC card over the basic channel using the physical slot index. + * + * Use this method when no subscriptions are available on the SIM and the operation must be + * performed using the physical slot index. + * + * Input parameters equivalent to TS 27.007 AT+CSIM command. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}. + * + * @param slotIndex the physical slot index of the ICC card to target + * @param cla Class of the APDU command. + * @param instruction Instruction of the APDU command. + * @param p1 P1 value of the APDU command. + * @param p2 P2 value of the APDU command. + * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU + * is sent to the SIM. + * @param data Data to be sent with the APDU. + * @return The APDU response from the ICC card with the status appended at + * the end. + * @hide + */ + @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) + @SystemApi + @NonNull + public String iccTransmitApduBasicChannelBySlot(int slotIndex, int cla, int instruction, int p1, + int p2, int p3, @Nullable String data) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.iccTransmitApduBasicChannelBySlot(slotIndex, getOpPackageName(), + cla, instruction, p1, p2, p3, data); + } + } catch (RemoteException ex) { + } catch (NullPointerException ex) { + } + return null; + } + + /** * Transmit an APDU to the ICC card over the basic channel. * * Input parameters equivalent to TS 27.007 AT+CSIM command. @@ -5978,7 +6135,7 @@ public class TelephonyManager { // FIXME Need to get it from Telephony Dev Controller when that gets implemented! // and then this method shouldn't be used at all! if(isMultiSimEnabled()) { - return 2; + return getPhoneCount(); } else { return 1; } @@ -8119,7 +8276,7 @@ public class TelephonyManager { * @see SubscriptionManager#getDefaultSubscriptionId() * @hide */ - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) + @UnsupportedAppUsage public boolean isVolteAvailable() { try { return getITelephony().isAvailable(getSubId(), @@ -8138,7 +8295,7 @@ public class TelephonyManager { * @return true if VT is available, or false if it is unavailable or unknown. * @hide */ - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) + @UnsupportedAppUsage public boolean isVideoTelephonyAvailable() { try { return getITelephony().isVideoTelephonyAvailable(getSubId()); @@ -8153,7 +8310,7 @@ public class TelephonyManager { * @return true if VoWiFi is available, or false if it is unavailable or unknown. * @hide */ - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) + @UnsupportedAppUsage public boolean isWifiCallingAvailable() { try { return getITelephony().isWifiCallingAvailable(getSubId()); @@ -9988,18 +10145,21 @@ public class TelephonyManager { * a SecurityException if the caller does not have the permission. */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) - @Nullable - public Map<Integer, List<EmergencyNumber>> getCurrentEmergencyNumberList() { + @NonNull + public Map<Integer, List<EmergencyNumber>> getEmergencyNumberList() { + Map<Integer, List<EmergencyNumber>> emergencyNumberList = new HashMap<>(); try { ITelephony telephony = getITelephony(); - if (telephony == null) { - return null; + if (telephony != null) { + return telephony.getEmergencyNumberList(mContext.getOpPackageName()); + } else { + throw new IllegalStateException("telephony service is null."); } - return telephony.getCurrentEmergencyNumberList(mContext.getOpPackageName()); } catch (RemoteException ex) { - Log.e(TAG, "getCurrentEmergencyNumberList RemoteException", ex); + Log.e(TAG, "getEmergencyNumberList RemoteException", ex); + ex.rethrowAsRuntimeException(); } - return null; + return emergencyNumberList; } /** @@ -10038,31 +10198,34 @@ public class TelephonyManager { * a SecurityException if the caller does not have the permission. */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) - @Nullable - public Map<Integer, List<EmergencyNumber>> getCurrentEmergencyNumberList( + @NonNull + public Map<Integer, List<EmergencyNumber>> getEmergencyNumberList( @EmergencyServiceCategories int categories) { + Map<Integer, List<EmergencyNumber>> emergencyNumberList = new HashMap<>(); try { ITelephony telephony = getITelephony(); - if (telephony == null) { - return null; - } - Map<Integer, List<EmergencyNumber>> numberMap = telephony - .getCurrentEmergencyNumberList(mContext.getOpPackageName()); - if (numberMap != null) { - for (Integer subscriptionId : numberMap.keySet()) { - List<EmergencyNumber> numberList = numberMap.get(subscriptionId); - for (EmergencyNumber number : numberList) { - if (!number.isInEmergencyServiceCategories(categories)) { - numberList.remove(number); + if (telephony != null) { + emergencyNumberList = telephony.getEmergencyNumberList( + mContext.getOpPackageName()); + if (emergencyNumberList != null) { + for (Integer subscriptionId : emergencyNumberList.keySet()) { + List<EmergencyNumber> numberList = emergencyNumberList.get(subscriptionId); + for (EmergencyNumber number : numberList) { + if (!number.isInEmergencyServiceCategories(categories)) { + numberList.remove(number); + } } } } + return emergencyNumberList; + } else { + throw new IllegalStateException("telephony service is null."); } - return numberMap; } catch (RemoteException ex) { - Log.e(TAG, "getCurrentEmergencyNumberList with Categories RemoteException", ex); + Log.e(TAG, "getEmergencyNumberList with Categories RemoteException", ex); + ex.rethrowAsRuntimeException(); } - return null; + return emergencyNumberList; } /** @@ -10076,15 +10239,17 @@ public class TelephonyManager { * @return {@code true} if the given number is an emergency number based on current locale, * sim, modem and network; {@code false} otherwise. */ - public boolean isCurrentEmergencyNumber(@NonNull String number) { + public boolean isEmergencyNumber(@NonNull String number) { try { ITelephony telephony = getITelephony(); - if (telephony == null) { - return false; + if (telephony != null) { + return telephony.isEmergencyNumber(number, true); + } else { + throw new IllegalStateException("telephony service is null."); } - return telephony.isCurrentEmergencyNumber(number, true); } catch (RemoteException ex) { - Log.e(TAG, "isCurrentEmergencyNumber RemoteException", ex); + Log.e(TAG, "isEmergencyNumber RemoteException", ex); + ex.rethrowAsRuntimeException(); } return false; } @@ -10113,15 +10278,17 @@ public class TelephonyManager { */ @SystemApi @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) - public boolean isCurrentPotentialEmergencyNumber(@NonNull String number) { + public boolean isPotentialEmergencyNumber(@NonNull String number) { try { ITelephony telephony = getITelephony(); - if (telephony == null) { - return false; + if (telephony != null) { + return telephony.isEmergencyNumber(number, false); + } else { + throw new IllegalStateException("telephony service is null."); } - return telephony.isCurrentEmergencyNumber(number, false); } catch (RemoteException ex) { - Log.e(TAG, "isCurrentEmergencyNumber RemoteException", ex); + Log.e(TAG, "isEmergencyNumber RemoteException", ex); + ex.rethrowAsRuntimeException(); } return false; } @@ -10195,21 +10362,40 @@ public class TelephonyManager { * @param subId which opportunistic subscription * {@link SubscriptionManager#getOpportunisticSubscriptions} is preferred for cellular data. * Pass {@link SubscriptionManager#DEFAULT_SUBSCRIPTION_ID} to unset the preference - * @return true if request is accepted, else false. + * @param needValidation whether validation is needed before switch happens. + * @param executor The executor of where the callback will execute. + * @param callback Callback will be triggered once it succeeds or failed. + * See {@link TelephonyManager.SetOpportunisticSubscriptionResult} + * for more details. Pass null if don't care about the result. * */ - public boolean setPreferredOpportunisticDataSubscription(int subId) { + public void setPreferredOpportunisticDataSubscription(int subId, boolean needValidation, + @Nullable @CallbackExecutor Executor executor, @Nullable Consumer<Integer> callback) { String pkgForDebug = mContext != null ? mContext.getOpPackageName() : "<unknown>"; try { IOns iOpportunisticNetworkService = getIOns(); - if (iOpportunisticNetworkService != null) { - return iOpportunisticNetworkService - .setPreferredDataSubscriptionId(subId, pkgForDebug); + if (iOpportunisticNetworkService == null) { + return; } + ISetOpportunisticDataCallback callbackStub = new ISetOpportunisticDataCallback.Stub() { + @Override + public void onComplete(int result) { + if (executor == null || callback == null) { + return; + } + Binder.withCleanCallingIdentity(() -> executor.execute(() -> { + callback.accept(result); + })); + } + }; + + iOpportunisticNetworkService + .setPreferredDataSubscriptionId(subId, needValidation, callbackStub, + pkgForDebug); } catch (RemoteException ex) { Rlog.e(TAG, "setPreferredDataSubscriptionId RemoteException", ex); } - return false; + return; } /** @@ -10244,11 +10430,11 @@ public class TelephonyManager { /** * Update availability of a list of networks in the current location. * - * This api should be called by opportunistic network selection app to inform - * OpportunisticNetwork Service about the availability of a network at the current location. - * This information will be used by OpportunisticNetwork service to decide to attach to the - * network opportunistically. - * If an empty list is passed, it is assumed that no network is available. + * This api should be called to inform OpportunisticNetwork Service about the availability + * of a network at the current location. This information will be used by OpportunisticNetwork + * service to decide to attach to the network opportunistically. If an empty list is passed, + * it is assumed that no network is available and will result in disabling the modem stack + * to save power. * Requires that the calling app has carrier privileges on both primary and * secondary subscriptions (see {@link #hasCarrierPrivileges}), or has permission * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}. diff --git a/telephony/java/android/telephony/emergency/EmergencyNumber.java b/telephony/java/android/telephony/emergency/EmergencyNumber.java index e68256d086bc..397975fe58cf 100644 --- a/telephony/java/android/telephony/emergency/EmergencyNumber.java +++ b/telephony/java/android/telephony/emergency/EmergencyNumber.java @@ -302,7 +302,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu * * @return the dialing number. */ - public String getNumber() { + public @NonNull String getNumber() { return mNumber; } @@ -311,7 +311,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu * * @return the country code string (lowercase character) in ISO 3166 format. */ - public String getCountryIso() { + public @NonNull String getCountryIso() { return mCountryIso; } @@ -320,7 +320,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu * * @return the Mobile Network Code of the emergency number. */ - public String getMnc() { + public @NonNull String getMnc() { return mMnc; } @@ -328,6 +328,8 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu * Returns the bitmask of emergency service categories of the emergency number. * * @return bitmask of the emergency service categories + * + * @hide */ public @EmergencyServiceCategories int getEmergencyServiceCategoryBitmask() { return mEmergencyServiceCategoryBitmask; @@ -357,7 +359,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu * * @return a list of the emergency service categories */ - public List<Integer> getEmergencyServiceCategories() { + public @NonNull List<Integer> getEmergencyServiceCategories() { List<Integer> categories = new ArrayList<>(); if (serviceUnspecified()) { categories.add(EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED); @@ -384,7 +386,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu * number does not have a specified emergency Uniform Resource Name. */ public @NonNull List<String> getEmergencyUrns() { - return mEmergencyUrns; + return Collections.unmodifiableList(mEmergencyUrns); } /** @@ -421,6 +423,8 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu * Returns the bitmask of the sources of the emergency number. * * @return bitmask of the emergency number sources + * + * @hide */ public @EmergencyNumberSources int getEmergencyNumberSourceBitmask() { return mEmergencyNumberSourceBitmask; @@ -431,7 +435,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu * * @return a list of emergency number sources */ - public List<Integer> getEmergencyNumberSources() { + public @NonNull List<Integer> getEmergencyNumberSources() { List<Integer> sources = new ArrayList<>(); for (Integer source : EMERGENCY_NUMBER_SOURCE_SET) { if ((mEmergencyNumberSourceBitmask & source) == source) { diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java index 907dbbd20403..568c11be9077 100644 --- a/telephony/java/android/telephony/ims/ImsCallProfile.java +++ b/telephony/java/android/telephony/ims/ImsCallProfile.java @@ -17,6 +17,7 @@ package android.telephony.ims; import android.annotation.IntDef; +import android.annotation.NonNull; import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; import android.os.Bundle; @@ -837,7 +838,7 @@ public final class ImsCallProfile implements Parcelable { * 3gpp 22.101, Section 10 - Emergency Calls. */ @VisibleForTesting - public void setEmergencyUrns(List<String> emergencyUrns) { + public void setEmergencyUrns(@NonNull List<String> emergencyUrns) { mEmergencyUrns = emergencyUrns; } @@ -911,7 +912,7 @@ public final class ImsCallProfile implements Parcelable { * Reference: 3gpp 24.503, Section 5.1.6.8.1 - General; * 3gpp 22.101, Section 10 - Emergency Calls. */ - public List<String> getEmergencyUrns() { + public @NonNull List<String> getEmergencyUrns() { return mEmergencyUrns; } diff --git a/telephony/java/android/telephony/ims/ImsException.java b/telephony/java/android/telephony/ims/ImsException.java index bdaad5bffe5e..02eddf67e25b 100644 --- a/telephony/java/android/telephony/ims/ImsException.java +++ b/telephony/java/android/telephony/ims/ImsException.java @@ -19,6 +19,7 @@ package android.telephony.ims; import android.annotation.IntDef; import android.annotation.Nullable; import android.annotation.SystemApi; +import android.content.pm.PackageManager; import android.text.TextUtils; import java.lang.annotation.Retention; @@ -48,7 +49,9 @@ public class ImsException extends Exception { /** * This device or carrier configuration does not support IMS for this subscription. * <p> - * This is a permanent configuration error and there should be no retry. + * This is a permanent configuration error and there should be no retry. Usually this is + * because {@link PackageManager#FEATURE_TELEPHONY_IMS} is not available + * or the device has no ImsService implementation to service this request. */ public static final int CODE_ERROR_UNSUPPORTED_OPERATION = 2; diff --git a/telephony/java/android/telephony/ims/ImsMmTelManager.java b/telephony/java/android/telephony/ims/ImsMmTelManager.java index 58ddf21888fc..e9aede7336f0 100644 --- a/telephony/java/android/telephony/ims/ImsMmTelManager.java +++ b/telephony/java/android/telephony/ims/ImsMmTelManager.java @@ -25,6 +25,8 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.content.Context; +import android.content.pm.IPackageManager; +import android.content.pm.PackageManager; import android.net.Uri; import android.os.Binder; import android.os.RemoteException; @@ -107,9 +109,9 @@ public class ImsMmTelManager { // case, since it is defined. put(ImsRegistrationImplBase.REGISTRATION_TECH_NONE, -1); put(ImsRegistrationImplBase.REGISTRATION_TECH_LTE, - AccessNetworkConstants.TransportType.WWAN); + AccessNetworkConstants.TRANSPORT_TYPE_WWAN); put(ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN, - AccessNetworkConstants.TransportType.WLAN); + AccessNetworkConstants.TRANSPORT_TYPE_WLAN); }}; private final RegistrationCallback mLocalCallback; @@ -314,7 +316,7 @@ public class ImsMmTelManager { private int mSubId; /** - * Create an instance of ImsManager for the subscription id specified. + * Create an instance of {@link ImsMmTelManager} for the subscription id specified. * * @param subId The ID of the subscription that this ImsMmTelManager will use. * @see android.telephony.SubscriptionManager#getActiveSubscriptionInfoList() @@ -366,12 +368,14 @@ public class ImsMmTelManager { if (executor == null) { throw new IllegalArgumentException("Must include a non-null Executor."); } + if (!isImsAvailableOnDevice()) { + throw new ImsException("IMS not available on device.", + ImsException.CODE_ERROR_UNSUPPORTED_OPERATION); + } c.setExecutor(executor); try { getITelephony().registerImsRegistrationCallback(mSubId, c.getBinder()); - } catch (RemoteException e) { - throw e.rethrowAsRuntimeException(); - } catch (IllegalStateException e) { + } catch (RemoteException | IllegalStateException e) { throw new ImsException(e.getMessage(), ImsException.CODE_ERROR_SERVICE_UNAVAILABLE); } } @@ -434,6 +438,10 @@ public class ImsMmTelManager { if (executor == null) { throw new IllegalArgumentException("Must include a non-null Executor."); } + if (!isImsAvailableOnDevice()) { + throw new ImsException("IMS not available on device.", + ImsException.CODE_ERROR_UNSUPPORTED_OPERATION); + } c.setExecutor(executor); try { getITelephony().registerMmTelCapabilityCallback(mSubId, c.getBinder()); @@ -800,6 +808,22 @@ public class ImsMmTelManager { } } + private static boolean isImsAvailableOnDevice() { + IPackageManager pm = IPackageManager.Stub.asInterface(ServiceManager.getService("package")); + if (pm == null) { + // For some reason package manger is not available.. This will fail internally anyways, + // so do not throw error and allow. + return true; + } + try { + return pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS, 0); + } catch (RemoteException e) { + // For some reason package manger is not available.. This will fail internally anyways, + // so do not throw error and allow. + } + return true; + } + private static ITelephony getITelephony() { ITelephony binder = ITelephony.Stub.asInterface( ServiceManager.getService(Context.TELEPHONY_SERVICE)); diff --git a/telephony/java/android/telephony/ims/ImsReasonInfo.java b/telephony/java/android/telephony/ims/ImsReasonInfo.java index d8d2d9e5951a..ace3caf3c0df 100644 --- a/telephony/java/android/telephony/ims/ImsReasonInfo.java +++ b/telephony/java/android/telephony/ims/ImsReasonInfo.java @@ -142,6 +142,11 @@ public final class ImsReasonInfo implements Parcelable { * Call was disconnected because a handover is not feasible due to network conditions. */ public static final int CODE_LOCAL_HO_NOT_FEASIBLE = 149; + /** + * This device does not support IMS. + * @hide + */ + public static final int CODE_LOCAL_IMS_NOT_SUPPORTED_ON_DEVICE = 150; /* * TIMEOUT (IMS -> Telephony) diff --git a/telephony/java/android/telephony/ims/ProvisioningManager.java b/telephony/java/android/telephony/ims/ProvisioningManager.java index d12cda8a30a4..8cdf6a235749 100644 --- a/telephony/java/android/telephony/ims/ProvisioningManager.java +++ b/telephony/java/android/telephony/ims/ProvisioningManager.java @@ -24,6 +24,8 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.WorkerThread; import android.content.Context; +import android.content.pm.IPackageManager; +import android.content.pm.PackageManager; import android.os.Binder; import android.os.RemoteException; import android.os.ServiceManager; @@ -209,12 +211,14 @@ public class ProvisioningManager { @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(@NonNull @CallbackExecutor Executor executor, @NonNull Callback callback) throws ImsException { + if (!isImsAvailableOnDevice()) { + throw new ImsException("IMS not available on device.", + ImsException.CODE_ERROR_UNSUPPORTED_OPERATION); + } callback.setExecutor(executor); try { getITelephony().registerImsProvisioningChangedCallback(mSubId, callback.getBinder()); - } catch (RemoteException e) { - throw e.rethrowAsRuntimeException(); - } catch (IllegalStateException e) { + } catch (RemoteException | IllegalStateException e) { throw new ImsException(e.getMessage(), ImsException.CODE_ERROR_SERVICE_UNAVAILABLE); } } @@ -232,8 +236,7 @@ public class ProvisioningManager { @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterProvisioningChangedCallback(@NonNull Callback callback) { try { - getITelephony().unregisterImsProvisioningChangedCallback(mSubId, - callback.getBinder()); + getITelephony().unregisterImsProvisioningChangedCallback(mSubId, callback.getBinder()); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } @@ -373,6 +376,22 @@ public class ProvisioningManager { } } + private static boolean isImsAvailableOnDevice() { + IPackageManager pm = IPackageManager.Stub.asInterface(ServiceManager.getService("package")); + if (pm == null) { + // For some reason package manger is not available.. This will fail internally anyways, + // so do not throw error and allow. + return true; + } + try { + return pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS, 0); + } catch (RemoteException e) { + // For some reason package manger is not available.. This will fail internally anyways, + // so do not throw error and allow. + } + return true; + } + private static ITelephony getITelephony() { ITelephony binder = ITelephony.Stub.asInterface( ServiceManager.getService(Context.TELEPHONY_SERVICE)); diff --git a/telephony/java/android/telephony/ims/RcsEventQueryParams.java b/telephony/java/android/telephony/ims/RcsEventQueryParams.java index 5f8fa8003751..0024cf7b8662 100644 --- a/telephony/java/android/telephony/ims/RcsEventQueryParams.java +++ b/telephony/java/android/telephony/ims/RcsEventQueryParams.java @@ -292,7 +292,7 @@ public final class RcsEventQueryParams implements Parcelable { mLimit = in.readInt(); } - public static final Creator<RcsEventQueryParams> CREATOR = + public static final @android.annotation.NonNull Creator<RcsEventQueryParams> CREATOR = new Creator<RcsEventQueryParams>() { @Override public RcsEventQueryParams createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java b/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java index bba56d319f25..e30745b7e633 100644 --- a/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java +++ b/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java @@ -53,7 +53,7 @@ public class RcsEventQueryResultDescriptor implements Parcelable { in.readList(mEvents, null); } - public static final Creator<RcsEventQueryResultDescriptor> CREATOR = + public static final @android.annotation.NonNull Creator<RcsEventQueryResultDescriptor> CREATOR = new Creator<RcsEventQueryResultDescriptor>() { @Override public RcsEventQueryResultDescriptor createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java b/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java index 4742ba2730b6..e43552d74bf3 100644 --- a/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java +++ b/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java @@ -325,7 +325,7 @@ public final class RcsFileTransferCreationParams implements Parcelable { mFileTransferStatus = in.readInt(); } - public static final Creator<RcsFileTransferCreationParams> CREATOR = + public static final @android.annotation.NonNull Creator<RcsFileTransferCreationParams> CREATOR = new Creator<RcsFileTransferCreationParams>() { @Override public RcsFileTransferCreationParams createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java index b7fe4b230d31..bcadc80bda54 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java @@ -17,6 +17,7 @@ package android.telephony.ims; import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; +import android.annotation.NonNull; import android.annotation.Nullable; import android.net.Uri; import android.os.Parcel; @@ -42,7 +43,7 @@ public class RcsGroupThreadIconChangedEventDescriptor extends RcsGroupThreadEven new RcsParticipant(mOriginatingParticipantId), mNewIcon); } - public static final Creator<RcsGroupThreadIconChangedEventDescriptor> CREATOR = + public static final @NonNull Creator<RcsGroupThreadIconChangedEventDescriptor> CREATOR = new Creator<RcsGroupThreadIconChangedEventDescriptor>() { @Override public RcsGroupThreadIconChangedEventDescriptor createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java index 4ec641f7a15f..597fa0a3f9f8 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java @@ -17,6 +17,7 @@ package android.telephony.ims; import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; +import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Parcel; @@ -44,7 +45,7 @@ public class RcsGroupThreadNameChangedEventDescriptor extends RcsGroupThreadEven mNewName); } - public static final Creator<RcsGroupThreadNameChangedEventDescriptor> CREATOR = + public static final @NonNull Creator<RcsGroupThreadNameChangedEventDescriptor> CREATOR = new Creator<RcsGroupThreadNameChangedEventDescriptor>() { @Override public RcsGroupThreadNameChangedEventDescriptor createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java index a4218c293bec..abea10a641ac 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java @@ -17,6 +17,7 @@ package android.telephony.ims; import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; +import android.annotation.NonNull; import android.os.Parcel; import com.android.internal.annotations.VisibleForTesting; @@ -43,7 +44,7 @@ public class RcsGroupThreadParticipantJoinedEventDescriptor extends RcsGroupThre new RcsParticipant(mJoinedParticipantId)); } - public static final Creator<RcsGroupThreadParticipantJoinedEventDescriptor> CREATOR = + public static final @NonNull Creator<RcsGroupThreadParticipantJoinedEventDescriptor> CREATOR = new Creator<RcsGroupThreadParticipantJoinedEventDescriptor>() { @Override public RcsGroupThreadParticipantJoinedEventDescriptor createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java index 8e91dda1a60f..f287db19da05 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java @@ -17,6 +17,7 @@ package android.telephony.ims; import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; +import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; @@ -44,6 +45,7 @@ public class RcsGroupThreadParticipantLeftEventDescriptor extends RcsGroupThread new RcsParticipant(mLeavingParticipantId)); } + @NonNull public static final Parcelable.Creator<RcsGroupThreadParticipantLeftEventDescriptor> CREATOR = new Creator<RcsGroupThreadParticipantLeftEventDescriptor>() { @Override diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java index 58dc1bc70424..d95dc4fda3e3 100644 --- a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java +++ b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java @@ -17,6 +17,7 @@ package android.telephony.ims; import android.annotation.CheckResult; +import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; @@ -152,7 +153,7 @@ public final class RcsIncomingMessageCreationParams extends RcsMessageCreationPa return mSenderParticipantId; } - public static final Creator<RcsIncomingMessageCreationParams> CREATOR = + public static final @NonNull Creator<RcsIncomingMessageCreationParams> CREATOR = new Creator<RcsIncomingMessageCreationParams>() { @Override public RcsIncomingMessageCreationParams createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryParams.java b/telephony/java/android/telephony/ims/RcsMessageQueryParams.java index 6491ac9fad5f..9f9eafbd179b 100644 --- a/telephony/java/android/telephony/ims/RcsMessageQueryParams.java +++ b/telephony/java/android/telephony/ims/RcsMessageQueryParams.java @@ -330,7 +330,7 @@ public final class RcsMessageQueryParams implements Parcelable { mThreadId = in.readInt(); } - public static final Creator<RcsMessageQueryParams> CREATOR = + public static final @android.annotation.NonNull Creator<RcsMessageQueryParams> CREATOR = new Creator<RcsMessageQueryParams>() { @Override public RcsMessageQueryParams createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java index e4020c185fa3..5df929baad52 100644 --- a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java @@ -89,7 +89,7 @@ public final class RcsMessageQueryResult implements Parcelable { in.readTypedList(mMessageTypeIdPairs, RcsTypeIdPair.CREATOR); } - public static final Creator<RcsMessageQueryResult> CREATOR = + public static final @android.annotation.NonNull Creator<RcsMessageQueryResult> CREATOR = new Creator<RcsMessageQueryResult>() { @Override public RcsMessageQueryResult createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsMessageSnippet.java b/telephony/java/android/telephony/ims/RcsMessageSnippet.java index 9064251f5021..810316040470 100644 --- a/telephony/java/android/telephony/ims/RcsMessageSnippet.java +++ b/telephony/java/android/telephony/ims/RcsMessageSnippet.java @@ -71,7 +71,7 @@ public final class RcsMessageSnippet implements Parcelable { mTimestamp = in.readLong(); } - public static final Creator<RcsMessageSnippet> CREATOR = + public static final @android.annotation.NonNull Creator<RcsMessageSnippet> CREATOR = new Creator<RcsMessageSnippet>() { @Override public RcsMessageSnippet createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java b/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java index 81e3244d57e8..c001ffb354b0 100644 --- a/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java +++ b/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java @@ -16,6 +16,7 @@ package android.telephony.ims; +import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; @@ -64,7 +65,7 @@ public final class RcsOutgoingMessageCreationParams extends RcsMessageCreationPa super(in); } - public static final Creator<RcsOutgoingMessageCreationParams> CREATOR = + public static final @NonNull Creator<RcsOutgoingMessageCreationParams> CREATOR = new Creator<RcsOutgoingMessageCreationParams>() { @Override public RcsOutgoingMessageCreationParams createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java index a32e5522c851..b29896c12ab8 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java +++ b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java @@ -17,6 +17,7 @@ package android.telephony.ims; import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; +import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Parcel; @@ -45,7 +46,7 @@ public class RcsParticipantAliasChangedEventDescriptor extends RcsEventDescripto mTimestamp, new RcsParticipant(mParticipantId), mNewAlias); } - public static final Creator<RcsParticipantAliasChangedEventDescriptor> CREATOR = + public static final @NonNull Creator<RcsParticipantAliasChangedEventDescriptor> CREATOR = new Creator<RcsParticipantAliasChangedEventDescriptor>() { @Override public RcsParticipantAliasChangedEventDescriptor createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java b/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java index ada9b8ae9d1a..21107a2f54e5 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java +++ b/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java @@ -279,7 +279,7 @@ public final class RcsParticipantQueryParams implements Parcelable { mThreadId = in.readInt(); } - public static final Creator<RcsParticipantQueryParams> CREATOR = + public static final @android.annotation.NonNull Creator<RcsParticipantQueryParams> CREATOR = new Creator<RcsParticipantQueryParams>() { @Override public RcsParticipantQueryParams createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java index 92e2fa78526a..3e5c231eec30 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java @@ -80,7 +80,7 @@ public final class RcsParticipantQueryResult implements Parcelable { RcsQueryContinuationToken.class.getClassLoader()); } - public static final Creator<RcsParticipantQueryResult> CREATOR = + public static final @android.annotation.NonNull Creator<RcsParticipantQueryResult> CREATOR = new Creator<RcsParticipantQueryResult>() { @Override public RcsParticipantQueryResult createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java index 970c11078772..982263ac5c97 100644 --- a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java +++ b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java @@ -129,7 +129,7 @@ public final class RcsQueryContinuationToken implements Parcelable { mOffset = in.readInt(); } - public static final Creator<RcsQueryContinuationToken> CREATOR = + public static final @android.annotation.NonNull Creator<RcsQueryContinuationToken> CREATOR = new Creator<RcsQueryContinuationToken>() { @Override public RcsQueryContinuationToken createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryParams.java b/telephony/java/android/telephony/ims/RcsThreadQueryParams.java index 81eee4081ace..da7cdb016034 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryParams.java +++ b/telephony/java/android/telephony/ims/RcsThreadQueryParams.java @@ -276,7 +276,7 @@ public final class RcsThreadQueryParams implements Parcelable { mIsAscending = in.readByte() == 1; } - public static final Creator<RcsThreadQueryParams> CREATOR = + public static final @android.annotation.NonNull Creator<RcsThreadQueryParams> CREATOR = new Creator<RcsThreadQueryParams>() { @Override public RcsThreadQueryParams createFromParcel(Parcel in) { diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java index 9f2fba5caab4..c2c2d3a8758e 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java @@ -91,7 +91,7 @@ public final class RcsThreadQueryResult implements Parcelable { in.readList(mRcsThreadIds, Integer.class.getClassLoader()); } - public static final Creator<RcsThreadQueryResult> CREATOR = + public static final @android.annotation.NonNull Creator<RcsThreadQueryResult> CREATOR = new Creator<RcsThreadQueryResult>() { @Override public RcsThreadQueryResult createFromParcel(Parcel in) { diff --git a/telephony/java/com/android/internal/telephony/IOns.aidl b/telephony/java/com/android/internal/telephony/IOns.aidl index 4672e2d44301..a74498f680db 100755 --- a/telephony/java/com/android/internal/telephony/IOns.aidl +++ b/telephony/java/com/android/internal/telephony/IOns.aidl @@ -19,6 +19,8 @@ package com.android.internal.telephony; import android.telephony.AvailableNetworkInfo; import com.android.internal.telephony.IUpdateAvailableNetworksCallback; +import com.android.internal.telephony.ISetOpportunisticDataCallback; + interface IOns { /** @@ -63,11 +65,13 @@ interface IOns { * @param subId which opportunistic subscription * {@link SubscriptionManager#getOpportunisticSubscriptions} is preferred for cellular data. * Pass {@link SubscriptionManager#DEFAULT_SUBSCRIPTION_ID} to unset the preference + * @param needValidation whether validation is needed before switch happens. + * @param callback callback upon request completion. * @param callingPackage caller's package name - * @return true if request is accepted, else false. * */ - boolean setPreferredDataSubscriptionId(int subId, String callingPackage); + void setPreferredDataSubscriptionId(int subId, boolean needValidation, + ISetOpportunisticDataCallback callbackStub, String callingPackage); /** * Get preferred opportunistic data subscription Id diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 9e1332a6dc41..02a5bc8937ee 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -553,6 +553,20 @@ interface ITelephony { void setCellInfoListRate(int rateInMillis); /** + * Opens a logical channel to the ICC card using the physical slot index. + * + * Input parameters equivalent to TS 27.007 AT+CCHO command. + * + * @param slotIndex The physical slot index of the target ICC card + * @param callingPackage the name of the package making the call. + * @param AID Application id. See ETSI 102.221 and 101.220. + * @param p2 P2 parameter (described in ISO 7816-4). + * @return an IccOpenLogicalChannelResponse object. + */ + IccOpenLogicalChannelResponse iccOpenLogicalChannelBySlot( + int slotIndex, String callingPackage, String AID, int p2); + + /** * Opens a logical channel to the ICC card. * * Input parameters equivalent to TS 27.007 AT+CCHO command. @@ -567,12 +581,24 @@ interface ITelephony { int subId, String callingPackage, String AID, int p2); /** + * Closes a previously opened logical channel to the ICC card using the physical slot index. + * + * Input parameters equivalent to TS 27.007 AT+CCHC command. + * + * @param slotIndex The physical slot index of the target ICC card + * @param channel is the channel id to be closed as returned by a + * successful iccOpenLogicalChannel. + * @return true if the channel was closed successfully. + */ + boolean iccCloseLogicalChannelBySlot(int slotIndex, int channel); + + /** * Closes a previously opened logical channel to the ICC card. * * Input parameters equivalent to TS 27.007 AT+CCHC command. * * @param subId The subscription to use. - * @param channel is the channel id to be closed as retruned by a + * @param channel is the channel id to be closed as returned by a * successful iccOpenLogicalChannel. * @return true if the channel was closed successfully. */ @@ -580,12 +606,33 @@ interface ITelephony { boolean iccCloseLogicalChannel(int subId, int channel); /** + * Transmit an APDU to the ICC card over a logical channel using the physical slot index. + * + * Input parameters equivalent to TS 27.007 AT+CGLA command. + * + * @param slotIndex The physical slot index of the target ICC card + * @param channel is the channel id to be closed as returned by a + * successful iccOpenLogicalChannel. + * @param cla Class of the APDU command. + * @param instruction Instruction of the APDU command. + * @param p1 P1 value of the APDU command. + * @param p2 P2 value of the APDU command. + * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU + * is sent to the SIM. + * @param data Data to be sent with the APDU. + * @return The APDU response from the ICC card with the status appended at + * the end. + */ + String iccTransmitApduLogicalChannelBySlot(int slotIndex, int channel, int cla, int instruction, + int p1, int p2, int p3, String data); + + /** * Transmit an APDU to the ICC card over a logical channel. * * Input parameters equivalent to TS 27.007 AT+CGLA command. * * @param subId The subscription to use. - * @param channel is the channel id to be closed as retruned by a + * @param channel is the channel id to be closed as returned by a * successful iccOpenLogicalChannel. * @param cla Class of the APDU command. * @param instruction Instruction of the APDU command. @@ -602,6 +649,26 @@ interface ITelephony { int p1, int p2, int p3, String data); /** + * Transmit an APDU to the ICC card over the basic channel using the physical slot index. + * + * Input parameters equivalent to TS 27.007 AT+CSIM command. + * + * @param slotIndex The physical slot index of the target ICC card + * @param callingPackage the name of the package making the call. + * @param cla Class of the APDU command. + * @param instruction Instruction of the APDU command. + * @param p1 P1 value of the APDU command. + * @param p2 P2 value of the APDU command. + * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU + * is sent to the SIM. + * @param data Data to be sent with the APDU. + * @return The APDU response from the ICC card with the status appended at + * the end. + */ + String iccTransmitApduBasicChannelBySlot(int slotIndex, String callingPackage, int cla, + int instruction, int p1, int p2, int p3, String data); + + /** * Transmit an APDU to the ICC card over the basic channel. * * Input parameters equivalent to TS 27.007 AT+CSIM command. @@ -1765,12 +1832,12 @@ interface ITelephony { /** * Return the emergency number list from all the active subscriptions. */ - Map getCurrentEmergencyNumberList(String callingPackage); + Map getEmergencyNumberList(String callingPackage); /** * Identify if the number is emergency number, based on all the active subscriptions. */ - boolean isCurrentEmergencyNumber(String number, boolean exactMatch); + boolean isEmergencyNumber(String number, boolean exactMatch); /** * Return a list of certs in hex string from loaded carrier privileges access rules. diff --git a/tests/ActivityManagerPerfTests/test-app/Android.bp b/tests/ActivityManagerPerfTests/test-app/Android.bp new file mode 100644 index 000000000000..ef9d587581c4 --- /dev/null +++ b/tests/ActivityManagerPerfTests/test-app/Android.bp @@ -0,0 +1,21 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test { + name: "ActivityManagerPerfTestsTestApp", + srcs: ["src/**/*.java"], + static_libs: ["ActivityManagerPerfTestsUtils"], + min_sdk_version: "25", + sdk_version: "current", +} diff --git a/tests/ActivityManagerPerfTests/test-app/Android.mk b/tests/ActivityManagerPerfTests/test-app/Android.mk deleted file mode 100644 index 33d15d2a3387..000000000000 --- a/tests/ActivityManagerPerfTests/test-app/Android.mk +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2018 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := \ - $(call all-java-files-under, src) - -LOCAL_STATIC_JAVA_LIBRARIES := \ - ActivityManagerPerfTestsUtils - -LOCAL_MIN_SDK_VERSION := 25 - -LOCAL_PACKAGE_NAME := ActivityManagerPerfTestsTestApp -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) diff --git a/tests/ActivityManagerPerfTests/tests/Android.bp b/tests/ActivityManagerPerfTests/tests/Android.bp new file mode 100644 index 000000000000..268715c6d1a6 --- /dev/null +++ b/tests/ActivityManagerPerfTests/tests/Android.bp @@ -0,0 +1,27 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test { + name: "ActivityManagerPerfTests", + srcs: ["src/**/*.java"], + static_libs: [ + "android-support-test", + "apct-perftests-utils", + "ActivityManagerPerfTestsUtils", + ], + platform_apis: true, + min_sdk_version: "25", + // For android.permission.FORCE_STOP_PACKAGES permission + certificate: "platform", +} diff --git a/tests/ActivityManagerPerfTests/tests/Android.mk b/tests/ActivityManagerPerfTests/tests/Android.mk deleted file mode 100644 index f23a665dc5b2..000000000000 --- a/tests/ActivityManagerPerfTests/tests/Android.mk +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (C) 2018 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := \ - $(call all-java-files-under, src) - -LOCAL_STATIC_JAVA_LIBRARIES := \ - android-support-test \ - apct-perftests-utils \ - ActivityManagerPerfTestsUtils - -LOCAL_PACKAGE_NAME := ActivityManagerPerfTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MIN_SDK_VERSION := 25 - -# For android.permission.FORCE_STOP_PACKAGES permission -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/ActivityManagerPerfTests/utils/Android.bp b/tests/ActivityManagerPerfTests/utils/Android.bp new file mode 100644 index 000000000000..c052656346cc --- /dev/null +++ b/tests/ActivityManagerPerfTests/utils/Android.bp @@ -0,0 +1,27 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +java_test { + name: "ActivityManagerPerfTestsUtils", + sdk_version: "current", + srcs: [ + "src/**/*.java", + "src/com/android/frameworks/perftests/am/util/ITimeReceiverCallback.aidl", + ], + static_libs: [ + "android-support-test", + "junit", + "ub-uiautomator", + ], +} diff --git a/tests/ActivityManagerPerfTests/utils/Android.mk b/tests/ActivityManagerPerfTests/utils/Android.mk deleted file mode 100644 index 60c94239d85f..000000000000 --- a/tests/ActivityManagerPerfTests/utils/Android.mk +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (C) 2018 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests -LOCAL_SDK_VERSION := current - -LOCAL_SRC_FILES := \ - $(call all-java-files-under, src) \ - src/com/android/frameworks/perftests/am/util/ITimeReceiverCallback.aidl - -LOCAL_STATIC_JAVA_LIBRARIES := \ - android-support-test \ - junit \ - ub-uiautomator - -LOCAL_MODULE := ActivityManagerPerfTestsUtils - -include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/tests/AppLaunch/Android.bp b/tests/AppLaunch/Android.bp new file mode 100644 index 000000000000..0f07da61bc91 --- /dev/null +++ b/tests/AppLaunch/Android.bp @@ -0,0 +1,13 @@ +android_test { + name: "AppLaunch", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + libs: [ + "android.test.base", + "android.test.runner", + ], + static_libs: ["android-support-test"], + test_suites: ["device-tests"], +} diff --git a/tests/AppLaunch/Android.mk b/tests/AppLaunch/Android.mk deleted file mode 100644 index 1fb548b0edde..000000000000 --- a/tests/AppLaunch/Android.mk +++ /dev/null @@ -1,22 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := AppLaunch -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_CERTIFICATE := platform -LOCAL_JAVA_LIBRARIES := android.test.base android.test.runner - -LOCAL_STATIC_JAVA_LIBRARIES := android-support-test - -LOCAL_COMPATIBILITY_SUITE := device-tests - -include $(BUILD_PACKAGE) - -# Use the following include to make our test apk. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/AppLaunchWear/Android.bp b/tests/AppLaunchWear/Android.bp new file mode 100644 index 000000000000..6a8b38200700 --- /dev/null +++ b/tests/AppLaunchWear/Android.bp @@ -0,0 +1,13 @@ +android_test { + name: "AppLaunchWear", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + libs: [ + "android.test.base", + "android.test.runner", + ], + static_libs: ["android-support-test"], + test_suites: ["device-tests"], +} diff --git a/tests/AppLaunchWear/Android.mk b/tests/AppLaunchWear/Android.mk deleted file mode 100644 index 6d083661324d..000000000000 --- a/tests/AppLaunchWear/Android.mk +++ /dev/null @@ -1,22 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := AppLaunchWear -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_CERTIFICATE := platform -LOCAL_JAVA_LIBRARIES := android.test.base android.test.runner - -LOCAL_STATIC_JAVA_LIBRARIES := android-support-test - -LOCAL_COMPATIBILITY_SUITE := device-tests - -include $(BUILD_PACKAGE) - -# Use the following include to make our test apk. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/BackgroundDexOptServiceIntegrationTests/Android.bp b/tests/BackgroundDexOptServiceIntegrationTests/Android.bp new file mode 100644 index 000000000000..036f84526889 --- /dev/null +++ b/tests/BackgroundDexOptServiceIntegrationTests/Android.bp @@ -0,0 +1,24 @@ +// +// Copyright (C) 2017 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. +// + +android_test { + name: "BackgroundDexOptServiceIntegrationTests", + srcs: ["src/**/*.java"], + static_libs: ["android-support-test"], + platform_apis: true, + test_suites: ["device-tests"], + certificate: "platform", +} diff --git a/tests/BackgroundDexOptServiceIntegrationTests/Android.mk b/tests/BackgroundDexOptServiceIntegrationTests/Android.mk deleted file mode 100644 index b10305d96fce..000000000000 --- a/tests/BackgroundDexOptServiceIntegrationTests/Android.mk +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright (C) 2017 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. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_STATIC_JAVA_LIBRARIES := \ - android-support-test \ - -LOCAL_PACKAGE_NAME := BackgroundDexOptServiceIntegrationTests -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_COMPATIBILITY_SUITE := device-tests - -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/Compatibility/Android.bp b/tests/Compatibility/Android.bp new file mode 100644 index 000000000000..a0c37619841f --- /dev/null +++ b/tests/Compatibility/Android.bp @@ -0,0 +1,22 @@ +// Copyright (C) 2012 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. + +android_test { + name: "AppCompatibilityTest", + static_libs: ["android-support-test"], + // Include all test java files. + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", +} diff --git a/tests/Compatibility/Android.mk b/tests/Compatibility/Android.mk deleted file mode 100644 index 9c47a2610223..000000000000 --- a/tests/Compatibility/Android.mk +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2012 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. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests -LOCAL_STATIC_JAVA_LIBRARIES := android-support-test -# Include all test java files. -LOCAL_SRC_FILES := \ - $(call all-java-files-under, src) - - -LOCAL_PACKAGE_NAME := AppCompatibilityTest -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/Internal/Android.bp b/tests/Internal/Android.bp new file mode 100644 index 000000000000..db3e03bf20ed --- /dev/null +++ b/tests/Internal/Android.bp @@ -0,0 +1,18 @@ +android_test { + name: "InternalTests", + proto: { + type: "nano", + }, + // Include some source files directly to be able to access package members + srcs: ["src/**/*.java"], + libs: ["android.test.runner"], + static_libs: [ + "junit", + "android-support-test", + "mockito-target-minus-junit4", + ], + java_resource_dirs: ["res"], + certificate: "platform", + platform_apis: true, + test_suites: ["device-tests"], +} diff --git a/tests/Internal/Android.mk b/tests/Internal/Android.mk deleted file mode 100644 index da566967fbeb..000000000000 --- a/tests/Internal/Android.mk +++ /dev/null @@ -1,24 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_USE_AAPT2 := true -LOCAL_MODULE_TAGS := tests - -LOCAL_PROTOC_OPTIMIZE_TYPE := nano - -# Include some source files directly to be able to access package members -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_JAVA_LIBRARIES := android.test.runner -LOCAL_STATIC_JAVA_LIBRARIES := junit \ - android-support-test \ - mockito-target-minus-junit4 - -LOCAL_JAVA_RESOURCE_DIRS := res -LOCAL_CERTIFICATE := platform - -LOCAL_PACKAGE_NAME := InternalTests -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_COMPATIBILITY_SUITE := device-tests - -include $(BUILD_PACKAGE) diff --git a/tests/JankBench/app/src/main/jni/Android.bp.converted b/tests/JankBench/app/src/main/jni/Android.bp.converted index 9fecf1599fd9..b53c79ad8b7c 100644 --- a/tests/JankBench/app/src/main/jni/Android.bp.converted +++ b/tests/JankBench/app/src/main/jni/Android.bp.converted @@ -12,12 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. +<<<<<<< HEAD cc_library_shared { name: "libnativebench", cflags: [ "-Wno-unused-parameter", "-Wno-unused-variable", ], +======= +// ANDROIDMK TRANSLATION WARNING: No 'include $(CLEAR_VARS)' detected before first assignment; clearing vars now + +cc_library_shared { + name: "libnativebench", + cflags: ["-Wno-unused-parameter"], +>>>>>>> Convert Android.mk file to Android.bp srcs: [ "Bench.cpp", "WorkerPool.cpp", diff --git a/tests/RcsTests/Android.bp b/tests/RcsTests/Android.bp new file mode 100644 index 000000000000..81c6df070881 --- /dev/null +++ b/tests/RcsTests/Android.bp @@ -0,0 +1,17 @@ +android_test { + name: "RcsTests", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + libs: [ + "android.test.runner", + "android.test.base", + ], + static_libs: [ + "junit", + "android-support-test", + "mockito-target-minus-junit4", + "truth-prebuilt", + ], +} diff --git a/tests/RcsTests/Android.mk b/tests/RcsTests/Android.mk deleted file mode 100644 index 7b348d73747a..000000000000 --- a/tests/RcsTests/Android.mk +++ /dev/null @@ -1,19 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := RcsTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_CERTIFICATE := platform -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base -LOCAL_STATIC_JAVA_LIBRARIES := junit android-support-test mockito-target-minus-junit4 truth-prebuilt - -include $(BUILD_PACKAGE) - -# Use the following include to make our test apk. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/ServiceCrashTest/Android.bp b/tests/ServiceCrashTest/Android.bp new file mode 100644 index 000000000000..b646ae7d33d3 --- /dev/null +++ b/tests/ServiceCrashTest/Android.bp @@ -0,0 +1,12 @@ +android_test { + name: "ServiceCrashTest", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + libs: ["android.test.base"], + static_libs: [ + "compatibility-device-util", + "android-support-test", + ], +} diff --git a/tests/ServiceCrashTest/Android.mk b/tests/ServiceCrashTest/Android.mk deleted file mode 100644 index d1f6450e84a6..000000000000 --- a/tests/ServiceCrashTest/Android.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := ServiceCrashTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_CERTIFICATE := platform -LOCAL_JAVA_LIBRARIES := android.test.base - -LOCAL_STATIC_JAVA_LIBRARIES := compatibility-device-util android-support-test - -include $(BUILD_PACKAGE) - -# Use the following include to make our test apk. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/SurfaceComposition/Android.bp b/tests/SurfaceComposition/Android.bp new file mode 100644 index 000000000000..53e4d52b2efd --- /dev/null +++ b/tests/SurfaceComposition/Android.bp @@ -0,0 +1,32 @@ +// Copyright (C) 2015 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. + +android_test { + name: "SurfaceComposition", + // Don't include this package in any target + // When built, explicitly put it in the data partition. + dex_preopt: { + enabled: false, + }, + optimize: { + enabled: false, + }, + srcs: ["src/**/*.java"], + static_libs: ["junit"], + libs: [ + "android.test.runner.stubs", + "android.test.base.stubs", + ], + sdk_version: "current", +} diff --git a/tests/SurfaceComposition/Android.mk b/tests/SurfaceComposition/Android.mk deleted file mode 100644 index f59458d48c68..000000000000 --- a/tests/SurfaceComposition/Android.mk +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2015 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. - -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) - -# Don't include this package in any target -LOCAL_MODULE_TAGS := tests -# When built, explicitly put it in the data partition. -LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) - -LOCAL_DEX_PREOPT := false - -LOCAL_PROGUARD_ENABLED := disabled - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_STATIC_JAVA_LIBRARIES := junit - -LOCAL_JAVA_LIBRARIES := android.test.runner.stubs android.test.base.stubs - -LOCAL_PACKAGE_NAME := SurfaceComposition - -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) diff --git a/tests/UsbHostExternalManagmentTest/AoapTestDevice/Android.bp b/tests/UsbHostExternalManagmentTest/AoapTestDevice/Android.bp new file mode 100644 index 000000000000..c7e9df0fe9cf --- /dev/null +++ b/tests/UsbHostExternalManagmentTest/AoapTestDevice/Android.bp @@ -0,0 +1,27 @@ +// Copyright (C) 2016 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. +// +// + +//################################################# + +android_test { + name: "AoapTestDeviceApp", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + platform_apis: true, + optimize: { + enabled: false, + }, +} diff --git a/tests/UsbHostExternalManagmentTest/AoapTestDevice/Android.mk b/tests/UsbHostExternalManagmentTest/AoapTestDevice/Android.mk deleted file mode 100644 index cd7aaedf2bb1..000000000000 --- a/tests/UsbHostExternalManagmentTest/AoapTestDevice/Android.mk +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (C) 2016 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. -# -# - -LOCAL_PATH:= $(call my-dir) - -################################################## - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := AoapTestDeviceApp -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := tests -LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - diff --git a/tests/UsbHostExternalManagmentTest/AoapTestHost/Android.bp b/tests/UsbHostExternalManagmentTest/AoapTestHost/Android.bp new file mode 100644 index 000000000000..6fa58cb5c682 --- /dev/null +++ b/tests/UsbHostExternalManagmentTest/AoapTestHost/Android.bp @@ -0,0 +1,27 @@ +// Copyright (C) 2016 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. +// +// + +//################################################# + +android_test { + name: "AoapTestHostApp", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + platform_apis: true, + optimize: { + enabled: false, + }, +} diff --git a/tests/UsbHostExternalManagmentTest/AoapTestHost/Android.mk b/tests/UsbHostExternalManagmentTest/AoapTestHost/Android.mk deleted file mode 100644 index bd8a51b69bff..000000000000 --- a/tests/UsbHostExternalManagmentTest/AoapTestHost/Android.mk +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (C) 2016 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. -# -# - -LOCAL_PATH:= $(call my-dir) - -################################################## - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := AoapTestHostApp -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := tests -LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - diff --git a/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/Android.bp b/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/Android.bp new file mode 100644 index 000000000000..edd4205968b3 --- /dev/null +++ b/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/Android.bp @@ -0,0 +1,32 @@ +// Copyright (C) 2016 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. +// +// + +//################################################# + +// TODO: should this be android_helper_test_app? +android_app { + name: "UsbHostExternalManagementTestApp", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + platform_apis: true, + privileged: true, + // TODO remove tests tag + //LOCAL_MODULE_TAGS := tests + //LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) + optimize: { + enabled: false, + }, +} diff --git a/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/Android.mk b/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/Android.mk deleted file mode 100644 index fed454eb9d01..000000000000 --- a/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/Android.mk +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2016 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. -# -# - -LOCAL_PATH:= $(call my-dir) - -################################################## - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := UsbHostExternalManagementTestApp -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_PRIVILEGED_MODULE := true -# TODO remove tests tag -#LOCAL_MODULE_TAGS := tests -#LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - diff --git a/tests/UsbTests/Android.bp b/tests/UsbTests/Android.bp new file mode 100644 index 000000000000..7dc7c85b25de --- /dev/null +++ b/tests/UsbTests/Android.bp @@ -0,0 +1,34 @@ +// +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { + name: "UsbTests", + srcs: ["**/*.java"], + static_libs: [ + "frameworks-base-testutils", + "android-support-test", + "mockito-target-inline-minus-junit4", + "platform-test-annotations", + "services.core", + "services.net", + "services.usb", + "truth-prebuilt", + ], + jni_libs: ["libdexmakerjvmtiagent"], + certificate: "platform", + platform_apis: true, + test_suites: ["device-tests"], +} diff --git a/tests/UsbTests/Android.mk b/tests/UsbTests/Android.mk deleted file mode 100644 index 4e215cc5996f..000000000000 --- a/tests/UsbTests/Android.mk +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (C) 2018 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_STATIC_JAVA_LIBRARIES := \ - frameworks-base-testutils \ - android-support-test \ - mockito-target-inline-minus-junit4 \ - platform-test-annotations \ - services.core \ - services.net \ - services.usb \ - truth-prebuilt \ - -LOCAL_JNI_SHARED_LIBRARIES := \ - libdexmakerjvmtiagent \ - -LOCAL_CERTIFICATE := platform - -LOCAL_PACKAGE_NAME := UsbTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_COMPATIBILITY_SUITE := device-tests - -include $(BUILD_PACKAGE) diff --git a/tests/WindowAnimationJank/Android.bp b/tests/WindowAnimationJank/Android.bp new file mode 100644 index 000000000000..60e8f7417194 --- /dev/null +++ b/tests/WindowAnimationJank/Android.bp @@ -0,0 +1,25 @@ +// Copyright (C) 2015 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. + +android_test { + name: "WindowAnimationJank", + srcs: ["src/**/*.java"], + static_libs: [ + "ub-uiautomator", + "ub-janktesthelper", + "junit", + ], + libs: ["android.test.base.stubs"], + sdk_version: "current", +} diff --git a/tests/WindowAnimationJank/Android.mk b/tests/WindowAnimationJank/Android.mk deleted file mode 100644 index 7800a8078d2a..000000000000 --- a/tests/WindowAnimationJank/Android.mk +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (C) 2015 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. - -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := WindowAnimationJank - -LOCAL_STATIC_JAVA_LIBRARIES := \ - ub-uiautomator \ - ub-janktesthelper \ - junit - -LOCAL_JAVA_LIBRARIES := android.test.base.stubs - -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) diff --git a/tests/net/Android.bp b/tests/net/Android.bp index 2539c0f66ce1..c62d85e4187e 100644 --- a/tests/net/Android.bp +++ b/tests/net/Android.bp @@ -13,7 +13,6 @@ android_test { "mockito-target-minus-junit4", "platform-test-annotations", "services.core", - "services.ipmemorystore", "services.net", ], libs: [ diff --git a/tests/net/java/android/net/DnsPacketTest.java b/tests/net/java/android/net/DnsPacketTest.java index 9ede2b85af00..975abf416944 100644 --- a/tests/net/java/android/net/DnsPacketTest.java +++ b/tests/net/java/android/net/DnsPacketTest.java @@ -69,7 +69,7 @@ public class DnsPacketTest { try { new TestDnsPacket(null); fail("Exception not thrown for null byte array"); - } catch (DnsPacket.ParseException e) { + } catch (ParseException e) { } } diff --git a/tests/net/java/android/net/IpMemoryStoreTest.java b/tests/net/java/android/net/IpMemoryStoreTest.java index 57ecc8f38c69..18c67688940a 100644 --- a/tests/net/java/android/net/IpMemoryStoreTest.java +++ b/tests/net/java/android/net/IpMemoryStoreTest.java @@ -16,6 +16,9 @@ package android.net; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doAnswer; + import android.content.Context; import androidx.test.filters.SmallTest; @@ -33,13 +36,25 @@ public class IpMemoryStoreTest { @Mock Context mMockContext; @Mock + NetworkStackClient mNetworkStackClient; + @Mock IIpMemoryStore mMockService; IpMemoryStore mStore; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mStore = new IpMemoryStore(mMockContext, mMockService); + doAnswer(invocation -> { + ((IIpMemoryStoreCallbacks) invocation.getArgument(0)) + .onIpMemoryStoreFetched(mMockService); + return null; + }).when(mNetworkStackClient).fetchIpMemoryStore(any()); + mStore = new IpMemoryStore(mMockContext) { + @Override + protected NetworkStackClient getNetworkStackClient() { + return mNetworkStackClient; + } + }; } @Test diff --git a/tests/net/java/android/net/apf/ApfCapabilitiesTest.java b/tests/net/java/android/net/apf/ApfCapabilitiesTest.java new file mode 100644 index 000000000000..75752c33da5c --- /dev/null +++ b/tests/net/java/android/net/apf/ApfCapabilitiesTest.java @@ -0,0 +1,50 @@ +/* + * 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; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +import android.net.shared.ParcelableTestUtil; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.internal.util.TestUtils; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +@SmallTest +public class ApfCapabilitiesTest { + @Test + public void testParcelUnparcel() { + final ApfCapabilities caps = new ApfCapabilities(123, 456, 789); + ParcelableTestUtil.assertFieldCountEquals(3, ApfCapabilities.class); + + TestUtils.assertParcelingIsLossless(caps, ApfCapabilities.CREATOR); + } + + @Test + public void testEquals() { + assertEquals(new ApfCapabilities(1, 2, 3), new ApfCapabilities(1, 2, 3)); + assertNotEquals(new ApfCapabilities(2, 2, 3), new ApfCapabilities(1, 2, 3)); + assertNotEquals(new ApfCapabilities(1, 3, 3), new ApfCapabilities(1, 2, 3)); + assertNotEquals(new ApfCapabilities(1, 2, 4), new ApfCapabilities(1, 2, 3)); + } +} diff --git a/tests/net/java/android/net/shared/LinkPropertiesParcelableUtilTest.java b/tests/net/java/android/net/shared/LinkPropertiesParcelableUtilTest.java deleted file mode 100644 index 2d0e03d3187a..000000000000 --- a/tests/net/java/android/net/shared/LinkPropertiesParcelableUtilTest.java +++ /dev/null @@ -1,184 +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.shared; - -import static android.net.shared.LinkPropertiesParcelableUtil.fromStableParcelable; -import static android.net.shared.LinkPropertiesParcelableUtil.toStableParcelable; -import static android.net.shared.ParcelableTestUtil.assertFieldCountEquals; - -import static org.junit.Assert.assertEquals; - -import android.net.InetAddresses; -import android.net.IpPrefix; -import android.net.LinkAddress; -import android.net.LinkProperties; -import android.net.ProxyInfo; -import android.net.RouteInfo; -import android.net.Uri; - -import androidx.test.filters.SmallTest; -import androidx.test.runner.AndroidJUnit4; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.util.Arrays; -import java.util.Collections; - -/** - * Tests for {@link LinkPropertiesParcelableUtil} - */ -@RunWith(AndroidJUnit4.class) -@SmallTest -public class LinkPropertiesParcelableUtilTest { - private LinkProperties mLinkProperties; - - private static final String TEST_LINKPROPS_IFACE = "TEST_IFACE"; - - @Before - public void setUp() { - mLinkProperties = new LinkProperties(); - mLinkProperties.setInterfaceName(TEST_LINKPROPS_IFACE); - mLinkProperties.setLinkAddresses(Arrays.asList( - new LinkAddress(InetAddresses.parseNumericAddress("192.168.0.42"), 16), - new LinkAddress(InetAddresses.parseNumericAddress("2001:db8::7"), 42))); - mLinkProperties.setDnsServers(Arrays.asList( - InetAddresses.parseNumericAddress("2001:db8::42"), - InetAddresses.parseNumericAddress("192.168.1.1") - )); - mLinkProperties.setValidatedPrivateDnsServers(Arrays.asList( - InetAddresses.parseNumericAddress("2001:db8::43"), - InetAddresses.parseNumericAddress("192.168.42.43") - )); - mLinkProperties.setPcscfServers(Arrays.asList( - InetAddresses.parseNumericAddress("2001:db8::47"), - InetAddresses.parseNumericAddress("192.168.42.47") - )); - mLinkProperties.setUsePrivateDns(true); - mLinkProperties.setPrivateDnsServerName("test.example.com"); - mLinkProperties.setDomains("test1.example.com,test2.example.com"); - mLinkProperties.addRoute(new RouteInfo( - new IpPrefix(InetAddresses.parseNumericAddress("2001:db8::44"), 45), - InetAddresses.parseNumericAddress("2001:db8::45"), - TEST_LINKPROPS_IFACE, - RouteInfo.RTN_UNICAST - )); - mLinkProperties.addRoute(new RouteInfo( - new IpPrefix(InetAddresses.parseNumericAddress("192.168.44.45"), 16), - InetAddresses.parseNumericAddress("192.168.45.1"), - TEST_LINKPROPS_IFACE, - RouteInfo.RTN_THROW - )); - mLinkProperties.setHttpProxy(new ProxyInfo("test3.example.com", 8000, - "excl1.example.com,excl2.example.com")); - mLinkProperties.setMtu(5000); - mLinkProperties.setTcpBufferSizes("1,2,3,4,5,6"); - mLinkProperties.setNat64Prefix( - new IpPrefix(InetAddresses.parseNumericAddress("2001:db8::48"), 96)); - - // Verify that this test does not miss any new field added later. - // If any added field is not included in LinkProperties#equals, assertLinkPropertiesEquals - // must also be updated. - assertFieldCountEquals(14, LinkProperties.class); - } - - @Test - public void testParcelUnparcel() { - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_NullInterface() { - mLinkProperties.setInterfaceName(null); - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_NullPrivateDnsServer() { - mLinkProperties.setPrivateDnsServerName(null); - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_NullDomains() { - mLinkProperties.setDomains(null); - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_NullProxy() { - mLinkProperties.setHttpProxy(null); - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_NullTcpBufferSizes() { - mLinkProperties.setTcpBufferSizes(null); - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_EmptyLinkAddresses() { - mLinkProperties.setLinkAddresses(Collections.emptyList()); - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_EmptyDnses() { - mLinkProperties.setDnsServers(Collections.emptyList()); - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_EmptyValidatedPrivateDnses() { - mLinkProperties.setValidatedPrivateDnsServers(Collections.emptyList()); - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_EmptyRoutes() { - for (RouteInfo r : mLinkProperties.getAllRoutes()) { - mLinkProperties.removeRoute(r); - } - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_PacFileProxyInfo() { - mLinkProperties.setHttpProxy(new ProxyInfo(Uri.parse("http://pacfile.example.com"))); - doParcelUnparcelTest(); - } - - @Test - public void testParcelUnparcel_NullNat64Prefix() { - mLinkProperties.setNat64Prefix(null); - doParcelUnparcelTest(); - } - - private void doParcelUnparcelTest() { - final LinkProperties unparceled = fromStableParcelable(toStableParcelable(mLinkProperties)); - assertLinkPropertiesEquals(mLinkProperties, unparceled); - } - - private static void assertLinkPropertiesEquals(LinkProperties expected, LinkProperties actual) { - assertEquals(expected, actual); - - // Equality on stacked links is not tested as they should not be passed to processes using - // LinkPropertiesParcelable. - } -} diff --git a/tests/net/java/com/android/internal/util/TestUtils.java b/tests/net/java/com/android/internal/util/TestUtils.java index 7e5a1d3ad4d3..57cc1723835c 100644 --- a/tests/net/java/com/android/internal/util/TestUtils.java +++ b/tests/net/java/com/android/internal/util/TestUtils.java @@ -19,6 +19,7 @@ package com.android.internal.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; +import android.annotation.NonNull; import android.os.ConditionVariable; import android.os.Handler; import android.os.HandlerThread; @@ -26,6 +27,8 @@ import android.os.Looper; import android.os.Parcel; import android.os.Parcelable; +import java.util.concurrent.Executor; + public final class TestUtils { private TestUtils() { } @@ -54,6 +57,17 @@ public final class TestUtils { } } + /** + * Block until the given Serial Executor becomes idle, or until timeoutMs has passed. + */ + public static void waitForIdleSerialExecutor(@NonNull Executor executor, long timeoutMs) { + final ConditionVariable cv = new ConditionVariable(); + executor.execute(() -> cv.open()); + if (!cv.block(timeoutMs)) { + fail(executor.toString() + " did not become idle after " + timeoutMs + " ms"); + } + } + // TODO : fetch the creator through reflection or something instead of passing it public static <T extends Parcelable, C extends Parcelable.Creator<T>> void assertParcelingIsLossless(T source, C creator) { diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index 30936294e642..3efdfd94b1b7 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -60,10 +60,10 @@ import static android.net.NetworkPolicyManager.RULE_ALLOW_METERED; import static android.net.NetworkPolicyManager.RULE_NONE; import static android.net.NetworkPolicyManager.RULE_REJECT_ALL; import static android.net.NetworkPolicyManager.RULE_REJECT_METERED; -import static android.net.shared.NetworkParcelableUtil.fromStableParcelable; import static com.android.internal.util.TestUtils.waitForIdleHandler; import static com.android.internal.util.TestUtils.waitForIdleLooper; +import static com.android.internal.util.TestUtils.waitForIdleSerialExecutor; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -88,6 +88,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import android.annotation.NonNull; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -123,7 +124,6 @@ import android.net.NetworkFactory; import android.net.NetworkInfo; import android.net.NetworkInfo.DetailedState; import android.net.NetworkMisc; -import android.net.NetworkParcelable; import android.net.NetworkRequest; import android.net.NetworkSpecifier; import android.net.NetworkStackClient; @@ -500,8 +500,7 @@ public class ConnectivityServiceTest { fail(e.getMessage()); } - final ArgumentCaptor<NetworkParcelable> nmNetworkCaptor = - ArgumentCaptor.forClass(NetworkParcelable.class); + final ArgumentCaptor<Network> nmNetworkCaptor = ArgumentCaptor.forClass(Network.class); final ArgumentCaptor<INetworkMonitorCallbacks> nmCbCaptor = ArgumentCaptor.forClass(INetworkMonitorCallbacks.class); doNothing().when(mNetworkStack).makeNetworkMonitor( @@ -541,8 +540,7 @@ public class ConnectivityServiceTest { } }; - assertEquals( - mNetworkAgent.netId, fromStableParcelable(nmNetworkCaptor.getValue()).netId); + assertEquals(mNetworkAgent.netId, nmNetworkCaptor.getValue().netId); mNmCallbacks = nmCbCaptor.getValue(); try { @@ -3762,7 +3760,7 @@ public class ConnectivityServiceTest { } } - private LinkedBlockingQueue<CallbackValue> mCallbacks = new LinkedBlockingQueue<>(); + private final LinkedBlockingQueue<CallbackValue> mCallbacks = new LinkedBlockingQueue<>(); @Override public void onStarted() { @@ -3837,6 +3835,11 @@ public class ConnectivityServiceTest { } private LinkedBlockingQueue<CallbackValue> mCallbacks = new LinkedBlockingQueue<>(); + private final Executor mExecutor; + + TestSocketKeepaliveCallback(@NonNull Executor executor) { + mExecutor = executor; + } @Override public void onStarted() { @@ -3874,6 +3877,12 @@ public class ConnectivityServiceTest { public void expectError(int error) { expectCallback(new CallbackValue(CallbackType.ON_ERROR, error)); } + + public void assertNoCallback() { + waitForIdleSerialExecutor(mExecutor, TIMEOUT_MS); + CallbackValue cv = mCallbacks.peek(); + assertNull("Unexpected callback: " + cv, cv); + } } private Network connectKeepaliveNetwork(LinkProperties lp) { @@ -3980,19 +3989,6 @@ public class ConnectivityServiceTest { myNet = connectKeepaliveNetwork(lp); mWiFiNetworkAgent.setStartKeepaliveError(PacketKeepalive.SUCCESS); - // Check things work as expected when the keepalive is stopped and the network disconnects. - ka = mCm.startNattKeepalive(myNet, validKaInterval, callback, myIPv4, 12345, dstIPv4); - callback.expectStarted(); - ka.stop(); - mWiFiNetworkAgent.disconnect(); - waitFor(mWiFiNetworkAgent.getDisconnectedCV()); - waitForIdle(); - callback.expectStopped(); - - // Reconnect. - myNet = connectKeepaliveNetwork(lp); - mWiFiNetworkAgent.setStartKeepaliveError(PacketKeepalive.SUCCESS); - // Check that keepalive slots start from 1 and increment. The first one gets slot 1. mWiFiNetworkAgent.setExpectedKeepaliveSlot(1); ka = mCm.startNattKeepalive(myNet, validKaInterval, callback, myIPv4, 12345, dstIPv4); @@ -4068,7 +4064,7 @@ public class ConnectivityServiceTest { Network notMyNet = new Network(61234); Network myNet = connectKeepaliveNetwork(lp); - TestSocketKeepaliveCallback callback = new TestSocketKeepaliveCallback(); + TestSocketKeepaliveCallback callback = new TestSocketKeepaliveCallback(executor); SocketKeepalive ka; // Attempt to start keepalives with invalid parameters and check for errors. @@ -4111,6 +4107,22 @@ public class ConnectivityServiceTest { ka.stop(); callback.expectStopped(); + // Check that keepalive could be restarted. + ka.start(validKaInterval); + callback.expectStarted(); + ka.stop(); + callback.expectStopped(); + + // Check that keepalive can be restarted without waiting for callback. + ka.start(validKaInterval); + callback.expectStarted(); + ka.stop(); + ka.start(validKaInterval); + callback.expectStopped(); + callback.expectStarted(); + ka.stop(); + callback.expectStopped(); + // Check that deleting the IP address stops the keepalive. LinkProperties bogusLp = new LinkProperties(lp); ka = mCm.createSocketKeepalive(myNet, testSocket, myIPv4, dstIPv4, executor, callback); @@ -4135,20 +4147,7 @@ public class ConnectivityServiceTest { final Network myNetAlias = myNet; assertNull(mCm.getNetworkCapabilities(myNetAlias)); ka.stop(); - - // Reconnect. - myNet = connectKeepaliveNetwork(lp); - mWiFiNetworkAgent.setStartKeepaliveError(SocketKeepalive.SUCCESS); - - // Check things work as expected when the keepalive is stopped and the network disconnects. - ka = mCm.createSocketKeepalive(myNet, testSocket, myIPv4, dstIPv4, executor, callback); - ka.start(validKaInterval); - callback.expectStarted(); - ka.stop(); - mWiFiNetworkAgent.disconnect(); - waitFor(mWiFiNetworkAgent.getDisconnectedCV()); - waitForIdle(); - callback.expectStopped(); + callback.assertNoCallback(); // Reconnect. myNet = connectKeepaliveNetwork(lp); @@ -4163,7 +4162,7 @@ public class ConnectivityServiceTest { // The second one gets slot 2. mWiFiNetworkAgent.setExpectedKeepaliveSlot(2); final UdpEncapsulationSocket testSocket2 = mIpSec.openUdpEncapsulationSocket(6789); - TestSocketKeepaliveCallback callback2 = new TestSocketKeepaliveCallback(); + TestSocketKeepaliveCallback callback2 = new TestSocketKeepaliveCallback(executor); SocketKeepalive ka2 = mCm.createSocketKeepalive(myNet, testSocket2, myIPv4, dstIPv4, executor, callback2); ka2.start(validKaInterval); @@ -4216,7 +4215,7 @@ public class ConnectivityServiceTest { final Socket testSocketV4 = new Socket(); final Socket testSocketV6 = new Socket(); - TestSocketKeepaliveCallback callback = new TestSocketKeepaliveCallback(); + TestSocketKeepaliveCallback callback = new TestSocketKeepaliveCallback(executor); SocketKeepalive ka; // Attempt to start Tcp keepalives with invalid parameters and check for errors. diff --git a/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java b/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java index 830c928d1e7f..9b4f49c6248f 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java @@ -101,6 +101,7 @@ public class NetworkStatsCollectionTest { @After public void tearDown() throws Exception { RecurrenceRule.sClock = sOriginalClock; + NetworkTemplate.resetForceAllNetworkTypes(); } private void setClock(Instant instant) { diff --git a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java index 598448b3e1b1..bce526d3ae29 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java @@ -19,6 +19,7 @@ package com.android.server.net; import static android.content.Intent.ACTION_UID_REMOVED; import static android.content.Intent.EXTRA_UID; import static android.net.ConnectivityManager.TYPE_MOBILE; +import static android.net.ConnectivityManager.TYPE_VPN; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.ConnectivityManager.TYPE_WIMAX; import static android.net.NetworkStats.DEFAULT_NETWORK_ALL; @@ -41,6 +42,7 @@ import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; import static android.net.NetworkStatsHistory.FIELD_ALL; import static android.net.NetworkTemplate.buildTemplateMobileAll; +import static android.net.NetworkTemplate.buildTemplateMobileWildcard; import static android.net.NetworkTemplate.buildTemplateWifiWildcard; import static android.net.TrafficStats.MB_IN_BYTES; import static android.net.TrafficStats.UID_REMOVED; @@ -132,6 +134,8 @@ public class NetworkStatsServiceTest { private static final String TEST_IFACE = "test0"; private static final String TEST_IFACE2 = "test1"; + private static final String TUN_IFACE = "test_nss_tun0"; + private static final long TEST_START = 1194220800000L; private static final String IMSI_1 = "310004"; @@ -145,10 +149,12 @@ public class NetworkStatsServiceTest { private static final int UID_RED = 1001; private static final int UID_BLUE = 1002; private static final int UID_GREEN = 1003; - + private static final int UID_VPN = 1004; private static final Network WIFI_NETWORK = new Network(100); private static final Network MOBILE_NETWORK = new Network(101); + private static final Network VPN_NETWORK = new Network(102); + private static final Network[] NETWORKS_WIFI = new Network[]{ WIFI_NETWORK }; private static final Network[] NETWORKS_MOBILE = new Network[]{ MOBILE_NETWORK }; @@ -914,7 +920,113 @@ public class NetworkStatsServiceTest { assertNetworkTotal(sTemplateImsi1, 2048L, 16L, 512L, 4L, 0); assertUidTotal(sTemplateImsi1, UID_RED, 128L, 2L, 128L, 2L, 0); assertUidTotal(sTemplateImsi1, UID_TETHERING, 1920L, 14L, 384L, 2L, 0); + } + + @Test + public void vpnWithOneUnderlyingIface() throws Exception { + // WiFi network is connected and VPN is using WiFi (which has TEST_IFACE). + expectDefaultSettings(); + NetworkState[] networkStates = new NetworkState[] {buildWifiState(), buildVpnState()}; + VpnInfo[] vpnInfos = new VpnInfo[] {createVpnInfo(TEST_IFACE)}; + expectNetworkStatsUidDetail(buildEmptyStats()); + expectBandwidthControlCheck(); + + mService.forceUpdateIfaces( + new Network[] {WIFI_NETWORK, VPN_NETWORK}, + vpnInfos, + networkStates, + getActiveIface(networkStates)); + // create some traffic (assume 10 bytes of MTU for VPN interface and 1 byte encryption + // overhead per packet): + // 1000 bytes (100 packets) were sent/received by UID_RED over VPN. + // 500 bytes (50 packets) were sent/received by UID_BLUE over VPN. + // VPN sent/received 1650 bytes (150 packets) over WiFi. + // Of 1650 bytes over WiFi, expect 1000 bytes attributed to UID_RED, 500 bytes attributed to + // UID_BLUE, and 150 bytes attributed to UID_VPN for both rx/tx traffic. + incrementCurrentTime(HOUR_IN_MILLIS); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3) + .addValues(TUN_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1000L, 100L, 1000L, 100L, 1L) + .addValues(TUN_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 500L, 50L, 500L, 50L, 1L) + .addValues( + TEST_IFACE, UID_VPN, SET_DEFAULT, TAG_NONE, 1650L, 150L, 1650L, 150L, 2L)); + forcePollAndWaitForIdle(); + + assertUidTotal(sTemplateWifi, UID_RED, 1000L, 100L, 1000L, 100L, 1); + assertUidTotal(sTemplateWifi, UID_BLUE, 500L, 50L, 500L, 50L, 1); + assertUidTotal(sTemplateWifi, UID_VPN, 150L, 0L, 150L, 0L, 2); + } + + @Test + public void vpnWithOneUnderlyingIface_withCompression() throws Exception { + // WiFi network is connected and VPN is using WiFi (which has TEST_IFACE). + expectDefaultSettings(); + NetworkState[] networkStates = new NetworkState[] {buildWifiState(), buildVpnState()}; + VpnInfo[] vpnInfos = new VpnInfo[] {createVpnInfo(TEST_IFACE)}; + expectNetworkStatsUidDetail(buildEmptyStats()); + expectBandwidthControlCheck(); + + mService.forceUpdateIfaces( + new Network[] {WIFI_NETWORK, VPN_NETWORK}, + vpnInfos, + networkStates, + getActiveIface(networkStates)); + // create some traffic (assume 10 bytes of MTU for VPN interface and 1 byte encryption + // overhead per packet): + // 1000 bytes (100 packets) were sent/received by UID_RED over VPN. + // 3000 bytes (300 packets) were sent/received by UID_BLUE over VPN. + // VPN sent/received 1000 bytes (100 packets) over WiFi. + // Of 1000 bytes over WiFi, expect 250 bytes attributed UID_RED and 750 bytes to UID_BLUE, + // with nothing attributed to UID_VPN for both rx/tx traffic. + incrementCurrentTime(HOUR_IN_MILLIS); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3) + .addValues(TUN_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1000L, 100L, 1000L, 100L, 1L) + .addValues(TUN_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 3000L, 300L, 3000L, 300L, 1L) + .addValues( + TEST_IFACE, UID_VPN, SET_DEFAULT, TAG_NONE, 1000L, 100L, 1000L, 100L, 0L)); + + forcePollAndWaitForIdle(); + + assertUidTotal(sTemplateWifi, UID_RED, 250L, 25L, 250L, 25L, 0); + assertUidTotal(sTemplateWifi, UID_BLUE, 750L, 75L, 750L, 75L, 0); + assertUidTotal(sTemplateWifi, UID_VPN, 0L, 0L, 0L, 0L, 0); + } + + @Test + public void vpnWithIncorrectUnderlyingIface() throws Exception { + // WiFi and Cell networks are connected and VPN is using Cell (which has TEST_IFACE2), + // but has declared only WiFi (TEST_IFACE) in its underlying network set. + expectDefaultSettings(); + NetworkState[] networkStates = + new NetworkState[] { + buildWifiState(), buildMobile4gState(TEST_IFACE2), buildVpnState() + }; + VpnInfo[] vpnInfos = new VpnInfo[] {createVpnInfo(TEST_IFACE)}; + expectNetworkStatsUidDetail(buildEmptyStats()); + expectBandwidthControlCheck(); + + mService.forceUpdateIfaces( + new Network[] {WIFI_NETWORK, VPN_NETWORK}, + vpnInfos, + networkStates, + getActiveIface(networkStates)); + // create some traffic (assume 10 bytes of MTU for VPN interface and 1 byte encryption + // overhead per packet): + // 1000 bytes (100 packets) were sent/received by UID_RED over VPN. + // VPN sent/received 1100 bytes (100 packets) over Cell. + // Of 1100 bytes over Cell, expect all of it attributed to UID_VPN for both rx/tx traffic. + incrementCurrentTime(HOUR_IN_MILLIS); + expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 2) + .addValues(TUN_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1000L, 100L, 1000L, 100L, 1L) + .addValues( + TEST_IFACE2, UID_VPN, SET_DEFAULT, TAG_NONE, 1100L, 100L, 1100L, 100L, 1L)); + + forcePollAndWaitForIdle(); + + assertUidTotal(sTemplateWifi, UID_RED, 0L, 0L, 0L, 0L, 0); + assertUidTotal(sTemplateWifi, UID_VPN, 0L, 0L, 0L, 0L, 0); + assertUidTotal(buildTemplateMobileWildcard(), UID_RED, 0L, 0L, 0L, 0L, 0); + assertUidTotal(buildTemplateMobileWildcard(), UID_VPN, 1100L, 100L, 1100L, 100L, 1); } @Test @@ -1262,6 +1374,22 @@ public class NetworkStatsServiceTest { return new NetworkStats(getElapsedRealtime(), 0); } + private static NetworkState buildVpnState() { + final NetworkInfo info = new NetworkInfo(TYPE_VPN, 0, null, null); + info.setDetailedState(DetailedState.CONNECTED, null, null); + final LinkProperties prop = new LinkProperties(); + prop.setInterfaceName(TUN_IFACE); + return new NetworkState(info, prop, new NetworkCapabilities(), VPN_NETWORK, null, null); + } + + private static VpnInfo createVpnInfo(String underlyingIface) { + VpnInfo info = new VpnInfo(); + info.ownerUid = UID_VPN; + info.vpnIface = TUN_IFACE; + info.primaryUnderlyingIface = underlyingIface; + return info; + } + private long getElapsedRealtime() { return mElapsedRealtime; } |