diff options
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; } |