summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.bp173
-rwxr-xr-xapi/current.txt5
-rw-r--r--api/system-current.txt9
-rw-r--r--core/java/android/app/Vr2dDisplayProperties.java5
-rw-r--r--core/java/android/app/backup/RestoreDescription.java2
-rw-r--r--core/java/android/app/usage/CacheQuotaHint.java2
-rw-r--r--core/java/android/app/usage/UsageEvents.java2
-rw-r--r--core/java/android/bluetooth/BluetoothAdapter.java5
-rw-r--r--core/java/android/bluetooth/BluetoothOutputStream.java12
-rw-r--r--core/java/android/bluetooth/BluetoothPan.java8
-rw-r--r--core/java/android/bluetooth/BluetoothSocket.java14
-rw-r--r--core/java/android/content/om/OverlayInfo.java4
-rw-r--r--core/java/android/hardware/display/AmbientBrightnessDayStats.java4
-rw-r--r--core/java/android/hardware/display/BrightnessConfiguration.java4
-rw-r--r--core/java/android/hardware/hdmi/HdmiDeviceInfo.java5
-rw-r--r--core/java/android/hardware/hdmi/HdmiPortInfo.java5
-rw-r--r--core/java/android/hardware/location/ContextHubInfo.java2
-rw-r--r--core/java/android/hardware/location/ContextHubMessage.java4
-rw-r--r--core/java/android/hardware/location/GeofenceHardwareMonitorEvent.java4
-rw-r--r--core/java/android/hardware/location/MemoryRegion.java2
-rw-r--r--core/java/android/hardware/location/NanoApp.java2
-rw-r--r--core/java/android/hardware/location/NanoAppFilter.java2
-rw-r--r--core/java/android/hardware/location/NanoAppInstanceInfo.java1
-rw-r--r--core/java/android/hardware/location/NanoAppMessage.java4
-rw-r--r--core/java/android/hardware/radio/ProgramSelector.java6
-rw-r--r--core/java/android/hardware/radio/RadioManager.java24
-rw-r--r--core/java/android/hardware/radio/RadioMetadata.java1
-rw-r--r--core/java/android/hardware/soundtrigger/SoundTrigger.java4
-rw-r--r--core/java/android/hardware/usb/UsbPort.java3
-rw-r--r--core/java/android/hardware/usb/UsbPortStatus.java4
-rw-r--r--core/java/android/net/IpSecManager.java1
-rw-r--r--core/java/android/net/LocalSocketImpl.java34
-rw-r--r--core/java/android/net/NetworkKey.java4
-rw-r--r--core/java/android/net/RssiCurve.java5
-rw-r--r--core/java/android/net/ScoredNetwork.java4
-rw-r--r--core/java/android/net/StaticIpConfiguration.java3
-rw-r--r--core/java/android/net/WebAddress.java2
-rw-r--r--core/java/android/net/WifiKey.java5
-rw-r--r--core/java/android/net/apf/ApfCapabilities.java4
-rw-r--r--core/java/android/net/metrics/ApfProgramEvent.java4
-rw-r--r--core/java/android/net/metrics/ApfStats.java4
-rw-r--r--core/java/android/net/metrics/DhcpClientEvent.java4
-rw-r--r--core/java/android/net/metrics/DhcpErrorEvent.java2
-rw-r--r--core/java/android/net/metrics/IpManagerEvent.java5
-rw-r--r--core/java/android/net/metrics/IpReachabilityEvent.java5
-rw-r--r--core/java/android/net/metrics/NetworkEvent.java5
-rw-r--r--core/java/android/net/metrics/RaEvent.java4
-rw-r--r--core/java/android/net/metrics/ValidationProbeEvent.java4
-rw-r--r--core/java/android/net/util/MultinetworkPolicyTracker.java29
-rw-r--r--core/java/android/os/INetworkManagementService.aidl8
-rw-r--r--core/java/android/os/IncidentReportArgs.java2
-rw-r--r--core/java/android/os/ServiceSpecificException.java2
-rw-r--r--core/java/android/os/WorkSource.java6
-rw-r--r--core/java/android/printservice/PrintServiceInfo.java4
-rw-r--r--core/java/android/provider/SearchIndexableData.java2
-rw-r--r--core/java/android/provider/SearchIndexableResource.java2
-rw-r--r--core/java/android/service/euicc/EuiccProfileInfo.java4
-rw-r--r--core/java/android/service/notification/Adjustment.java2
-rw-r--r--core/java/android/service/notification/NotificationStats.java5
-rw-r--r--core/java/android/service/notification/SnoozeCriterion.java3
-rw-r--r--core/java/android/service/resolver/ResolverTarget.java6
-rw-r--r--core/java/android/view/textclassifier/OWNERS10
-rw-r--r--core/java/com/android/internal/os/RuntimeInit.java12
-rw-r--r--core/java/com/android/internal/os/ZygoteInit.java15
-rw-r--r--core/java/com/package.html8
-rw-r--r--libs/androidfw/ResourceTypes.cpp4
-rw-r--r--location/java/android/location/GpsClock.java2
-rw-r--r--location/java/android/location/GpsMeasurement.java2
-rw-r--r--location/java/android/location/GpsMeasurementsEvent.java1
-rw-r--r--location/java/android/location/GpsNavigationMessage.java1
-rw-r--r--location/java/android/location/GpsNavigationMessageEvent.java1
-rw-r--r--location/java/android/location/LocationRequest.java2
-rw-r--r--location/lib/Android.bp9
-rw-r--r--media/java/android/media/AudioFocusInfo.java3
-rw-r--r--media/java/android/media/session/MediaSessionManager.java3
-rw-r--r--media/java/android/media/tv/TvInputHardwareInfo.java3
-rw-r--r--media/java/android/media/tv/TvStreamConfig.java5
-rw-r--r--media/java/android/media/tv/TvTrackInfo.java1
-rw-r--r--media/lib/signer/Android.bp7
-rw-r--r--mime/Android.bp43
-rw-r--r--mime/java-res/android.mime.types146
-rw-r--r--mime/java/android/content/type/MimeMapImpl.java194
-rw-r--r--packages/WAPPushManager/Android.bp2
-rw-r--r--packages/WAPPushManager/CleanSpec.mk2
-rw-r--r--services/Android.bp1
-rw-r--r--services/core/Android.bp2
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java4
-rw-r--r--services/core/java/com/android/server/NetworkManagementService.java8
-rw-r--r--services/core/java/com/android/server/RecoverySystemService.java4
-rw-r--r--services/core/java/com/android/server/compat/CompatConfig.java10
-rw-r--r--services/core/java/com/android/server/connectivity/DataConnectionStats.java16
-rw-r--r--services/core/java/com/android/server/connectivity/Tethering.java15
-rw-r--r--services/core/java/com/android/server/connectivity/Vpn.java1
-rw-r--r--services/core/java/com/android/server/net/LockdownVpnTracker.java41
-rw-r--r--services/net/Android.bp2
-rw-r--r--telecomm/java/android/telecom/AudioState.java5
-rw-r--r--telephony/java/android/telephony/CallAttributes.java4
-rw-r--r--telephony/java/android/telephony/CallQuality.java5
-rwxr-xr-xtelephony/java/android/telephony/CarrierConfigManager.java2
-rw-r--r--telephony/java/android/telephony/CarrierRestrictionRules.java1
-rw-r--r--telephony/java/android/telephony/DataSpecificRegistrationInfo.java4
-rw-r--r--telephony/java/android/telephony/LteVopsSupportInfo.java5
-rw-r--r--telephony/java/android/telephony/NetworkRegistrationInfo.java3
-rw-r--r--telephony/java/android/telephony/PhoneNumberRange.java4
-rw-r--r--telephony/java/android/telephony/PreciseCallState.java5
-rw-r--r--telephony/java/android/telephony/PreciseDataConnectionState.java3
-rw-r--r--telephony/java/android/telephony/SmsManager.java5
-rw-r--r--telephony/java/android/telephony/SubscriptionPlan.java2
-rw-r--r--telephony/java/android/telephony/TelephonyHistogram.java5
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java22
-rw-r--r--telephony/java/android/telephony/UiccAccessRule.java4
-rw-r--r--telephony/java/android/telephony/UiccSlotInfo.java5
-rw-r--r--telephony/java/android/telephony/data/DataCallResponse.java3
-rw-r--r--telephony/java/android/telephony/data/DataProfile.java3
-rw-r--r--telephony/java/android/telephony/euicc/EuiccNotification.java4
-rw-r--r--telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java4
-rw-r--r--telephony/java/android/telephony/ims/ImsCallForwardInfo.java1
-rw-r--r--telephony/java/android/telephony/ims/ImsCallProfile.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsConferenceState.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsExternalCallState.java1
-rw-r--r--telephony/java/android/telephony/ims/ImsReasonInfo.java3
-rw-r--r--telephony/java/android/telephony/ims/ImsSsData.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsSsInfo.java1
-rw-r--r--telephony/java/android/telephony/ims/ImsStreamMediaProfile.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsSuppServiceNotification.java2
-rw-r--r--telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java3
-rw-r--r--telephony/java/android/telephony/ims/feature/MmTelFeature.java1
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java5
-rw-r--r--telephony/java/android/telephony/mbms/DownloadRequest.java3
-rw-r--r--telephony/java/com/android/internal/telephony/ITelephony.aidl4
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/SmsMessage.java83
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java14
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java3
-rw-r--r--test-mock/Android.bp8
-rw-r--r--tests/net/java/com/android/server/ConnectivityServiceTest.java15
-rw-r--r--wifi/java/android/net/wifi/RttManager.java2
-rw-r--r--wifi/java/android/net/wifi/WifiNetworkConnectionStatistics.java4
-rw-r--r--wifi/java/android/net/wifi/hotspot2/OsuProvider.java5
-rw-r--r--wifi/java/android/net/wifi/rtt/RangingRequest.java3
-rw-r--r--wifi/java/android/net/wifi/rtt/ResponderConfig.java3
140 files changed, 613 insertions, 733 deletions
diff --git a/Android.bp b/Android.bp
index 7c34ea0084ec..34bd122b33c0 100644
--- a/Android.bp
+++ b/Android.bp
@@ -162,49 +162,54 @@ filegroup {
path: "wifi/java",
}
-framework_srcs = [
- // Java/AIDL sources under frameworks/base
- ":framework-core-sources",
- ":framework-drm-sources",
- ":framework-graphics-sources",
- ":framework-keystore-sources",
- ":framework-location-sources",
- ":framework-lowpan-sources",
- ":framework-media-sources",
- ":framework-mca-effect-sources",
- ":framework-mca-filterfw-sources",
- ":framework-mca-filterpacks-sources",
- ":framework-opengl-sources",
- ":framework-rs-sources",
- ":framework-sax-sources",
- ":framework-telecomm-sources",
- ":framework-telephony-sources",
- ":framework-wifi-sources",
- ":PacProcessor-aidl-sources",
- ":ProxyHandler-aidl-sources",
-
- // AIDL sources from external directories
- ":dumpstate_aidl",
- ":framework_native_aidl",
- ":gatekeeper_aidl",
- ":gsiservice_aidl",
- ":incidentcompanion_aidl",
- ":installd_aidl",
- ":keystore_aidl",
- ":libaudioclient_aidl",
- ":libbinder_aidl",
- ":libbluetooth-binder-aidl",
- ":libcamera_client_aidl",
- ":libcamera_client_framework_aidl",
- ":libupdate_engine_aidl",
- ":storaged_aidl",
- ":vold_aidl",
-
- // etc.
- "core/java/**/*.logtags",
- ":framework-javastream-protos",
- ":framework-statslog-gen",
-]
+filegroup {
+ name: "framework-srcs",
+ srcs: [
+ // Java/AIDL sources under frameworks/base
+ ":framework-core-sources",
+ ":framework-drm-sources",
+ ":framework-graphics-sources",
+ ":framework-keystore-sources",
+ ":framework-location-sources",
+ ":framework-lowpan-sources",
+ ":framework-media-sources",
+ ":framework-mca-effect-sources",
+ ":framework-mca-filterfw-sources",
+ ":framework-mca-filterpacks-sources",
+ ":framework-opengl-sources",
+ ":framework-rs-sources",
+ ":framework-sax-sources",
+ ":framework-telecomm-sources",
+ ":framework-telephony-sources",
+ ":framework-wifi-sources",
+ ":PacProcessor-aidl-sources",
+ ":ProxyHandler-aidl-sources",
+
+ // AIDL sources from external directories
+ ":dumpstate_aidl",
+ ":framework_native_aidl",
+ ":gatekeeper_aidl",
+ ":gsiservice_aidl",
+ ":incidentcompanion_aidl",
+ ":installd_aidl",
+ ":keystore_aidl",
+ ":libaudioclient_aidl",
+ ":libbinder_aidl",
+ ":libbluetooth-binder-aidl",
+ ":libcamera_client_aidl",
+ ":libcamera_client_framework_aidl",
+ ":libupdate_engine_aidl",
+ ":storaged_aidl",
+ ":vold_aidl",
+
+ // For the generated R.java and Manifest.java
+ ":framework-res{.aapt.srcjar}",
+
+ // etc.
+ ":framework-javastream-protos",
+ ":framework-statslog-gen",
+ ],
+}
java_defaults {
name: "framework-aidl-export-defaults",
@@ -230,31 +235,11 @@ java_defaults {
},
}
-java_defaults {
- name: "framework-defaults",
- defaults: ["framework-aidl-export-defaults"],
- installable: true,
-
- srcs: framework_srcs,
-
- aidl: {
- generate_get_transaction_name: true,
- },
-
- exclude_srcs: [
- // See comment on framework-atb-backward-compatibility module below
- "core/java/android/content/pm/AndroidTestBaseUpdater.java",
- ],
-
- sdk_version: "core_platform",
- libs: [
- "ext",
- ],
-
- jarjar_rules: ":framework-jarjar-rules",
-
+// Collection of classes that are generated from non-Java files that are not listed in
+// framework_srcs. These have no or very limited dependency to the framework.
+java_library {
+ name: "framework-internal-utils",
static_libs: [
- "mimemap",
"apex_aidl_interface-java",
"suspend_control_aidl_interface-java",
"framework-protos",
@@ -280,6 +265,37 @@ java_defaults {
"PlatformProperties",
],
+ sdk_version: "core_platform",
+ installable: false,
+}
+
+java_defaults {
+ name: "framework-defaults",
+ defaults: ["framework-aidl-export-defaults"],
+ installable: true,
+
+ srcs: [
+ ":framework-srcs",
+ "core/java/**/*.logtags",
+ ],
+
+ aidl: {
+ generate_get_transaction_name: true,
+ },
+
+ exclude_srcs: [
+ // See comment on framework-atb-backward-compatibility module below
+ "core/java/android/content/pm/AndroidTestBaseUpdater.java",
+ ],
+
+ sdk_version: "core_platform",
+ libs: [
+ "ext",
+ ],
+
+ jarjar_rules: ":framework-jarjar-rules",
+
+ static_libs: ["framework-internal-utils"],
required: [
// TODO: remove gps_debug when the build system propagates "required" properly.
@@ -341,7 +357,6 @@ java_library {
platform_compat_config {
name: "framework-platform-compat-config",
- prefix: "framework",
src: ":framework-annotation-proc",
}
@@ -662,7 +677,7 @@ python_binary_host {
],
}
-// TODO: Don't rely on this list once droiddoc can take a list of packages to document
+// TODO: Don't rely on this list by switching package.html into package-info.java
frameworks_base_subdirs = [
"core/java",
"graphics/java",
@@ -682,13 +697,6 @@ frameworks_base_subdirs = [
"rs/java",
]
-packages_to_document = [
- "android",
- "javax/microedition/khronos",
- "org/apache/http/conn",
- "org/apache/http/params",
-]
-
// Make the api/current.txt file available for use by modules in other
// directories.
filegroup {
@@ -789,6 +797,8 @@ metalava_framework_docs_args += " --replace-documentation " +
stubs_defaults {
name: "framework-doc-stubs-default",
srcs: [
+ ":framework-srcs",
+ "core/java/**/*.logtags",
"test-base/src/**/*.java",
":opt-telephony-srcs",
":opt-net-voip-srcs",
@@ -796,8 +806,6 @@ stubs_defaults {
"test-mock/src/**/*.java",
"test-runner/src/**/*.java",
],
- srcs_lib: "framework",
- srcs_lib_whitelist_pkgs: packages_to_document,
libs: framework_docs_only_libs,
local_sourcepaths: frameworks_base_subdirs,
create_doc_stubs: true,
@@ -852,12 +860,13 @@ doc_defaults {
stubs_defaults {
name: "metalava-api-stubs-default",
srcs: [
+ ":framework-srcs",
+ "core/java/**/*.logtags",
":opt-telephony-srcs",
":opt-net-voip-srcs",
":core_public_api_files",
],
- srcs_lib: "framework",
- srcs_lib_whitelist_pkgs: packages_to_document,
+ libs: ["framework-internal-utils"],
local_sourcepaths: frameworks_base_subdirs,
installable: false,
annotations_enabled: true,
@@ -871,6 +880,7 @@ stubs_defaults {
"sdk-dir",
"api-versions-jars-dir",
],
+ sdk_version: "core_platform",
}
droidstubs {
@@ -1234,6 +1244,7 @@ droidstubs {
":openjdk_java_files",
":opt-telephony-common-srcs",
],
+
arg_files: [
"core/res/AndroidManifest.xml",
],
@@ -1348,7 +1359,7 @@ filegroup {
// annotations to private apis
aidl_mapping {
name: "framework-aidl-mappings",
- srcs: framework_srcs,
+ srcs: [":framework-srcs"],
output: "framework-aidl-mappings.txt",
}
diff --git a/api/current.txt b/api/current.txt
index 0e4530065712..6d7cd6954c88 100755
--- a/api/current.txt
+++ b/api/current.txt
@@ -26836,7 +26836,7 @@ package android.media.tv {
method public android.media.tv.TvTrackInfo.Builder setAudioChannelCount(int);
method public android.media.tv.TvTrackInfo.Builder setAudioSampleRate(int);
method public android.media.tv.TvTrackInfo.Builder setDescription(CharSequence);
- method public android.media.tv.TvTrackInfo.Builder setEncrypted(boolean);
+ method @NonNull public android.media.tv.TvTrackInfo.Builder setEncrypted(boolean);
method public android.media.tv.TvTrackInfo.Builder setExtra(android.os.Bundle);
method public android.media.tv.TvTrackInfo.Builder setLanguage(String);
method public android.media.tv.TvTrackInfo.Builder setVideoActiveFormatDescription(byte);
@@ -42142,7 +42142,7 @@ package android.telephony {
public class CarrierConfigManager {
method @Nullable public android.os.PersistableBundle getConfig();
- method @Nullable public android.os.PersistableBundle getConfigByComponentForSubId(String, int);
+ method @Nullable public android.os.PersistableBundle getConfigByComponentForSubId(@NonNull String, int);
method @Nullable public android.os.PersistableBundle getConfigForSubId(int);
method public static boolean isConfigForIdentifiedCarrier(android.os.PersistableBundle);
method public void notifyConfigChangedForSubId(int);
@@ -43080,6 +43080,7 @@ package android.telephony {
method public boolean canChangeDtmfToneLength();
method @Nullable public android.telephony.TelephonyManager createForPhoneAccountHandle(android.telecom.PhoneAccountHandle);
method public android.telephony.TelephonyManager createForSubscriptionId(int);
+ method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean doesSwitchMultiSimConfigTriggerReboot();
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public java.util.List<android.telephony.CellInfo> getAllCellInfo();
method public int getCallState();
method public int getCardIdForDefaultEuicc();
diff --git a/api/system-current.txt b/api/system-current.txt
index 9200ce579aff..ecf7dedda6b5 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -695,7 +695,7 @@ package android.app.usage {
}
public static final class UsageEvents.Event {
- method public String getNotificationChannelId();
+ method @Nullable public String getNotificationChannelId();
field public static final int NOTIFICATION_INTERRUPTION = 12; // 0xc
field public static final int NOTIFICATION_SEEN = 10; // 0xa
field public static final int SLICE_PINNED = 14; // 0xe
@@ -1661,7 +1661,7 @@ package android.hardware.location {
method @Deprecated public void setMsgType(int);
method @Deprecated public void setVersion(int);
method @Deprecated public void writeToParcel(android.os.Parcel, int);
- field @Deprecated public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubMessage> CREATOR;
+ field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubMessage> CREATOR;
}
public class ContextHubTransaction<T> {
@@ -1749,7 +1749,7 @@ package android.hardware.location {
method public int getMonitoringType();
method public int getSourceTechnologies();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.location.GeofenceHardwareMonitorEvent> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.GeofenceHardwareMonitorEvent> CREATOR;
}
public final class GeofenceHardwareRequest {
@@ -1872,7 +1872,7 @@ package android.hardware.location {
method public long getNanoAppId();
method public boolean isBroadcastMessage();
method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppMessage> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppMessage> CREATOR;
}
public final class NanoAppState implements android.os.Parcelable {
@@ -6353,7 +6353,6 @@ package android.telephony {
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();
method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isVideoCallingEnabled();
method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isVisualVoicemailEnabled(android.telecom.PhoneAccountHandle);
diff --git a/core/java/android/app/Vr2dDisplayProperties.java b/core/java/android/app/Vr2dDisplayProperties.java
index e0b60e0dfab3..6273e9b66613 100644
--- a/core/java/android/app/Vr2dDisplayProperties.java
+++ b/core/java/android/app/Vr2dDisplayProperties.java
@@ -16,6 +16,8 @@
package android.app;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -63,6 +65,7 @@ public final class Vr2dDisplayProperties implements Parcelable {
return result;
}
+ @NonNull
@Override
public String toString() {
return "Vr2dDisplayProperties{"
@@ -75,7 +78,7 @@ public final class Vr2dDisplayProperties implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
diff --git a/core/java/android/app/backup/RestoreDescription.java b/core/java/android/app/backup/RestoreDescription.java
index 0250326e42f2..693fd0d18c8f 100644
--- a/core/java/android/app/backup/RestoreDescription.java
+++ b/core/java/android/app/backup/RestoreDescription.java
@@ -16,6 +16,7 @@
package android.app.backup;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -52,6 +53,7 @@ public class RestoreDescription implements Parcelable {
/** This package's restore data is a tarball-type full data stream */
public static final int TYPE_FULL_STREAM = 2;
+ @NonNull
@Override
public String toString() {
return "RestoreDescription{" + mPackageName + " : "
diff --git a/core/java/android/app/usage/CacheQuotaHint.java b/core/java/android/app/usage/CacheQuotaHint.java
index 1d5c2b05488e..17fbdf7edaaa 100644
--- a/core/java/android/app/usage/CacheQuotaHint.java
+++ b/core/java/android/app/usage/CacheQuotaHint.java
@@ -81,7 +81,7 @@ public final class CacheQuotaHint implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (o instanceof CacheQuotaHint) {
final CacheQuotaHint other = (CacheQuotaHint) o;
return Objects.equals(mUuid, other.mUuid)
diff --git a/core/java/android/app/usage/UsageEvents.java b/core/java/android/app/usage/UsageEvents.java
index 4864ece8ef52..a38111ac7d91 100644
--- a/core/java/android/app/usage/UsageEvents.java
+++ b/core/java/android/app/usage/UsageEvents.java
@@ -16,6 +16,7 @@
package android.app.usage;
import android.annotation.IntDef;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.content.res.Configuration;
@@ -366,6 +367,7 @@ public final class UsageEvents implements Parcelable {
* event is of type {@link #NOTIFICATION_INTERRUPTION}, otherwise it returns null;
* @hide
*/
+ @Nullable
@SystemApi
public String getNotificationChannelId() {
return mNotificationChannelId;
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 39d63de87da3..e7ba85ad5d9e 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -858,7 +858,10 @@ public final class BluetoothAdapter {
if (DBG) {
Log.d(TAG, "isLeEnabled(): " + BluetoothAdapter.nameForState(state));
}
- return (state == BluetoothAdapter.STATE_ON || state == BluetoothAdapter.STATE_BLE_ON);
+ return (state == BluetoothAdapter.STATE_ON
+ || state == BluetoothAdapter.STATE_BLE_ON
+ || state == BluetoothAdapter.STATE_TURNING_ON
+ || state == BluetoothAdapter.STATE_TURNING_OFF);
}
/**
diff --git a/core/java/android/bluetooth/BluetoothOutputStream.java b/core/java/android/bluetooth/BluetoothOutputStream.java
index dfec4e102fd4..a0aa2dee9d34 100644
--- a/core/java/android/bluetooth/BluetoothOutputStream.java
+++ b/core/java/android/bluetooth/BluetoothOutputStream.java
@@ -75,16 +75,4 @@ import java.io.OutputStream;
}
mSocket.write(b, offset, count);
}
-
- /**
- * Wait until the data in sending queue is emptied. A polling version
- * for flush implementation. Use it to ensure the writing data afterwards will
- * be packed in the new RFCOMM frame.
- *
- * @throws IOException if an i/o error occurs.
- * @since Android 4.2.3
- */
- public void flush() throws IOException {
- mSocket.flush();
- }
}
diff --git a/core/java/android/bluetooth/BluetoothPan.java b/core/java/android/bluetooth/BluetoothPan.java
index fb78789ba8ad..cfb363a0834c 100644
--- a/core/java/android/bluetooth/BluetoothPan.java
+++ b/core/java/android/bluetooth/BluetoothPan.java
@@ -118,6 +118,8 @@ public final class BluetoothPan implements BluetoothProfile {
*/
public static final int PAN_OPERATION_SUCCESS = 1004;
+ private final Context mContext;
+
private BluetoothAdapter mAdapter;
private final BluetoothProfileConnector<IBluetoothPan> mProfileConnector =
new BluetoothProfileConnector(this, BluetoothProfile.PAN,
@@ -136,6 +138,7 @@ public final class BluetoothPan implements BluetoothProfile {
@UnsupportedAppUsage
/*package*/ BluetoothPan(Context context, ServiceListener listener) {
mAdapter = BluetoothAdapter.getDefaultAdapter();
+ mContext = context;
mProfileConnector.connect(context, listener);
}
@@ -287,11 +290,12 @@ public final class BluetoothPan implements BluetoothProfile {
@UnsupportedAppUsage
public void setBluetoothTethering(boolean value) {
- if (DBG) log("setBluetoothTethering(" + value + ")");
+ String pkgName = mContext.getOpPackageName();
+ if (DBG) log("setBluetoothTethering(" + value + "), calling package:" + pkgName);
final IBluetoothPan service = getService();
if (service != null && isEnabled()) {
try {
- service.setBluetoothTethering(value);
+ service.setBluetoothTethering(value, pkgName);
} catch (RemoteException e) {
Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
}
diff --git a/core/java/android/bluetooth/BluetoothSocket.java b/core/java/android/bluetooth/BluetoothSocket.java
index a6e3153d6af7..760166bfcc5d 100644
--- a/core/java/android/bluetooth/BluetoothSocket.java
+++ b/core/java/android/bluetooth/BluetoothSocket.java
@@ -515,20 +515,6 @@ public final class BluetoothSocket implements Closeable {
return mSocketIS.available();
}
- /**
- * Wait until the data in sending queue is emptied. A polling version
- * for flush implementation. Used to ensure the writing data afterwards will
- * be packed in new RFCOMM frame.
- *
- * @throws IOException if an i/o error occurs.
- */
- @UnsupportedAppUsage
- /*package*/ void flush() throws IOException {
- if (mSocketOS == null) throw new IOException("flush is called on null OutputStream");
- if (VDBG) Log.d(TAG, "flush: " + mSocketOS);
- mSocketOS.flush();
- }
-
/*package*/ int read(byte[] b, int offset, int length) throws IOException {
int ret = 0;
if (VDBG) Log.d(TAG, "read in: " + mSocketIS + " len: " + length);
diff --git a/core/java/android/content/om/OverlayInfo.java b/core/java/android/content/om/OverlayInfo.java
index dd550032df7c..2884dcbdff0b 100644
--- a/core/java/android/content/om/OverlayInfo.java
+++ b/core/java/android/content/om/OverlayInfo.java
@@ -18,6 +18,7 @@ package android.content.om;
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.os.Parcel;
@@ -310,7 +311,7 @@ public final class OverlayInfo implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
@@ -342,6 +343,7 @@ public final class OverlayInfo implements Parcelable {
return true;
}
+ @NonNull
@Override
public String toString() {
return "OverlayInfo { overlay=" + packageName + ", target=" + targetPackageName + ", state="
diff --git a/core/java/android/hardware/display/AmbientBrightnessDayStats.java b/core/java/android/hardware/display/AmbientBrightnessDayStats.java
index 1aa2557f92a2..9d6e8ebd3d91 100644
--- a/core/java/android/hardware/display/AmbientBrightnessDayStats.java
+++ b/core/java/android/hardware/display/AmbientBrightnessDayStats.java
@@ -17,6 +17,7 @@
package android.hardware.display;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -136,7 +137,7 @@ public final class AmbientBrightnessDayStats implements Parcelable {
};
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
@@ -161,6 +162,7 @@ public final class AmbientBrightnessDayStats implements Parcelable {
return result;
}
+ @NonNull
@Override
public String toString() {
StringBuilder bucketBoundariesString = new StringBuilder();
diff --git a/core/java/android/hardware/display/BrightnessConfiguration.java b/core/java/android/hardware/display/BrightnessConfiguration.java
index 6d9ba778d09a..8f0e32f907dd 100644
--- a/core/java/android/hardware/display/BrightnessConfiguration.java
+++ b/core/java/android/hardware/display/BrightnessConfiguration.java
@@ -16,6 +16,7 @@
package android.hardware.display;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
@@ -75,6 +76,7 @@ public final class BrightnessConfiguration implements Parcelable {
return 0;
}
+ @NonNull
@Override
public String toString() {
StringBuilder sb = new StringBuilder("BrightnessConfiguration{[");
@@ -105,7 +107,7 @@ public final class BrightnessConfiguration implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (o == this) {
return true;
}
diff --git a/core/java/android/hardware/hdmi/HdmiDeviceInfo.java b/core/java/android/hardware/hdmi/HdmiDeviceInfo.java
index 48ea9a63e2d6..1711ad2b1fbe 100644
--- a/core/java/android/hardware/hdmi/HdmiDeviceInfo.java
+++ b/core/java/android/hardware/hdmi/HdmiDeviceInfo.java
@@ -16,6 +16,8 @@
package android.hardware.hdmi;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -458,6 +460,7 @@ public class HdmiDeviceInfo implements Parcelable {
}
}
+ @NonNull
@Override
public String toString() {
StringBuffer s = new StringBuffer();
@@ -493,7 +496,7 @@ public class HdmiDeviceInfo implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (!(obj instanceof HdmiDeviceInfo)) {
return false;
}
diff --git a/core/java/android/hardware/hdmi/HdmiPortInfo.java b/core/java/android/hardware/hdmi/HdmiPortInfo.java
index 1f0f45a91917..8eca6626a679 100644
--- a/core/java/android/hardware/hdmi/HdmiPortInfo.java
+++ b/core/java/android/hardware/hdmi/HdmiPortInfo.java
@@ -15,6 +15,8 @@
*/
package android.hardware.hdmi;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -162,6 +164,7 @@ public final class HdmiPortInfo implements Parcelable {
dest.writeInt(mMhlSupported ? 1 : 0);
}
+ @NonNull
@Override
public String toString() {
StringBuffer s = new StringBuffer();
@@ -174,7 +177,7 @@ public final class HdmiPortInfo implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (!(o instanceof HdmiPortInfo)) {
return false;
}
diff --git a/core/java/android/hardware/location/ContextHubInfo.java b/core/java/android/hardware/location/ContextHubInfo.java
index 36123e3d4229..2d592ca7214f 100644
--- a/core/java/android/hardware/location/ContextHubInfo.java
+++ b/core/java/android/hardware/location/ContextHubInfo.java
@@ -15,6 +15,7 @@
*/
package android.hardware.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.hardware.contexthub.V1_0.ContextHub;
import android.os.Parcel;
@@ -247,6 +248,7 @@ public class ContextHubInfo implements Parcelable {
return mChrePatchVersion;
}
+ @NonNull
@Override
public String toString() {
String retVal = "";
diff --git a/core/java/android/hardware/location/ContextHubMessage.java b/core/java/android/hardware/location/ContextHubMessage.java
index f078ff9444c0..6777c53940a6 100644
--- a/core/java/android/hardware/location/ContextHubMessage.java
+++ b/core/java/android/hardware/location/ContextHubMessage.java
@@ -16,6 +16,7 @@
package android.hardware.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -127,7 +128,7 @@ public class ContextHubMessage implements Parcelable {
out.writeByteArray(mData);
}
- public static final Parcelable.Creator<ContextHubMessage> CREATOR
+ public static final @NonNull Parcelable.Creator<ContextHubMessage> CREATOR
= new Parcelable.Creator<ContextHubMessage>() {
public ContextHubMessage createFromParcel(Parcel in) {
return new ContextHubMessage(in);
@@ -138,6 +139,7 @@ public class ContextHubMessage implements Parcelable {
}
};
+ @NonNull
@Override
public String toString() {
int length = mData.length;
diff --git a/core/java/android/hardware/location/GeofenceHardwareMonitorEvent.java b/core/java/android/hardware/location/GeofenceHardwareMonitorEvent.java
index 70792370ad25..78cca9601a2d 100644
--- a/core/java/android/hardware/location/GeofenceHardwareMonitorEvent.java
+++ b/core/java/android/hardware/location/GeofenceHardwareMonitorEvent.java
@@ -16,6 +16,7 @@
package android.hardware.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.location.Location;
import android.os.Parcel;
@@ -72,7 +73,7 @@ public class GeofenceHardwareMonitorEvent implements Parcelable {
return mLocation;
}
- public static final Creator<GeofenceHardwareMonitorEvent> CREATOR =
+ public static final @NonNull Creator<GeofenceHardwareMonitorEvent> CREATOR =
new Creator<GeofenceHardwareMonitorEvent>() {
@Override
public GeofenceHardwareMonitorEvent createFromParcel(Parcel source) {
@@ -108,6 +109,7 @@ public class GeofenceHardwareMonitorEvent implements Parcelable {
parcel.writeParcelable(mLocation, flags);
}
+ @NonNull
@Override
public String toString() {
return String.format(
diff --git a/core/java/android/hardware/location/MemoryRegion.java b/core/java/android/hardware/location/MemoryRegion.java
index 857434ea75b9..9b63c1978c06 100644
--- a/core/java/android/hardware/location/MemoryRegion.java
+++ b/core/java/android/hardware/location/MemoryRegion.java
@@ -16,6 +16,7 @@
package android.hardware.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -78,6 +79,7 @@ public class MemoryRegion implements Parcelable{
return mIsExecutable;
}
+ @NonNull
@Override
public String toString() {
String mask = "";
diff --git a/core/java/android/hardware/location/NanoApp.java b/core/java/android/hardware/location/NanoApp.java
index ded1bb8c4c44..6a3b032ee007 100644
--- a/core/java/android/hardware/location/NanoApp.java
+++ b/core/java/android/hardware/location/NanoApp.java
@@ -15,6 +15,7 @@
*/
package android.hardware.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -366,6 +367,7 @@ public class NanoApp implements Parcelable {
}
};
+ @NonNull
@Override
public String toString() {
String retVal = "Id : " + mAppId;
diff --git a/core/java/android/hardware/location/NanoAppFilter.java b/core/java/android/hardware/location/NanoAppFilter.java
index 562065e20815..8a251f6027e9 100644
--- a/core/java/android/hardware/location/NanoAppFilter.java
+++ b/core/java/android/hardware/location/NanoAppFilter.java
@@ -16,6 +16,7 @@
package android.hardware.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -131,6 +132,7 @@ public class NanoAppFilter implements Parcelable {
(versionsMatch(mVersionRestrictionMask, mAppVersion, info.getAppVersion()));
}
+ @NonNull
@Override
public String toString() {
return "nanoAppId: 0x" + Long.toHexString(mAppId)
diff --git a/core/java/android/hardware/location/NanoAppInstanceInfo.java b/core/java/android/hardware/location/NanoAppInstanceInfo.java
index 2db6a794fe9c..c7df31a3318a 100644
--- a/core/java/android/hardware/location/NanoAppInstanceInfo.java
+++ b/core/java/android/hardware/location/NanoAppInstanceInfo.java
@@ -219,6 +219,7 @@ public class NanoAppInstanceInfo implements Parcelable {
}
};
+ @NonNull
@Override
public String toString() {
String retVal = "handle : " + mHandle;
diff --git a/core/java/android/hardware/location/NanoAppMessage.java b/core/java/android/hardware/location/NanoAppMessage.java
index fec1f7148a1e..0f89d660ac68 100644
--- a/core/java/android/hardware/location/NanoAppMessage.java
+++ b/core/java/android/hardware/location/NanoAppMessage.java
@@ -15,6 +15,7 @@
*/
package android.hardware.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -133,7 +134,7 @@ public final class NanoAppMessage implements Parcelable {
out.writeByteArray(mMessageBody);
}
- public static final Creator<NanoAppMessage> CREATOR =
+ public static final @NonNull Creator<NanoAppMessage> CREATOR =
new Creator<NanoAppMessage>() {
@Override
public NanoAppMessage createFromParcel(Parcel in) {
@@ -146,6 +147,7 @@ public final class NanoAppMessage implements Parcelable {
}
};
+ @NonNull
@Override
public String toString() {
int length = mMessageBody.length;
diff --git a/core/java/android/hardware/radio/ProgramSelector.java b/core/java/android/hardware/radio/ProgramSelector.java
index 90d407ca3a96..4fcc7408cafc 100644
--- a/core/java/android/hardware/radio/ProgramSelector.java
+++ b/core/java/android/hardware/radio/ProgramSelector.java
@@ -485,6 +485,7 @@ public final class ProgramSelector implements Parcelable {
return new ProgramSelector(programType, primary, secondary, null);
}
+ @NonNull
@Override
public String toString() {
StringBuilder sb = new StringBuilder("ProgramSelector(type=").append(mProgramType)
@@ -502,7 +503,7 @@ public final class ProgramSelector implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof ProgramSelector)) return false;
ProgramSelector other = (ProgramSelector) obj;
@@ -598,6 +599,7 @@ public final class ProgramSelector implements Parcelable {
return mValue;
}
+ @NonNull
@Override
public String toString() {
return "Identifier(" + mType + ", " + mValue + ")";
@@ -609,7 +611,7 @@ public final class ProgramSelector implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof Identifier)) return false;
Identifier other = (Identifier) obj;
diff --git a/core/java/android/hardware/radio/RadioManager.java b/core/java/android/hardware/radio/RadioManager.java
index 8263bb8dfd2d..c72bb379a9d1 100644
--- a/core/java/android/hardware/radio/RadioManager.java
+++ b/core/java/android/hardware/radio/RadioManager.java
@@ -485,6 +485,7 @@ public class RadioManager {
return 0;
}
+ @NonNull
@Override
public String toString() {
return "ModuleProperties [mId=" + mId
@@ -507,7 +508,7 @@ public class RadioManager {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof ModuleProperties)) return false;
ModuleProperties other = (ModuleProperties) obj;
@@ -660,6 +661,7 @@ public class RadioManager {
return 0;
}
+ @NonNull
@Override
public String toString() {
return "BandDescriptor [mRegion=" + mRegion + ", mType=" + mType + ", mLowerLimit="
@@ -679,7 +681,7 @@ public class RadioManager {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj)
return true;
if (!(obj instanceof BandDescriptor))
@@ -788,6 +790,7 @@ public class RadioManager {
return 0;
}
+ @NonNull
@Override
public String toString() {
return "FmBandDescriptor [ "+ super.toString() + " mStereo=" + mStereo
@@ -808,7 +811,7 @@ public class RadioManager {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
@@ -877,6 +880,7 @@ public class RadioManager {
return 0;
}
+ @NonNull
@Override
public String toString() {
return "AmBandDescriptor [ "+ super.toString() + " mStereo=" + mStereo + "]";
@@ -891,7 +895,7 @@ public class RadioManager {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
@@ -997,6 +1001,7 @@ public class RadioManager {
return 0;
}
+ @NonNull
@Override
public String toString() {
return "BandConfig [ " + mDescriptor.toString() + "]";
@@ -1011,7 +1016,7 @@ public class RadioManager {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj)
return true;
if (!(obj instanceof BandConfig))
@@ -1125,6 +1130,7 @@ public class RadioManager {
return 0;
}
+ @NonNull
@Override
public String toString() {
return "FmBandConfig [" + super.toString()
@@ -1145,7 +1151,7 @@ public class RadioManager {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
@@ -1317,6 +1323,7 @@ public class RadioManager {
return 0;
}
+ @NonNull
@Override
public String toString() {
return "AmBandConfig [" + super.toString()
@@ -1332,7 +1339,7 @@ public class RadioManager {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
@@ -1656,6 +1663,7 @@ public class RadioManager {
return 0;
}
+ @NonNull
@Override
public String toString() {
return "ProgramInfo"
@@ -1676,7 +1684,7 @@ public class RadioManager {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof ProgramInfo)) return false;
ProgramInfo other = (ProgramInfo) obj;
diff --git a/core/java/android/hardware/radio/RadioMetadata.java b/core/java/android/hardware/radio/RadioMetadata.java
index baa7a502688e..a17413a15e9c 100644
--- a/core/java/android/hardware/radio/RadioMetadata.java
+++ b/core/java/android/hardware/radio/RadioMetadata.java
@@ -269,6 +269,7 @@ public final class RadioMetadata implements Parcelable {
mBundle = in.readBundle();
}
+ @NonNull
@Override
public String toString() {
StringBuilder sb = new StringBuilder("RadioMetadata[");
diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java
index 007f4bcd43fc..7c12737e5ecb 100644
--- a/core/java/android/hardware/soundtrigger/SoundTrigger.java
+++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java
@@ -22,6 +22,7 @@ import static android.system.OsConstants.ENOSYS;
import static android.system.OsConstants.EPERM;
import static android.system.OsConstants.EPIPE;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
@@ -821,7 +822,7 @@ public class SoundTrigger {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj)
return true;
if (obj == null)
@@ -861,6 +862,7 @@ public class SoundTrigger {
return true;
}
+ @NonNull
@Override
public String toString() {
return "RecognitionEvent [status=" + status + ", soundModelHandle=" + soundModelHandle
diff --git a/core/java/android/hardware/usb/UsbPort.java b/core/java/android/hardware/usb/UsbPort.java
index afdb202211dd..c8d5774eaa1f 100644
--- a/core/java/android/hardware/usb/UsbPort.java
+++ b/core/java/android/hardware/usb/UsbPort.java
@@ -16,6 +16,7 @@
package android.hardware.usb;
+import android.annotation.NonNull;
import android.hardware.usb.V1_0.Constants;
import android.os.Parcel;
import android.os.Parcelable;
@@ -271,7 +272,7 @@ public final class UsbPort implements Parcelable {
return false;
}
-
+ @NonNull
@Override
public String toString() {
return "UsbPort{id=" + mId + ", supportedModes=" + modeToString(mSupportedModes) + "}";
diff --git a/core/java/android/hardware/usb/UsbPortStatus.java b/core/java/android/hardware/usb/UsbPortStatus.java
index 2cd8209fccda..b09708b5f47f 100644
--- a/core/java/android/hardware/usb/UsbPortStatus.java
+++ b/core/java/android/hardware/usb/UsbPortStatus.java
@@ -16,6 +16,7 @@
package android.hardware.usb;
+import android.annotation.NonNull;
import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -107,6 +108,7 @@ public final class UsbPortStatus implements Parcelable {
return mSupportedRoleCombinations;
}
+ @NonNull
@Override
public String toString() {
return "UsbPortStatus{connected=" + isConnected()
@@ -131,7 +133,7 @@ public final class UsbPortStatus implements Parcelable {
dest.writeInt(mSupportedRoleCombinations);
}
- public static final Parcelable.Creator<UsbPortStatus> CREATOR =
+ public static final @NonNull Parcelable.Creator<UsbPortStatus> CREATOR =
new Parcelable.Creator<UsbPortStatus>() {
@Override
public UsbPortStatus createFromParcel(Parcel in) {
diff --git a/core/java/android/net/IpSecManager.java b/core/java/android/net/IpSecManager.java
index 889e9bc7875e..2262a046471d 100644
--- a/core/java/android/net/IpSecManager.java
+++ b/core/java/android/net/IpSecManager.java
@@ -853,6 +853,7 @@ public final class IpSecManager {
return mResourceId;
}
+ @NonNull
@Override
public String toString() {
return new StringBuilder()
diff --git a/core/java/android/net/LocalSocketImpl.java b/core/java/android/net/LocalSocketImpl.java
index fe7632c25445..b066a15106af 100644
--- a/core/java/android/net/LocalSocketImpl.java
+++ b/core/java/android/net/LocalSocketImpl.java
@@ -157,40 +157,6 @@ class LocalSocketImpl
write_native(b, myFd);
}
}
-
- /**
- * Wait until the data in sending queue is emptied. A polling version
- * for flush implementation.
- * @throws IOException
- * if an i/o error occurs.
- */
- @Override
- public void flush() throws IOException {
- FileDescriptor myFd = fd;
- if (myFd == null) throw new IOException("socket closed");
-
- // Loop until the output buffer is empty.
- Int32Ref pending = new Int32Ref(0);
- while (true) {
- try {
- // See linux/net/unix/af_unix.c
- Os.ioctlInt(myFd, OsConstants.TIOCOUTQ, pending);
- } catch (ErrnoException e) {
- throw e.rethrowAsIOException();
- }
-
- if (pending.value <= 0) {
- // The output buffer is empty.
- break;
- }
-
- try {
- Thread.sleep(10);
- } catch (InterruptedException ie) {
- break;
- }
- }
- }
}
private native int read_native(FileDescriptor fd) throws IOException;
diff --git a/core/java/android/net/NetworkKey.java b/core/java/android/net/NetworkKey.java
index 31a74dc77250..5f0c7b788166 100644
--- a/core/java/android/net/NetworkKey.java
+++ b/core/java/android/net/NetworkKey.java
@@ -16,6 +16,7 @@
package android.net;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.net.wifi.ScanResult;
@@ -152,7 +153,7 @@ public class NetworkKey implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -166,6 +167,7 @@ public class NetworkKey implements Parcelable {
return Objects.hash(type, wifiKey);
}
+ @NonNull
@Override
public String toString() {
switch (type) {
diff --git a/core/java/android/net/RssiCurve.java b/core/java/android/net/RssiCurve.java
index 5b81f52ac58c..4b4451c37d1d 100644
--- a/core/java/android/net/RssiCurve.java
+++ b/core/java/android/net/RssiCurve.java
@@ -16,6 +16,8 @@
package android.net;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -170,7 +172,7 @@ public class RssiCurve implements Parcelable {
* not considered equal to each other.
*/
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -187,6 +189,7 @@ public class RssiCurve implements Parcelable {
return Objects.hash(start, bucketWidth, activeNetworkRssiBoost) ^ Arrays.hashCode(rssiBuckets);
}
+ @NonNull
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git a/core/java/android/net/ScoredNetwork.java b/core/java/android/net/ScoredNetwork.java
index e38d227bb4e6..66497890f53e 100644
--- a/core/java/android/net/ScoredNetwork.java
+++ b/core/java/android/net/ScoredNetwork.java
@@ -16,6 +16,7 @@
package android.net;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Bundle;
@@ -182,7 +183,7 @@ public class ScoredNetwork implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -220,6 +221,7 @@ public class ScoredNetwork implements Parcelable {
return Objects.hash(networkKey, rssiCurve, meteredHint, attributes);
}
+ @NonNull
@Override
public String toString() {
StringBuilder out = new StringBuilder(
diff --git a/core/java/android/net/StaticIpConfiguration.java b/core/java/android/net/StaticIpConfiguration.java
index 0600036848d6..9ce6bae843a9 100644
--- a/core/java/android/net/StaticIpConfiguration.java
+++ b/core/java/android/net/StaticIpConfiguration.java
@@ -236,6 +236,7 @@ public final class StaticIpConfiguration implements Parcelable {
return lp;
}
+ @NonNull
@Override
public String toString() {
StringBuffer str = new StringBuffer();
@@ -267,7 +268,7 @@ public final class StaticIpConfiguration implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof StaticIpConfiguration)) return false;
diff --git a/core/java/android/net/WebAddress.java b/core/java/android/net/WebAddress.java
index fbc281f26ce8..994c794e6997 100644
--- a/core/java/android/net/WebAddress.java
+++ b/core/java/android/net/WebAddress.java
@@ -18,6 +18,7 @@ package android.net;
import static android.util.Patterns.GOOD_IRI_CHAR;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.os.Build;
@@ -132,6 +133,7 @@ public class WebAddress {
if (mScheme.equals("")) mScheme = "http";
}
+ @NonNull
@Override
public String toString() {
String port = "";
diff --git a/core/java/android/net/WifiKey.java b/core/java/android/net/WifiKey.java
index 68b505d49da6..d9e0cf15afd4 100644
--- a/core/java/android/net/WifiKey.java
+++ b/core/java/android/net/WifiKey.java
@@ -16,6 +16,8 @@
package android.net;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -91,7 +93,7 @@ public class WifiKey implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -105,6 +107,7 @@ public class WifiKey implements Parcelable {
return Objects.hash(ssid, bssid);
}
+ @NonNull
@Override
public String toString() {
return "WifiKey[SSID=" + ssid + ",BSSID=" + bssid + "]";
diff --git a/core/java/android/net/apf/ApfCapabilities.java b/core/java/android/net/apf/ApfCapabilities.java
index 4dd2ace59c62..b1de74e817bc 100644
--- a/core/java/android/net/apf/ApfCapabilities.java
+++ b/core/java/android/net/apf/ApfCapabilities.java
@@ -17,6 +17,7 @@
package android.net.apf;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.content.res.Resources;
@@ -91,6 +92,7 @@ public final class ApfCapabilities implements Parcelable {
}
};
+ @NonNull
@Override
public String toString() {
return String.format("%s{version: %d, maxSize: %d, format: %d}", getClass().getSimpleName(),
@@ -98,7 +100,7 @@ public final class ApfCapabilities implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (!(obj instanceof ApfCapabilities)) return false;
final ApfCapabilities other = (ApfCapabilities) obj;
return apfVersionSupported == other.apfVersionSupported
diff --git a/core/java/android/net/metrics/ApfProgramEvent.java b/core/java/android/net/metrics/ApfProgramEvent.java
index cd8ce8d87778..fbe4ac0a8d70 100644
--- a/core/java/android/net/metrics/ApfProgramEvent.java
+++ b/core/java/android/net/metrics/ApfProgramEvent.java
@@ -18,6 +18,7 @@ package android.net.metrics;
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
@@ -185,6 +186,7 @@ public final class ApfProgramEvent implements IpConnectivityLog.Event {
return 0;
}
+ @NonNull
@Override
public String toString() {
String lifetimeString = (lifetime < Long.MAX_VALUE) ? lifetime + "s" : "forever";
@@ -193,7 +195,7 @@ public final class ApfProgramEvent implements IpConnectivityLog.Event {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null || !(obj.getClass().equals(ApfProgramEvent.class))) return false;
final ApfProgramEvent other = (ApfProgramEvent) obj;
return lifetime == other.lifetime
diff --git a/core/java/android/net/metrics/ApfStats.java b/core/java/android/net/metrics/ApfStats.java
index 2e78469afd0d..191303f8684c 100644
--- a/core/java/android/net/metrics/ApfStats.java
+++ b/core/java/android/net/metrics/ApfStats.java
@@ -17,6 +17,7 @@
package android.net.metrics;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
@@ -260,6 +261,7 @@ public final class ApfStats implements IpConnectivityLog.Event {
return 0;
}
+ @NonNull
@Override
public String toString() {
return new StringBuilder("ApfStats(")
@@ -276,7 +278,7 @@ public final class ApfStats implements IpConnectivityLog.Event {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null || !(obj.getClass().equals(ApfStats.class))) return false;
final ApfStats other = (ApfStats) obj;
return durationMs == other.durationMs
diff --git a/core/java/android/net/metrics/DhcpClientEvent.java b/core/java/android/net/metrics/DhcpClientEvent.java
index fa6bff32b822..0361eac8da71 100644
--- a/core/java/android/net/metrics/DhcpClientEvent.java
+++ b/core/java/android/net/metrics/DhcpClientEvent.java
@@ -17,6 +17,7 @@
package android.net.metrics;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
@@ -97,13 +98,14 @@ public final class DhcpClientEvent implements IpConnectivityLog.Event {
return 0;
}
+ @NonNull
@Override
public String toString() {
return String.format("DhcpClientEvent(%s, %dms)", msg, durationMs);
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null || !(obj.getClass().equals(DhcpClientEvent.class))) return false;
final DhcpClientEvent other = (DhcpClientEvent) obj;
return TextUtils.equals(msg, other.msg)
diff --git a/core/java/android/net/metrics/DhcpErrorEvent.java b/core/java/android/net/metrics/DhcpErrorEvent.java
index 84823464a093..751219016750 100644
--- a/core/java/android/net/metrics/DhcpErrorEvent.java
+++ b/core/java/android/net/metrics/DhcpErrorEvent.java
@@ -16,6 +16,7 @@
package android.net.metrics;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -108,6 +109,7 @@ public final class DhcpErrorEvent implements IpConnectivityLog.Event {
return (0xFFFF0000 & errorCode) | (0xFF & option);
}
+ @NonNull
@Override
public String toString() {
return String.format("DhcpErrorEvent(%s)", Decoder.constants.get(errorCode));
diff --git a/core/java/android/net/metrics/IpManagerEvent.java b/core/java/android/net/metrics/IpManagerEvent.java
index 77908e6593ad..66588a799cde 100644
--- a/core/java/android/net/metrics/IpManagerEvent.java
+++ b/core/java/android/net/metrics/IpManagerEvent.java
@@ -17,6 +17,8 @@
package android.net.metrics;
import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -95,6 +97,7 @@ public final class IpManagerEvent implements IpConnectivityLog.Event {
}
};
+ @NonNull
@Override
public String toString() {
return String.format("IpManagerEvent(%s, %dms)",
@@ -102,7 +105,7 @@ public final class IpManagerEvent implements IpConnectivityLog.Event {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null || !(obj.getClass().equals(IpManagerEvent.class))) return false;
final IpManagerEvent other = (IpManagerEvent) obj;
return eventType == other.eventType
diff --git a/core/java/android/net/metrics/IpReachabilityEvent.java b/core/java/android/net/metrics/IpReachabilityEvent.java
index f9ee39bf9fbd..8b856fb790a3 100644
--- a/core/java/android/net/metrics/IpReachabilityEvent.java
+++ b/core/java/android/net/metrics/IpReachabilityEvent.java
@@ -16,6 +16,8 @@
package android.net.metrics;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -85,6 +87,7 @@ public final class IpReachabilityEvent implements IpConnectivityLog.Event {
}
};
+ @NonNull
@Override
public String toString() {
int hi = eventType & 0xff00;
@@ -94,7 +97,7 @@ public final class IpReachabilityEvent implements IpConnectivityLog.Event {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null || !(obj.getClass().equals(IpReachabilityEvent.class))) return false;
final IpReachabilityEvent other = (IpReachabilityEvent) obj;
return eventType == other.eventType;
diff --git a/core/java/android/net/metrics/NetworkEvent.java b/core/java/android/net/metrics/NetworkEvent.java
index ec0f82a3aa66..ebdc2bf4faa6 100644
--- a/core/java/android/net/metrics/NetworkEvent.java
+++ b/core/java/android/net/metrics/NetworkEvent.java
@@ -17,6 +17,8 @@
package android.net.metrics;
import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -115,6 +117,7 @@ public final class NetworkEvent implements IpConnectivityLog.Event {
}
};
+ @NonNull
@Override
public String toString() {
return String.format("NetworkEvent(%s, %dms)",
@@ -122,7 +125,7 @@ public final class NetworkEvent implements IpConnectivityLog.Event {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null || !(obj.getClass().equals(NetworkEvent.class))) return false;
final NetworkEvent other = (NetworkEvent) obj;
return eventType == other.eventType
diff --git a/core/java/android/net/metrics/RaEvent.java b/core/java/android/net/metrics/RaEvent.java
index 6ccca7dba5b9..e62154dd9320 100644
--- a/core/java/android/net/metrics/RaEvent.java
+++ b/core/java/android/net/metrics/RaEvent.java
@@ -17,6 +17,7 @@
package android.net.metrics;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -85,6 +86,7 @@ public final class RaEvent implements IpConnectivityLog.Event {
return 0;
}
+ @NonNull
@Override
public String toString() {
return new StringBuilder("RaEvent(lifetimes: ")
@@ -98,7 +100,7 @@ public final class RaEvent implements IpConnectivityLog.Event {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null || !(obj.getClass().equals(RaEvent.class))) return false;
final RaEvent other = (RaEvent) obj;
return routerLifetime == other.routerLifetime
diff --git a/core/java/android/net/metrics/ValidationProbeEvent.java b/core/java/android/net/metrics/ValidationProbeEvent.java
index 67844202de5d..199c9d29dfbf 100644
--- a/core/java/android/net/metrics/ValidationProbeEvent.java
+++ b/core/java/android/net/metrics/ValidationProbeEvent.java
@@ -18,6 +18,7 @@ package android.net.metrics;
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -164,6 +165,7 @@ public final class ValidationProbeEvent implements IpConnectivityLog.Event {
return Decoder.constants.get(probeType & 0xff00, "UNKNOWN");
}
+ @NonNull
@Override
public String toString() {
return String.format("ValidationProbeEvent(%s:%d %s, %dms)",
@@ -171,7 +173,7 @@ public final class ValidationProbeEvent implements IpConnectivityLog.Event {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null || !(obj.getClass().equals(ValidationProbeEvent.class))) return false;
final ValidationProbeEvent other = (ValidationProbeEvent) obj;
return durationMs == other.durationMs
diff --git a/core/java/android/net/util/MultinetworkPolicyTracker.java b/core/java/android/net/util/MultinetworkPolicyTracker.java
index f7e494d830ac..4e88149b8095 100644
--- a/core/java/android/net/util/MultinetworkPolicyTracker.java
+++ b/core/java/android/net/util/MultinetworkPolicyTracker.java
@@ -64,7 +64,7 @@ public class MultinetworkPolicyTracker {
private final Context mContext;
private final Handler mHandler;
- private final Runnable mReevaluateRunnable;
+ private final Runnable mAvoidBadWifiCallback;
private final List<Uri> mSettingsUris;
private final ContentResolver mResolver;
private final SettingObserver mSettingObserver;
@@ -81,12 +81,7 @@ public class MultinetworkPolicyTracker {
public MultinetworkPolicyTracker(Context ctx, Handler handler, Runnable avoidBadWifiCallback) {
mContext = ctx;
mHandler = handler;
- mReevaluateRunnable = () -> {
- if (updateAvoidBadWifi() && avoidBadWifiCallback != null) {
- avoidBadWifiCallback.run();
- }
- updateMeteredMultipathPreference();
- };
+ mAvoidBadWifiCallback = avoidBadWifiCallback;
mSettingsUris = Arrays.asList(
Settings.Global.getUriFor(NETWORK_AVOID_BAD_WIFI),
Settings.Global.getUriFor(NETWORK_METERED_MULTIPATH_PREFERENCE));
@@ -95,15 +90,15 @@ public class MultinetworkPolicyTracker {
mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- reevaluate();
+ reevaluateInternal();
}
};
- TelephonyManager.from(ctx).listen(new PhoneStateListener() {
+ TelephonyManager.from(ctx).listen(new PhoneStateListener(handler.getLooper()) {
@Override
public void onActiveDataSubscriptionIdChanged(int subId) {
mActiveSubId = subId;
- reevaluate();
+ reevaluateInternal();
}
}, PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE);
@@ -119,7 +114,7 @@ public class MultinetworkPolicyTracker {
final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
mContext.registerReceiverAsUser(
- mBroadcastReceiver, UserHandle.ALL, intentFilter, null, null);
+ mBroadcastReceiver, UserHandle.ALL, intentFilter, null, mHandler);
reevaluate();
}
@@ -164,7 +159,17 @@ public class MultinetworkPolicyTracker {
@VisibleForTesting
public void reevaluate() {
- mHandler.post(mReevaluateRunnable);
+ mHandler.post(this::reevaluateInternal);
+ }
+
+ /**
+ * Reevaluate the settings. Must be called on the handler thread.
+ */
+ private void reevaluateInternal() {
+ if (updateAvoidBadWifi() && mAvoidBadWifiCallback != null) {
+ mAvoidBadWifiCallback.run();
+ }
+ updateMeteredMultipathPreference();
}
public boolean updateAvoidBadWifi() {
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl
index 135138030e43..9b8a40a6cab0 100644
--- a/core/java/android/os/INetworkManagementService.aidl
+++ b/core/java/android/os/INetworkManagementService.aidl
@@ -150,6 +150,14 @@ interface INetworkManagementService
void startTethering(in String[] dhcpRanges);
/**
+ * Start tethering services with the specified dhcp server range and
+ * DNS proxy config.
+ * {@code boolean} is used to control legacy DNS proxy server.
+ * {@code String[]} is a set of start end pairs defining the ranges.
+ */
+ void startTetheringWithConfiguration(boolean usingLegacyDnsProxy, in String[] dhcpRanges);
+
+ /**
* Stop currently running tethering services
*/
@UnsupportedAppUsage
diff --git a/core/java/android/os/IncidentReportArgs.java b/core/java/android/os/IncidentReportArgs.java
index 1aeac5f53be0..6a56a26a1128 100644
--- a/core/java/android/os/IncidentReportArgs.java
+++ b/core/java/android/os/IncidentReportArgs.java
@@ -16,6 +16,7 @@
package android.os;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -110,6 +111,7 @@ public final class IncidentReportArgs implements Parcelable {
/**
* Print this report as a string.
*/
+ @NonNull
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Incident(");
diff --git a/core/java/android/os/ServiceSpecificException.java b/core/java/android/os/ServiceSpecificException.java
index 03d5d3e195e0..49ce40bb6ee9 100644
--- a/core/java/android/os/ServiceSpecificException.java
+++ b/core/java/android/os/ServiceSpecificException.java
@@ -15,6 +15,7 @@
*/
package android.os;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
@@ -44,6 +45,7 @@ public class ServiceSpecificException extends RuntimeException {
this.errorCode = errorCode;
}
+ @NonNull
@Override
public String toString() {
return super.toString() + " (code " + errorCode + ")";
diff --git a/core/java/android/os/WorkSource.java b/core/java/android/os/WorkSource.java
index 43f579d21ce2..0458b5e322b0 100644
--- a/core/java/android/os/WorkSource.java
+++ b/core/java/android/os/WorkSource.java
@@ -1,5 +1,6 @@
package android.os;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
@@ -186,7 +187,7 @@ public class WorkSource implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (o instanceof WorkSource) {
WorkSource other = (WorkSource) o;
@@ -968,6 +969,7 @@ public class WorkSource implements Parcelable {
mTags = tags;
}
+ @NonNull
@Override
public String toString() {
StringBuilder result = new StringBuilder("WorkChain{");
@@ -994,7 +996,7 @@ public class WorkSource implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (o instanceof WorkChain) {
WorkChain other = (WorkChain) o;
diff --git a/core/java/android/printservice/PrintServiceInfo.java b/core/java/android/printservice/PrintServiceInfo.java
index 57f122923c69..1562e6b82bf6 100644
--- a/core/java/android/printservice/PrintServiceInfo.java
+++ b/core/java/android/printservice/PrintServiceInfo.java
@@ -17,6 +17,7 @@
package android.printservice;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.content.ComponentName;
import android.content.Context;
@@ -292,7 +293,7 @@ public final class PrintServiceInfo implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
@@ -313,6 +314,7 @@ public final class PrintServiceInfo implements Parcelable {
return true;
}
+ @NonNull
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
diff --git a/core/java/android/provider/SearchIndexableData.java b/core/java/android/provider/SearchIndexableData.java
index a60be5363d62..87f9af39f5ba 100644
--- a/core/java/android/provider/SearchIndexableData.java
+++ b/core/java/android/provider/SearchIndexableData.java
@@ -16,6 +16,7 @@
package android.provider;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.content.Context;
@@ -139,6 +140,7 @@ public abstract class SearchIndexableData {
context = ctx;
}
+ @NonNull
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
diff --git a/core/java/android/provider/SearchIndexableResource.java b/core/java/android/provider/SearchIndexableResource.java
index 1eb17345f09d..0765b6be0032 100644
--- a/core/java/android/provider/SearchIndexableResource.java
+++ b/core/java/android/provider/SearchIndexableResource.java
@@ -16,6 +16,7 @@
package android.provider;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.content.Context;
@@ -66,6 +67,7 @@ public class SearchIndexableResource extends SearchIndexableData {
super(context);
}
+ @NonNull
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
diff --git a/core/java/android/service/euicc/EuiccProfileInfo.java b/core/java/android/service/euicc/EuiccProfileInfo.java
index 4a3978242a11..94610e7e0ffe 100644
--- a/core/java/android/service/euicc/EuiccProfileInfo.java
+++ b/core/java/android/service/euicc/EuiccProfileInfo.java
@@ -16,6 +16,7 @@
package android.service.euicc;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
@@ -395,7 +396,7 @@ public final class EuiccProfileInfo implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
@@ -430,6 +431,7 @@ public final class EuiccProfileInfo implements Parcelable {
return result;
}
+ @NonNull
@Override
public String toString() {
return "EuiccProfileInfo (nickname="
diff --git a/core/java/android/service/notification/Adjustment.java b/core/java/android/service/notification/Adjustment.java
index 7348cf6848f9..882659f1dcc1 100644
--- a/core/java/android/service/notification/Adjustment.java
+++ b/core/java/android/service/notification/Adjustment.java
@@ -15,6 +15,7 @@
*/
package android.service.notification;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.app.Notification;
@@ -162,6 +163,7 @@ public final class Adjustment implements Parcelable {
dest.writeInt(mUser);
}
+ @NonNull
@Override
public String toString() {
return "Adjustment{"
diff --git a/core/java/android/service/notification/NotificationStats.java b/core/java/android/service/notification/NotificationStats.java
index 76d5328d2fc5..1df34a30646d 100644
--- a/core/java/android/service/notification/NotificationStats.java
+++ b/core/java/android/service/notification/NotificationStats.java
@@ -16,6 +16,8 @@
package android.service.notification;
import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.app.RemoteInput;
@@ -213,7 +215,7 @@ public final class NotificationStats implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -240,6 +242,7 @@ public final class NotificationStats implements Parcelable {
return result;
}
+ @NonNull
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("NotificationStats{");
diff --git a/core/java/android/service/notification/SnoozeCriterion.java b/core/java/android/service/notification/SnoozeCriterion.java
index bd93eff95dbd..ab93cda9821b 100644
--- a/core/java/android/service/notification/SnoozeCriterion.java
+++ b/core/java/android/service/notification/SnoozeCriterion.java
@@ -15,6 +15,7 @@
*/
package android.service.notification;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -118,7 +119,7 @@ public final class SnoozeCriterion implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
diff --git a/core/java/android/service/resolver/ResolverTarget.java b/core/java/android/service/resolver/ResolverTarget.java
index fb3e2d738469..149d2fd0db37 100644
--- a/core/java/android/service/resolver/ResolverTarget.java
+++ b/core/java/android/service/resolver/ResolverTarget.java
@@ -16,13 +16,10 @@
package android.service.resolver;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
-import android.util.ArrayMap;
-
-import java.util.Map;
/**
* A ResolverTarget contains features by which an app or option will be ranked, in
@@ -173,6 +170,7 @@ public final class ResolverTarget implements Parcelable {
}
// serialize the class to a string.
+ @NonNull
@Override
public String toString() {
return "ResolverTarget{"
diff --git a/core/java/android/view/textclassifier/OWNERS b/core/java/android/view/textclassifier/OWNERS
new file mode 100644
index 000000000000..893a083398fa
--- /dev/null
+++ b/core/java/android/view/textclassifier/OWNERS
@@ -0,0 +1,10 @@
+# Bug component: 709498
+
+toki@google.com
+tonymak@google.com
+zilka@google.com
+jalt@google.com
+joannechung@google.com
+svetoslavganov@google.com
+eugeniom@google.com
+samsellem@google.com \ No newline at end of file
diff --git a/core/java/com/android/internal/os/RuntimeInit.java b/core/java/com/android/internal/os/RuntimeInit.java
index 5b129f4c6e52..1de2e7272f4d 100644
--- a/core/java/com/android/internal/os/RuntimeInit.java
+++ b/core/java/com/android/internal/os/RuntimeInit.java
@@ -20,7 +20,6 @@ import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.app.ActivityThread;
import android.app.ApplicationErrorReport;
-import android.content.type.MimeMapImpl;
import android.os.Build;
import android.os.DeadObjectException;
import android.os.Debug;
@@ -34,9 +33,6 @@ import com.android.internal.logging.AndroidConfig;
import com.android.server.NetworkManagementSocketTagger;
import dalvik.system.RuntimeHooks;
import dalvik.system.VMRuntime;
-
-import libcore.net.MimeMap;
-
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -214,14 +210,6 @@ public class RuntimeInit {
RuntimeHooks.setTimeZoneIdSupplier(() -> SystemProperties.get("persist.sys.timezone"));
/*
- * Replace libcore's minimal default mapping between MIME types and file
- * extensions with a mapping that's suitable for Android. Android's mapping
- * contains many more entries that are derived from IANA registrations but
- * with several customizations (extensions, overrides).
- */
- MimeMap.setDefault(MimeMapImpl.createDefaultInstance());
-
- /*
* Sets handler for java.util.logging to use Android log facilities.
* The odd "new instance-and-then-throw-away" is a mirror of how
* the "java.util.logging.config.class" system property works. We
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 2abc8c080ac1..b03e76b9e3f0 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -94,11 +94,6 @@ public class ZygoteInit {
private static final int LOG_BOOT_PROGRESS_PRELOAD_START = 3020;
private static final int LOG_BOOT_PROGRESS_PRELOAD_END = 3030;
- /**
- * when preloading, GC after allocating this many bytes
- */
- private static final int PRELOAD_GC_THRESHOLD = 50000;
-
private static final String ABI_LIST_ARG = "--abi-list=";
// TODO (chriswailes): Re-name this --zygote-socket-name= and then add a
@@ -278,11 +273,6 @@ public class ZygoteInit {
droppedPriviliges = true;
}
- // Alter the target heap utilization. With explicit GCs this
- // is not likely to have any effect.
- float defaultUtilization = runtime.getTargetHeapUtilization();
- runtime.setTargetHeapUtilization(0.8f);
-
try {
BufferedReader br =
new BufferedReader(new InputStreamReader(is), Zygote.SOCKET_BUFFER_SIZE);
@@ -298,9 +288,6 @@ public class ZygoteInit {
Trace.traceBegin(Trace.TRACE_TAG_DALVIK, line);
try {
- if (false) {
- Log.v(TAG, "Preloading " + line + "...");
- }
// Load and explicitly initialize the given class. Use
// Class.forName(String, boolean, ClassLoader) to avoid repeated stack lookups
// (to derive the caller's class-loader). Use true to force initialization, and
@@ -331,8 +318,6 @@ public class ZygoteInit {
Log.e(TAG, "Error reading " + PRELOADED_CLASSES + ".", e);
} finally {
IoUtils.closeQuietly(is);
- // Restore default.
- runtime.setTargetHeapUtilization(defaultUtilization);
// Fill in dex caches with classes, fields, and methods brought in by preloading.
Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadDexCaches");
diff --git a/core/java/com/package.html b/core/java/com/package.html
new file mode 100644
index 000000000000..8f35da9a8158
--- /dev/null
+++ b/core/java/com/package.html
@@ -0,0 +1,8 @@
+<!--
+ This file is to hide classes in com.* packages from SDK
+-->
+<html>
+<body>
+ {@hide}
+</body>
+</html>
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index 861dc0f3879c..b79ffa540de5 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -7344,12 +7344,12 @@ void ResTable::print_value(const Package* pkg, const Res_value& value) const
print_complex(value.data, true);
printf("\n");
} else if (value.dataType >= Res_value::TYPE_FIRST_COLOR_INT
- || value.dataType <= Res_value::TYPE_LAST_COLOR_INT) {
+ && value.dataType <= Res_value::TYPE_LAST_COLOR_INT) {
printf("(color) #%08x\n", value.data);
} else if (value.dataType == Res_value::TYPE_INT_BOOLEAN) {
printf("(boolean) %s\n", value.data ? "true" : "false");
} else if (value.dataType >= Res_value::TYPE_FIRST_INT
- || value.dataType <= Res_value::TYPE_LAST_INT) {
+ && value.dataType <= Res_value::TYPE_LAST_INT) {
printf("(int) 0x%08x or %d\n", value.data, value.data);
} else {
printf("(unknown type) t=0x%02x d=0x%08x (s=0x%04x r=0x%02x)\n",
diff --git a/location/java/android/location/GpsClock.java b/location/java/android/location/GpsClock.java
index 4135a1c949bb..2e66b416b8a2 100644
--- a/location/java/android/location/GpsClock.java
+++ b/location/java/android/location/GpsClock.java
@@ -16,6 +16,7 @@
package android.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -437,6 +438,7 @@ public class GpsClock implements Parcelable {
return 0;
}
+ @NonNull
@Override
public String toString() {
final String format = " %-15s = %s\n";
diff --git a/location/java/android/location/GpsMeasurement.java b/location/java/android/location/GpsMeasurement.java
index f13a440f411a..a8cd756ae669 100644
--- a/location/java/android/location/GpsMeasurement.java
+++ b/location/java/android/location/GpsMeasurement.java
@@ -16,6 +16,7 @@
package android.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -1244,6 +1245,7 @@ public class GpsMeasurement implements Parcelable {
return 0;
}
+ @NonNull
@Override
public String toString() {
final String format = " %-29s = %s\n";
diff --git a/location/java/android/location/GpsMeasurementsEvent.java b/location/java/android/location/GpsMeasurementsEvent.java
index 136687337861..2442d8c36f8d 100644
--- a/location/java/android/location/GpsMeasurementsEvent.java
+++ b/location/java/android/location/GpsMeasurementsEvent.java
@@ -140,6 +140,7 @@ public class GpsMeasurementsEvent implements Parcelable {
parcel.writeTypedArray(measurementsArray, flags);
}
+ @NonNull
@Override
public String toString() {
StringBuilder builder = new StringBuilder("[ GpsMeasurementsEvent:\n\n");
diff --git a/location/java/android/location/GpsNavigationMessage.java b/location/java/android/location/GpsNavigationMessage.java
index 5c3c71012cdd..7823597afa98 100644
--- a/location/java/android/location/GpsNavigationMessage.java
+++ b/location/java/android/location/GpsNavigationMessage.java
@@ -290,6 +290,7 @@ public class GpsNavigationMessage implements Parcelable {
return 0;
}
+ @NonNull
@Override
public String toString() {
final String format = " %-15s = %s\n";
diff --git a/location/java/android/location/GpsNavigationMessageEvent.java b/location/java/android/location/GpsNavigationMessageEvent.java
index bd6921c74152..8faa366a5284 100644
--- a/location/java/android/location/GpsNavigationMessageEvent.java
+++ b/location/java/android/location/GpsNavigationMessageEvent.java
@@ -109,6 +109,7 @@ public class GpsNavigationMessageEvent implements Parcelable {
parcel.writeParcelable(mNavigationMessage, flags);
}
+ @NonNull
@Override
public String toString() {
StringBuilder builder = new StringBuilder("[ GpsNavigationMessageEvent:\n\n");
diff --git a/location/java/android/location/LocationRequest.java b/location/java/android/location/LocationRequest.java
index 154bd563fb0f..9c9c715970bc 100644
--- a/location/java/android/location/LocationRequest.java
+++ b/location/java/android/location/LocationRequest.java
@@ -16,6 +16,7 @@
package android.location;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.os.Build;
@@ -705,6 +706,7 @@ public final class LocationRequest implements Parcelable {
}
}
+ @NonNull
@Override
public String toString() {
StringBuilder s = new StringBuilder();
diff --git a/location/lib/Android.bp b/location/lib/Android.bp
index 1bf5221b1dc1..349b9e063784 100644
--- a/location/lib/Android.bp
+++ b/location/lib/Android.bp
@@ -16,10 +16,9 @@
java_sdk_library {
name: "com.android.location.provider",
- srcs: ["java/**/*.java"],
+ srcs: [
+ "java/**/*.java",
+ ":framework-srcs",
+ ],
api_packages: ["com.android.location.provider"],
- srcs_lib: "framework",
- // TODO(b/70046217): remove core/java and android below. It was added to provide definitions for
- // types like android.os.Bundle
- srcs_lib_whitelist_pkgs: ["android", "com.android.internal.location"],
}
diff --git a/media/java/android/media/AudioFocusInfo.java b/media/java/android/media/AudioFocusInfo.java
index 0a9ca025e2b0..8875a15e4ce7 100644
--- a/media/java/android/media/AudioFocusInfo.java
+++ b/media/java/android/media/AudioFocusInfo.java
@@ -16,6 +16,7 @@
package android.media;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -144,7 +145,7 @@ public final class AudioFocusInfo implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj)
return true;
if (obj == null)
diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java
index fb10e6ee7333..6b5ecd1c696f 100644
--- a/media/java/android/media/session/MediaSessionManager.java
+++ b/media/java/android/media/session/MediaSessionManager.java
@@ -41,7 +41,6 @@ import android.os.ServiceManager;
import android.os.UserHandle;
import android.service.media.MediaBrowserService;
import android.service.notification.NotificationListenerService;
-import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import android.view.KeyEvent;
@@ -882,7 +881,7 @@ public final class MediaSessionManager {
* @return {@code true} if equals, {@code false} otherwise
*/
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (!(obj instanceof RemoteUserInfo)) {
return false;
}
diff --git a/media/java/android/media/tv/TvInputHardwareInfo.java b/media/java/android/media/tv/TvInputHardwareInfo.java
index 762f0c07e121..ad8c94965045 100644
--- a/media/java/android/media/tv/TvInputHardwareInfo.java
+++ b/media/java/android/media/tv/TvInputHardwareInfo.java
@@ -19,12 +19,14 @@ package android.media.tv;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.hardware.tv.input.V1_0.Constants;
import android.media.AudioManager;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
+
import java.lang.annotation.Retention;
/**
@@ -141,6 +143,7 @@ public final class TvInputHardwareInfo implements Parcelable {
return mCableConnectionStatus;
}
+ @NonNull
@Override
public String toString() {
StringBuilder b = new StringBuilder(128);
diff --git a/media/java/android/media/tv/TvStreamConfig.java b/media/java/android/media/tv/TvStreamConfig.java
index 0c2f3fec26a4..75fe11a5dd22 100644
--- a/media/java/android/media/tv/TvStreamConfig.java
+++ b/media/java/android/media/tv/TvStreamConfig.java
@@ -16,6 +16,8 @@
package android.media.tv;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -87,6 +89,7 @@ public class TvStreamConfig implements Parcelable {
return mGeneration;
}
+ @NonNull
@Override
public String toString() {
return "TvStreamConfig {mStreamId=" + mStreamId + ";" + "mType=" + mType + ";mGeneration="
@@ -163,7 +166,7 @@ public class TvStreamConfig implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null) return false;
if (!(obj instanceof TvStreamConfig)) return false;
diff --git a/media/java/android/media/tv/TvTrackInfo.java b/media/java/android/media/tv/TvTrackInfo.java
index 10cbad9ed6af..68c2a84b11c3 100644
--- a/media/java/android/media/tv/TvTrackInfo.java
+++ b/media/java/android/media/tv/TvTrackInfo.java
@@ -394,6 +394,7 @@ public final class TvTrackInfo implements Parcelable {
*
* @param encrypted The encryption status of the track.
*/
+ @NonNull
public Builder setEncrypted(boolean encrypted) {
mEncrypted = encrypted;
return this;
diff --git a/media/lib/signer/Android.bp b/media/lib/signer/Android.bp
index f04b2fc16a17..85a007f427b8 100644
--- a/media/lib/signer/Android.bp
+++ b/media/lib/signer/Android.bp
@@ -16,8 +16,9 @@
java_sdk_library {
name: "com.android.mediadrm.signer",
- srcs: ["java/**/*.java"],
+ srcs: [
+ "java/**/*.java",
+ ":framework-srcs",
+ ],
api_packages: ["com.android.mediadrm.signer"],
- srcs_lib: "framework",
- srcs_lib_whitelist_pkgs: ["android.media"],
}
diff --git a/mime/Android.bp b/mime/Android.bp
deleted file mode 100644
index 9303755ba73d..000000000000
--- a/mime/Android.bp
+++ /dev/null
@@ -1,43 +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.
-
-java_library {
- name: "mimemap",
- visibility: [
- "//cts/tests/tests/mimemap:__subpackages__",
- "//frameworks/base:__subpackages__",
- ],
-
- srcs: [
- "java/android/content/type/MimeMapImpl.java",
- ],
-
- java_resources: [
- ":debian.mime.types",
- ":android.mime.types",
- ],
-
- sdk_version: "core_platform",
-}
-
-filegroup {
- name: "android.mime.types",
- visibility: [
- "//visibility:private",
- ],
- path: "java-res/",
- srcs: [
- "java-res/android.mime.types",
- ],
-}
diff --git a/mime/java-res/android.mime.types b/mime/java-res/android.mime.types
deleted file mode 100644
index 1ca912e8510b..000000000000
--- a/mime/java-res/android.mime.types
+++ /dev/null
@@ -1,146 +0,0 @@
-
-###############################################################################
-#
-# Android-specific MIME type <-> extension mappings
-#
-# Each line below defines an mapping from one MIME type to the first of the
-# listed extensions, and from listed extension back to the MIME type.
-# A mapping overrides any previous mapping _from_ that same MIME type or
-# extension (put() semantics), unless that MIME type / extension is prefixed with '?'
-# (putIfAbsent() semantics).
-#
-#
-###############################################################################
-#
-# EXAMPLES
-#
-# A line of the form:
-#
-# ?mime ext1 ?ext2 ext3
-#
-# affects the current mappings along the lines of the following pseudo code:
-#
-# mimeToExt.putIfAbsent("mime", "ext1");
-# extToMime.put("ext1", "mime");
-# extToMime.putIfAbsent("ext2", "mime");
-# extToMime.put("ext3", "mime");
-#
-# The line:
-#
-# ?text/plain txt
-#
-# leaves any earlier mapping for "text/plain" untouched, or maps that MIME type
-# to the file extension ".txt" if there is no earlier mapping. The line also
-# sets the mapping from file extension ".txt" to be the MIME type "text/plain",
-# regardless of whether a previous mapping existed.
-#
-###############################################################################
-
-
-# File extensions that Android wants to override to point to the given MIME type.
-#
-# After processing a line of the form:
-# ?<mimeType> <extension1> <extension2>
-# If <mimeType> was not already mapped to an extension then it will be
-# mapped to <extension1>.
-# <extension1> and <extension2> are mapped (or remapped) to <mimeType>.
-
-?application/epub+zip epub
-?application/pkix-cert cer
-?application/rss+xml rss
-?application/vnd.android.ota ota
-?application/vnd.apple.mpegurl m3u8
-?application/vnd.ms-pki.stl stl
-?application/vnd.ms-powerpoint pot
-?application/vnd.ms-wpl wpl
-?application/vnd.stardivision.impress sdp
-?application/vnd.stardivision.writer vor
-?application/vnd.youtube.yt yt
-?application/x-android-drm-fl fl
-?application/x-flac flac
-?application/x-font pcf
-?application/x-mpegurl m3u m3u8
-?application/x-pem-file pem
-?application/x-pkcs12 p12 pfx
-?application/x-webarchive webarchive
-?application/x-webarchive-xml webarchivexml
-?application/x-x509-server-cert crt
-?application/x-x509-user-cert crt
-
-?audio/3gpp 3gpp
-?audio/aac-adts aac
-?audio/imelody imy
-?audio/midi rtttl xmf
-?audio/mobile-xmf mxmf
-?audio/mp4 m4a
-?audio/mpegurl m3u
-?audio/sp-midi smf
-?audio/x-matroska mka
-?audio/x-pn-realaudio ra
-
-?image/bmp bmp
-?image/heic heic
-?image/heic-sequence heics
-?image/heif heif hif
-?image/heif-sequence heifs
-?image/ico cur
-?image/webp webp
-?image/x-adobe-dng dng
-?image/x-fuji-raf raf
-?image/x-icon ico
-?image/x-nikon-nrw nrw
-?image/x-panasonic-rw2 rw2
-?image/x-pentax-pef pef
-?image/x-samsung-srw srw
-?image/x-sony-arw arw
-
-?text/comma-separated-values csv
-?text/plain diff po
-?text/rtf rtf
-?text/text phps
-?text/xml xml
-?text/x-vcard vcf
-
-?video/3gpp2 3gpp2 3g2
-?video/3gpp 3gpp
-?video/avi avi
-?video/m4v m4v
-?video/mp2p mpeg
-?video/mp2t m2ts mts
-?video/mp2ts ts
-?video/vnd.youtube.yt yt
-?video/x-webex wrf
-
-# Optional additions that should not override any previous mapping.
-
-?application/x-wifi-config ?xml
-
-# Special cases where Android has a strong opinion about mappings, so we
-# define them very last and make them override in both directions (no "?").
-#
-# Lines here are of the form:
-# <mimeType> <extension1> <extension2> ...
-#
-# After processing each line,
-# <mimeType> is mapped to <extension1>
-# <extension1>, <extension2>, ... are all mapped to <mimeType>
-# This overrides any mappings for this <mimeType> / for these extensions
-# that may have been defined earlier.
-
-application/pgp-signature pgp
-application/x-x509-ca-cert crt
-audio/aac aac
-audio/basic snd
-audio/flac flac
-audio/midi rtx
-audio/mpeg mp3 m4a m4r
-audio/x-mpegurl m3u m3u8
-image/jpeg jpg
-image/x-ms-bmp bmp
-text/plain txt
-text/x-c++hdr hpp
-text/x-c++src cpp
-video/3gpp 3gpp
-video/mpeg mpeg
-video/quicktime mov
-video/x-matroska mkv
diff --git a/mime/java/android/content/type/MimeMapImpl.java b/mime/java/android/content/type/MimeMapImpl.java
deleted file mode 100644
index c904ea3f9b60..000000000000
--- a/mime/java/android/content/type/MimeMapImpl.java
+++ /dev/null
@@ -1,194 +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.content.type;
-
-import libcore.net.MimeMap;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-/**
- * Default implementation of {@link MimeMap}, a bidirectional mapping between
- * MIME types and file extensions.
- *
- * This default mapping is loaded from data files that start with some mappings
- * recognized by IANA plus some custom extensions and overrides.
- *
- * @hide
- */
-public class MimeMapImpl extends MimeMap {
-
- /**
- * Creates and returns a new {@link MimeMapImpl} instance that implements.
- * Android's default mapping between MIME types and extensions.
- */
- public static MimeMapImpl createDefaultInstance() {
- return parseFromResources("/mime.types", "/android.mime.types");
- }
-
- private static final Pattern SPLIT_PATTERN = Pattern.compile("\\s+");
-
- /**
- * Note: These maps only contain lowercase keys/values, regarded as the
- * {@link #toLowerCase(String) canonical form}.
- *
- * <p>This is the case for both extensions and MIME types. The mime.types
- * data file contains examples of mixed-case MIME types, but some applications
- * use the lowercase version of these same types. RFC 2045 section 2 states
- * that MIME types are case insensitive.
- */
- private final Map<String, String> mMimeTypeToExtension;
- private final Map<String, String> mExtensionToMimeType;
-
- public MimeMapImpl(Map<String, String> mimeTypeToExtension,
- Map<String, String> extensionToMimeType) {
- this.mMimeTypeToExtension = new HashMap<>(mimeTypeToExtension);
- for (Map.Entry<String, String> entry : mimeTypeToExtension.entrySet()) {
- checkValidMimeType(entry.getKey());
- checkValidExtension(entry.getValue());
- }
- this.mExtensionToMimeType = new HashMap<>(extensionToMimeType);
- for (Map.Entry<String, String> entry : extensionToMimeType.entrySet()) {
- checkValidExtension(entry.getKey());
- checkValidMimeType(entry.getValue());
- }
- }
-
- private static void checkValidMimeType(String s) {
- if (MimeMap.isNullOrEmpty(s) || !s.equals(MimeMap.toLowerCase(s))) {
- throw new IllegalArgumentException("Invalid MIME type: " + s);
- }
- }
-
- private static void checkValidExtension(String s) {
- if (MimeMap.isNullOrEmpty(s) || !s.equals(MimeMap.toLowerCase(s))) {
- throw new IllegalArgumentException("Invalid extension: " + s);
- }
- }
-
- static MimeMapImpl parseFromResources(String... resourceNames) {
- Map<String, String> mimeTypeToExtension = new HashMap<>();
- Map<String, String> extensionToMimeType = new HashMap<>();
- for (String resourceName : resourceNames) {
- parseTypes(mimeTypeToExtension, extensionToMimeType, resourceName);
- }
- return new MimeMapImpl(mimeTypeToExtension, extensionToMimeType);
- }
-
- /**
- * An element of a *mime.types file: A MIME type or an extension, with an optional
- * prefix of "?" (if not overriding an earlier value).
- */
- private static class Element {
- public final boolean keepExisting;
- public final String s;
-
- Element(boolean keepExisting, String value) {
- this.keepExisting = keepExisting;
- this.s = toLowerCase(value);
- if (value.isEmpty()) {
- throw new IllegalArgumentException();
- }
- }
-
- public String toString() {
- return keepExisting ? ("?" + s) : s;
- }
- }
-
- private static String maybePut(Map<String, String> map, Element keyElement, String value) {
- if (keyElement.keepExisting) {
- return map.putIfAbsent(keyElement.s, value);
- } else {
- return map.put(keyElement.s, value);
- }
- }
-
- private static void parseTypes(Map<String, String> mimeTypeToExtension,
- Map<String, String> extensionToMimeType, String resource) {
- try (BufferedReader r = new BufferedReader(
- new InputStreamReader(MimeMapImpl.class.getResourceAsStream(resource)))) {
- String line;
- while ((line = r.readLine()) != null) {
- int commentPos = line.indexOf('#');
- if (commentPos >= 0) {
- line = line.substring(0, commentPos);
- }
- line = line.trim();
- // The first time a MIME type is encountered it is mapped to the first extension
- // listed in its line. The first time an extension is encountered it is mapped
- // to the MIME type.
- //
- // When encountering a previously seen MIME type or extension, then by default
- // the later ones override earlier mappings (put() semantics); however if a MIME
- // type or extension is prefixed with '?' then any earlier mapping _from_ that
- // MIME type / extension is kept (putIfAbsent() semantics).
- final String[] split = SPLIT_PATTERN.split(line);
- if (split.length <= 1) {
- // Need mimeType + at least one extension to make a mapping.
- // "mime.types" files may also contain lines with just a mimeType without
- // an extension but we skip them as they provide no mapping info.
- continue;
- }
- List<Element> lineElements = new ArrayList<>(split.length);
- for (String s : split) {
- boolean keepExisting = s.startsWith("?");
- if (keepExisting) {
- s = s.substring(1);
- }
- if (s.isEmpty()) {
- throw new IllegalArgumentException("Invalid entry in '" + line + "'");
- }
- lineElements.add(new Element(keepExisting, s));
- }
-
- // MIME type -> first extension (one mapping)
- // This will override any earlier mapping from this MIME type to another
- // extension, unless this MIME type was prefixed with '?'.
- Element mimeElement = lineElements.get(0);
- List<Element> extensionElements = lineElements.subList(1, lineElements.size());
- String firstExtension = extensionElements.get(0).s;
- maybePut(mimeTypeToExtension, mimeElement, firstExtension);
-
- // extension -> MIME type (one or more mappings).
- // This will override any earlier mapping from this extension to another
- // MIME type, unless this extension was prefixed with '?'.
- for (Element extensionElement : extensionElements) {
- maybePut(extensionToMimeType, extensionElement, mimeElement.s);
- }
- }
- } catch (IOException | RuntimeException e) {
- throw new RuntimeException("Failed to parse " + resource, e);
- }
- }
-
- @Override
- protected String guessExtensionFromLowerCaseMimeType(String mimeType) {
- return mMimeTypeToExtension.get(mimeType);
- }
-
- @Override
- protected String guessMimeTypeFromLowerCaseExtension(String extension) {
- return mExtensionToMimeType.get(extension);
- }
-}
diff --git a/packages/WAPPushManager/Android.bp b/packages/WAPPushManager/Android.bp
index 1bec49234b6a..c3913698022d 100644
--- a/packages/WAPPushManager/Android.bp
+++ b/packages/WAPPushManager/Android.bp
@@ -9,4 +9,6 @@ android_app {
optimize: {
proguard_flags_files: ["proguard.flags"],
},
+
+ product_specific: true,
}
diff --git a/packages/WAPPushManager/CleanSpec.mk b/packages/WAPPushManager/CleanSpec.mk
index b84e1b65e75e..2dcbb1034622 100644
--- a/packages/WAPPushManager/CleanSpec.mk
+++ b/packages/WAPPushManager/CleanSpec.mk
@@ -47,3 +47,5 @@
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
+
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/WAPPushManager)
diff --git a/services/Android.bp b/services/Android.bp
index 75fd0129d27a..771f2a7f58b8 100644
--- a/services/Android.bp
+++ b/services/Android.bp
@@ -57,6 +57,5 @@ cc_library_shared {
platform_compat_config {
name: "services-platform-compat-config",
- prefix: "services",
src: ":services",
}
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 4d8d99210d81..5c9921ac20a6 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -51,7 +51,7 @@ java_library_static {
"android.hardware.contexthub-V1.0-java",
"android.hidl.manager-V1.2-java",
"dnsresolver_aidl_interface-V2-java",
- "netd_aidl_interface-V2-java",
+ "netd_aidl_interface-java",
"netd_event_listener_interface-java",
],
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 667445b1c58f..d822879e253e 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -1101,7 +1101,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
mSettingsObserver = new SettingsObserver(mContext, mHandler);
registerSettingsCallbacks();
- final DataConnectionStats dataConnectionStats = new DataConnectionStats(mContext);
+ final DataConnectionStats dataConnectionStats = new DataConnectionStats(mContext, mHandler);
dataConnectionStats.startMonitoring();
mKeepaliveTracker = new KeepaliveTracker(mContext, mHandler);
@@ -4550,7 +4550,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
Slog.w(TAG, "VPN for user " + user + " not ready yet. Skipping lockdown");
return false;
}
- setLockdownTracker(new LockdownVpnTracker(mContext, mNMS, this, vpn, profile));
+ setLockdownTracker(new LockdownVpnTracker(mContext, this, mHandler, vpn, profile));
} else {
setLockdownTracker(null);
}
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index e29bf8d294de..7f19f0610ef1 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -1003,11 +1003,15 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
@Override
public void startTethering(String[] dhcpRange) {
+ startTetheringWithConfiguration(true, dhcpRange);
+ }
+
+ @Override
+ public void startTetheringWithConfiguration(boolean usingLegacyDnsProxy, String[] dhcpRange) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
// an odd number of addrs will fail
-
try {
- mNetdService.tetherStart(dhcpRange);
+ mNetdService.tetherStartWithConfiguration(usingLegacyDnsProxy, dhcpRange);
} catch (RemoteException | ServiceSpecificException e) {
throw new IllegalStateException(e);
}
diff --git a/services/core/java/com/android/server/RecoverySystemService.java b/services/core/java/com/android/server/RecoverySystemService.java
index 1517887efec2..997178e1582b 100644
--- a/services/core/java/com/android/server/RecoverySystemService.java
+++ b/services/core/java/com/android/server/RecoverySystemService.java
@@ -25,15 +25,12 @@ import android.os.PowerManager;
import android.os.RecoverySystem;
import android.os.RemoteException;
import android.os.SystemProperties;
-import android.system.ErrnoException;
-import android.system.Os;
import android.util.Slog;
import libcore.io.IoUtils;
import java.io.DataInputStream;
import java.io.DataOutputStream;
-import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
@@ -288,7 +285,6 @@ public final class RecoverySystemService extends SystemService {
byte[] cmdUtf8 = command.getBytes("UTF-8");
dos.writeInt(cmdUtf8.length);
dos.write(cmdUtf8, 0, cmdUtf8.length);
- dos.flush();
}
// Read the status from the socket.
diff --git a/services/core/java/com/android/server/compat/CompatConfig.java b/services/core/java/com/android/server/compat/CompatConfig.java
index 044e41789bb2..027e2fb5ccaa 100644
--- a/services/core/java/com/android/server/compat/CompatConfig.java
+++ b/services/core/java/com/android/server/compat/CompatConfig.java
@@ -47,11 +47,10 @@ import javax.xml.datatype.DatatypeConfigurationException;
public final class CompatConfig {
private static final String TAG = "CompatConfig";
- private static final String CONFIG_FILE_SUFFIX = "platform_compat_config.xml";
private static final CompatConfig sInstance = new CompatConfig().initConfigFromLib(
Environment.buildPath(
- Environment.getRootDirectory(), "etc", "sysconfig"));
+ Environment.getRootDirectory(), "etc", "compatconfig"));
@GuardedBy("mChanges")
private final LongSparseArray<CompatChange> mChanges = new LongSparseArray<>();
@@ -212,10 +211,9 @@ public final class CompatConfig {
return this;
}
for (File f : libraryDir.listFiles()) {
+ Slog.d(TAG, "Found a config file: " + f.getPath());
//TODO(b/138222363): Handle duplicate ids across config files.
- if (f.getPath().endsWith(CONFIG_FILE_SUFFIX)) {
- readConfig(f);
- }
+ readConfig(f);
}
return this;
}
@@ -223,7 +221,7 @@ public final class CompatConfig {
private void readConfig(File configFile) {
try (InputStream in = new BufferedInputStream(new FileInputStream(configFile))) {
for (Change change : XmlParser.read(in).getCompatChange()) {
- Slog.w(TAG, "Adding: " + change.toString());
+ Slog.d(TAG, "Adding: " + change.toString());
addChange(new CompatChange(change));
}
} catch (IOException | DatatypeConfigurationException | XmlPullParserException e) {
diff --git a/services/core/java/com/android/server/connectivity/DataConnectionStats.java b/services/core/java/com/android/server/connectivity/DataConnectionStats.java
index 227ab2341012..e6a4428ef219 100644
--- a/services/core/java/com/android/server/connectivity/DataConnectionStats.java
+++ b/services/core/java/com/android/server/connectivity/DataConnectionStats.java
@@ -21,6 +21,8 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
+import android.os.Handler;
+import android.os.Looper;
import android.os.RemoteException;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
@@ -39,15 +41,19 @@ public class DataConnectionStats extends BroadcastReceiver {
private final Context mContext;
private final IBatteryStats mBatteryStats;
+ private final Handler mListenerHandler;
+ private final PhoneStateListener mPhoneStateListener;
private IccCardConstants.State mSimState = IccCardConstants.State.READY;
private SignalStrength mSignalStrength;
private ServiceState mServiceState;
private int mDataState = TelephonyManager.DATA_DISCONNECTED;
- public DataConnectionStats(Context context) {
+ public DataConnectionStats(Context context, Handler listenerHandler) {
mContext = context;
mBatteryStats = BatteryStatsService.getService();
+ mListenerHandler = listenerHandler;
+ mPhoneStateListener = new PhoneStateListenerImpl(listenerHandler.getLooper());
}
public void startMonitoring() {
@@ -63,7 +69,7 @@ public class DataConnectionStats extends BroadcastReceiver {
filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(ConnectivityManager.INET_CONDITION_ACTION);
- mContext.registerReceiver(this, filter);
+ mContext.registerReceiver(this, filter, null /* broadcastPermission */, mListenerHandler);
}
@Override
@@ -128,7 +134,11 @@ public class DataConnectionStats extends BroadcastReceiver {
&& mServiceState.getState() != ServiceState.STATE_POWER_OFF;
}
- private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
+ private class PhoneStateListenerImpl extends PhoneStateListener {
+ PhoneStateListenerImpl(Looper looper) {
+ super(looper);
+ }
+
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
mSignalStrength = signalStrength;
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index 86d12124785d..5fd5c4bebb2a 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -455,7 +455,20 @@ public class Tethering extends BaseNetworkObserver {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
- ((BluetoothPan) proxy).setBluetoothTethering(enable);
+ // Clear identify is fine because caller already pass tethering permission at
+ // ConnectivityService#startTethering()(or stopTethering) before the control comes
+ // here. Bluetooth will check tethering permission again that there is
+ // Context#getOpPackageName() under BluetoothPan#setBluetoothTethering() to get
+ // caller's package name for permission check.
+ // Calling BluetoothPan#setBluetoothTethering() here means the package name always
+ // be system server. If calling identity is not cleared, that package's uid might
+ // not match calling uid and end up in permission denied.
+ final long identityToken = Binder.clearCallingIdentity();
+ try {
+ ((BluetoothPan) proxy).setBluetoothTethering(enable);
+ } finally {
+ Binder.restoreCallingIdentity(identityToken);
+ }
// TODO: Enabling bluetooth tethering can fail asynchronously here.
// We should figure out a way to bubble up that failure instead of sending success.
final int result = (((BluetoothPan) proxy).isTetheringOn() == enable)
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 1bd29e51b8e2..063ad75fe7e2 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -2082,7 +2082,6 @@ public class Vpn {
}
out.write(0xFF);
out.write(0xFF);
- out.flush();
// Wait for End-of-File.
InputStream in = mSockets[i].getInputStream();
diff --git a/services/core/java/com/android/server/net/LockdownVpnTracker.java b/services/core/java/com/android/server/net/LockdownVpnTracker.java
index 3f15b381c18b..77fbe41ebb88 100644
--- a/services/core/java/com/android/server/net/LockdownVpnTracker.java
+++ b/services/core/java/com/android/server/net/LockdownVpnTracker.java
@@ -19,6 +19,8 @@ package com.android.server.net;
import static android.Manifest.permission.CONNECTIVITY_INTERNAL;
import static android.provider.Settings.ACTION_VPN_SETTINGS;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
@@ -32,7 +34,7 @@ import android.net.LinkProperties;
import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
import android.net.NetworkInfo.State;
-import android.os.INetworkManagementService;
+import android.os.Handler;
import android.security.Credentials;
import android.security.KeyStore;
import android.text.TextUtils;
@@ -63,22 +65,19 @@ public class LockdownVpnTracker {
private static final String ACTION_LOCKDOWN_RESET = "com.android.server.action.LOCKDOWN_RESET";
- private static final int ROOT_UID = 0;
+ @NonNull private final Context mContext;
+ @NonNull private final ConnectivityService mConnService;
+ @NonNull private final Handler mHandler;
+ @NonNull private final Vpn mVpn;
+ @NonNull private final VpnProfile mProfile;
- private final Context mContext;
- private final INetworkManagementService mNetService;
- private final ConnectivityService mConnService;
- private final Vpn mVpn;
- private final VpnProfile mProfile;
+ @NonNull private final Object mStateLock = new Object();
- private final Object mStateLock = new Object();
-
- private final PendingIntent mConfigIntent;
- private final PendingIntent mResetIntent;
+ @NonNull private final PendingIntent mConfigIntent;
+ @NonNull private final PendingIntent mResetIntent;
+ @Nullable
private String mAcceptedEgressIface;
- private String mAcceptedIface;
- private List<LinkAddress> mAcceptedSourceAddr;
private int mErrorCount;
@@ -86,11 +85,14 @@ public class LockdownVpnTracker {
return KeyStore.getInstance().contains(Credentials.LOCKDOWN_VPN);
}
- public LockdownVpnTracker(Context context, INetworkManagementService netService,
- ConnectivityService connService, Vpn vpn, VpnProfile profile) {
+ public LockdownVpnTracker(@NonNull Context context,
+ @NonNull ConnectivityService connService,
+ @NonNull Handler handler,
+ @NonNull Vpn vpn,
+ @NonNull VpnProfile profile) {
mContext = Preconditions.checkNotNull(context);
- mNetService = Preconditions.checkNotNull(netService);
mConnService = Preconditions.checkNotNull(connService);
+ mHandler = Preconditions.checkNotNull(handler);
mVpn = Preconditions.checkNotNull(vpn);
mProfile = Preconditions.checkNotNull(profile);
@@ -176,11 +178,6 @@ public class LockdownVpnTracker {
final String iface = vpnConfig.interfaze;
final List<LinkAddress> sourceAddrs = vpnConfig.addresses;
- if (TextUtils.equals(iface, mAcceptedIface)
- && sourceAddrs.equals(mAcceptedSourceAddr)) {
- return;
- }
-
Slog.d(TAG, "VPN connected using iface=" + iface +
", sourceAddr=" + sourceAddrs.toString());
EventLogTags.writeLockdownVpnConnected(egressType);
@@ -205,7 +202,7 @@ public class LockdownVpnTracker {
mVpn.setLockdown(true);
final IntentFilter resetFilter = new IntentFilter(ACTION_LOCKDOWN_RESET);
- mContext.registerReceiver(mResetReceiver, resetFilter, CONNECTIVITY_INTERNAL, null);
+ mContext.registerReceiver(mResetReceiver, resetFilter, CONNECTIVITY_INTERNAL, mHandler);
handleStateChangedLocked();
}
diff --git a/services/net/Android.bp b/services/net/Android.bp
index fb548f9975c5..8f8f9f9bbf55 100644
--- a/services/net/Android.bp
+++ b/services/net/Android.bp
@@ -67,7 +67,7 @@ java_library_static {
static_libs: [
"dnsresolver_aidl_interface-V2-java",
"ipmemorystore-client",
- "netd_aidl_interface-V2-java",
+ "netd_aidl_interface-java",
"networkstack-aidl-interfaces-V3-java",
],
}
diff --git a/telecomm/java/android/telecom/AudioState.java b/telecomm/java/android/telecom/AudioState.java
index a9b75a391255..4acee7dade4e 100644
--- a/telecomm/java/android/telecom/AudioState.java
+++ b/telecomm/java/android/telecom/AudioState.java
@@ -16,6 +16,8 @@
package android.telecom;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.os.Build;
@@ -81,7 +83,7 @@ public class AudioState implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj == null) {
return false;
}
@@ -93,6 +95,7 @@ public class AudioState implements Parcelable {
getSupportedRouteMask() == state.getSupportedRouteMask();
}
+ @NonNull
@Override
public String toString() {
return String.format(Locale.US,
diff --git a/telephony/java/android/telephony/CallAttributes.java b/telephony/java/android/telephony/CallAttributes.java
index 2ff2d91348de..a52ad23256be 100644
--- a/telephony/java/android/telephony/CallAttributes.java
+++ b/telephony/java/android/telephony/CallAttributes.java
@@ -17,6 +17,7 @@
package android.telephony;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -44,6 +45,7 @@ public final class CallAttributes implements Parcelable {
this.mCallQuality = callQuality;
}
+ @NonNull
@Override
public String toString() {
return "mPreciseCallState=" + mPreciseCallState + " mNetworkType=" + mNetworkType
@@ -109,7 +111,7 @@ public final class CallAttributes implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (o == null || !(o instanceof CallAttributes) || hashCode() != o.hashCode()) {
return false;
}
diff --git a/telephony/java/android/telephony/CallQuality.java b/telephony/java/android/telephony/CallQuality.java
index cbe622847130..5ae3df3a88b0 100644
--- a/telephony/java/android/telephony/CallQuality.java
+++ b/telephony/java/android/telephony/CallQuality.java
@@ -17,6 +17,8 @@
package android.telephony;
import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -252,6 +254,7 @@ public final class CallQuality implements Parcelable {
}
// Parcelable things
+ @NonNull
@Override
public String toString() {
return "CallQuality: {downlinkCallQualityLevel=" + mDownlinkCallQualityLevel
@@ -285,7 +288,7 @@ public final class CallQuality implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (o == null || !(o instanceof CallQuality) || hashCode() != o.hashCode()) {
return false;
}
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 44c50f0a288b..4f6abfefcef8 100755
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -3480,7 +3480,7 @@ public class CarrierConfigManager {
* @see #getConfigForSubId
*/
@Nullable
- public PersistableBundle getConfigByComponentForSubId(String prefix, int subId) {
+ public PersistableBundle getConfigByComponentForSubId(@NonNull String prefix, int subId) {
PersistableBundle configs = getConfigForSubId(subId);
if (configs == null) {
diff --git a/telephony/java/android/telephony/CarrierRestrictionRules.java b/telephony/java/android/telephony/CarrierRestrictionRules.java
index cb15d7b967cb..48812616afde 100644
--- a/telephony/java/android/telephony/CarrierRestrictionRules.java
+++ b/telephony/java/android/telephony/CarrierRestrictionRules.java
@@ -323,6 +323,7 @@ public final class CarrierRestrictionRules implements Parcelable {
}
};
+ @NonNull
@Override
public String toString() {
return "CarrierRestrictionRules(allowed:" + mAllowedCarriers + ", excluded:"
diff --git a/telephony/java/android/telephony/DataSpecificRegistrationInfo.java b/telephony/java/android/telephony/DataSpecificRegistrationInfo.java
index 3dd931898c18..407ced71a0e7 100644
--- a/telephony/java/android/telephony/DataSpecificRegistrationInfo.java
+++ b/telephony/java/android/telephony/DataSpecificRegistrationInfo.java
@@ -17,6 +17,7 @@
package android.telephony;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -134,6 +135,7 @@ public final class DataSpecificRegistrationInfo implements Parcelable {
return 0;
}
+ @NonNull
@Override
public String toString() {
return new StringBuilder().append(this.getClass().getName())
@@ -155,7 +157,7 @@ public final class DataSpecificRegistrationInfo implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (!(o instanceof DataSpecificRegistrationInfo)) return false;
diff --git a/telephony/java/android/telephony/LteVopsSupportInfo.java b/telephony/java/android/telephony/LteVopsSupportInfo.java
index fda20bd4cf12..80682312b303 100644
--- a/telephony/java/android/telephony/LteVopsSupportInfo.java
+++ b/telephony/java/android/telephony/LteVopsSupportInfo.java
@@ -17,6 +17,8 @@
package android.telephony;
import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -94,7 +96,7 @@ public final class LteVopsSupportInfo implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (o == null || !(o instanceof LteVopsSupportInfo)) {
return false;
}
@@ -112,6 +114,7 @@ public final class LteVopsSupportInfo implements Parcelable {
/**
* @return string representation.
*/
+ @NonNull
@Override
public String toString() {
return ("LteVopsSupportInfo : "
diff --git a/telephony/java/android/telephony/NetworkRegistrationInfo.java b/telephony/java/android/telephony/NetworkRegistrationInfo.java
index 2fae949cacb3..a76b8da09064 100644
--- a/telephony/java/android/telephony/NetworkRegistrationInfo.java
+++ b/telephony/java/android/telephony/NetworkRegistrationInfo.java
@@ -501,6 +501,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
}
}
+ @NonNull
@Override
public String toString() {
return new StringBuilder("NetworkRegistrationInfo{")
@@ -531,7 +532,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (!(o instanceof NetworkRegistrationInfo)) {
diff --git a/telephony/java/android/telephony/PhoneNumberRange.java b/telephony/java/android/telephony/PhoneNumberRange.java
index 12df9b5b33fe..0cb3544f1bc4 100644
--- a/telephony/java/android/telephony/PhoneNumberRange.java
+++ b/telephony/java/android/telephony/PhoneNumberRange.java
@@ -17,6 +17,7 @@
package android.telephony;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -104,7 +105,7 @@ public final class PhoneNumberRange implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PhoneNumberRange that = (PhoneNumberRange) o;
@@ -119,6 +120,7 @@ public final class PhoneNumberRange implements Parcelable {
return Objects.hash(mCountryCode, mPrefix, mLowerBound, mUpperBound);
}
+ @NonNull
@Override
public String toString() {
return "PhoneNumberRange{"
diff --git a/telephony/java/android/telephony/PreciseCallState.java b/telephony/java/android/telephony/PreciseCallState.java
index 19e1931a30df..0c98c4c30294 100644
--- a/telephony/java/android/telephony/PreciseCallState.java
+++ b/telephony/java/android/telephony/PreciseCallState.java
@@ -17,6 +17,8 @@
package android.telephony;
import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
@@ -276,7 +278,7 @@ public final class PreciseCallState implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
@@ -294,6 +296,7 @@ public final class PreciseCallState implements Parcelable {
&& mPreciseDisconnectCause == other.mPreciseDisconnectCause);
}
+ @NonNull
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
diff --git a/telephony/java/android/telephony/PreciseDataConnectionState.java b/telephony/java/android/telephony/PreciseDataConnectionState.java
index d59367821a5d..d40b6a2ec920 100644
--- a/telephony/java/android/telephony/PreciseDataConnectionState.java
+++ b/telephony/java/android/telephony/PreciseDataConnectionState.java
@@ -177,7 +177,7 @@ public final class PreciseDataConnectionState implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (!(obj instanceof PreciseDataConnectionState)) {
return false;
@@ -191,6 +191,7 @@ public final class PreciseDataConnectionState implements Parcelable {
&& mState == other.mState;
}
+ @NonNull
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java
index d4ea29fe1463..7aae5e4d8fcd 100644
--- a/telephony/java/android/telephony/SmsManager.java
+++ b/telephony/java/android/telephony/SmsManager.java
@@ -48,7 +48,6 @@ import com.android.internal.telephony.SmsRawData;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -1555,15 +1554,13 @@ public final class SmsManager {
public boolean
deleteMessageFromIcc(int messageIndex) {
boolean success = false;
- byte[] pdu = new byte[SMS_RECORD_LENGTH-1];
- Arrays.fill(pdu, (byte)0xff);
try {
ISms iSms = getISmsService();
if (iSms != null) {
success = iSms.updateMessageOnIccEfForSubscriber(getSubscriptionId(),
ActivityThread.currentPackageName(),
- messageIndex, STATUS_ON_ICC_FREE, pdu);
+ messageIndex, STATUS_ON_ICC_FREE, null /* pdu */);
}
} catch (RemoteException ex) {
// ignore it
diff --git a/telephony/java/android/telephony/SubscriptionPlan.java b/telephony/java/android/telephony/SubscriptionPlan.java
index d67169ccd284..98291a0cd10e 100644
--- a/telephony/java/android/telephony/SubscriptionPlan.java
+++ b/telephony/java/android/telephony/SubscriptionPlan.java
@@ -131,7 +131,7 @@ public final class SubscriptionPlan implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (obj instanceof SubscriptionPlan) {
final SubscriptionPlan other = (SubscriptionPlan) obj;
return Objects.equals(cycleRule, other.cycleRule)
diff --git a/telephony/java/android/telephony/TelephonyHistogram.java b/telephony/java/android/telephony/TelephonyHistogram.java
index e1c3d7b3c858..19cd2c3ba3d0 100644
--- a/telephony/java/android/telephony/TelephonyHistogram.java
+++ b/telephony/java/android/telephony/TelephonyHistogram.java
@@ -15,13 +15,12 @@
*/
package android.telephony;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
/**
* Parcelable class to store Telephony histogram.
@@ -238,6 +237,8 @@ public final class TelephonyHistogram implements Parcelable {
}
}
+ @NonNull
+ @Override
public String toString() {
String basic = " Histogram id = " + mId + " Time(ms): min = " + mMinTimeMs + " max = "
+ mMaxTimeMs + " avg = " + mAverageTimeMs + " Count = " + mSampleCount;
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index d72ca6bec189..5bdfde5ee5f6 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -10926,24 +10926,28 @@ public class TelephonyManager {
}
/**
- * Get whether reboot is required or not after making changes to modem configurations.
+ * Get whether making changes to modem configurations by {@link #switchMultiSimConfig(int)} will
+ * trigger device reboot.
* The modem configuration change refers to switching from single SIM configuration to DSDS
* or the other way around.
- * @Return {@code true} if reboot is required after making changes to modem configurations,
- * otherwise return {@code false}.
*
- * @hide
+ * <p>Requires Permission:
+ * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} or that the
+ * calling app has carrier privileges (see {@link #hasCarrierPrivileges}).
+ *
+ * @return {@code true} if reboot will be triggered after making changes to modem
+ * configurations, otherwise return {@code false}.
*/
- @SystemApi
- @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
- public boolean isRebootRequiredForModemConfigChange() {
+ @RequiresPermission(Manifest.permission.READ_PHONE_STATE)
+ public boolean doesSwitchMultiSimConfigTriggerReboot() {
try {
ITelephony service = getITelephony();
if (service != null) {
- return service.isRebootRequiredForModemConfigChange();
+ return service.doesSwitchMultiSimConfigTriggerReboot(getSubId(),
+ getOpPackageName());
}
} catch (RemoteException e) {
- Log.e(TAG, "isRebootRequiredForModemConfigChange RemoteException", e);
+ Log.e(TAG, "doesSwitchMultiSimConfigTriggerReboot RemoteException", e);
}
return false;
}
diff --git a/telephony/java/android/telephony/UiccAccessRule.java b/telephony/java/android/telephony/UiccAccessRule.java
index d8836dccbcde..fce76b2da3c2 100644
--- a/telephony/java/android/telephony/UiccAccessRule.java
+++ b/telephony/java/android/telephony/UiccAccessRule.java
@@ -15,6 +15,7 @@
*/
package android.telephony;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.content.pm.PackageInfo;
@@ -213,7 +214,7 @@ public final class UiccAccessRule implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
@@ -236,6 +237,7 @@ public final class UiccAccessRule implements Parcelable {
return result;
}
+ @NonNull
@Override
public String toString() {
return "cert: " + IccUtils.bytesToHexString(mCertificateHash) + " pkg: " +
diff --git a/telephony/java/android/telephony/UiccSlotInfo.java b/telephony/java/android/telephony/UiccSlotInfo.java
index 2bc677562b78..8260b48b4f8b 100644
--- a/telephony/java/android/telephony/UiccSlotInfo.java
+++ b/telephony/java/android/telephony/UiccSlotInfo.java
@@ -16,6 +16,8 @@
package android.telephony;
import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -179,7 +181,7 @@ public class UiccSlotInfo implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
@@ -210,6 +212,7 @@ public class UiccSlotInfo implements Parcelable {
return result;
}
+ @NonNull
@Override
public String toString() {
return "UiccSlotInfo (mIsActive="
diff --git a/telephony/java/android/telephony/data/DataCallResponse.java b/telephony/java/android/telephony/data/DataCallResponse.java
index 3806a7e2cbe0..a6aea7c5fd47 100644
--- a/telephony/java/android/telephony/data/DataCallResponse.java
+++ b/telephony/java/android/telephony/data/DataCallResponse.java
@@ -213,6 +213,7 @@ public final class DataCallResponse implements Parcelable {
*/
public int getMtu() { return mMtu; }
+ @NonNull
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
@@ -233,7 +234,7 @@ public final class DataCallResponse implements Parcelable {
}
@Override
- public boolean equals (Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (!(o instanceof DataCallResponse)) {
diff --git a/telephony/java/android/telephony/data/DataProfile.java b/telephony/java/android/telephony/data/DataProfile.java
index c53ade16cae4..0d79ec98fcbb 100644
--- a/telephony/java/android/telephony/data/DataProfile.java
+++ b/telephony/java/android/telephony/data/DataProfile.java
@@ -257,6 +257,7 @@ public final class DataProfile implements Parcelable {
return 0;
}
+ @NonNull
@Override
public String toString() {
return "DataProfile=" + mProfileId + "/" + mProtocolType + "/" + mAuthType
@@ -303,7 +304,7 @@ public final class DataProfile implements Parcelable {
};
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DataProfile that = (DataProfile) o;
diff --git a/telephony/java/android/telephony/euicc/EuiccNotification.java b/telephony/java/android/telephony/euicc/EuiccNotification.java
index 43a770748260..d79084ceaa5c 100644
--- a/telephony/java/android/telephony/euicc/EuiccNotification.java
+++ b/telephony/java/android/telephony/euicc/EuiccNotification.java
@@ -16,6 +16,7 @@
package android.telephony.euicc;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
@@ -107,7 +108,7 @@ public final class EuiccNotification implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
@@ -132,6 +133,7 @@ public final class EuiccNotification implements Parcelable {
return result;
}
+ @NonNull
@Override
public String toString() {
return "EuiccNotification (seq="
diff --git a/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java b/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java
index 67ae983efeb0..ee4d750e8eb6 100644
--- a/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java
+++ b/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java
@@ -16,6 +16,7 @@
package android.telephony.euicc;
import android.annotation.IntDef;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -28,7 +29,6 @@ import com.android.internal.annotations.VisibleForTesting;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -204,7 +204,7 @@ public final class EuiccRulesAuthTable implements Parcelable {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
diff --git a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
index 70daa8babbdf..f18398d38ea4 100644
--- a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
+++ b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
@@ -185,6 +185,7 @@ public final class ImsCallForwardInfo implements Parcelable {
out.writeInt(mServiceClass);
}
+ @NonNull
@Override
public String toString() {
return super.toString() + ", Condition: " + mCondition
diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java
index fd58f7ea2752..e1c3aba915d8 100644
--- a/telephony/java/android/telephony/ims/ImsCallProfile.java
+++ b/telephony/java/android/telephony/ims/ImsCallProfile.java
@@ -534,7 +534,7 @@ public final class ImsCallProfile implements Parcelable {
mMediaProfile = profile.mMediaProfile;
}
-
+ @NonNull
@Override
public String toString() {
return "{ serviceType=" + mServiceType
diff --git a/telephony/java/android/telephony/ims/ImsConferenceState.java b/telephony/java/android/telephony/ims/ImsConferenceState.java
index 8af8cffcd878..0c0bc76f8bba 100644
--- a/telephony/java/android/telephony/ims/ImsConferenceState.java
+++ b/telephony/java/android/telephony/ims/ImsConferenceState.java
@@ -16,6 +16,7 @@
package android.telephony.ims;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Bundle;
import android.os.Parcel;
@@ -176,6 +177,7 @@ public final class ImsConferenceState implements Parcelable {
return Call.STATE_ACTIVE;
}
+ @NonNull
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
diff --git a/telephony/java/android/telephony/ims/ImsExternalCallState.java b/telephony/java/android/telephony/ims/ImsExternalCallState.java
index c56915d131f3..a199d8a82f34 100644
--- a/telephony/java/android/telephony/ims/ImsExternalCallState.java
+++ b/telephony/java/android/telephony/ims/ImsExternalCallState.java
@@ -213,6 +213,7 @@ public final class ImsExternalCallState implements Parcelable {
return mIsHeld;
}
+ @NonNull
@Override
public String toString() {
return "ImsExternalCallState { mCallId = " + mCallId +
diff --git a/telephony/java/android/telephony/ims/ImsReasonInfo.java b/telephony/java/android/telephony/ims/ImsReasonInfo.java
index ace3caf3c0df..2dc390d33670 100644
--- a/telephony/java/android/telephony/ims/ImsReasonInfo.java
+++ b/telephony/java/android/telephony/ims/ImsReasonInfo.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.Parcel;
@@ -1170,6 +1171,8 @@ public final class ImsReasonInfo implements Parcelable {
/**
* @return the string format of {@link ImsReasonInfo}
*/
+ @NonNull
+ @Override
public String toString() {
return "ImsReasonInfo :: {" + mCode + ", " + mExtraCode + ", " + mExtraMessage + "}";
}
diff --git a/telephony/java/android/telephony/ims/ImsSsData.java b/telephony/java/android/telephony/ims/ImsSsData.java
index 0f5675886d38..ec3838c5c38d 100644
--- a/telephony/java/android/telephony/ims/ImsSsData.java
+++ b/telephony/java/android/telephony/ims/ImsSsData.java
@@ -570,6 +570,8 @@ public final class ImsSsData implements Parcelable {
return mCfInfo;
}
+ @NonNull
+ @Override
public String toString() {
return "[ImsSsData] " + "ServiceType: " + getServiceType()
+ " RequestType: " + getRequestType()
diff --git a/telephony/java/android/telephony/ims/ImsSsInfo.java b/telephony/java/android/telephony/ims/ImsSsInfo.java
index 02f0cef04a21..91a7503ac142 100644
--- a/telephony/java/android/telephony/ims/ImsSsInfo.java
+++ b/telephony/java/android/telephony/ims/ImsSsInfo.java
@@ -254,6 +254,7 @@ public final class ImsSsInfo implements Parcelable {
out.writeInt(mClirOutgoingState);
}
+ @NonNull
@Override
public String toString() {
return super.toString() + ", Status: " + ((mStatus == 0) ? "disabled" : "enabled")
diff --git a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
index d11a0de24fb5..4b9c25172a83 100644
--- a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
+++ b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
@@ -16,6 +16,7 @@
package android.telephony.ims;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage;
import android.os.Parcel;
@@ -194,6 +195,7 @@ public final class ImsStreamMediaProfile implements Parcelable {
mRttMode = profile.mRttMode;
}
+ @NonNull
@Override
public String toString() {
return "{ audioQuality=" + mAudioQuality +
diff --git a/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java b/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java
index efaade825224..d3014fee08f9 100644
--- a/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java
+++ b/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java
@@ -17,6 +17,7 @@
package android.telephony.ims;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -67,6 +68,7 @@ public final class ImsSuppServiceNotification implements Parcelable {
history = in.createStringArray();
}
+ @NonNull
@Override
public String toString() {
return "{ notificationType=" + notificationType +
diff --git a/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java b/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java
index 1ee85633c6dc..7ca34fa622ad 100644
--- a/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java
+++ b/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java
@@ -16,6 +16,7 @@
package android.telephony.ims.feature;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -98,6 +99,7 @@ public final class CapabilityChangeRequest implements Parcelable {
return radioTech;
}
+ @NonNull
@Override
public String toString() {
return "CapabilityPair{"
@@ -219,6 +221,7 @@ public final class CapabilityChangeRequest implements Parcelable {
}
}
+ @NonNull
@Override
public String toString() {
return "CapabilityChangeRequest{"
diff --git a/telephony/java/android/telephony/ims/feature/MmTelFeature.java b/telephony/java/android/telephony/ims/feature/MmTelFeature.java
index 056a0abe7a29..20c191da0550 100644
--- a/telephony/java/android/telephony/ims/feature/MmTelFeature.java
+++ b/telephony/java/android/telephony/ims/feature/MmTelFeature.java
@@ -291,6 +291,7 @@ public class MmTelFeature extends ImsFeature {
return super.isCapable(capabilities);
}
+ @NonNull
@Override
public String toString() {
StringBuilder builder = new StringBuilder("MmTel Capabilities - [");
diff --git a/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java b/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java
index 1a839fcb75b6..4e00e101741b 100644
--- a/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java
+++ b/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java
@@ -16,6 +16,8 @@
package android.telephony.ims.stub;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -60,7 +62,7 @@ public final class ImsFeatureConfiguration implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
@@ -77,6 +79,7 @@ public final class ImsFeatureConfiguration implements Parcelable {
return result;
}
+ @NonNull
@Override
public String toString() {
return "{s=" + slotId + ", f=" + ImsFeature.FEATURE_LOG_MAP.get(featureType) + "}";
diff --git a/telephony/java/android/telephony/mbms/DownloadRequest.java b/telephony/java/android/telephony/mbms/DownloadRequest.java
index 9e3302bd07e0..1daf0ebb557f 100644
--- a/telephony/java/android/telephony/mbms/DownloadRequest.java
+++ b/telephony/java/android/telephony/mbms/DownloadRequest.java
@@ -17,6 +17,7 @@
package android.telephony.mbms;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.content.Intent;
@@ -381,7 +382,7 @@ public final class DownloadRequest implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) return true;
if (o == null) {
return false;
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index da80774e8ed0..06f35a7d925b 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -1983,10 +1983,10 @@ interface ITelephony {
void switchMultiSimConfig(int numOfSims);
/**
- * Get if reboot is required upon altering modems configurations
+ * Get if altering modems configurations will trigger reboot.
* @hide
*/
- boolean isRebootRequiredForModemConfigChange();
+ boolean doesSwitchMultiSimConfigTriggerReboot(int subId, String callingPackage);
/**
* Get the mapping from logical slots to physical slots.
diff --git a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
index e2a8913b91e6..ebc98d61547e 100644
--- a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
+++ b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
@@ -678,6 +678,89 @@ public class SmsMessage extends SmsMessageBase {
}
/**
+ * Pre-processes an SMS WAP for Teleservice Id 0xFDEA(65002).
+ *
+ * It requires an additional header parsing to extract new Message Identifier and new User Data
+ * from WDP SMS User Data.
+ *
+ * - WDP SMS User Data Subparameter =
+ * |User Data SUBPARAMETER_ID ~ NUM_FIELDS| + |CHARi| + |RESERVED|
+ *
+ * - WDP SMS User Data Subparameter CHARi =
+ * |New Message Identifier Subparameter(HEADER_IND = 0)| +
+ * |New User Data Subparameter(MSG_ENCODING = ENCODING_OCTET)|
+ *
+ * @return true if preprocessing is successful, false otherwise.
+ */
+ public boolean preprocessCdmaFdeaWap() {
+ try {
+ BitwiseInputStream inStream = new BitwiseInputStream(mUserData);
+
+ // Message Identifier SUBPARAMETER_ID(0x00)
+ if (inStream.read(8) != 0x00) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header Message Identifier SUBPARAMETER_ID");
+ return false;
+ }
+
+ // Message Identifier SUBPARAM_LEN(0x03)
+ if (inStream.read(8) != 0x03) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header Message Identifier SUBPARAM_LEN");
+ return false;
+ }
+
+ // Message Identifier MESSAGE_TYPE
+ mBearerData.messageType = inStream.read(4);
+
+ // Message Identifier MESSAGE_ID
+ int msgId = inStream.read(8) << 8;
+ msgId |= inStream.read(8);
+ mBearerData.messageId = msgId;
+ mMessageRef = msgId;
+
+ // Message Identifier HEADER_IND
+ mBearerData.hasUserDataHeader = (inStream.read(1) == 1);
+ if (mBearerData.hasUserDataHeader) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header Message Identifier HEADER_IND");
+ return false;
+ }
+
+ // Message Identifier RESERVED
+ inStream.skip(3);
+
+ // User Data SUBPARAMETER_ID(0x01)
+ if (inStream.read(8) != 0x01) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header User Data SUBPARAMETER_ID");
+ return false;
+ }
+
+ // User Data SUBPARAM_LEN
+ int userDataLen = inStream.read(8) * 8;
+
+ // User Data MSG_ENCODING
+ mBearerData.userData.msgEncoding = inStream.read(5);
+ int consumedBits = 5;
+ if (mBearerData.userData.msgEncoding != UserData.ENCODING_OCTET) {
+ Rlog.e(LOG_TAG, "Invalid FDEA WDP Header User Data MSG_ENCODING");
+ return false;
+ }
+
+ // User Data NUM_FIELDS
+ mBearerData.userData.numFields = inStream.read(8);
+ consumedBits += 8;
+
+ int remainingBits = userDataLen - consumedBits;
+ int dataBits = mBearerData.userData.numFields * 8;
+ dataBits = dataBits < remainingBits ? dataBits : remainingBits;
+ mBearerData.userData.payload = inStream.readByteArray(dataBits);
+ mUserData = mBearerData.userData.payload;
+ return true;
+ } catch (BitwiseInputStream.AccessException ex) {
+ Rlog.e(LOG_TAG, "Fail to preprocess FDEA WAP: " + ex);
+ }
+ return false;
+ }
+
+ /**
* Parses a SMS message from its BearerData stream.
*/
public void parseSms() {
diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
index 9e6f19f9243d..dab14369d79c 100644
--- a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
+++ b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
@@ -764,13 +764,13 @@ public final class BearerData {
" > " + SmsConstants.MAX_USER_DATA_BYTES + " bytes)");
}
- /*
- * TODO(cleanup): figure out what the right answer is WRT paddingBits field
- *
- * userData.paddingBits = (userData.payload.length * 8) - (userData.numFields * 7);
- * userData.paddingBits = 0; // XXX this seems better, but why?
- *
- */
+ if (bData.userData.msgEncoding == UserData.ENCODING_7BIT_ASCII) {
+ bData.userData.paddingBits =
+ (bData.userData.payload.length * 8) - (bData.userData.numFields * 7);
+ } else {
+ bData.userData.paddingBits = 0;
+ }
+
int dataBits = (bData.userData.payload.length * 8) - bData.userData.paddingBits;
int paramBits = dataBits + 13;
if ((bData.userData.msgEncoding == UserData.ENCODING_IS91_EXTENDED_PROTOCOL) ||
diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java b/telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java
index de93b573f215..bed2de197435 100644
--- a/telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java
+++ b/telephony/java/com/android/internal/telephony/cdma/sms/SmsEnvelope.java
@@ -39,6 +39,9 @@ public final class SmsEnvelope {
static public final int TELESERVICE_WEMT = 0x1005;
static public final int TELESERVICE_SCPT = 0x1006;
+ /** Carriers specific Teleservice IDs. */
+ public static final int TELESERVICE_FDEA_WAP = 0xFDEA; // 65002
+
/**
* The following are defined as extensions to the standard teleservices
*/
diff --git a/test-mock/Android.bp b/test-mock/Android.bp
index fd469a005e7d..34ac3dcc824f 100644
--- a/test-mock/Android.bp
+++ b/test-mock/Android.bp
@@ -19,14 +19,14 @@
java_sdk_library {
name: "android.test.mock",
- srcs: ["src/**/*.java"],
+ srcs: [
+ "src/**/*.java",
+ ":framework-srcs",
+ ],
api_packages: [
"android.test.mock",
],
-
- srcs_lib: "framework",
- srcs_lib_whitelist_pkgs: ["android"],
compile_dex: true,
}
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index a028a54a5b74..f6e986eac33b 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -5692,7 +5692,6 @@ public class ConnectivityServiceTest {
String[] values = tcpBufferSizes.split(",");
String rmemValues = String.join(" ", values[0], values[1], values[2]);
String wmemValues = String.join(" ", values[3], values[4], values[5]);
- waitForIdle();
verify(mMockNetd, atLeastOnce()).setTcpRWmemorySize(rmemValues, wmemValues);
reset(mMockNetd);
}
@@ -5700,18 +5699,32 @@ public class ConnectivityServiceTest {
@Test
public void testTcpBufferReset() throws Exception {
final String testTcpBufferSizes = "1,2,3,4,5,6";
+ final NetworkRequest networkRequest = new NetworkRequest.Builder()
+ .addTransportType(TRANSPORT_CELLULAR)
+ .addCapability(NET_CAPABILITY_INTERNET)
+ .build();
+ final TestNetworkCallback networkCallback = new TestNetworkCallback();
+ mCm.registerNetworkCallback(networkRequest, networkCallback);
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
reset(mMockNetd);
// Switching default network updates TCP buffer sizes.
mCellNetworkAgent.connect(false);
+ networkCallback.expectAvailableCallbacksUnvalidated(mCellNetworkAgent);
verifyTcpBufferSizeChange(ConnectivityService.DEFAULT_TCP_BUFFER_SIZES);
// Change link Properties should have updated tcp buffer size.
LinkProperties lp = new LinkProperties();
lp.setTcpBufferSizes(testTcpBufferSizes);
mCellNetworkAgent.sendLinkProperties(lp);
+ networkCallback.expectCallback(CallbackRecord.LINK_PROPERTIES_CHANGED, mCellNetworkAgent);
verifyTcpBufferSizeChange(testTcpBufferSizes);
+
+ // Clean up.
+ mCellNetworkAgent.disconnect();
+ networkCallback.expectCallback(CallbackRecord.LOST, mCellNetworkAgent);
+ networkCallback.assertNoCallback();
+ mCm.unregisterNetworkCallback(networkCallback);
}
@Test
diff --git a/wifi/java/android/net/wifi/RttManager.java b/wifi/java/android/net/wifi/RttManager.java
index 9ab374a5c4cb..6a534b94cafb 100644
--- a/wifi/java/android/net/wifi/RttManager.java
+++ b/wifi/java/android/net/wifi/RttManager.java
@@ -211,6 +211,7 @@ public class RttManager {
/** Draft 11mc version supported, including major and minor version. e.g, draft 4.3 is 43 */
public int mcVersion;
+ @NonNull
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
@@ -1130,6 +1131,7 @@ public class RttManager {
*/
public int preamble;
+ @NonNull
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
diff --git a/wifi/java/android/net/wifi/WifiNetworkConnectionStatistics.java b/wifi/java/android/net/wifi/WifiNetworkConnectionStatistics.java
index 9b2fdc852a1a..a94a6102b863 100644
--- a/wifi/java/android/net/wifi/WifiNetworkConnectionStatistics.java
+++ b/wifi/java/android/net/wifi/WifiNetworkConnectionStatistics.java
@@ -16,8 +16,8 @@
package android.net.wifi;
+import android.annotation.NonNull;
import android.annotation.SystemApi;
-
import android.os.Parcel;
import android.os.Parcelable;
@@ -39,7 +39,7 @@ public class WifiNetworkConnectionStatistics implements Parcelable {
public WifiNetworkConnectionStatistics() { }
-
+ @NonNull
@Override
public String toString() {
StringBuilder sbuf = new StringBuilder();
diff --git a/wifi/java/android/net/wifi/hotspot2/OsuProvider.java b/wifi/java/android/net/wifi/hotspot2/OsuProvider.java
index 25dcdd8f3fff..4fa8b48bff22 100644
--- a/wifi/java/android/net/wifi/hotspot2/OsuProvider.java
+++ b/wifi/java/android/net/wifi/hotspot2/OsuProvider.java
@@ -16,6 +16,8 @@
package android.net.wifi.hotspot2;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.net.wifi.WifiSsid;
@@ -171,7 +173,7 @@ public final class OsuProvider implements Parcelable {
}
@Override
- public boolean equals(Object thatObject) {
+ public boolean equals(@Nullable Object thatObject) {
if (this == thatObject) {
return true;
}
@@ -196,6 +198,7 @@ public final class OsuProvider implements Parcelable {
mNetworkAccessIdentifier, mMethodList, mIcon);
}
+ @NonNull
@Override
public String toString() {
return "OsuProvider{mOsuSsid=" + mOsuSsid
diff --git a/wifi/java/android/net/wifi/rtt/RangingRequest.java b/wifi/java/android/net/wifi/rtt/RangingRequest.java
index 339233b26e6b..058b488aef67 100644
--- a/wifi/java/android/net/wifi/rtt/RangingRequest.java
+++ b/wifi/java/android/net/wifi/rtt/RangingRequest.java
@@ -17,6 +17,7 @@
package android.net.wifi.rtt;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.net.MacAddress;
import android.net.wifi.ScanResult;
@@ -245,7 +246,7 @@ public final class RangingRequest implements Parcelable {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) {
return true;
}
diff --git a/wifi/java/android/net/wifi/rtt/ResponderConfig.java b/wifi/java/android/net/wifi/rtt/ResponderConfig.java
index 166af6cd0a51..3ca0c173dadf 100644
--- a/wifi/java/android/net/wifi/rtt/ResponderConfig.java
+++ b/wifi/java/android/net/wifi/rtt/ResponderConfig.java
@@ -21,6 +21,7 @@ import static android.net.wifi.ScanResult.InformationElement.EID_VHT_CAPABILITIE
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.net.MacAddress;
import android.net.wifi.ScanResult;
@@ -443,7 +444,7 @@ public final class ResponderConfig implements Parcelable {
};
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) {
return true;
}