diff options
747 files changed, 8735 insertions, 6529 deletions
diff --git a/Android.bp b/Android.bp index 79734df6a9b9..a711fc6f3588 100644 --- a/Android.bp +++ b/Android.bp @@ -1048,6 +1048,7 @@ java_library {          "core/java/android/os/HidlSupport.java",          "core/java/android/annotation/IntDef.java",          "core/java/android/annotation/NonNull.java", +        "core/java/android/annotation/Nullable.java",          "core/java/android/annotation/SystemApi.java",          "core/java/android/annotation/TestApi.java",          "core/java/android/os/HwBinder.java", @@ -1189,10 +1190,7 @@ stubs_defaults {          "test-base/src/**/*.java",          ":opt-telephony-srcs",          ":opt-net-voip-srcs", -        ":openjdk_javadoc_files", -        ":non_openjdk_javadoc_files", -        ":android_icu4j_src_files_for_docs", -        ":conscrypt_public_api_files", +        ":core_public_api_files",          "test-mock/src/**/*.java",          "test-runner/src/**/*.java",      ], @@ -1250,10 +1248,7 @@ stubs_defaults {      srcs: [          ":opt-telephony-srcs",          ":opt-net-voip-srcs", -        ":openjdk_javadoc_files", -        ":non_openjdk_javadoc_files", -        ":android_icu4j_src_files_for_docs", -        ":conscrypt_public_api_files", +        ":core_public_api_files",      ],      srcs_lib: "framework",      srcs_lib_whitelist_dirs: frameworks_base_subdirs, diff --git a/apct-tests/perftests/multiuser/Android.bp b/apct-tests/perftests/multiuser/Android.bp new file mode 100644 index 000000000000..825b3e4f8543 --- /dev/null +++ b/apct-tests/perftests/multiuser/Android.bp @@ -0,0 +1,25 @@ +// Copyright (C) 2016 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//      http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test { +    name: "MultiUserPerfTests", +    srcs: ["src/**/*.java"], +    static_libs: [ +        "android-support-test", +        "ub-uiautomator", +    ], +    platform_apis: true, +    test_suites: ["device-tests"], +    certificate: "platform", +} diff --git a/apct-tests/perftests/multiuser/Android.mk b/apct-tests/perftests/multiuser/Android.mk deleted file mode 100644 index 9bc7d051121a..000000000000 --- a/apct-tests/perftests/multiuser/Android.mk +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (C) 2016 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_STATIC_JAVA_LIBRARIES := \ -    android-support-test \ -    ub-uiautomator - -LOCAL_PACKAGE_NAME := MultiUserPerfTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_COMPATIBILITY_SUITE += device-tests - -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) - diff --git a/apct-tests/perftests/utils/Android.bp b/apct-tests/perftests/utils/Android.bp new file mode 100644 index 000000000000..4cd2008de859 --- /dev/null +++ b/apct-tests/perftests/utils/Android.bp @@ -0,0 +1,6 @@ +java_library { +    name: "apct-perftests-utils", +    static_libs: ["android-support-test"], +    // Build all java files in the java subdirectory +    srcs: ["**/*.java"], +} diff --git a/apct-tests/perftests/utils/Android.mk b/apct-tests/perftests/utils/Android.mk deleted file mode 100644 index 55c13b087626..000000000000 --- a/apct-tests/perftests/utils/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_STATIC_JAVA_LIBRARIES := android-support-test - -# Build all java files in the java subdirectory -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -# The name of the jar file to create -LOCAL_MODULE := apct-perftests-utils - -# Build a static jar file. -include $(BUILD_STATIC_JAVA_LIBRARY)
\ No newline at end of file diff --git a/api/current.txt b/api/current.txt index 1d33102ab8d6..d0c6fd69fcc4 100755 --- a/api/current.txt +++ b/api/current.txt @@ -4203,10 +4203,9 @@ package android.app {    public class AppComponentFactory {      ctor public AppComponentFactory(); -    method public android.content.pm.ApplicationInfo getApplicationInfo();      method @NonNull public android.app.Activity instantiateActivity(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;      method @NonNull public android.app.Application instantiateApplication(@NonNull ClassLoader, @NonNull String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException; -    method @NonNull public ClassLoader instantiateClassLoader(@NonNull ClassLoader); +    method @NonNull public ClassLoader instantiateClassLoader(@NonNull ClassLoader, @NonNull android.content.pm.ApplicationInfo);      method @NonNull public android.content.ContentProvider instantiateProvider(@NonNull ClassLoader, @NonNull String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;      method @NonNull public android.content.BroadcastReceiver instantiateReceiver(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;      method @NonNull public android.app.Service instantiateService(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException; @@ -6117,8 +6116,10 @@ package android.app {    }    public final class UiAutomation { +    method public void adoptShellPermissionIdentity();      method public void clearWindowAnimationFrameStats();      method public boolean clearWindowContentFrameStats(int); +    method public void dropShellPermissionIdentity();      method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(Runnable, android.app.UiAutomation.AccessibilityEventFilter, long) throws java.util.concurrent.TimeoutException;      method public android.os.ParcelFileDescriptor executeShellCommand(String);      method public android.view.accessibility.AccessibilityNodeInfo findFocus(int); @@ -27248,8 +27249,8 @@ package android.net {    }    public class InetAddresses { -    method public static boolean isNumericAddress(String); -    method public static java.net.InetAddress parseNumericAddress(String); +    method public static boolean isNumericAddress(@NonNull String); +    method @NonNull public static java.net.InetAddress parseNumericAddress(@NonNull String);    }    public final class IpPrefix implements android.os.Parcelable { @@ -27468,6 +27469,7 @@ package android.net {      field public static final int NET_CAPABILITY_IA = 7; // 0x7      field public static final int NET_CAPABILITY_IMS = 4; // 0x4      field public static final int NET_CAPABILITY_INTERNET = 12; // 0xc +    field public static final int NET_CAPABILITY_MCX = 23; // 0x17      field public static final int NET_CAPABILITY_MMS = 0; // 0x0      field public static final int NET_CAPABILITY_NOT_CONGESTED = 20; // 0x14      field public static final int NET_CAPABILITY_NOT_METERED = 11; // 0xb @@ -27839,25 +27841,25 @@ package android.net {    public class VpnService.Builder {      ctor public VpnService.Builder(); -    method public android.net.VpnService.Builder addAddress(java.net.InetAddress, int); -    method public android.net.VpnService.Builder addAddress(String, int); -    method public android.net.VpnService.Builder addAllowedApplication(String) throws android.content.pm.PackageManager.NameNotFoundException; -    method public android.net.VpnService.Builder addDisallowedApplication(String) throws android.content.pm.PackageManager.NameNotFoundException; -    method public android.net.VpnService.Builder addDnsServer(java.net.InetAddress); -    method public android.net.VpnService.Builder addDnsServer(String); -    method public android.net.VpnService.Builder addRoute(java.net.InetAddress, int); -    method public android.net.VpnService.Builder addRoute(String, int); -    method public android.net.VpnService.Builder addSearchDomain(String); -    method public android.net.VpnService.Builder allowBypass(); -    method public android.net.VpnService.Builder allowFamily(int); -    method public android.os.ParcelFileDescriptor establish(); -    method public android.net.VpnService.Builder setBlocking(boolean); -    method public android.net.VpnService.Builder setConfigureIntent(android.app.PendingIntent); -    method public android.net.VpnService.Builder setHttpProxy(android.net.ProxyInfo); -    method public android.net.VpnService.Builder setMetered(boolean); -    method public android.net.VpnService.Builder setMtu(int); -    method public android.net.VpnService.Builder setSession(String); -    method public android.net.VpnService.Builder setUnderlyingNetworks(android.net.Network[]); +    method @NonNull public android.net.VpnService.Builder addAddress(@NonNull java.net.InetAddress, int); +    method @NonNull public android.net.VpnService.Builder addAddress(@NonNull String, int); +    method @NonNull public android.net.VpnService.Builder addAllowedApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; +    method @NonNull public android.net.VpnService.Builder addDisallowedApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; +    method @NonNull public android.net.VpnService.Builder addDnsServer(@NonNull java.net.InetAddress); +    method @NonNull public android.net.VpnService.Builder addDnsServer(@NonNull String); +    method @NonNull public android.net.VpnService.Builder addRoute(@NonNull java.net.InetAddress, int); +    method @NonNull public android.net.VpnService.Builder addRoute(@NonNull String, int); +    method @NonNull public android.net.VpnService.Builder addSearchDomain(@NonNull String); +    method @NonNull public android.net.VpnService.Builder allowBypass(); +    method @NonNull public android.net.VpnService.Builder allowFamily(int); +    method @Nullable public android.os.ParcelFileDescriptor establish(); +    method @NonNull public android.net.VpnService.Builder setBlocking(boolean); +    method @NonNull public android.net.VpnService.Builder setConfigureIntent(@NonNull android.app.PendingIntent); +    method @NonNull public android.net.VpnService.Builder setHttpProxy(@NonNull android.net.ProxyInfo); +    method @NonNull public android.net.VpnService.Builder setMetered(boolean); +    method @NonNull public android.net.VpnService.Builder setMtu(int); +    method @NonNull public android.net.VpnService.Builder setSession(@NonNull String); +    method @NonNull public android.net.VpnService.Builder setUnderlyingNetworks(@Nullable android.net.Network[]);    }  } @@ -27889,7 +27891,7 @@ package android.net.http {      method public java.util.Date getValidNotAfterDate();      method @Deprecated public String getValidNotBefore();      method public java.util.Date getValidNotBeforeDate(); -    method public java.security.cert.X509Certificate getX509Certificate(); +    method @Nullable public java.security.cert.X509Certificate getX509Certificate();      method public static android.net.http.SslCertificate restoreState(android.os.Bundle);      method public static android.os.Bundle saveState(android.net.http.SslCertificate);    } @@ -37319,7 +37321,7 @@ package android.provider {    }    public static final class Telephony.CarrierId implements android.provider.BaseColumns { -    method public static android.net.Uri getPreciseCarrierIdUriForSubscriptionId(int); +    method @NonNull public static android.net.Uri getPreciseCarrierIdUriForSubscriptionId(int);      method public static android.net.Uri getUriForSubscriptionId(int);      field public static final String CARRIER_ID = "carrier_id";      field public static final String CARRIER_NAME = "carrier_name"; @@ -39438,7 +39440,7 @@ package android.service.carrier {    public class CarrierIdentifier implements android.os.Parcelable {      ctor public CarrierIdentifier(String, String, @Nullable String, @Nullable String, @Nullable String, @Nullable String); -    ctor public CarrierIdentifier(String, String, @Nullable String, @Nullable String, @Nullable String, @Nullable String, int, int); +    ctor public CarrierIdentifier(@NonNull String, @NonNull String, @Nullable String, @Nullable String, @Nullable String, @Nullable String, int, int);      ctor public CarrierIdentifier(byte[], @Nullable String, @Nullable String);      method public int describeContents();      method public int getCarrierId(); @@ -40415,6 +40417,7 @@ package android.system {      method public static void chown(String, int, int) throws android.system.ErrnoException;      method public static void close(java.io.FileDescriptor) throws android.system.ErrnoException;      method public static void connect(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException; +    method public static void connect(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;      method public static java.io.FileDescriptor dup(java.io.FileDescriptor) throws android.system.ErrnoException;      method public static java.io.FileDescriptor dup2(java.io.FileDescriptor, int) throws android.system.ErrnoException;      method public static String[] environ(); @@ -41244,11 +41247,11 @@ package android.telecom {    public final class CallIdentification implements android.os.Parcelable {      method public int describeContents(); -    method @NonNull public String getCallScreeningAppName(); +    method @NonNull public CharSequence getCallScreeningAppName();      method @NonNull public String getCallScreeningPackageName(); -    method @Nullable public String getDescription(); -    method @Nullable public String getDetails(); -    method @Nullable public String getName(); +    method @Nullable public CharSequence getDescription(); +    method @Nullable public CharSequence getDetails(); +    method @Nullable public CharSequence getName();      method public int getNuisanceConfidence();      method @Nullable public android.graphics.drawable.Icon getPhoto();      method public void writeToParcel(android.os.Parcel, int); @@ -41260,14 +41263,14 @@ package android.telecom {      field public static final android.os.Parcelable.Creator<android.telecom.CallIdentification> CREATOR;    } -  public static class CallIdentification.Builder { +  public static final class CallIdentification.Builder {      ctor public CallIdentification.Builder(); -    method public android.telecom.CallIdentification build(); -    method public android.telecom.CallIdentification.Builder setDescription(@Nullable String); -    method public android.telecom.CallIdentification.Builder setDetails(@Nullable String); -    method public android.telecom.CallIdentification.Builder setName(@Nullable String); -    method public android.telecom.CallIdentification.Builder setNuisanceConfidence(int); -    method public android.telecom.CallIdentification.Builder setPhoto(@Nullable android.graphics.drawable.Icon); +    method @NonNull public android.telecom.CallIdentification build(); +    method @NonNull public android.telecom.CallIdentification.Builder setDescription(@Nullable CharSequence); +    method @NonNull public android.telecom.CallIdentification.Builder setDetails(@Nullable CharSequence); +    method @NonNull public android.telecom.CallIdentification.Builder setName(@Nullable CharSequence); +    method @NonNull public android.telecom.CallIdentification.Builder setNuisanceConfidence(int); +    method @NonNull public android.telecom.CallIdentification.Builder setPhoto(@Nullable android.graphics.drawable.Icon);    }    public abstract class CallRedirectionService extends android.app.Service { @@ -41734,7 +41737,7 @@ package android.telecom {    public final class PhoneAccountSuggestion implements android.os.Parcelable {      method public int describeContents(); -    method public android.telecom.PhoneAccountHandle getPhoneAccountHandle(); +    method @NonNull public android.telecom.PhoneAccountHandle getPhoneAccountHandle();      method public int getReason();      method public boolean shouldAutoSelect();      method public void writeToParcel(android.os.Parcel, int); @@ -41888,8 +41891,8 @@ package android.telecom {      method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle);      method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getSelfManagedPhoneAccounts();      method public android.telecom.PhoneAccountHandle getSimCallManager(); -    method public String getSystemDialerPackage(); -    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telecom.PhoneAccountHandle getUserSelectedOutgoingPhoneAccount(); +    method @Nullable public String getSystemDialerPackage(); +    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @Nullable public android.telecom.PhoneAccountHandle getUserSelectedOutgoingPhoneAccount();      method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber(android.telecom.PhoneAccountHandle);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String, android.telecom.PhoneAccountHandle); @@ -42380,6 +42383,7 @@ package android.telephony {      field public static final int CONNECTION_UNKNOWN = 2147483647; // 0x7fffffff      field public static final android.os.Parcelable.Creator<android.telephony.CellInfo> CREATOR;      field public static final int UNAVAILABLE = 2147483647; // 0x7fffffff +    field public static final long UNAVAILABLE_LONG = 9223372036854775807L; // 0x7fffffffffffffffL    }    public final class CellInfoCdma extends android.telephony.CellInfo implements android.os.Parcelable { @@ -42723,7 +42727,7 @@ package android.telephony {    public class ServiceState implements android.os.Parcelable {      ctor public ServiceState();      ctor public ServiceState(android.telephony.ServiceState); -    ctor public ServiceState(android.os.Parcel); +    ctor @Deprecated public ServiceState(android.os.Parcel);      method protected void copyFrom(android.telephony.ServiceState);      method public int describeContents();      method public int getCdmaNetworkId(); @@ -42760,6 +42764,7 @@ package android.telephony {      method @Deprecated public int getCdmaDbm();      method @Deprecated public int getCdmaEcio();      method @NonNull public java.util.List<android.telephony.CellSignalStrength> getCellSignalStrengths(); +    method @NonNull public <T extends android.telephony.CellSignalStrength> java.util.List<T> getCellSignalStrengths(@NonNull Class<T>);      method @Deprecated public int getEvdoDbm();      method @Deprecated public int getEvdoEcio();      method @Deprecated public int getEvdoSnr(); @@ -43038,8 +43043,8 @@ package android.telephony {      method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getImei();      method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getImei(int);      method @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS}) public String getLine1Number(); -    method public String getManufacturerCode(); -    method public String getManufacturerCode(int); +    method @Nullable public String getManufacturerCode(); +    method @Nullable public String getManufacturerCode(int);      method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getMeid();      method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getMeid(int);      method public String getMmsUAProfUrl(); @@ -43066,9 +43071,9 @@ package android.telephony {      method public int getSimState();      method public int getSimState(int);      method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getSubscriberId(); -    method public String getTypeAllocationCode(); -    method public String getTypeAllocationCode(int); -    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public java.util.List<android.telephony.UiccCardInfo> getUiccCardsInfo(); +    method @Nullable public String getTypeAllocationCode(); +    method @Nullable public String getTypeAllocationCode(int); +    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") @NonNull public java.util.List<android.telephony.UiccCardInfo> getUiccCardsInfo();      method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVisualVoicemailPackageName();      method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailAlphaTag();      method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber(); @@ -43087,6 +43092,7 @@ package android.telephony {      method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean isDataEnabled();      method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataRoamingEnabled();      method public boolean isHearingAidCompatibilitySupported(); +    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isMultisimSupported();      method public boolean isNetworkRoaming();      method public boolean isRttSupported();      method public boolean isSmsCapable(); @@ -43234,13 +43240,13 @@ package android.telephony {    }    public final class UiccCardInfo implements android.os.Parcelable { -    ctor public UiccCardInfo(boolean, int, String, String, int);      method public int describeContents();      method public int getCardId(); -    method public String getEid(); -    method public String getIccId(); +    method @Nullable public String getEid(); +    method @Nullable public String getIccId();      method public int getSlotIndex();      method public boolean isEuicc(); +    method public boolean isRemovable();      method public void writeToParcel(android.os.Parcel, int);      field public static final android.os.Parcelable.Creator<android.telephony.UiccCardInfo> CREATOR;    } @@ -43358,6 +43364,7 @@ package android.telephony.data {      field public static final int TYPE_HIPRI = 16; // 0x10      field public static final int TYPE_IA = 256; // 0x100      field public static final int TYPE_IMS = 64; // 0x40 +    field public static final int TYPE_MCX = 1024; // 0x400      field public static final int TYPE_MMS = 2; // 0x2      field public static final int TYPE_SUPL = 4; // 0x4    } @@ -43447,7 +43454,7 @@ package android.telephony.euicc {    }    public class EuiccManager { -    method public android.telephony.euicc.EuiccManager createForCardId(int); +    method @NonNull public android.telephony.euicc.EuiccManager createForCardId(int);      method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void deleteSubscription(int, android.app.PendingIntent);      method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void downloadSubscription(android.telephony.euicc.DownloadableSubscription, boolean, android.app.PendingIntent);      method @Nullable public String getEid(); @@ -43555,465 +43562,6 @@ package android.telephony.gsm {  } -package android.telephony.ims { - -  public class Rcs1To1Thread extends android.telephony.ims.RcsThread { -    method @WorkerThread public long getFallbackThreadId() throws android.telephony.ims.RcsMessageStoreException; -    method @NonNull @WorkerThread public android.telephony.ims.RcsParticipant getRecipient() throws android.telephony.ims.RcsMessageStoreException; -    method public boolean isGroup(); -    method @WorkerThread public void setFallbackThreadId(long) throws android.telephony.ims.RcsMessageStoreException; -  } - -  public abstract class RcsEvent { -    ctor protected RcsEvent(long); -    method public long getTimestamp(); -  } - -  public final class RcsEventQueryParams implements android.os.Parcelable { -    method public int describeContents(); -    method @android.telephony.ims.RcsEventQueryParams.EventType public int getEventType(); -    method public int getLimit(); -    method public boolean getSortDirection(); -    method public int getSortingProperty(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final int ALL_EVENTS = -1; // 0xffffffff -    field public static final int ALL_GROUP_THREAD_EVENTS = 0; // 0x0 -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsEventQueryParams> CREATOR; -    field public static final int GROUP_THREAD_ICON_CHANGED_EVENT = 8; // 0x8 -    field public static final int GROUP_THREAD_NAME_CHANGED_EVENT = 16; // 0x10 -    field public static final int GROUP_THREAD_PARTICIPANT_JOINED_EVENT = 2; // 0x2 -    field public static final int GROUP_THREAD_PARTICIPANT_LEFT_EVENT = 4; // 0x4 -    field public static final int PARTICIPANT_ALIAS_CHANGED_EVENT = 1; // 0x1 -    field public static final int SORT_BY_CREATION_ORDER = 0; // 0x0 -    field public static final int SORT_BY_TIMESTAMP = 1; // 0x1 -  } - -  public static class RcsEventQueryParams.Builder { -    ctor public RcsEventQueryParams.Builder(); -    method public android.telephony.ims.RcsEventQueryParams build(); -    method @CheckResult public android.telephony.ims.RcsEventQueryParams.Builder setEventType(@android.telephony.ims.RcsEventQueryParams.EventType int); -    method @CheckResult public android.telephony.ims.RcsEventQueryParams.Builder setGroupThread(@NonNull android.telephony.ims.RcsGroupThread); -    method @CheckResult public android.telephony.ims.RcsEventQueryParams.Builder setResultLimit(@IntRange(from=0) int) throws java.security.InvalidParameterException; -    method @CheckResult public android.telephony.ims.RcsEventQueryParams.Builder setSortDirection(boolean); -    method @CheckResult public android.telephony.ims.RcsEventQueryParams.Builder setSortProperty(@android.telephony.ims.RcsEventQueryParams.SortingProperty int); -  } - -  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.telephony.ims.RcsEventQueryParams.ALL_EVENTS, android.telephony.ims.RcsEventQueryParams.ALL_GROUP_THREAD_EVENTS, android.telephony.ims.RcsEventQueryParams.PARTICIPANT_ALIAS_CHANGED_EVENT, android.telephony.ims.RcsEventQueryParams.GROUP_THREAD_PARTICIPANT_JOINED_EVENT, android.telephony.ims.RcsEventQueryParams.GROUP_THREAD_PARTICIPANT_LEFT_EVENT, android.telephony.ims.RcsEventQueryParams.GROUP_THREAD_NAME_CHANGED_EVENT, android.telephony.ims.RcsEventQueryParams.GROUP_THREAD_ICON_CHANGED_EVENT}) public static @interface RcsEventQueryParams.EventType { -  } - -  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.telephony.ims.RcsEventQueryParams.SORT_BY_CREATION_ORDER, android.telephony.ims.RcsEventQueryParams.SORT_BY_TIMESTAMP}) public static @interface RcsEventQueryParams.SortingProperty { -  } - -  public class RcsEventQueryResult { -    method public android.telephony.ims.RcsQueryContinuationToken getContinuationToken(); -    method public java.util.List<android.telephony.ims.RcsEvent> getEvents(); -  } - -  public final class RcsFileTransferCreationParams implements android.os.Parcelable { -    method public int describeContents(); -    method public String getContentMimeType(); -    method public android.net.Uri getContentUri(); -    method public long getFileSize(); -    method @android.telephony.ims.RcsFileTransferPart.RcsFileTransferStatus public int getFileTransferStatus(); -    method public int getHeight(); -    method public long getMediaDuration(); -    method public String getPreviewMimeType(); -    method public android.net.Uri getPreviewUri(); -    method public String getRcsFileTransferSessionId(); -    method public long getTransferOffset(); -    method public int getWidth(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsFileTransferCreationParams> CREATOR; -  } - -  public class RcsFileTransferCreationParams.Builder { -    ctor public RcsFileTransferCreationParams.Builder(); -    method public android.telephony.ims.RcsFileTransferCreationParams build(); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setContentMimeType(String); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setContentUri(android.net.Uri); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setFileSize(long); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setFileTransferSessionId(String); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setFileTransferStatus(@android.telephony.ims.RcsFileTransferPart.RcsFileTransferStatus int); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setHeight(int); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setMediaDuration(long); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setPreviewMimeType(String); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setPreviewUri(android.net.Uri); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setTransferOffset(long); -    method @CheckResult public android.telephony.ims.RcsFileTransferCreationParams.Builder setWidth(int); -  } - -  public class RcsFileTransferPart { -    method @WorkerThread @Nullable public String getContentMimeType() throws android.telephony.ims.RcsMessageStoreException; -    method @Nullable @WorkerThread public android.net.Uri getContentUri() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public long getFileSize() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public String getFileTransferSessionId() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @android.telephony.ims.RcsFileTransferPart.RcsFileTransferStatus public int getFileTransferStatus() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public int getHeight() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public long getLength() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public String getPreviewMimeType() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public android.net.Uri getPreviewUri() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public long getTransferOffset() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public int getWidth() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setContentMimeType(String) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setContentUri(android.net.Uri) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setFileSize(long) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setFileTransferSessionId(String) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setFileTransferStatus(@android.telephony.ims.RcsFileTransferPart.RcsFileTransferStatus int) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setHeight(int) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setLength(long) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setPreviewMimeType(String) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setPreviewUri(android.net.Uri) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setTransferOffset(long) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setWidth(int) throws android.telephony.ims.RcsMessageStoreException; -    field public static final int DOWNLOADING = 6; // 0x6 -    field public static final int DOWNLOADING_CANCELLED = 9; // 0x9 -    field public static final int DOWNLOADING_FAILED = 8; // 0x8 -    field public static final int DOWNLOADING_PAUSED = 7; // 0x7 -    field public static final int DRAFT = 1; // 0x1 -    field public static final int NOT_SET = 0; // 0x0 -    field public static final int SENDING = 2; // 0x2 -    field public static final int SENDING_CANCELLED = 5; // 0x5 -    field public static final int SENDING_FAILED = 4; // 0x4 -    field public static final int SENDING_PAUSED = 3; // 0x3 -    field public static final int SUCCEEDED = 10; // 0xa -  } - -  @IntDef({android.telephony.ims.RcsFileTransferPart.DRAFT, android.telephony.ims.RcsFileTransferPart.SENDING, android.telephony.ims.RcsFileTransferPart.SENDING_PAUSED, android.telephony.ims.RcsFileTransferPart.SENDING_FAILED, android.telephony.ims.RcsFileTransferPart.SENDING_CANCELLED, android.telephony.ims.RcsFileTransferPart.DOWNLOADING, android.telephony.ims.RcsFileTransferPart.DOWNLOADING_PAUSED, android.telephony.ims.RcsFileTransferPart.DOWNLOADING_FAILED, android.telephony.ims.RcsFileTransferPart.DOWNLOADING_CANCELLED, android.telephony.ims.RcsFileTransferPart.SUCCEEDED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RcsFileTransferPart.RcsFileTransferStatus { -  } - -  public class RcsGroupThread extends android.telephony.ims.RcsThread { -    method @WorkerThread public void addParticipant(@NonNull android.telephony.ims.RcsParticipant) throws android.telephony.ims.RcsMessageStoreException; -    method @Nullable @WorkerThread public android.net.Uri getConferenceUri() throws android.telephony.ims.RcsMessageStoreException; -    method @Nullable public android.net.Uri getGroupIcon() throws android.telephony.ims.RcsMessageStoreException; -    method @Nullable @WorkerThread public String getGroupName() throws android.telephony.ims.RcsMessageStoreException; -    method @Nullable @WorkerThread public android.telephony.ims.RcsParticipant getOwner() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public java.util.Set<android.telephony.ims.RcsParticipant> getParticipants() throws android.telephony.ims.RcsMessageStoreException; -    method public boolean isGroup(); -    method @WorkerThread public void removeParticipant(@NonNull android.telephony.ims.RcsParticipant) throws android.telephony.ims.RcsMessageStoreException; -    method @Nullable @WorkerThread public void setConferenceUri(android.net.Uri) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setGroupIcon(@Nullable android.net.Uri) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setGroupName(String) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setOwner(@Nullable android.telephony.ims.RcsParticipant) throws android.telephony.ims.RcsMessageStoreException; -  } - -  public abstract class RcsGroupThreadEvent extends android.telephony.ims.RcsEvent { -    method @NonNull public android.telephony.ims.RcsParticipant getOriginatingParticipant(); -    method @NonNull public android.telephony.ims.RcsGroupThread getRcsGroupThread(); -  } - -  public final class RcsGroupThreadIconChangedEvent extends android.telephony.ims.RcsGroupThreadEvent { -    ctor public RcsGroupThreadIconChangedEvent(long, @NonNull android.telephony.ims.RcsGroupThread, @NonNull android.telephony.ims.RcsParticipant, @Nullable android.net.Uri); -    method @Nullable public android.net.Uri getNewIcon(); -  } - -  public final class RcsGroupThreadNameChangedEvent extends android.telephony.ims.RcsGroupThreadEvent { -    ctor public RcsGroupThreadNameChangedEvent(long, @NonNull android.telephony.ims.RcsGroupThread, @NonNull android.telephony.ims.RcsParticipant, @Nullable String); -    method @Nullable public String getNewName(); -  } - -  public final class RcsGroupThreadParticipantJoinedEvent extends android.telephony.ims.RcsGroupThreadEvent { -    ctor public RcsGroupThreadParticipantJoinedEvent(long, @NonNull android.telephony.ims.RcsGroupThread, @NonNull android.telephony.ims.RcsParticipant, @NonNull android.telephony.ims.RcsParticipant); -    method public android.telephony.ims.RcsParticipant getJoinedParticipant(); -  } - -  public final class RcsGroupThreadParticipantLeftEvent extends android.telephony.ims.RcsGroupThreadEvent { -    ctor public RcsGroupThreadParticipantLeftEvent(long, @NonNull android.telephony.ims.RcsGroupThread, @NonNull android.telephony.ims.RcsParticipant, @NonNull android.telephony.ims.RcsParticipant); -    method @NonNull public android.telephony.ims.RcsParticipant getLeavingParticipant(); -    method public void persist() throws android.telephony.ims.RcsMessageStoreException; -  } - -  public class RcsIncomingMessage extends android.telephony.ims.RcsMessage { -    method @WorkerThread public long getArrivalTimestamp() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public long getSeenTimestamp() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public android.telephony.ims.RcsParticipant getSenderParticipant() throws android.telephony.ims.RcsMessageStoreException; -    method public boolean isIncoming(); -    method @WorkerThread public void setArrivalTimestamp(long) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setSeenTimestamp(long) throws android.telephony.ims.RcsMessageStoreException; -  } - -  public final class RcsIncomingMessageCreationParams extends android.telephony.ims.RcsMessageCreationParams implements android.os.Parcelable { -    method public int describeContents(); -    method public long getArrivalTimestamp(); -    method public long getSeenTimestamp(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsIncomingMessageCreationParams> CREATOR; -  } - -  public static class RcsIncomingMessageCreationParams.Builder extends android.telephony.ims.RcsMessageCreationParams.Builder { -    ctor public RcsIncomingMessageCreationParams.Builder(long, long, int); -    method public android.telephony.ims.RcsIncomingMessageCreationParams build(); -    method @CheckResult public android.telephony.ims.RcsIncomingMessageCreationParams.Builder setArrivalTimestamp(long); -    method @CheckResult public android.telephony.ims.RcsIncomingMessageCreationParams.Builder setSeenTimestamp(long); -    method @CheckResult public android.telephony.ims.RcsIncomingMessageCreationParams.Builder setSenderParticipant(android.telephony.ims.RcsParticipant); -  } - -  public class RcsManager { -    method public android.telephony.ims.RcsMessageStore getRcsMessageStore(); -  } - -  public abstract class RcsMessage { -    method @NonNull @WorkerThread public java.util.Set<android.telephony.ims.RcsFileTransferPart> getFileTransferParts() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public double getLatitude() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public double getLongitude() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public long getOriginationTimestamp() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public String getRcsMessageId() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @android.telephony.ims.RcsMessage.RcsMessageStatus public int getStatus() throws android.telephony.ims.RcsMessageStoreException; -    method public int getSubscriptionId() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public String getText() throws android.telephony.ims.RcsMessageStoreException; -    method @NonNull @WorkerThread public android.telephony.ims.RcsFileTransferPart insertFileTransfer(android.telephony.ims.RcsFileTransferCreationParams) throws android.telephony.ims.RcsMessageStoreException; -    method public abstract boolean isIncoming(); -    method @WorkerThread public void removeFileTransferPart(@NonNull android.telephony.ims.RcsFileTransferPart) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setLatitude(double) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setLongitude(double) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setOriginationTimestamp(long) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setRcsMessageId(String) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setStatus(@android.telephony.ims.RcsMessage.RcsMessageStatus int) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setSubscriptionId(int) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setText(String) throws android.telephony.ims.RcsMessageStoreException; -    field public static final int DRAFT = 1; // 0x1 -    field public static final int FAILED = 6; // 0x6 -    field public static final double LOCATION_NOT_SET = 4.9E-324; -    field public static final int NOT_SET = 0; // 0x0 -    field public static final int QUEUED = 2; // 0x2 -    field public static final int RECEIVED = 7; // 0x7 -    field public static final int RETRYING = 5; // 0x5 -    field public static final int SEEN = 9; // 0x9 -    field public static final int SENDING = 3; // 0x3 -    field public static final int SENT = 4; // 0x4 -  } - -  @IntDef({android.telephony.ims.RcsMessage.DRAFT, android.telephony.ims.RcsMessage.QUEUED, android.telephony.ims.RcsMessage.SENDING, android.telephony.ims.RcsMessage.SENT, android.telephony.ims.RcsMessage.RETRYING, android.telephony.ims.RcsMessage.FAILED, android.telephony.ims.RcsMessage.RECEIVED, android.telephony.ims.RcsMessage.SEEN}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RcsMessage.RcsMessageStatus { -  } - -  public class RcsMessageCreationParams { -    ctor protected RcsMessageCreationParams(android.telephony.ims.RcsMessageCreationParams.Builder); -    method public double getLatitude(); -    method public double getLongitude(); -    method public int getMessageStatus(); -    method public long getOriginationTimestamp(); -    method @Nullable public String getRcsMessageGlobalId(); -    method public int getSubId(); -    method @Nullable public String getText(); -  } - -  public static class RcsMessageCreationParams.Builder { -    method public android.telephony.ims.RcsMessageCreationParams build(); -    method @CheckResult public android.telephony.ims.RcsMessageCreationParams.Builder setLatitude(double); -    method @CheckResult public android.telephony.ims.RcsMessageCreationParams.Builder setLongitude(double); -    method @CheckResult public android.telephony.ims.RcsMessageCreationParams.Builder setRcsMessageId(String); -    method @CheckResult public android.telephony.ims.RcsMessageCreationParams.Builder setStatus(@android.telephony.ims.RcsMessage.RcsMessageStatus int); -    method @CheckResult public android.telephony.ims.RcsMessageCreationParams.Builder setText(String); -  } - -  public final class RcsMessageQueryParams implements android.os.Parcelable { -    method public int describeContents(); -    method public int getFileTransferPresence(); -    method public int getLimit(); -    method public String getMessageLike(); -    method public int getMessageType(); -    method public boolean getSortDirection(); -    method @android.telephony.ims.RcsMessageQueryParams.SortingProperty public int getSortingProperty(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsMessageQueryParams> CREATOR; -    field public static final int MESSAGES_WITHOUT_FILE_TRANSFERS = 8; // 0x8 -    field public static final int MESSAGES_WITH_FILE_TRANSFERS = 4; // 0x4 -    field public static final int MESSAGE_TYPE_INCOMING = 1; // 0x1 -    field public static final int MESSAGE_TYPE_OUTGOING = 2; // 0x2 -    field public static final int SORT_BY_CREATION_ORDER = 0; // 0x0 -    field public static final int SORT_BY_TIMESTAMP = 1; // 0x1 -  } - -  public static class RcsMessageQueryParams.Builder { -    ctor public RcsMessageQueryParams.Builder(); -    method public android.telephony.ims.RcsMessageQueryParams build(); -    method @CheckResult public android.telephony.ims.RcsMessageQueryParams.Builder setFileTransferPresence(int); -    method @CheckResult public android.telephony.ims.RcsMessageQueryParams.Builder setMessageLike(String); -    method @CheckResult public android.telephony.ims.RcsMessageQueryParams.Builder setMessageType(int); -    method @CheckResult public android.telephony.ims.RcsMessageQueryParams.Builder setResultLimit(@IntRange(from=0) int) throws java.security.InvalidParameterException; -    method @CheckResult public android.telephony.ims.RcsMessageQueryParams.Builder setSortDirection(boolean); -    method @CheckResult public android.telephony.ims.RcsMessageQueryParams.Builder setSortProperty(@android.telephony.ims.RcsMessageQueryParams.SortingProperty int); -    method @CheckResult public android.telephony.ims.RcsMessageQueryParams.Builder setThread(@Nullable android.telephony.ims.RcsThread); -  } - -  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.telephony.ims.RcsMessageQueryParams.SORT_BY_CREATION_ORDER, android.telephony.ims.RcsMessageQueryParams.SORT_BY_TIMESTAMP}) public static @interface RcsMessageQueryParams.SortingProperty { -  } - -  public final class RcsMessageQueryResult implements android.os.Parcelable { -    method public int describeContents(); -    method @Nullable public android.telephony.ims.RcsQueryContinuationToken getContinuationToken(); -    method @NonNull public java.util.List<android.telephony.ims.RcsMessage> getMessages(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsMessageQueryResult> CREATOR; -  } - -  public final class RcsMessageSnippet implements android.os.Parcelable { -    method public int describeContents(); -    method @android.telephony.ims.RcsMessage.RcsMessageStatus public int getSnippetStatus(); -    method @Nullable public String getSnippetText(); -    method public long getSnippetTimestamp(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsMessageSnippet> CREATOR; -  } - -  public class RcsMessageStore { -    ctor public RcsMessageStore(); -    method @WorkerThread @NonNull public android.telephony.ims.RcsGroupThread createGroupThread(@Nullable java.util.List<android.telephony.ims.RcsParticipant>, @Nullable String, @Nullable android.net.Uri) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.Rcs1To1Thread createRcs1To1Thread(@NonNull android.telephony.ims.RcsParticipant) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsParticipant createRcsParticipant(String, @Nullable String) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void deleteThread(@NonNull android.telephony.ims.RcsThread) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsEventQueryResult getRcsEvents(@Nullable android.telephony.ims.RcsEventQueryParams) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsEventQueryResult getRcsEvents(@NonNull android.telephony.ims.RcsQueryContinuationToken) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsMessageQueryResult getRcsMessages(@Nullable android.telephony.ims.RcsMessageQueryParams) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsMessageQueryResult getRcsMessages(@NonNull android.telephony.ims.RcsQueryContinuationToken) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsParticipantQueryResult getRcsParticipants(@Nullable android.telephony.ims.RcsParticipantQueryParams) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsParticipantQueryResult getRcsParticipants(@NonNull android.telephony.ims.RcsQueryContinuationToken) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsThreadQueryResult getRcsThreads(@Nullable android.telephony.ims.RcsThreadQueryParams) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsThreadQueryResult getRcsThreads(@NonNull android.telephony.ims.RcsQueryContinuationToken) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public void persistRcsEvent(android.telephony.ims.RcsEvent) throws android.telephony.ims.RcsMessageStoreException; -  } - -  public class RcsMessageStoreException extends java.lang.Exception { -    ctor public RcsMessageStoreException(String); -  } - -  public class RcsOutgoingMessage extends android.telephony.ims.RcsMessage { -    method @NonNull @WorkerThread public java.util.List<android.telephony.ims.RcsOutgoingMessageDelivery> getOutgoingDeliveries() throws android.telephony.ims.RcsMessageStoreException; -    method public boolean isIncoming(); -  } - -  public final class RcsOutgoingMessageCreationParams extends android.telephony.ims.RcsMessageCreationParams implements android.os.Parcelable { -    method public int describeContents(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsOutgoingMessageCreationParams> CREATOR; -  } - -  public static class RcsOutgoingMessageCreationParams.Builder extends android.telephony.ims.RcsMessageCreationParams.Builder { -    ctor public RcsOutgoingMessageCreationParams.Builder(long, int); -    method public android.telephony.ims.RcsOutgoingMessageCreationParams build(); -  } - -  public class RcsOutgoingMessageDelivery { -    method @WorkerThread public long getDeliveredTimestamp() throws android.telephony.ims.RcsMessageStoreException; -    method @NonNull public android.telephony.ims.RcsOutgoingMessage getMessage(); -    method @NonNull public android.telephony.ims.RcsParticipant getRecipient(); -    method @WorkerThread public long getSeenTimestamp() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @android.telephony.ims.RcsMessage.RcsMessageStatus public int getStatus() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setDeliveredTimestamp(long) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setSeenTimestamp(long) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setStatus(@android.telephony.ims.RcsMessage.RcsMessageStatus int) throws android.telephony.ims.RcsMessageStoreException; -  } - -  public class RcsParticipant { -    method @Nullable @WorkerThread public String getAlias() throws android.telephony.ims.RcsMessageStoreException; -    method @Nullable @WorkerThread public String getCanonicalAddress() throws android.telephony.ims.RcsMessageStoreException; -    method @Nullable @WorkerThread public String getContactId() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setAlias(String) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void setContactId(String) throws android.telephony.ims.RcsMessageStoreException; -  } - -  public final class RcsParticipantAliasChangedEvent extends android.telephony.ims.RcsEvent { -    ctor public RcsParticipantAliasChangedEvent(long, @NonNull android.telephony.ims.RcsParticipant, @Nullable String); -    method @Nullable public String getNewAlias(); -    method @NonNull public android.telephony.ims.RcsParticipant getParticipant(); -  } - -  public final class RcsParticipantQueryParams implements android.os.Parcelable { -    method public int describeContents(); -    method public String getAliasLike(); -    method public String getCanonicalAddressLike(); -    method public int getLimit(); -    method public boolean getSortDirection(); -    method public int getSortingProperty(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsParticipantQueryParams> CREATOR; -    field public static final int SORT_BY_ALIAS = 1; // 0x1 -    field public static final int SORT_BY_CANONICAL_ADDRESS = 2; // 0x2 -    field public static final int SORT_BY_CREATION_ORDER = 0; // 0x0 -  } - -  public static class RcsParticipantQueryParams.Builder { -    ctor public RcsParticipantQueryParams.Builder(); -    method public android.telephony.ims.RcsParticipantQueryParams build(); -    method @CheckResult public android.telephony.ims.RcsParticipantQueryParams.Builder setAliasLike(String); -    method @CheckResult public android.telephony.ims.RcsParticipantQueryParams.Builder setCanonicalAddressLike(String); -    method @CheckResult public android.telephony.ims.RcsParticipantQueryParams.Builder setResultLimit(@IntRange(from=0) int) throws java.security.InvalidParameterException; -    method @CheckResult public android.telephony.ims.RcsParticipantQueryParams.Builder setSortDirection(boolean); -    method @CheckResult public android.telephony.ims.RcsParticipantQueryParams.Builder setSortProperty(@android.telephony.ims.RcsParticipantQueryParams.SortingProperty int); -    method @CheckResult public android.telephony.ims.RcsParticipantQueryParams.Builder setThread(android.telephony.ims.RcsThread); -  } - -  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.telephony.ims.RcsParticipantQueryParams.SORT_BY_CREATION_ORDER, android.telephony.ims.RcsParticipantQueryParams.SORT_BY_ALIAS, android.telephony.ims.RcsParticipantQueryParams.SORT_BY_CANONICAL_ADDRESS}) public static @interface RcsParticipantQueryParams.SortingProperty { -  } - -  public final class RcsParticipantQueryResult implements android.os.Parcelable { -    method public int describeContents(); -    method @Nullable public android.telephony.ims.RcsQueryContinuationToken getContinuationToken(); -    method @NonNull public java.util.List<android.telephony.ims.RcsParticipant> getParticipants(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsParticipantQueryResult> CREATOR; -  } - -  public final class RcsQueryContinuationToken implements android.os.Parcelable { -    method public int describeContents(); -    method @android.telephony.ims.RcsQueryContinuationToken.ContinuationTokenType public int getQueryType(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsQueryContinuationToken> CREATOR; -    field public static final int EVENT_QUERY_CONTINUATION_TOKEN_TYPE = 0; // 0x0 -    field public static final int MESSAGE_QUERY_CONTINUATION_TOKEN_TYPE = 1; // 0x1 -    field public static final int PARTICIPANT_QUERY_CONTINUATION_TOKEN_TYPE = 2; // 0x2 -    field public static final int THREAD_QUERY_CONTINUATION_TOKEN_TYPE = 3; // 0x3 -  } - -  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.telephony.ims.RcsQueryContinuationToken.EVENT_QUERY_CONTINUATION_TOKEN_TYPE, android.telephony.ims.RcsQueryContinuationToken.MESSAGE_QUERY_CONTINUATION_TOKEN_TYPE, android.telephony.ims.RcsQueryContinuationToken.PARTICIPANT_QUERY_CONTINUATION_TOKEN_TYPE, android.telephony.ims.RcsQueryContinuationToken.THREAD_QUERY_CONTINUATION_TOKEN_TYPE}) public static @interface RcsQueryContinuationToken.ContinuationTokenType { -  } - -  public abstract class RcsThread { -    method @WorkerThread @NonNull public android.telephony.ims.RcsIncomingMessage addIncomingMessage(@NonNull android.telephony.ims.RcsIncomingMessageCreationParams) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsOutgoingMessage addOutgoingMessage(@NonNull android.telephony.ims.RcsOutgoingMessageCreationParams) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread public void deleteMessage(@NonNull android.telephony.ims.RcsMessage) throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsMessageQueryResult getMessages() throws android.telephony.ims.RcsMessageStoreException; -    method @WorkerThread @NonNull public android.telephony.ims.RcsMessageSnippet getSnippet() throws android.telephony.ims.RcsMessageStoreException; -    method public abstract boolean isGroup(); -  } - -  public final class RcsThreadQueryParams implements android.os.Parcelable { -    method public int describeContents(); -    method public int getLimit(); -    method public boolean getSortDirection(); -    method @android.telephony.ims.RcsThreadQueryParams.SortingProperty public int getSortingProperty(); -    method public int getThreadType(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsThreadQueryParams> CREATOR; -    field public static final int SORT_BY_CREATION_ORDER = 0; // 0x0 -    field public static final int SORT_BY_TIMESTAMP = 1; // 0x1 -    field public static final int THREAD_TYPE_1_TO_1 = 2; // 0x2 -    field public static final int THREAD_TYPE_GROUP = 1; // 0x1 -  } - -  public static class RcsThreadQueryParams.Builder { -    ctor public RcsThreadQueryParams.Builder(); -    method public android.telephony.ims.RcsThreadQueryParams build(); -    method @CheckResult public android.telephony.ims.RcsThreadQueryParams.Builder setParticipant(@NonNull android.telephony.ims.RcsParticipant); -    method @CheckResult public android.telephony.ims.RcsThreadQueryParams.Builder setParticipants(@NonNull java.util.List<android.telephony.ims.RcsParticipant>); -    method @CheckResult public android.telephony.ims.RcsThreadQueryParams.Builder setResultLimit(@IntRange(from=0) int) throws java.security.InvalidParameterException; -    method @CheckResult public android.telephony.ims.RcsThreadQueryParams.Builder setSortDirection(boolean); -    method @CheckResult public android.telephony.ims.RcsThreadQueryParams.Builder setSortProperty(@android.telephony.ims.RcsThreadQueryParams.SortingProperty int); -    method @CheckResult public android.telephony.ims.RcsThreadQueryParams.Builder setThreadType(int); -  } - -  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.telephony.ims.RcsThreadQueryParams.SORT_BY_CREATION_ORDER, android.telephony.ims.RcsThreadQueryParams.SORT_BY_TIMESTAMP}) public static @interface RcsThreadQueryParams.SortingProperty { -  } - -  public final class RcsThreadQueryResult implements android.os.Parcelable { -    method public int describeContents(); -    method @Nullable public android.telephony.ims.RcsQueryContinuationToken getContinuationToken(); -    method @NonNull public java.util.List<android.telephony.ims.RcsThread> getThreads(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsThreadQueryResult> CREATOR; -  } - -} -  package android.telephony.mbms {    public class DownloadProgressListener { diff --git a/api/system-current.txt b/api/system-current.txt index 6f592060b224..92318d99733a 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3133,8 +3133,8 @@ package android.net {    public class LinkAddress implements android.os.Parcelable {      ctor public LinkAddress(java.net.InetAddress, int, int, int); -    ctor public LinkAddress(java.net.InetAddress, int); -    ctor public LinkAddress(String); +    ctor public LinkAddress(@NonNull java.net.InetAddress, int); +    ctor public LinkAddress(@NonNull String);      ctor public LinkAddress(String, int, int);      method public boolean isGlobalPreferred();      method public boolean isIPv4(); @@ -4015,6 +4015,7 @@ package android.os {      method public void onError(int);      method public void onFinished();      method public void onProgress(float); +    field public static final int BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS = 5; // 0x5      field public static final int BUGREPORT_ERROR_INVALID_INPUT = 1; // 0x1      field public static final int BUGREPORT_ERROR_RUNTIME = 2; // 0x2      field public static final int BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT = 4; // 0x4 @@ -4099,7 +4100,7 @@ package android.os {      method public final void putInt64Array(long, long[]);      method public final void putInt8(long, byte);      method public final void putInt8Array(long, byte[]); -    method public final void putNativeHandle(long, android.os.NativeHandle); +    method public final void putNativeHandle(long, @Nullable android.os.NativeHandle);      method public final void putString(long, String);      method public static Boolean[] wrapArray(@NonNull boolean[]);      method public static Long[] wrapArray(@NonNull long[]); @@ -4119,7 +4120,7 @@ package android.os {      method public final double readDouble();      method public final java.util.ArrayList<java.lang.Double> readDoubleVector();      method public final android.os.HwBlob readEmbeddedBuffer(long, long, long, boolean); -    method public final android.os.NativeHandle readEmbeddedNativeHandle(long, long); +    method @Nullable public final android.os.NativeHandle readEmbeddedNativeHandle(long, long);      method public final float readFloat();      method public final java.util.ArrayList<java.lang.Float> readFloatVector();      method public final short readInt16(); @@ -4130,8 +4131,8 @@ package android.os {      method public final java.util.ArrayList<java.lang.Long> readInt64Vector();      method public final byte readInt8();      method public final java.util.ArrayList<java.lang.Byte> readInt8Vector(); -    method public final android.os.NativeHandle readNativeHandle(); -    method public final java.util.ArrayList<android.os.NativeHandle> readNativeHandleVector(); +    method @Nullable public final android.os.NativeHandle readNativeHandle(); +    method @NonNull public final java.util.ArrayList<android.os.NativeHandle> readNativeHandleVector();      method public final String readString();      method public final java.util.ArrayList<java.lang.String> readStringVector();      method public final android.os.IHwBinder readStrongBinder(); @@ -4155,8 +4156,8 @@ package android.os {      method public final void writeInt8(byte);      method public final void writeInt8Vector(java.util.ArrayList<java.lang.Byte>);      method public final void writeInterfaceToken(String); -    method public final void writeNativeHandle(android.os.NativeHandle); -    method public final void writeNativeHandleVector(java.util.ArrayList<android.os.NativeHandle>); +    method public final void writeNativeHandle(@Nullable android.os.NativeHandle); +    method public final void writeNativeHandleVector(@NonNull java.util.ArrayList<android.os.NativeHandle>);      method public final void writeStatus(int);      method public final void writeString(String);      method public final void writeStringVector(java.util.ArrayList<java.lang.String>); @@ -4206,10 +4207,10 @@ package android.os {      ctor public NativeHandle(@NonNull java.io.FileDescriptor, boolean);      ctor public NativeHandle(@NonNull java.io.FileDescriptor[], @NonNull int[], boolean);      method public void close() throws java.io.IOException; -    method public android.os.NativeHandle dup() throws java.io.IOException; -    method public java.io.FileDescriptor getFileDescriptor(); -    method public java.io.FileDescriptor[] getFileDescriptors(); -    method public int[] getInts(); +    method @NonNull public android.os.NativeHandle dup() throws java.io.IOException; +    method @NonNull public java.io.FileDescriptor getFileDescriptor(); +    method @NonNull public java.io.FileDescriptor[] getFileDescriptors(); +    method @NonNull public int[] getInts();      method public boolean hasSingleFileDescriptor();    } @@ -4654,6 +4655,7 @@ package android.provider {      field public static final String CARRIER_APP_WHITELIST = "carrier_app_whitelist";      field public static final String DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD = "data_stall_consecutive_dns_timeout_threshold";      field public static final String DATA_STALL_EVALUATION_TYPE = "data_stall_evaluation_type"; +    field public static final int DATA_STALL_EVALUATION_TYPE_DNS = 1; // 0x1      field public static final String DATA_STALL_MIN_EVALUATE_INTERVAL = "data_stall_min_evaluate_interval";      field public static final String DATA_STALL_VALID_DNS_TIME_THRESHOLD = "data_stall_valid_dns_time_threshold";      field public static final String DEFAULT_SM_DP_PLUS = "default_sm_dp_plus"; @@ -4862,8 +4864,8 @@ package android.service.carrier {    public abstract class ApnService extends android.app.Service {      ctor public ApnService(); -    method public android.os.IBinder onBind(android.content.Intent); -    method @WorkerThread public abstract java.util.List<android.content.ContentValues> onRestoreApns(int); +    method @NonNull public android.os.IBinder onBind(@Nullable android.content.Intent); +    method @WorkerThread @NonNull public abstract java.util.List<android.content.ContentValues> onRestoreApns(int);    }  } @@ -4946,12 +4948,15 @@ package android.service.euicc {      method public abstract void onStartOtaIfNecessary(int, android.service.euicc.EuiccService.OtaStatusChangedCallback);      method public abstract int onSwitchToSubscription(int, @Nullable String, boolean);      method public abstract int onUpdateSubscriptionNickname(int, String, String); +    field public static final String ACTION_DELETE_SUBSCRIPTION_PRIVILEGED = "android.service.euicc.action.DELETE_SUBSCRIPTION_PRIVILEGED";      field public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS";      field public static final String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION = "android.service.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION"; +    field public static final String ACTION_RENAME_SUBSCRIPTION_PRIVILEGED = "android.service.euicc.action.RENAME_SUBSCRIPTION_PRIVILEGED";      field @Deprecated public static final String ACTION_RESOLVE_CONFIRMATION_CODE = "android.service.euicc.action.RESOLVE_CONFIRMATION_CODE";      field public static final String ACTION_RESOLVE_DEACTIVATE_SIM = "android.service.euicc.action.RESOLVE_DEACTIVATE_SIM";      field public static final String ACTION_RESOLVE_NO_PRIVILEGES = "android.service.euicc.action.RESOLVE_NO_PRIVILEGES";      field public static final String ACTION_RESOLVE_RESOLVABLE_ERRORS = "android.service.euicc.action.RESOLVE_RESOLVABLE_ERRORS"; +    field public static final String ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED = "android.service.euicc.action.TOGGLE_SUBSCRIPTION_PRIVILEGED";      field public static final String CATEGORY_EUICC_UI = "android.service.euicc.category.EUICC_UI";      field public static final String EUICC_SERVICE_INTERFACE = "android.service.euicc.EuiccService";      field public static final String EXTRA_RESOLUTION_ALLOW_POLICY_RULES = "android.service.euicc.extra.RESOLUTION_ALLOW_POLICY_RULES"; @@ -5409,7 +5414,7 @@ package android.telecom {    }    public final class PhoneAccountSuggestion implements android.os.Parcelable { -    ctor public PhoneAccountSuggestion(android.telecom.PhoneAccountHandle, int, boolean); +    ctor public PhoneAccountSuggestion(@NonNull android.telecom.PhoneAccountHandle, int, boolean);    }    public class PhoneAccountSuggestionService extends android.app.Service { @@ -5487,8 +5492,8 @@ package android.telecom {      method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsSupportingScheme(String);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall();      method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging(); -    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.WRITE_SECURE_SETTINGS}) public boolean setDefaultDialer(String); -    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(android.telecom.PhoneAccountHandle); +    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.WRITE_SECURE_SETTINGS}) public boolean setDefaultDialer(@Nullable String); +    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle);      field public static final String EXTRA_CALL_BACK_INTENT = "android.telecom.extra.CALL_BACK_INTENT";      field public static final String EXTRA_CLEAR_MISSED_CALLS_INTENT = "android.telecom.extra.CLEAR_MISSED_CALLS_INTENT";      field public static final String EXTRA_CONNECTION_SERVICE = "android.telecom.extra.CONNECTION_SERVICE"; @@ -5508,12 +5513,12 @@ package android.telephony {      field public static final int WWAN = 1; // 0x1    } -  public class CallAttributes implements android.os.Parcelable { -    ctor public CallAttributes(android.telephony.PreciseCallState, int, android.telephony.CallQuality); +  public final class CallAttributes implements android.os.Parcelable { +    ctor public CallAttributes(@NonNull android.telephony.PreciseCallState, int, @NonNull android.telephony.CallQuality);      method public int describeContents(); -    method public android.telephony.CallQuality getCallQuality(); +    method @NonNull public android.telephony.CallQuality getCallQuality();      method public int getNetworkType(); -    method public android.telephony.PreciseCallState getPreciseCallState(); +    method @NonNull public android.telephony.PreciseCallState getPreciseCallState();      method public void writeToParcel(android.os.Parcel, int);      field public static final android.os.Parcelable.Creator<android.telephony.CallAttributes> CREATOR;    } @@ -5550,13 +5555,13 @@ package android.telephony {    }    public final class CarrierRestrictionRules implements android.os.Parcelable { +    method @NonNull public java.util.List<java.lang.Boolean> areCarrierIdentifiersAllowed(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>);      method public int describeContents();      method @NonNull public java.util.List<android.service.carrier.CarrierIdentifier> getAllowedCarriers();      method public int getDefaultCarrierRestriction();      method @NonNull public java.util.List<android.service.carrier.CarrierIdentifier> getExcludedCarriers();      method public int getMultiSimPolicy();      method public boolean isAllCarriersAllowed(); -    method public java.util.List<java.lang.Boolean> isCarrierIdentifiersAllowed(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>);      method public void writeToParcel(android.os.Parcel, int);      field public static final int CARRIER_RESTRICTION_DEFAULT_ALLOWED = 1; // 0x1      field public static final int CARRIER_RESTRICTION_DEFAULT_NOT_ALLOWED = 0; // 0x0 @@ -5565,13 +5570,13 @@ package android.telephony {      field public static final int MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT = 1; // 0x1    } -  public static class CarrierRestrictionRules.Builder { -    method public android.telephony.CarrierRestrictionRules build(); -    method public android.telephony.CarrierRestrictionRules.Builder setAllCarriersAllowed(); -    method public android.telephony.CarrierRestrictionRules.Builder setAllowedCarriers(java.util.List<android.service.carrier.CarrierIdentifier>); -    method public android.telephony.CarrierRestrictionRules.Builder setDefaultCarrierRestriction(int); -    method public android.telephony.CarrierRestrictionRules.Builder setExcludedCarriers(java.util.List<android.service.carrier.CarrierIdentifier>); -    method public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int); +  public static final class CarrierRestrictionRules.Builder { +    method @NonNull public android.telephony.CarrierRestrictionRules build(); +    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllCarriersAllowed(); +    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllowedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>); +    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setDefaultCarrierRestriction(int); +    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setExcludedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>); +    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int);    }    public final class DataFailCause { @@ -5917,7 +5922,14 @@ package android.telephony {      field public static final int VSNCP_TIMEOUT = 2236; // 0x8bc    } -  public class DisconnectCause { +  public final class DataSpecificRegistrationStates implements android.os.Parcelable { +    method public int describeContents(); +    method @NonNull public android.telephony.LteVopsSupportInfo getLteVopsSupportInfo(); +    method public void writeToParcel(android.os.Parcel, int); +    field public static final android.os.Parcelable.Creator<android.telephony.DataSpecificRegistrationStates> CREATOR; +  } + +  public final class DisconnectCause {      field public static final int ALREADY_DIALING = 72; // 0x48      field public static final int ANSWERED_ELSEWHERE = 52; // 0x34      field public static final int BUSY = 4; // 0x4 @@ -6019,12 +6031,12 @@ package android.telephony {    }    public class NetworkRegistrationState implements android.os.Parcelable { -    ctor public NetworkRegistrationState(int, int, int, int, int, boolean, int[], @Nullable android.telephony.CellIdentity); -    ctor protected NetworkRegistrationState(android.os.Parcel); +    ctor public NetworkRegistrationState(int, int, int, int, int, boolean, @NonNull int[], @Nullable android.telephony.CellIdentity);      method public int describeContents();      method public int getAccessNetworkTechnology(); -    method public int[] getAvailableServices(); -    method public android.telephony.CellIdentity getCellIdentity(); +    method @NonNull public int[] getAvailableServices(); +    method @Nullable public android.telephony.CellIdentity getCellIdentity(); +    method @Nullable public android.telephony.DataSpecificRegistrationStates getDataSpecificStates();      method public int getDomain();      method public int getRegState();      method public int getRejectCause(); @@ -6049,22 +6061,38 @@ package android.telephony {      field public static final int SERVICE_TYPE_VOICE = 1; // 0x1    } +  public static class NetworkRegistrationState.Builder { +    ctor public NetworkRegistrationState.Builder(); +    method @NonNull public android.telephony.NetworkRegistrationState build(); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setAccessNetworkTechnology(int); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setAvailableServices(@NonNull int[]); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setCellIdentity(@Nullable android.telephony.CellIdentity); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setDomain(int); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setEmergencyOnly(boolean); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setNrStatus(int); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setRegState(int); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setRejectCause(int); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setRoamingType(int); +    method @NonNull public android.telephony.NetworkRegistrationState.Builder setTransportType(int); +  } +    public abstract class NetworkService extends android.app.Service {      ctor public NetworkService(); -    method protected abstract android.telephony.NetworkService.NetworkServiceProvider createNetworkServiceProvider(int); +    method public android.os.IBinder onBind(android.content.Intent); +    method @Nullable public abstract android.telephony.NetworkService.NetworkServiceProvider onCreateNetworkServiceProvider(int);      field public static final String NETWORK_SERVICE_INTERFACE = "android.telephony.NetworkService";    }    public abstract class NetworkService.NetworkServiceProvider implements java.lang.AutoCloseable {      ctor public NetworkService.NetworkServiceProvider(int);      method public abstract void close(); -    method public void getNetworkRegistrationState(int, android.telephony.NetworkServiceCallback); -    method public final int getSlotId(); +    method public void getNetworkRegistrationState(int, @NonNull android.telephony.NetworkServiceCallback); +    method public final int getSlotIndex();      method public final void notifyNetworkRegistrationStateChanged();    }    public class NetworkServiceCallback { -    method public void onGetNetworkRegistrationStateComplete(int, android.telephony.NetworkRegistrationState); +    method public void onGetNetworkRegistrationStateComplete(int, @Nullable android.telephony.NetworkRegistrationState);      field public static final int RESULT_ERROR_BUSY = 3; // 0x3      field public static final int RESULT_ERROR_FAILED = 5; // 0x5      field public static final int RESULT_ERROR_ILLEGAL_STATE = 4; // 0x4 @@ -6088,25 +6116,25 @@ package android.telephony {    public final class PhoneNumberRange implements android.os.Parcelable {      ctor public PhoneNumberRange(@NonNull String, @NonNull String, @NonNull String, @NonNull String);      method public int describeContents(); -    method public boolean matches(String); +    method public boolean matches(@NonNull String);      method public void writeToParcel(android.os.Parcel, int);      field public static final android.os.Parcelable.Creator<android.telephony.PhoneNumberRange> CREATOR;    }    public class PhoneStateListener {      method public void onCallAttributesChanged(@NonNull android.telephony.CallAttributes); -    method public void onCallDisconnectCauseChanged(int, int); -    method public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo); -    method public void onPreciseCallStateChanged(android.telephony.PreciseCallState); -    method public void onPreciseDataConnectionStateChanged(android.telephony.PreciseDataConnectionState); +    method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onCallDisconnectCauseChanged(int, int); +    method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo); +    method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState); +    method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);      method public void onRadioPowerStateChanged(int);      method public void onSrvccStateChanged(int);      method public void onVoiceActivationStateChanged(int);      field public static final int LISTEN_CALL_ATTRIBUTES_CHANGED = 67108864; // 0x4000000 -    field public static final int LISTEN_CALL_DISCONNECT_CAUSES = 33554432; // 0x2000000 -    field public static final int LISTEN_IMS_CALL_DISCONNECT_CAUSES = 134217728; // 0x8000000 -    field public static final int LISTEN_PRECISE_CALL_STATE = 2048; // 0x800 -    field public static final int LISTEN_PRECISE_DATA_CONNECTION_STATE = 4096; // 0x1000 +    field @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public static final int LISTEN_CALL_DISCONNECT_CAUSES = 33554432; // 0x2000000 +    field @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public static final int LISTEN_IMS_CALL_DISCONNECT_CAUSES = 134217728; // 0x8000000 +    field @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public static final int LISTEN_PRECISE_CALL_STATE = 2048; // 0x800 +    field @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public static final int LISTEN_PRECISE_DATA_CONNECTION_STATE = 4096; // 0x1000      field public static final int LISTEN_RADIO_POWER_STATE_CHANGED = 8388608; // 0x800000      field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int LISTEN_SRVCC_STATE_CHANGED = 16384; // 0x4000      field public static final int LISTEN_VOICE_ACTIVATION_STATE = 131072; // 0x20000 @@ -6133,7 +6161,7 @@ package android.telephony {    public final class PreciseDataConnectionState implements android.os.Parcelable {      method public int describeContents(); -    method public String getDataConnectionApn(); +    method @Nullable public String getDataConnectionApn();      method public int getDataConnectionApnTypeBitMask();      method public int getDataConnectionFailCause();      method public int getDataConnectionState(); @@ -6141,7 +6169,7 @@ package android.telephony {      field public static final android.os.Parcelable.Creator<android.telephony.PreciseDataConnectionState> CREATOR;    } -  public class PreciseDisconnectCause { +  public final class PreciseDisconnectCause {      field public static final int ACCESS_CLASS_BLOCKED = 260; // 0x104      field public static final int ACCESS_INFORMATION_DISCARDED = 43; // 0x2b      field public static final int ACM_LIMIT_EXCEEDED = 68; // 0x44 @@ -6239,12 +6267,12 @@ package android.telephony {    }    public class ServiceState implements android.os.Parcelable { -    method public android.telephony.NetworkRegistrationState getNetworkRegistrationState(int, int); -    method public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates(); -    method @Deprecated public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates(int); -    method @Deprecated public android.telephony.NetworkRegistrationState getNetworkRegistrationStates(int, int); -    method public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStatesForDomain(int); -    method public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStatesForTransportType(int); +    method @Nullable public android.telephony.NetworkRegistrationState getNetworkRegistrationState(int, int); +    method @NonNull public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates(); +    method @Deprecated @NonNull public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates(int); +    method @Deprecated @Nullable public android.telephony.NetworkRegistrationState getNetworkRegistrationStates(int, int); +    method @NonNull public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStatesForDomain(int); +    method @NonNull public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStatesForTransportType(int);      field public static final int ROAMING_TYPE_DOMESTIC = 2; // 0x2      field public static final int ROAMING_TYPE_INTERNATIONAL = 3; // 0x3      field public static final int ROAMING_TYPE_NOT_ROAMING = 0; // 0x0 @@ -6287,17 +6315,17 @@ package android.telephony {      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultDataSubId(int);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultSmsSubId(int);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setSubscriptionEnabled(int, boolean); -    field public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI; +    field @NonNull public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI;      field public static final int PROFILE_CLASS_DEFAULT = -1; // 0xffffffff      field public static final int PROFILE_CLASS_OPERATIONAL = 2; // 0x2      field public static final int PROFILE_CLASS_PROVISIONING = 1; // 0x1      field public static final int PROFILE_CLASS_TESTING = 0; // 0x0      field public static final int PROFILE_CLASS_UNSET = -1; // 0xffffffff -    field public static final android.net.Uri VT_ENABLED_CONTENT_URI; -    field public static final android.net.Uri WFC_ENABLED_CONTENT_URI; -    field public static final android.net.Uri WFC_MODE_CONTENT_URI; -    field public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI; -    field public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI; +    field @NonNull public static final android.net.Uri VT_ENABLED_CONTENT_URI; +    field @NonNull public static final android.net.Uri WFC_ENABLED_CONTENT_URI; +    field @NonNull public static final android.net.Uri WFC_MODE_CONTENT_URI; +    field @NonNull public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI; +    field @NonNull public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI;    }    public static class SubscriptionPlan.Builder { @@ -6335,7 +6363,7 @@ package android.telephony {      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean enableDataConnectivity();      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean enableModemForSlot(int, boolean);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void enableVideoCalling(boolean); -    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getAidForAppType(int); +    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getAidForAppType(int);      method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.service.carrier.CarrierIdentifier> getAllowedCarriers(int);      method public java.util.List<java.lang.String> getCarrierPackageNamesForIntent(android.content.Intent);      method public java.util.List<java.lang.String> getCarrierPackageNamesForIntentAndPhone(android.content.Intent, int); @@ -6351,14 +6379,15 @@ package android.telephony {      method @Deprecated public boolean getDataEnabled();      method @Deprecated public boolean getDataEnabled(int);      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean getEmergencyCallbackMode(); -    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimDomain(); -    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimIst(); +    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimDomain(); +    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimIst();      method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.util.Pair<java.lang.Integer,java.lang.Integer>> getLogicalToPhysicalSlotMapping(); +    method public static long getMaxNumberVerificationTimeoutMillis();      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getPreferredNetworkTypeBitmap();      method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public int getRadioPowerState();      method public int getSimApplicationState();      method public int getSimCardState(); -    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getSimLocale(); +    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.Locale getSimLocale();      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getSupportedRadioAccessFamily();      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public java.util.List<android.telephony.TelephonyHistogram> getTelephonyHistograms();      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.UiccSlotInfo[] getUiccSlotsInfo(); @@ -6369,7 +6398,6 @@ package android.telephony {      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCurrentPotentialEmergencyNumber(@NonNull String);      method public boolean isDataConnectivityPossible();      method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isIdle(); -    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isMultisimCarrierRestricted();      method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isOffhook();      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(); @@ -6415,7 +6443,6 @@ package android.telephony {      field public static final String EXTRA_SIM_STATE = "android.telephony.extra.SIM_STATE";      field public static final String EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL = "android.telephony.extra.VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL";      field public static final String EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING = "android.telephony.extra.VOICEMAIL_SCRAMBLED_PIN_STRING"; -    field public static final long MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS = 60000L; // 0xea60L      field public static final long NETWORK_TYPE_BITMASK_1xRTT = 64L; // 0x40L      field public static final long NETWORK_TYPE_BITMASK_CDMA = 8L; // 0x8L      field public static final long NETWORK_TYPE_BITMASK_EDGE = 2L; // 0x2L @@ -6468,7 +6495,7 @@ package android.telephony {    }    public class UiccSlotInfo implements android.os.Parcelable { -    ctor public UiccSlotInfo(boolean, boolean, String, int, int, boolean); +    ctor @Deprecated public UiccSlotInfo(boolean, boolean, String, int, int, boolean);      method public int describeContents();      method public String getCardId();      method public int getCardStateInfo(); @@ -6476,6 +6503,7 @@ package android.telephony {      method public boolean getIsEuicc();      method public boolean getIsExtendedApduSupported();      method public int getLogicalSlotIdx(); +    method public boolean isRemovable();      method public void writeToParcel(android.os.Parcel, int);      field public static final int CARD_STATE_INFO_ABSENT = 1; // 0x1      field public static final int CARD_STATE_INFO_ERROR = 3; // 0x3 @@ -6495,7 +6523,6 @@ package android.telephony.data {    public final class DataCallResponse implements android.os.Parcelable {      ctor public DataCallResponse(int, int, int, int, int, @Nullable String, @Nullable java.util.List<android.net.LinkAddress>, @Nullable java.util.List<java.net.InetAddress>, @Nullable java.util.List<java.net.InetAddress>, @Nullable java.util.List<java.lang.String>, int); -    ctor public DataCallResponse(android.os.Parcel);      method public int describeContents();      method public int getActive();      method @NonNull public java.util.List<android.net.LinkAddress> getAddresses(); @@ -6537,7 +6564,8 @@ package android.telephony.data {    public abstract class DataService extends android.app.Service {      ctor public DataService(); -    method public abstract android.telephony.data.DataService.DataServiceProvider createDataServiceProvider(int); +    method public android.os.IBinder onBind(android.content.Intent); +    method @Nullable public abstract android.telephony.data.DataService.DataServiceProvider onCreateDataServiceProvider(int);      field public static final String DATA_SERVICE_INTERFACE = "android.telephony.data.DataService";      field public static final int REQUEST_REASON_HANDOVER = 3; // 0x3      field public static final int REQUEST_REASON_NORMAL = 1; // 0x1 @@ -6549,20 +6577,20 @@ package android.telephony.data {      method public abstract void close();      method public void deactivateDataCall(int, int, @Nullable android.telephony.data.DataServiceCallback);      method public void getDataCallList(@NonNull android.telephony.data.DataServiceCallback); -    method public final int getSlotId(); +    method public final int getSlotIndex();      method public final void notifyDataCallListChanged(java.util.List<android.telephony.data.DataCallResponse>); -    method public void setDataProfile(java.util.List<android.telephony.data.DataProfile>, boolean, @Nullable android.telephony.data.DataServiceCallback); -    method public void setInitialAttachApn(android.telephony.data.DataProfile, boolean, @Nullable android.telephony.data.DataServiceCallback); -    method public void setupDataCall(int, android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @Nullable android.telephony.data.DataServiceCallback); +    method public void setDataProfile(@NonNull java.util.List<android.telephony.data.DataProfile>, boolean, @Nullable android.telephony.data.DataServiceCallback); +    method public void setInitialAttachApn(@NonNull android.telephony.data.DataProfile, boolean, @Nullable android.telephony.data.DataServiceCallback); +    method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @Nullable android.telephony.data.DataServiceCallback);    }    public class DataServiceCallback { -    method public void onDataCallListChanged(java.util.List<android.telephony.data.DataCallResponse>); +    method public void onDataCallListChanged(@NonNull java.util.List<android.telephony.data.DataCallResponse>);      method public void onDeactivateDataCallComplete(int); -    method public void onGetDataCallListComplete(int, java.util.List<android.telephony.data.DataCallResponse>); +    method public void onGetDataCallListComplete(int, @NonNull java.util.List<android.telephony.data.DataCallResponse>);      method public void onSetDataProfileComplete(int);      method public void onSetInitialAttachApnComplete(int); -    method public void onSetupDataCallComplete(int, android.telephony.data.DataCallResponse); +    method public void onSetupDataCallComplete(int, @Nullable android.telephony.data.DataCallResponse);      field public static final int RESULT_ERROR_BUSY = 3; // 0x3      field public static final int RESULT_ERROR_ILLEGAL_STATE = 4; // 0x4      field public static final int RESULT_ERROR_INVALID_ARG = 2; // 0x2 @@ -6572,7 +6600,7 @@ package android.telephony.data {    public abstract class QualifiedNetworksService extends android.app.Service {      ctor public QualifiedNetworksService(); -    method public abstract android.telephony.data.QualifiedNetworksService.NetworkAvailabilityUpdater createNetworkAvailabilityUpdater(int); +    method @NonNull public abstract android.telephony.data.QualifiedNetworksService.NetworkAvailabilityUpdater createNetworkAvailabilityUpdater(int);      field public static final String QUALIFIED_NETWORKS_SERVICE_INTERFACE = "android.telephony.data.QualifiedNetworksService";    } @@ -6580,7 +6608,7 @@ package android.telephony.data {      ctor public QualifiedNetworksService.NetworkAvailabilityUpdater(int);      method public abstract void close();      method public final int getSlotIndex(); -    method public final void updateQualifiedNetworkTypes(int, int[]); +    method public final void updateQualifiedNetworkTypes(int, @Nullable int[]);    }  } @@ -6654,14 +6682,20 @@ package android.telephony.euicc {      method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDefaultDownloadableSubscriptionList(android.app.PendingIntent);      method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDownloadableSubscriptionMetadata(android.telephony.euicc.DownloadableSubscription, android.app.PendingIntent);      method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public int getOtaStatus(); +    field public static final String ACTION_DELETE_SUBSCRIPTION_PRIVILEGED = "android.telephony.euicc.action.DELETE_SUBSCRIPTION_PRIVILEGED";      field @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public static final String ACTION_OTA_STATUS_CHANGED = "android.telephony.euicc.action.OTA_STATUS_CHANGED";      field public static final String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION = "android.telephony.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION"; +    field public static final String ACTION_RENAME_SUBSCRIPTION_PRIVILEGED = "android.telephony.euicc.action.RENAME_SUBSCRIPTION_PRIVILEGED"; +    field public static final String ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED = "android.telephony.euicc.action.TOGGLE_SUBSCRIPTION_PRIVILEGED";      field public static final int EUICC_OTA_FAILED = 2; // 0x2      field public static final int EUICC_OTA_IN_PROGRESS = 1; // 0x1      field public static final int EUICC_OTA_NOT_NEEDED = 4; // 0x4      field public static final int EUICC_OTA_STATUS_UNAVAILABLE = 5; // 0x5      field public static final int EUICC_OTA_SUCCEEDED = 3; // 0x3      field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS"; +    field public static final String EXTRA_ENABLE_SUBSCRIPTION = "android.telephony.euicc.extra.ENABLE_SUBSCRIPTION"; +    field public static final String EXTRA_SUBSCRIPTION_ID = "android.telephony.euicc.extra.SUBSCRIPTION_ID"; +    field public static final String EXTRA_SUBSCRIPTION_NICKNAME = "android.telephony.euicc.extra.SUBSCRIPTION_NICKNAME";    }    @IntDef(prefix={"EUICC_OTA_"}, value={android.telephony.euicc.EuiccManager.EUICC_OTA_IN_PROGRESS, android.telephony.euicc.EuiccManager.EUICC_OTA_FAILED, android.telephony.euicc.EuiccManager.EUICC_OTA_SUCCEEDED, android.telephony.euicc.EuiccManager.EUICC_OTA_NOT_NEEDED, android.telephony.euicc.EuiccManager.EUICC_OTA_STATUS_UNAVAILABLE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccManager.OtaStatus { @@ -6816,7 +6850,7 @@ package android.telephony.ims {    }    public class ImsCallSessionListener { -    method public void callQualityChanged(android.telephony.CallQuality); +    method public void callQualityChanged(@NonNull android.telephony.CallQuality);      method public void callSessionConferenceExtendFailed(android.telephony.ims.ImsReasonInfo);      method public void callSessionConferenceExtendReceived(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);      method public void callSessionConferenceExtended(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile); @@ -6841,7 +6875,7 @@ package android.telephony.ims {      method public void callSessionResumeFailed(android.telephony.ims.ImsReasonInfo);      method public void callSessionResumeReceived(android.telephony.ims.ImsCallProfile);      method public void callSessionResumed(android.telephony.ims.ImsCallProfile); -    method public void callSessionRttAudioIndicatorChanged(android.telephony.ims.ImsStreamMediaProfile); +    method public void callSessionRttAudioIndicatorChanged(@NonNull android.telephony.ims.ImsStreamMediaProfile);      method public void callSessionRttMessageReceived(String);      method public void callSessionRttModifyRequestReceived(android.telephony.ims.ImsCallProfile);      method public void callSessionRttModifyResponseReceived(int); @@ -6917,14 +6951,14 @@ package android.telephony.ims {      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isVtSettingEnabled();      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerImsRegistrationCallback(java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback) throws android.telephony.ims.ImsException;      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerMmTelCapabilityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback) throws android.telephony.ims.ImsException; -    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAdvancedCallingSetting(boolean); +    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAdvancedCallingSettingEnabled(boolean);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setRttCapabilitySetting(boolean);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiModeSetting(int);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiNonPersistent(boolean, int);      method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingModeSetting(int); -    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingSetting(boolean); -    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiSetting(boolean); -    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVtSetting(boolean); +    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingSettingEnabled(boolean); +    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiSettingEnabled(boolean); +    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVtSettingEnabled(boolean);      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback);      method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterMmTelCapabilityCallback(@NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback);      field public static final int WIFI_MODE_CELLULAR_PREFERRED = 1; // 0x1 @@ -6939,10 +6973,10 @@ package android.telephony.ims {    public static class ImsMmTelManager.RegistrationCallback {      ctor public ImsMmTelManager.RegistrationCallback(); -    method public void onDeregistered(android.telephony.ims.ImsReasonInfo);      method public void onRegistered(int);      method public void onRegistering(int);      method public void onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo); +    method public void onUnregistered(android.telephony.ims.ImsReasonInfo);    }    public final class ImsReasonInfo implements android.os.Parcelable { @@ -7145,12 +7179,12 @@ package android.telephony.ims {    public final class ImsSsData implements android.os.Parcelable {      ctor public ImsSsData(int, int, int, int, int);      method public int describeContents(); -    method public android.telephony.ims.ImsCallForwardInfo[] getCallForwardInfo(); +    method @Nullable public java.util.List<android.telephony.ims.ImsCallForwardInfo> getCallForwardInfo();      method public int getRequestType();      method public int getResult();      method public int getServiceClass();      method public int getServiceType(); -    method @NonNull public android.telephony.ims.ImsSsInfo[] getSuppServiceInfo(); +    method @NonNull public java.util.List<android.telephony.ims.ImsSsInfo> getSuppServiceInfo();      method public int getTeleserviceType();      method public boolean isTypeBarring();      method public boolean isTypeCf(); @@ -7210,11 +7244,11 @@ package android.telephony.ims {      field public static final int SS_WAIT = 12; // 0xc    } -  public static class ImsSsData.Builder { +  public static final class ImsSsData.Builder {      ctor public ImsSsData.Builder(int, int, int, int, int);      method @NonNull public android.telephony.ims.ImsSsData build(); -    method @NonNull public android.telephony.ims.ImsSsData.Builder setCallForwardingInfo(@NonNull android.telephony.ims.ImsCallForwardInfo[]); -    method @NonNull public android.telephony.ims.ImsSsData.Builder setSuppServiceInfo(@NonNull android.telephony.ims.ImsSsInfo[]); +    method @NonNull public android.telephony.ims.ImsSsData.Builder setCallForwardingInfo(@NonNull java.util.List<android.telephony.ims.ImsCallForwardInfo>); +    method @NonNull public android.telephony.ims.ImsSsData.Builder setSuppServiceInfo(@NonNull java.util.List<android.telephony.ims.ImsSsInfo>);    }    public final class ImsSsInfo implements android.os.Parcelable { @@ -7223,7 +7257,7 @@ package android.telephony.ims {      method public int getClirInterrogationStatus();      method public int getClirOutgoingState();      method @Deprecated public String getIcbNum(); -    method public String getIncomingCommunicationBarringNumber(); +    method @Nullable public String getIncomingCommunicationBarringNumber();      method public int getProvisionStatus();      method public int getStatus();      method public void writeToParcel(android.os.Parcel, int); @@ -7244,7 +7278,7 @@ package android.telephony.ims {      field public static final int SERVICE_PROVISIONING_UNKNOWN = -1; // 0xffffffff    } -  public static class ImsSsInfo.Builder { +  public static final class ImsSsInfo.Builder {      ctor public ImsSsInfo.Builder(int);      method @NonNull public android.telephony.ims.ImsSsInfo build();      method @NonNull public android.telephony.ims.ImsSsInfo.Builder setClirInterrogationStatus(int); @@ -7259,12 +7293,12 @@ package android.telephony.ims {      method public int describeContents();      method public int getAudioDirection();      method public int getAudioQuality(); -    method public boolean getRttAudioSpeech();      method public int getRttMode();      method public int getVideoDirection();      method public int getVideoQuality(); +    method public boolean isReceivingRttAudio();      method public boolean isRttCall(); -    method public void setRttAudioSpeech(boolean); +    method public void setReceivingRttAudio(boolean);      method public void setRttMode(int);      method public void writeToParcel(android.os.Parcel, int);      field public static final int AUDIO_QUALITY_AMR = 1; // 0x1 @@ -7667,7 +7701,7 @@ package android.telephony.mbms {  package android.telephony.mbms.vendor { -  public class MbmsDownloadServiceBase extends android.os.Binder implements android.os.IInterface { +  public class MbmsDownloadServiceBase extends android.os.Binder {      ctor public MbmsDownloadServiceBase();      method public int addProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;      method public int addStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException; @@ -7692,15 +7726,15 @@ package android.telephony.mbms.vendor {    public class MbmsGroupCallServiceBase extends android.app.Service {      ctor public MbmsGroupCallServiceBase();      method public void dispose(int) throws android.os.RemoteException; -    method public int initialize(android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException; +    method public int initialize(@NonNull android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException;      method public void onAppCallbackDied(int, int);      method public android.os.IBinder onBind(android.content.Intent); -    method public int startGroupCall(int, long, java.util.List<java.lang.Integer>, java.util.List<java.lang.Integer>, android.telephony.mbms.GroupCallCallback); +    method public int startGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull android.telephony.mbms.GroupCallCallback);      method public void stopGroupCall(int, long); -    method public void updateGroupCall(int, long, java.util.List<java.lang.Integer>, java.util.List<java.lang.Integer>); +    method public void updateGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>);    } -  public class MbmsStreamingServiceBase extends android.os.Binder implements android.os.IInterface { +  public class MbmsStreamingServiceBase extends android.os.Binder {      ctor public MbmsStreamingServiceBase();      method public android.os.IBinder asBinder();      method public void dispose(int) throws android.os.RemoteException; diff --git a/api/test-current.txt b/api/test-current.txt index 6757827371c7..08554ec41836 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -263,7 +263,9 @@ package android.content.pm {      method public abstract String getPermissionControllerPackageName();      method @NonNull public abstract String getServicesSystemSharedLibraryPackageName();      method @NonNull public abstract String getSharedSystemSharedLibraryPackageName(); +    method @RequiresPermission("android.permission.GRANT_RUNTIME_PERMISSIONS") public abstract void grantRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);      method public abstract boolean isPermissionReviewModeEnabled(); +    method @RequiresPermission("android.permission.REVOKE_RUNTIME_PERMISSIONS") public abstract void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);      field public static final String FEATURE_ADOPTABLE_STORAGE = "android.software.adoptable_storage";      field public static final String FEATURE_FILE_BASED_ENCRYPTION = "android.software.file_based_encryption";      field public static final int MATCH_FACTORY_ONLY = 2097152; // 0x200000 @@ -624,8 +626,8 @@ package android.net {    public class LinkAddress implements android.os.Parcelable {      ctor public LinkAddress(java.net.InetAddress, int, int, int); -    ctor public LinkAddress(java.net.InetAddress, int); -    ctor public LinkAddress(String); +    ctor public LinkAddress(@NonNull java.net.InetAddress, int); +    ctor public LinkAddress(@NonNull String);      ctor public LinkAddress(String, int, int);      method public boolean isGlobalPreferred();      method public boolean isIPv4(); @@ -993,7 +995,7 @@ package android.os {      method public final void putInt64Array(long, long[]);      method public final void putInt8(long, byte);      method public final void putInt8Array(long, byte[]); -    method public final void putNativeHandle(long, android.os.NativeHandle); +    method public final void putNativeHandle(long, @Nullable android.os.NativeHandle);      method public final void putString(long, String);      method public static Boolean[] wrapArray(@NonNull boolean[]);      method public static Long[] wrapArray(@NonNull long[]); @@ -1013,7 +1015,7 @@ package android.os {      method public final double readDouble();      method public final java.util.ArrayList<java.lang.Double> readDoubleVector();      method public final android.os.HwBlob readEmbeddedBuffer(long, long, long, boolean); -    method public final android.os.NativeHandle readEmbeddedNativeHandle(long, long); +    method @Nullable public final android.os.NativeHandle readEmbeddedNativeHandle(long, long);      method public final float readFloat();      method public final java.util.ArrayList<java.lang.Float> readFloatVector();      method public final short readInt16(); @@ -1024,8 +1026,8 @@ package android.os {      method public final java.util.ArrayList<java.lang.Long> readInt64Vector();      method public final byte readInt8();      method public final java.util.ArrayList<java.lang.Byte> readInt8Vector(); -    method public final android.os.NativeHandle readNativeHandle(); -    method public final java.util.ArrayList<android.os.NativeHandle> readNativeHandleVector(); +    method @Nullable public final android.os.NativeHandle readNativeHandle(); +    method @NonNull public final java.util.ArrayList<android.os.NativeHandle> readNativeHandleVector();      method public final String readString();      method public final java.util.ArrayList<java.lang.String> readStringVector();      method public final android.os.IHwBinder readStrongBinder(); @@ -1049,8 +1051,8 @@ package android.os {      method public final void writeInt8(byte);      method public final void writeInt8Vector(java.util.ArrayList<java.lang.Byte>);      method public final void writeInterfaceToken(String); -    method public final void writeNativeHandle(android.os.NativeHandle); -    method public final void writeNativeHandleVector(java.util.ArrayList<android.os.NativeHandle>); +    method public final void writeNativeHandle(@Nullable android.os.NativeHandle); +    method public final void writeNativeHandleVector(@NonNull java.util.ArrayList<android.os.NativeHandle>);      method public final void writeStatus(int);      method public final void writeString(String);      method public final void writeStringVector(java.util.ArrayList<java.lang.String>); @@ -1100,10 +1102,10 @@ package android.os {      ctor public NativeHandle(@NonNull java.io.FileDescriptor, boolean);      ctor public NativeHandle(@NonNull java.io.FileDescriptor[], @NonNull int[], boolean);      method public void close() throws java.io.IOException; -    method public android.os.NativeHandle dup() throws java.io.IOException; -    method public java.io.FileDescriptor getFileDescriptor(); -    method public java.io.FileDescriptor[] getFileDescriptors(); -    method public int[] getInts(); +    method @NonNull public android.os.NativeHandle dup() throws java.io.IOException; +    method @NonNull public java.io.FileDescriptor getFileDescriptor(); +    method @NonNull public java.io.FileDescriptor[] getFileDescriptors(); +    method @NonNull public int[] getInts();      method public boolean hasSingleFileDescriptor();    } @@ -1225,6 +1227,7 @@ package android.provider {      field public static final String CAPTIVE_PORTAL_USE_HTTPS = "captive_portal_use_https";      field public static final String DATA_STALL_CONSECUTIVE_DNS_TIMEOUT_THRESHOLD = "data_stall_consecutive_dns_timeout_threshold";      field public static final String DATA_STALL_EVALUATION_TYPE = "data_stall_evaluation_type"; +    field public static final int DATA_STALL_EVALUATION_TYPE_DNS = 1; // 0x1      field public static final String DATA_STALL_MIN_EVALUATE_INTERVAL = "data_stall_min_evaluate_interval";      field public static final String DATA_STALL_VALID_DNS_TIME_THRESHOLD = "data_stall_valid_dns_time_threshold";      field public static final String HIDDEN_API_BLACKLIST_EXEMPTIONS = "hidden_api_blacklist_exemptions"; @@ -1437,8 +1440,12 @@ package android.telecom {      ctor public CallAudioState(boolean, int, int, @Nullable android.bluetooth.BluetoothDevice, @NonNull java.util.Collection<android.bluetooth.BluetoothDevice>);    } +  public abstract class Conference extends android.telecom.Conferenceable { +    method public android.telecom.Connection getPrimaryConnection(); +  } +    public final class PhoneAccountSuggestion implements android.os.Parcelable { -    ctor public PhoneAccountSuggestion(android.telecom.PhoneAccountHandle, int, boolean); +    ctor public PhoneAccountSuggestion(@NonNull android.telecom.PhoneAccountHandle, int, boolean);    }    public class PhoneAccountSuggestionService extends android.app.Service { @@ -1449,6 +1456,16 @@ package android.telecom {      field public static final String SERVICE_INTERFACE = "android.telecom.PhoneAccountSuggestionService";    } +  public class TelecomManager { +    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public int getCurrentTtyMode(); +    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall(); +    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle); +    field public static final int TTY_MODE_FULL = 1; // 0x1 +    field public static final int TTY_MODE_HCO = 2; // 0x2 +    field public static final int TTY_MODE_OFF = 0; // 0x0 +    field public static final int TTY_MODE_VCO = 3; // 0x3 +  } +  }  package android.telephony { @@ -1517,7 +1534,7 @@ package android.telephony.mbms {  package android.telephony.mbms.vendor { -  public class MbmsDownloadServiceBase extends android.os.Binder implements android.os.IInterface { +  public class MbmsDownloadServiceBase extends android.os.Binder {      ctor public MbmsDownloadServiceBase();      method public int addProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;      method public int addStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException; @@ -1542,15 +1559,15 @@ package android.telephony.mbms.vendor {    public class MbmsGroupCallServiceBase extends android.app.Service {      ctor public MbmsGroupCallServiceBase();      method public void dispose(int) throws android.os.RemoteException; -    method public int initialize(android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException; +    method public int initialize(@NonNull android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException;      method public void onAppCallbackDied(int, int);      method public android.os.IBinder onBind(android.content.Intent); -    method public int startGroupCall(int, long, java.util.List<java.lang.Integer>, java.util.List<java.lang.Integer>, android.telephony.mbms.GroupCallCallback); +    method public int startGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull android.telephony.mbms.GroupCallCallback);      method public void stopGroupCall(int, long); -    method public void updateGroupCall(int, long, java.util.List<java.lang.Integer>, java.util.List<java.lang.Integer>); +    method public void updateGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>);    } -  public class MbmsStreamingServiceBase extends android.os.Binder implements android.os.IInterface { +  public class MbmsStreamingServiceBase extends android.os.Binder {      ctor public MbmsStreamingServiceBase();      method public android.os.IBinder asBinder();      method public void dispose(int) throws android.os.RemoteException; diff --git a/cmds/hid/hid b/cmds/hid/hid index 2359fcd738dd..3931da1e2a85 100755 --- a/cmds/hid/hid +++ b/cmds/hid/hid @@ -5,4 +5,10 @@  #  base=/system  export CLASSPATH=$base/framework/hid.jar + +# Preload the native portion libhidcommand_jni.so to bypass the dependency +# checks in the Java classloader, which prohibit dependencies that aren't +# listed in system/core/rootdir/etc/public.libraries.android.txt. +export LD_PRELOAD=libhidcommand_jni.so +  exec app_process $base/bin com.android.commands.hid.Hid "$@" diff --git a/cmds/statsd/Android.bp b/cmds/statsd/Android.bp index 5c3d17e30585..f178fa254e69 100644 --- a/cmds/statsd/Android.bp +++ b/cmds/statsd/Android.bp @@ -323,4 +323,8 @@ java_library {      },  } - +// Filegroup for statsd config proto definition. +filegroup { +     name: "statsd-config-proto-def", +     srcs: ["src/statsd_config.proto"], +} diff --git a/cmds/statsd/OWNERS b/cmds/statsd/OWNERS index deebd4e3cd3b..13157505fc28 100644 --- a/cmds/statsd/OWNERS +++ b/cmds/statsd/OWNERS @@ -1,7 +1,6 @@  bookatz@google.com  cjyu@google.com  dwchen@google.com -gaillard@google.com  jinyithu@google.com  joeo@google.com  kwekua@google.com diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 2fe6caf8844c..47eccdbc8c1f 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -2410,6 +2410,9 @@ message LmkKillOccurred {      // The elapsed real time of start of the process.      optional int64 process_start_time_nanos = 9; + +    // Min oom adj score considered by lmkd. +    optional int32 min_oom_score = 10;  }  /* diff --git a/config/hiddenapi-greylist.txt b/config/hiddenapi-greylist.txt index e166c31d578a..a17bf94bad22 100644 --- a/config/hiddenapi-greylist.txt +++ b/config/hiddenapi-greylist.txt @@ -592,41 +592,13 @@ Landroid/net/IConnectivityManager$Stub$Proxy;->getTetherableUsbRegexs()[Ljava/la  Landroid/net/IConnectivityManager$Stub$Proxy;->getTetheredIfaces()[Ljava/lang/String;  Landroid/net/IConnectivityManager$Stub$Proxy;->mRemote:Landroid/os/IBinder;  Landroid/net/IConnectivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IConnectivityManager; -Landroid/net/IConnectivityManager;->getActiveLinkProperties()Landroid/net/LinkProperties; -Landroid/net/IConnectivityManager;->getActiveNetworkInfo()Landroid/net/NetworkInfo; -Landroid/net/IConnectivityManager;->getAllNetworkInfo()[Landroid/net/NetworkInfo; -Landroid/net/IConnectivityManager;->getAllNetworkState()[Landroid/net/NetworkState; -Landroid/net/IConnectivityManager;->getLastTetherError(Ljava/lang/String;)I -Landroid/net/IConnectivityManager;->getTetherableIfaces()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->getTetherableUsbRegexs()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->getTetherableWifiRegexs()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->getTetheredIfaces()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->getTetheringErroredIfaces()[Ljava/lang/String; -Landroid/net/IConnectivityManager;->startLegacyVpn(Lcom/android/internal/net/VpnProfile;)V  Landroid/net/INetworkManagementEventObserver$Stub;-><init>()V  Landroid/net/INetworkPolicyListener$Stub;-><init>()V  Landroid/net/INetworkPolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkPolicyManager; -Landroid/net/INetworkPolicyManager;->getNetworkQuotaInfo(Landroid/net/NetworkState;)Landroid/net/NetworkQuotaInfo; -Landroid/net/INetworkPolicyManager;->getRestrictBackground()Z -Landroid/net/INetworkPolicyManager;->getUidPolicy(I)I -Landroid/net/INetworkPolicyManager;->setNetworkPolicies([Landroid/net/NetworkPolicy;)V -Landroid/net/INetworkPolicyManager;->setRestrictBackground(Z)V -Landroid/net/INetworkPolicyManager;->setUidPolicy(II)V -Landroid/net/INetworkPolicyManager;->snoozeLimit(Landroid/net/NetworkTemplate;)V  Landroid/net/INetworkScoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkScoreService;  Landroid/net/INetworkStatsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V  Landroid/net/INetworkStatsService$Stub$Proxy;->getMobileIfaces()[Ljava/lang/String;  Landroid/net/INetworkStatsService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkStatsService; -Landroid/net/INetworkStatsService;->forceUpdate()V -Landroid/net/INetworkStatsService;->getDataLayerSnapshotForUid(I)Landroid/net/NetworkStats; -Landroid/net/INetworkStatsService;->getMobileIfaces()[Ljava/lang/String; -Landroid/net/INetworkStatsService;->openSession()Landroid/net/INetworkStatsSession; -Landroid/net/INetworkStatsService;->openSessionForUsageStats(ILjava/lang/String;)Landroid/net/INetworkStatsSession; -Landroid/net/INetworkStatsSession;->close()V -Landroid/net/INetworkStatsSession;->getHistoryForNetwork(Landroid/net/NetworkTemplate;I)Landroid/net/NetworkStatsHistory; -Landroid/net/INetworkStatsSession;->getHistoryForUid(Landroid/net/NetworkTemplate;IIII)Landroid/net/NetworkStatsHistory; -Landroid/net/INetworkStatsSession;->getSummaryForAllUid(Landroid/net/NetworkTemplate;JJZ)Landroid/net/NetworkStats; -Landroid/net/INetworkStatsSession;->getSummaryForNetwork(Landroid/net/NetworkTemplate;JJ)Landroid/net/NetworkStats;  Landroid/net/InterfaceConfiguration;-><init>()V  Landroid/net/LinkProperties$ProvisioningChange;->values()[Landroid/net/LinkProperties$ProvisioningChange;  Landroid/net/MobileLinkQualityInfo;-><init>()V @@ -637,22 +609,12 @@ Landroid/net/SntpClient;-><init>()V  Landroid/net/wifi/IWifiManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V  Landroid/net/wifi/IWifiManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiManager;  Landroid/net/wifi/IWifiManager$Stub;->TRANSACTION_getScanResults:I -Landroid/net/wifi/IWifiManager;->getCurrentNetwork()Landroid/net/Network; -Landroid/net/wifi/IWifiManager;->getWifiApConfiguration()Landroid/net/wifi/WifiConfiguration; -Landroid/net/wifi/IWifiManager;->getWifiApEnabledState()I  Landroid/net/wifi/IWifiScanner$Stub$Proxy;-><init>(Landroid/os/IBinder;)V  Landroid/net/wifi/IWifiScanner$Stub$Proxy;->mRemote:Landroid/os/IBinder;  Landroid/net/wifi/IWifiScanner$Stub;-><init>()V  Landroid/net/wifi/IWifiScanner$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiScanner;  Landroid/net/wifi/p2p/IWifiP2pManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/p2p/IWifiP2pManager;  Landroid/nfc/INfcAdapter$Stub;->TRANSACTION_enable:I -Landroid/nfc/INfcAdapterExtras;->authenticate(Ljava/lang/String;[B)V -Landroid/nfc/INfcAdapterExtras;->close(Ljava/lang/String;Landroid/os/IBinder;)Landroid/os/Bundle; -Landroid/nfc/INfcAdapterExtras;->getCardEmulationRoute(Ljava/lang/String;)I -Landroid/nfc/INfcAdapterExtras;->getDriverName(Ljava/lang/String;)Ljava/lang/String; -Landroid/nfc/INfcAdapterExtras;->open(Ljava/lang/String;Landroid/os/IBinder;)Landroid/os/Bundle; -Landroid/nfc/INfcAdapterExtras;->setCardEmulationRoute(Ljava/lang/String;I)V -Landroid/nfc/INfcAdapterExtras;->transceive(Ljava/lang/String;[B)Landroid/os/Bundle;  Landroid/os/AsyncResult;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Throwable;)V  Landroid/os/AsyncResult;->exception:Ljava/lang/Throwable;  Landroid/os/AsyncResult;->forMessage(Landroid/os/Message;)Landroid/os/AsyncResult; @@ -1516,7 +1478,6 @@ Landroid/service/wallpaper/IWallpaperEngine;->dispatchPointer(Landroid/view/Moti  Landroid/service/wallpaper/IWallpaperEngine;->dispatchWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;)V  Landroid/service/wallpaper/IWallpaperEngine;->setVisibility(Z)V  Landroid/service/wallpaper/IWallpaperService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/wallpaper/IWallpaperService; -Landroid/speech/IRecognitionListener;->onEvent(ILandroid/os/Bundle;)V  Landroid/telecom/Log;->i(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V  Landroid/telecom/Log;->w(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V  Landroid/telephony/ims/compat/feature/MMTelFeature;-><init>()V @@ -1527,10 +1488,6 @@ Landroid/telephony/JapanesePhoneNumberFormatter;->format(Landroid/text/Editable;  Landroid/telephony/mbms/IMbmsStreamingSessionCallback$Stub;-><init>()V  Landroid/telephony/mbms/IStreamingServiceCallback$Stub;-><init>()V  Landroid/telephony/mbms/vendor/IMbmsStreamingService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/mbms/vendor/IMbmsStreamingService; -Landroid/telephony/mbms/vendor/IMbmsStreamingService;->getPlaybackUri(ILjava/lang/String;)Landroid/net/Uri; -Landroid/telephony/mbms/vendor/IMbmsStreamingService;->initialize(Landroid/telephony/mbms/IMbmsStreamingSessionCallback;I)I -Landroid/telephony/mbms/vendor/IMbmsStreamingService;->requestUpdateStreamingServices(ILjava/util/List;)I -Landroid/telephony/mbms/vendor/IMbmsStreamingService;->startStreaming(ILjava/lang/String;Landroid/telephony/mbms/IStreamingServiceCallback;)I  Landroid/telephony/SmsCbCmasInfo;->getCategory()I  Landroid/telephony/SmsCbCmasInfo;->getCertainty()I  Landroid/telephony/SmsCbCmasInfo;->getMessageClass()I @@ -1556,9 +1513,6 @@ Landroid/telephony/SmsCbMessage;->getServiceCategory()I  Landroid/telephony/SmsCbMessage;->isCmasMessage()Z  Landroid/telephony/SmsCbMessage;->isEmergencyMessage()Z  Landroid/telephony/TelephonyManager$MultiSimVariants;->values()[Landroid/telephony/TelephonyManager$MultiSimVariants; -Landroid/test/AndroidTestCase;->getTestContext()Landroid/content/Context; -Landroid/test/AndroidTestCase;->setTestContext(Landroid/content/Context;)V -Landroid/test/InstrumentationTestCase;->runMethod(Ljava/lang/reflect/Method;I)V  Landroid/util/Singleton;-><init>()V  Landroid/util/XmlPullAttributes;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V  Landroid/util/XmlPullAttributes;->mParser:Lorg/xmlpull/v1/XmlPullParser; @@ -1575,17 +1529,9 @@ Landroid/view/IAppTransitionAnimationSpecsFuture$Stub;-><init>()V  Landroid/view/IDockedStackListener$Stub;-><init>()V  Landroid/view/IGraphicsStats$Stub$Proxy;-><init>(Landroid/os/IBinder;)V  Landroid/view/IGraphicsStats$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IGraphicsStats; -Landroid/view/IRecentsAnimationController;->finish(Z)V  Landroid/view/IRecentsAnimationController;->screenshotTask(I)Landroid/app/ActivityManager$TaskSnapshot; -Landroid/view/IRecentsAnimationController;->setAnimationTargetsBehindSystemBars(Z)V -Landroid/view/IRecentsAnimationController;->setInputConsumerEnabled(Z)V  Landroid/view/IRecentsAnimationRunner$Stub;-><init>()V -Landroid/view/IRecentsAnimationRunner;->onAnimationCanceled()V -Landroid/view/IRecentsAnimationRunner;->onAnimationStart(Landroid/view/IRecentsAnimationController;[Landroid/view/RemoteAnimationTarget;Landroid/graphics/Rect;Landroid/graphics/Rect;)V -Landroid/view/IRemoteAnimationFinishedCallback;->onAnimationFinished()V  Landroid/view/IRemoteAnimationRunner$Stub;-><init>()V -Landroid/view/IRemoteAnimationRunner;->onAnimationCancelled()V -Landroid/view/IRemoteAnimationRunner;->onAnimationStart([Landroid/view/RemoteAnimationTarget;Landroid/view/IRemoteAnimationFinishedCallback;)V  Landroid/view/IRotationWatcher$Stub;-><init>()V  Landroid/view/IWindow$Stub;-><init>()V  Landroid/view/IWindow$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindow; @@ -1598,45 +1544,11 @@ Landroid/view/IWindowManager$Stub$Proxy;->watchRotation(Landroid/view/IRotationW  Landroid/view/IWindowManager$Stub;-><init>()V  Landroid/view/IWindowManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowManager;  Landroid/view/IWindowManager;->createInputConsumer(Landroid/os/IBinder;Ljava/lang/String;Landroid/view/InputChannel;)V -Landroid/view/IWindowManager;->destroyInputConsumer(Ljava/lang/String;)Z -Landroid/view/IWindowManager;->endProlongedAnimations()V -Landroid/view/IWindowManager;->executeAppTransition()V -Landroid/view/IWindowManager;->freezeRotation(I)V -Landroid/view/IWindowManager;->getAnimationScale(I)F  Landroid/view/IWindowManager;->getAnimationScales()[F -Landroid/view/IWindowManager;->getBaseDisplaySize(ILandroid/graphics/Point;)V -Landroid/view/IWindowManager;->getDockedStackSide()I -Landroid/view/IWindowManager;->getInitialDisplayDensity(I)I -Landroid/view/IWindowManager;->getInitialDisplaySize(ILandroid/graphics/Point;)V -Landroid/view/IWindowManager;->getPendingAppTransition()I -Landroid/view/IWindowManager;->getStableInsets(ILandroid/graphics/Rect;)V -Landroid/view/IWindowManager;->hasNavigationBar()Z -Landroid/view/IWindowManager;->isKeyguardLocked()Z -Landroid/view/IWindowManager;->isKeyguardSecure()Z -Landroid/view/IWindowManager;->isSafeModeEnabled()Z -Landroid/view/IWindowManager;->lockNow(Landroid/os/Bundle;)V -Landroid/view/IWindowManager;->overridePendingAppTransitionMultiThumbFuture(Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/os/IRemoteCallback;Z)V -Landroid/view/IWindowManager;->overridePendingAppTransitionRemote(Landroid/view/RemoteAnimationAdapter;)V -Landroid/view/IWindowManager;->registerDockedStackListener(Landroid/view/IDockedStackListener;)V -Landroid/view/IWindowManager;->removeRotationWatcher(Landroid/view/IRotationWatcher;)V -Landroid/view/IWindowManager;->setAnimationScale(IF)V -Landroid/view/IWindowManager;->setAnimationScales([F)V -Landroid/view/IWindowManager;->setNavBarVirtualKeyHapticFeedbackEnabled(Z)V -Landroid/view/IWindowManager;->setShelfHeight(ZI)V -Landroid/view/IWindowManager;->setStrictModeVisualIndicatorPreference(Ljava/lang/String;)V -Landroid/view/IWindowManager;->thawRotation()V  Landroid/view/IWindowSession$Stub$Proxy;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIIJLandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/util/MergedConfiguration;Landroid/view/Surface;)I  Landroid/view/IWindowSession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowSession; -Landroid/view/IWindowSession;->finishDrawing(Landroid/view/IWindow;)V -Landroid/view/IWindowSession;->getInTouchMode()Z -Landroid/view/IWindowSession;->performDrag(Landroid/view/IWindow;ILandroid/view/SurfaceControl;IFFFFLandroid/content/ClipData;)Landroid/os/IBinder; -Landroid/view/IWindowSession;->performHapticFeedback(Landroid/view/IWindow;IZ)Z -Landroid/view/IWindowSession;->remove(Landroid/view/IWindow;)V -Landroid/view/IWindowSession;->setInTouchMode(Z)V -Landroid/view/IWindowSession;->setTransparentRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V  Landroid/view/IWindowSession;->wallpaperCommandComplete(Landroid/os/IBinder;Landroid/os/Bundle;)V  Landroid/view/IWindowSession;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V -Landroid/view/RenderNodeAnimator;->setDuration(J)Landroid/view/RenderNodeAnimator;  Landroid/view/View$AttachInfo$InvalidateInfo;-><init>()V  Landroid/view/View$CheckForLongPress;-><init>(Landroid/view/View;)V  Landroid/view/View$ListenerInfo;-><init>()V @@ -1645,9 +1557,7 @@ Landroid/webkit/CacheManager$CacheResult;-><init>()V  Landroid/webkit/IWebViewUpdateService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V  Landroid/webkit/IWebViewUpdateService$Stub$Proxy;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;  Landroid/webkit/IWebViewUpdateService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/webkit/IWebViewUpdateService; -Landroid/webkit/IWebViewUpdateService;->getCurrentWebViewPackageName()Ljava/lang/String;  Landroid/webkit/IWebViewUpdateService;->getValidWebViewPackages()[Landroid/webkit/WebViewProviderInfo; -Landroid/webkit/IWebViewUpdateService;->isFallbackPackage(Ljava/lang/String;)Z  Landroid/widget/DigitalClock$FormatChangeObserver;-><init>(Landroid/widget/DigitalClock;)V  Landroid/widget/QuickContactBadge$QueryHandler;-><init>(Landroid/widget/QuickContactBadge;Landroid/content/ContentResolver;)V  Landroid/widget/RelativeLayout$DependencyGraph$Node;-><init>()V @@ -1658,7 +1568,6 @@ Lcom/android/ims/ImsCall;->isMultiparty()Z  Lcom/android/ims/ImsCall;->reject(I)V  Lcom/android/ims/ImsCall;->terminate(I)V  Lcom/android/ims/ImsConfigListener$Stub;-><init>()V -Lcom/android/ims/ImsConfigListener;->onSetFeatureResponse(IIII)V  Lcom/android/ims/ImsEcbm;->exitEmergencyCallbackMode()V  Lcom/android/ims/ImsManager;->getConfigInterface()Lcom/android/ims/ImsConfig;  Lcom/android/ims/ImsManager;->getInstance(Landroid/content/Context;I)Lcom/android/ims/ImsManager; @@ -1668,104 +1577,17 @@ Lcom/android/ims/ImsManager;->isVolteEnabledByPlatform(Landroid/content/Context;  Lcom/android/ims/ImsUtInterface;->queryCallForward(ILjava/lang/String;Landroid/os/Message;)V  Lcom/android/ims/internal/IImsCallSession$Stub;-><init>()V  Lcom/android/ims/internal/IImsCallSession$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsCallSession; -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionConferenceStateUpdated(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsConferenceState;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHandover(Lcom/android/ims/internal/IImsCallSession;IILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHandoverFailed(Lcom/android/ims/internal/IImsCallSession;IILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHeld(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHoldFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionHoldReceived(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionInviteParticipantsRequestDelivered(Lcom/android/ims/internal/IImsCallSession;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionInviteParticipantsRequestFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionMergeComplete(Lcom/android/ims/internal/IImsCallSession;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionMergeFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionMergeStarted(Lcom/android/ims/internal/IImsCallSession;Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionMultipartyStateChanged(Lcom/android/ims/internal/IImsCallSession;Z)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionProgressing(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsStreamMediaProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionResumed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionResumeFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionResumeReceived(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionStarted(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionStartFailed(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionSuppServiceReceived(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsSuppServiceNotification;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionTerminated(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionTtyModeReceived(Lcom/android/ims/internal/IImsCallSession;I)V -Lcom/android/ims/internal/IImsCallSessionListener;->callSessionUpdated(Lcom/android/ims/internal/IImsCallSession;Landroid/telephony/ims/ImsCallProfile;)V  Lcom/android/ims/internal/IImsConfig$Stub;-><init>()V  Lcom/android/ims/internal/IImsEcbm$Stub;-><init>()V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationAssociatedUriChanged([Landroid/net/Uri;)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationChangeFailed(ILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationConnected()V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationConnectedWithRadioTech(I)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationDisconnected(Landroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationFeatureCapabilityChanged(I[I[I)V -Lcom/android/ims/internal/IImsRegistrationListener;->registrationProgressingWithRadioTech(I)V -Lcom/android/ims/internal/IImsRegistrationListener;->voiceMessageCountUpdate(I)V  Lcom/android/ims/internal/IImsService$Stub;-><init>()V  Lcom/android/ims/internal/IImsService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/ims/internal/IImsService;  Lcom/android/ims/internal/IImsUt$Stub;-><init>()V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationCallBarringQueried(Lcom/android/ims/internal/IImsUt;I[Landroid/telephony/ims/ImsSsInfo;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationCallForwardQueried(Lcom/android/ims/internal/IImsUt;I[Landroid/telephony/ims/ImsCallForwardInfo;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationCallWaitingQueried(Lcom/android/ims/internal/IImsUt;I[Landroid/telephony/ims/ImsSsInfo;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationQueried(Lcom/android/ims/internal/IImsUt;ILandroid/os/Bundle;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationQueryFailed(Lcom/android/ims/internal/IImsUt;ILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationUpdated(Lcom/android/ims/internal/IImsUt;I)V -Lcom/android/ims/internal/IImsUtListener;->utConfigurationUpdateFailed(Lcom/android/ims/internal/IImsUt;ILandroid/telephony/ims/ImsReasonInfo;)V -Lcom/android/ims/internal/IImsVideoCallCallback;->changeCallDataUsage(J)V -Lcom/android/ims/internal/IImsVideoCallCallback;->changeCameraCapabilities(Landroid/telecom/VideoProfile$CameraCapabilities;)V -Lcom/android/ims/internal/IImsVideoCallCallback;->changePeerDimensions(II)V -Lcom/android/ims/internal/IImsVideoCallCallback;->changeVideoQuality(I)V -Lcom/android/ims/internal/IImsVideoCallCallback;->handleCallSessionEvent(I)V -Lcom/android/ims/internal/IImsVideoCallCallback;->receiveSessionModifyRequest(Landroid/telecom/VideoProfile;)V -Lcom/android/ims/internal/IImsVideoCallCallback;->receiveSessionModifyResponse(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V  Lcom/android/ims/internal/IImsVideoCallProvider$Stub;-><init>()V -Lcom/android/ims/internal/IImsVideoCallProvider;->setCallback(Lcom/android/ims/internal/IImsVideoCallCallback;)V  Lcom/android/ims/internal/ImsVideoCallProviderWrapper;-><init>(Lcom/android/ims/internal/IImsVideoCallProvider;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->cmdStatus(Lcom/android/ims/internal/uce/options/OptionsCmdStatus;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->getVersionCb(Ljava/lang/String;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->incomingOptions(Ljava/lang/String;Lcom/android/ims/internal/uce/options/OptionsCapInfo;I)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->serviceAvailable(Lcom/android/ims/internal/uce/common/StatusCode;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->serviceUnavailable(Lcom/android/ims/internal/uce/common/StatusCode;)V -Lcom/android/ims/internal/uce/options/IOptionsListener;->sipResponseReceived(Ljava/lang/String;Lcom/android/ims/internal/uce/options/OptionsSipResponse;Lcom/android/ims/internal/uce/options/OptionsCapInfo;)V  Lcom/android/ims/internal/uce/options/IOptionsService$Stub;-><init>()V -Lcom/android/ims/internal/uce/options/IOptionsService;->addListener(ILcom/android/ims/internal/uce/options/IOptionsListener;Lcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->getContactCap(ILjava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->getContactListCap(I[Ljava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->getMyInfo(II)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->getVersion(I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->removeListener(ILcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->responseIncomingOptions(IIILjava/lang/String;Lcom/android/ims/internal/uce/options/OptionsCapInfo;Z)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/options/IOptionsService;->setMyInfo(ILcom/android/ims/internal/uce/common/CapInfo;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceListener;->capInfoReceived(Ljava/lang/String;[Lcom/android/ims/internal/uce/presence/PresTupleInfo;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->cmdStatus(Lcom/android/ims/internal/uce/presence/PresCmdStatus;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->getVersionCb(Ljava/lang/String;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->listCapInfoReceived(Lcom/android/ims/internal/uce/presence/PresRlmiInfo;[Lcom/android/ims/internal/uce/presence/PresResInfo;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->publishTriggering(Lcom/android/ims/internal/uce/presence/PresPublishTriggerType;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->serviceAvailable(Lcom/android/ims/internal/uce/common/StatusCode;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->serviceUnAvailable(Lcom/android/ims/internal/uce/common/StatusCode;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->sipResponseReceived(Lcom/android/ims/internal/uce/presence/PresSipResponse;)V -Lcom/android/ims/internal/uce/presence/IPresenceListener;->unpublishMessageSent()V  Lcom/android/ims/internal/uce/presence/IPresenceService$Stub;-><init>()V -Lcom/android/ims/internal/uce/presence/IPresenceService;->addListener(ILcom/android/ims/internal/uce/presence/IPresenceListener;Lcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->getContactCap(ILjava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->getContactListCap(I[Ljava/lang/String;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->getVersion(I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->publishMyCap(ILcom/android/ims/internal/uce/presence/PresCapInfo;I)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->reenableService(II)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->removeListener(ILcom/android/ims/internal/uce/common/UceLong;)Lcom/android/ims/internal/uce/common/StatusCode; -Lcom/android/ims/internal/uce/presence/IPresenceService;->setNewFeatureTag(ILjava/lang/String;Lcom/android/ims/internal/uce/presence/PresServiceInfo;I)Lcom/android/ims/internal/uce/common/StatusCode;  Lcom/android/ims/internal/uce/uceservice/IUceListener$Stub;-><init>()V -Lcom/android/ims/internal/uce/uceservice/IUceListener;->setStatus(I)V  Lcom/android/ims/internal/uce/uceservice/IUceService$Stub;-><init>()V -Lcom/android/ims/internal/uce/uceservice/IUceService;->createOptionsService(Lcom/android/ims/internal/uce/options/IOptionsListener;Lcom/android/ims/internal/uce/common/UceLong;)I -Lcom/android/ims/internal/uce/uceservice/IUceService;->createPresenceService(Lcom/android/ims/internal/uce/presence/IPresenceListener;Lcom/android/ims/internal/uce/common/UceLong;)I -Lcom/android/ims/internal/uce/uceservice/IUceService;->destroyOptionsService(I)V -Lcom/android/ims/internal/uce/uceservice/IUceService;->destroyPresenceService(I)V -Lcom/android/ims/internal/uce/uceservice/IUceService;->getOptionsService()Lcom/android/ims/internal/uce/options/IOptionsService; -Lcom/android/ims/internal/uce/uceservice/IUceService;->getPresenceService()Lcom/android/ims/internal/uce/presence/IPresenceService; -Lcom/android/ims/internal/uce/uceservice/IUceService;->getServiceStatus()Z -Lcom/android/ims/internal/uce/uceservice/IUceService;->isServiceStarted()Z -Lcom/android/ims/internal/uce/uceservice/IUceService;->startService(Lcom/android/ims/internal/uce/uceservice/IUceListener;)Z -Lcom/android/ims/internal/uce/uceservice/IUceService;->stopService()Z  Lcom/android/internal/app/AlertActivity;-><init>()V  Lcom/android/internal/app/AlertActivity;->mAlert:Lcom/android/internal/app/AlertController;  Lcom/android/internal/app/AlertActivity;->mAlertParams:Lcom/android/internal/app/AlertController$AlertParams; @@ -1796,22 +1618,12 @@ Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_setUserRestrictions:  Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_startOperation:I  Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_startWatchingMode:I  Lcom/android/internal/app/IAppOpsService$Stub;->TRANSACTION_stopWatchingMode:I -Lcom/android/internal/app/IAppOpsService;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;)V -Lcom/android/internal/app/IAppOpsService;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List; -Lcom/android/internal/app/IAppOpsService;->getPackagesForOps([I)Ljava/util/List; -Lcom/android/internal/app/IAppOpsService;->resetAllModes(ILjava/lang/String;)V -Lcom/android/internal/app/IAppOpsService;->setMode(IILjava/lang/String;I)V  Lcom/android/internal/app/IBatteryStats$Stub$Proxy;-><init>(Landroid/os/IBinder;)V  Lcom/android/internal/app/IBatteryStats$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IBatteryStats; -Lcom/android/internal/app/IBatteryStats;->computeChargeTimeRemaining()J -Lcom/android/internal/app/IBatteryStats;->getAwakeTimeBattery()J -Lcom/android/internal/app/IBatteryStats;->getStatistics()[B -Lcom/android/internal/app/IBatteryStats;->isCharging()Z  Lcom/android/internal/app/IMediaContainerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IMediaContainerService;  Lcom/android/internal/app/IntentForwarderActivity;->TAG:Ljava/lang/String;  Lcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->showSessionFromSession(Landroid/os/IBinder;Landroid/os/Bundle;I)Z  Lcom/android/internal/app/IVoiceInteractionManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionManagerService; -Lcom/android/internal/app/IVoiceInteractionManagerService;->getKeyphraseSoundModel(ILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;  Lcom/android/internal/app/LocaleHelper$LocaleInfoComparator;-><init>(Ljava/util/Locale;Z)V  Lcom/android/internal/app/LocaleHelper$LocaleInfoComparator;->compare(Lcom/android/internal/app/LocaleStore$LocaleInfo;Lcom/android/internal/app/LocaleStore$LocaleInfo;)I  Lcom/android/internal/app/LocaleHelper;->getDisplayCountry(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String; @@ -1839,10 +1651,6 @@ Lcom/android/internal/app/WindowDecorActionBar;->mTabScrollView:Lcom/android/int  Lcom/android/internal/app/WindowDecorActionBar;->setShowHideAnimationEnabled(Z)V  Lcom/android/internal/appwidget/IAppWidgetService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/appwidget/IAppWidgetService;  Lcom/android/internal/appwidget/IAppWidgetService$Stub;->TRANSACTION_bindAppWidgetId:I -Lcom/android/internal/appwidget/IAppWidgetService;->bindAppWidgetId(Ljava/lang/String;IILandroid/content/ComponentName;Landroid/os/Bundle;)Z -Lcom/android/internal/appwidget/IAppWidgetService;->bindRemoteViewsService(Ljava/lang/String;ILandroid/content/Intent;Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/IServiceConnection;I)Z -Lcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetIds(Landroid/content/ComponentName;)[I -Lcom/android/internal/appwidget/IAppWidgetService;->getAppWidgetViews(Ljava/lang/String;I)Landroid/widget/RemoteViews;  Lcom/android/internal/backup/IBackupTransport$Stub;-><init>()V  Lcom/android/internal/backup/LocalTransport;->mDataDir:Ljava/io/File;  Lcom/android/internal/backup/LocalTransport;->mRestorePackage:I @@ -1862,13 +1670,6 @@ Lcom/android/internal/location/GpsNetInitiatedHandler;->handleNiNotification(Lco  Lcom/android/internal/location/GpsNetInitiatedHandler;->mIsHexInput:Z  Lcom/android/internal/location/ILocationProvider$Stub;-><init>()V  Lcom/android/internal/location/ILocationProvider$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/location/ILocationProvider; -Lcom/android/internal/location/ILocationProvider;->disable()V -Lcom/android/internal/location/ILocationProvider;->enable()V -Lcom/android/internal/location/ILocationProvider;->getProperties()Lcom/android/internal/location/ProviderProperties; -Lcom/android/internal/location/ILocationProvider;->getStatus(Landroid/os/Bundle;)I -Lcom/android/internal/location/ILocationProvider;->getStatusUpdateTime()J -Lcom/android/internal/location/ILocationProvider;->sendExtraCommand(Ljava/lang/String;Landroid/os/Bundle;)Z -Lcom/android/internal/location/ILocationProvider;->setRequest(Lcom/android/internal/location/ProviderRequest;Landroid/os/WorkSource;)V  Lcom/android/internal/logging/MetricsLogger;-><init>()V  Lcom/android/internal/net/LegacyVpnInfo;-><init>()V  Lcom/android/internal/net/VpnConfig;-><init>()V @@ -1880,7 +1681,6 @@ Lcom/android/internal/os/BinderInternal;->getContextObject()Landroid/os/IBinder;  Lcom/android/internal/os/BinderInternal;->handleGc()V  Lcom/android/internal/os/ClassLoaderFactory;->createClassloaderNamespace(Ljava/lang/ClassLoader;ILjava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;  Lcom/android/internal/os/IDropBoxManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/os/IDropBoxManagerService; -Lcom/android/internal/os/IDropBoxManagerService;->getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;  Lcom/android/internal/os/ProcessCpuTracker$Stats;->name:Ljava/lang/String;  Lcom/android/internal/os/ProcessCpuTracker$Stats;->rel_stime:I  Lcom/android/internal/os/ProcessCpuTracker$Stats;->rel_uptime:J @@ -1906,8 +1706,6 @@ Lcom/android/internal/policy/DecorView;->mLastLeftInset:I  Lcom/android/internal/policy/DecorView;->mLastRightInset:I  Lcom/android/internal/policy/DecorView;->mWindow:Lcom/android/internal/policy/PhoneWindow;  Lcom/android/internal/policy/IKeyguardService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardService; -Lcom/android/internal/policy/IKeyguardService;->doKeyguardTimeout(Landroid/os/Bundle;)V -Lcom/android/internal/policy/IKeyguardService;->setKeyguardEnabled(Z)V  Lcom/android/internal/policy/IKeyguardStateCallback$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/policy/IKeyguardStateCallback;  Lcom/android/internal/policy/PhoneFallbackEventHandler;-><init>(Landroid/content/Context;)V  Lcom/android/internal/policy/PhoneFallbackEventHandler;->mContext:Landroid/content/Context; @@ -2362,14 +2160,7 @@ Lcom/android/internal/R$xml;->power_profile:I  Lcom/android/internal/statusbar/IStatusBar$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBar;  Lcom/android/internal/statusbar/IStatusBarService$Stub;-><init>()V  Lcom/android/internal/statusbar/IStatusBarService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/statusbar/IStatusBarService; -Lcom/android/internal/statusbar/IStatusBarService;->collapsePanels()V -Lcom/android/internal/statusbar/IStatusBarService;->disable(ILandroid/os/IBinder;Ljava/lang/String;)V -Lcom/android/internal/statusbar/IStatusBarService;->expandNotificationsPanel()V -Lcom/android/internal/statusbar/IStatusBarService;->handleSystemKey(I)V -Lcom/android/internal/statusbar/IStatusBarService;->removeIcon(Ljava/lang/String;)V -Lcom/android/internal/statusbar/IStatusBarService;->setIconVisibility(Ljava/lang/String;Z)V  Lcom/android/internal/telecom/ITelecomService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telecom/ITelecomService; -Lcom/android/internal/telecom/ITelecomService;->getCallState()I  Lcom/android/internal/telephony/BaseCommands;->mCallStateRegistrants:Landroid/os/RegistrantList;  Lcom/android/internal/telephony/BaseCommands;->mCallWaitingInfoRegistrants:Landroid/os/RegistrantList;  Lcom/android/internal/telephony/BaseCommands;->mCatCallSetUpRegistrant:Landroid/os/Registrant; @@ -2996,7 +2787,6 @@ Lcom/android/internal/telephony/GsmCdmaPhone;->notifyPreciseCallStateChanged()V  Lcom/android/internal/telephony/GsmCdmaPhone;->notifyServiceStateChanged(Landroid/telephony/ServiceState;)V  Lcom/android/internal/telephony/GsmCdmaPhone;->setOnEcbModeExitResponse(Landroid/os/Handler;ILjava/lang/Object;)V  Lcom/android/internal/telephony/GsmCdmaPhone;->syncClirSetting()V -Lcom/android/internal/telephony/ICarrierConfigLoader;->getConfigForSubId(ILjava/lang/String;)Landroid/os/PersistableBundle;  Lcom/android/internal/telephony/IccCard;->getState()Lcom/android/internal/telephony/IccCardConstants$State;  Lcom/android/internal/telephony/IccCard;->registerForNetworkLocked(Landroid/os/Handler;ILjava/lang/Object;)V  Lcom/android/internal/telephony/IccCard;->supplyNetworkDepersonalization(Ljava/lang/String;Landroid/os/Message;)V @@ -3018,15 +2808,8 @@ Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->logd(Ljava/lang/S  Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->loge(Ljava/lang/String;)V  Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mAdnCache:Lcom/android/internal/telephony/uicc/AdnRecordCache;  Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mBaseHandler:Landroid/os/Handler; -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mCurrentApp:Lcom/android/internal/telephony/uicc/UiccCardApplication; -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mIs3gCard:Z -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mLock:Ljava/lang/Object;  Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mPhone:Lcom/android/internal/telephony/Phone; -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mRecords:Ljava/util/List; -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mRecordSize:[I -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->mSuccess:Z  Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->updateEfForIccType(I)I -Lcom/android/internal/telephony/IccPhoneBookInterfaceManager;->waitForResult(Ljava/util/concurrent/atomic/AtomicBoolean;)V  Lcom/android/internal/telephony/IccProvider;-><init>()V  Lcom/android/internal/telephony/IccProvider;->ADDRESS_BOOK_COLUMN_NAMES:[Ljava/lang/String;  Lcom/android/internal/telephony/IccProvider;->DBG:Z @@ -3209,16 +2992,10 @@ Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;-><init>(Landroid/os/IB  Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->getDeviceId(Ljava/lang/String;)Ljava/lang/String;  Lcom/android/internal/telephony/IPhoneSubInfo$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneSubInfo;  Lcom/android/internal/telephony/IPhoneSubInfo$Stub;->TRANSACTION_getDeviceId:I -Lcom/android/internal/telephony/IPhoneSubInfo;->getIccSerialNumber(Ljava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/IPhoneSubInfo;->getSubscriberId(Ljava/lang/String;)Ljava/lang/String;  Lcom/android/internal/telephony/ISms$Stub;-><init>()V  Lcom/android/internal/telephony/ISms$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISms;  Lcom/android/internal/telephony/ISub$Stub$Proxy;-><init>(Landroid/os/IBinder;)V  Lcom/android/internal/telephony/ISub$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISub; -Lcom/android/internal/telephony/ISub;->getActiveSubIdList()[I -Lcom/android/internal/telephony/ISub;->getDefaultDataSubId()I -Lcom/android/internal/telephony/ISub;->getDefaultSubId()I -Lcom/android/internal/telephony/ISub;->setDefaultDataSubId(I)V  Lcom/android/internal/telephony/ITelephony$Stub$Proxy;-><init>(Landroid/os/IBinder;)V  Lcom/android/internal/telephony/ITelephony$Stub$Proxy;->getDeviceId(Ljava/lang/String;)Ljava/lang/String;  Lcom/android/internal/telephony/ITelephony$Stub$Proxy;->isRadioOn(Ljava/lang/String;)Z @@ -3228,38 +3005,9 @@ Lcom/android/internal/telephony/ITelephony$Stub;->DESCRIPTOR:Ljava/lang/String;  Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_call:I  Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_dial:I  Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_getDeviceId:I -Lcom/android/internal/telephony/ITelephony;->call(Ljava/lang/String;Ljava/lang/String;)V -Lcom/android/internal/telephony/ITelephony;->dial(Ljava/lang/String;)V -Lcom/android/internal/telephony/ITelephony;->disableDataConnectivity()Z -Lcom/android/internal/telephony/ITelephony;->disableLocationUpdates()V -Lcom/android/internal/telephony/ITelephony;->enableDataConnectivity()Z -Lcom/android/internal/telephony/ITelephony;->enableLocationUpdates()V -Lcom/android/internal/telephony/ITelephony;->getActivePhoneType()I -Lcom/android/internal/telephony/ITelephony;->getCallState()I -Lcom/android/internal/telephony/ITelephony;->getDataActivity()I -Lcom/android/internal/telephony/ITelephony;->getDataEnabled(I)Z -Lcom/android/internal/telephony/ITelephony;->getDataState()I -Lcom/android/internal/telephony/ITelephony;->getNetworkType()I -Lcom/android/internal/telephony/ITelephony;->handlePinMmi(Ljava/lang/String;)Z -Lcom/android/internal/telephony/ITelephony;->handlePinMmiForSubscriber(ILjava/lang/String;)Z -Lcom/android/internal/telephony/ITelephony;->hasIccCard()Z -Lcom/android/internal/telephony/ITelephony;->iccCloseLogicalChannel(II)Z -Lcom/android/internal/telephony/ITelephony;->iccTransmitApduLogicalChannel(IIIIIIILjava/lang/String;)Ljava/lang/String; -Lcom/android/internal/telephony/ITelephony;->isRadioOnForSubscriber(ILjava/lang/String;)Z -Lcom/android/internal/telephony/ITelephony;->setRadio(Z)Z -Lcom/android/internal/telephony/ITelephony;->supplyPin(Ljava/lang/String;)Z -Lcom/android/internal/telephony/ITelephony;->toggleRadioOnOff()V -Lcom/android/internal/telephony/ITelephony;->updateServiceLocation()V  Lcom/android/internal/telephony/ITelephonyRegistry$Stub$Proxy;-><init>(Landroid/os/IBinder;)V  Lcom/android/internal/telephony/ITelephonyRegistry$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephonyRegistry; -Lcom/android/internal/telephony/ITelephonyRegistry;->listen(Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;IZ)V -Lcom/android/internal/telephony/ITelephonyRegistry;->notifyCallState(ILjava/lang/String;)V -Lcom/android/internal/telephony/ITelephonyRegistry;->notifyCellInfo(Ljava/util/List;)V -Lcom/android/internal/telephony/ITelephonyRegistry;->notifyDataConnectionFailed(Ljava/lang/String;)V  Lcom/android/internal/telephony/IWapPushManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IWapPushManager; -Lcom/android/internal/telephony/IWapPushManager;->addPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZ)Z -Lcom/android/internal/telephony/IWapPushManager;->deletePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z -Lcom/android/internal/telephony/IWapPushManager;->updatePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZ)Z  Lcom/android/internal/telephony/MccTable$MccEntry;->mIso:Ljava/lang/String;  Lcom/android/internal/telephony/MccTable;->countryCodeForMcc(I)Ljava/lang/String;  Lcom/android/internal/telephony/MccTable;->defaultLanguageForMcc(I)Ljava/lang/String; @@ -3454,7 +3202,6 @@ Lcom/android/internal/telephony/ServiceStateTracker;->isInHomeSidNid(II)Z  Lcom/android/internal/telephony/ServiceStateTracker;->isInvalidOperatorNumeric(Ljava/lang/String;)Z  Lcom/android/internal/telephony/ServiceStateTracker;->log(Ljava/lang/String;)V  Lcom/android/internal/telephony/ServiceStateTracker;->loge(Ljava/lang/String;)V -Lcom/android/internal/telephony/ServiceStateTracker;->mAttachedRegistrants:Landroid/os/RegistrantList;  Lcom/android/internal/telephony/ServiceStateTracker;->mCi:Lcom/android/internal/telephony/CommandsInterface;  Lcom/android/internal/telephony/ServiceStateTracker;->mCr:Landroid/content/ContentResolver;  Lcom/android/internal/telephony/ServiceStateTracker;->mCurDataSpn:Ljava/lang/String; @@ -3466,7 +3213,6 @@ Lcom/android/internal/telephony/ServiceStateTracker;->mDataRoamingOffRegistrants  Lcom/android/internal/telephony/ServiceStateTracker;->mDataRoamingOnRegistrants:Landroid/os/RegistrantList;  Lcom/android/internal/telephony/ServiceStateTracker;->mDefaultRoamingIndicator:I  Lcom/android/internal/telephony/ServiceStateTracker;->mDesiredPowerState:Z -Lcom/android/internal/telephony/ServiceStateTracker;->mDetachedRegistrants:Landroid/os/RegistrantList;  Lcom/android/internal/telephony/ServiceStateTracker;->mDeviceShuttingDown:Z  Lcom/android/internal/telephony/ServiceStateTracker;->mEmergencyOnly:Z  Lcom/android/internal/telephony/ServiceStateTracker;->mIccRecords:Lcom/android/internal/telephony/uicc/IccRecords; @@ -3494,7 +3240,6 @@ Lcom/android/internal/telephony/ServiceStateTracker;->mUiccApplcation:Lcom/andro  Lcom/android/internal/telephony/ServiceStateTracker;->mUiccController:Lcom/android/internal/telephony/uicc/UiccController;  Lcom/android/internal/telephony/ServiceStateTracker;->mVoiceRoamingOffRegistrants:Landroid/os/RegistrantList;  Lcom/android/internal/telephony/ServiceStateTracker;->mVoiceRoamingOnRegistrants:Landroid/os/RegistrantList; -Lcom/android/internal/telephony/ServiceStateTracker;->notifyDataRegStateRilRadioTechnologyChanged()V  Lcom/android/internal/telephony/ServiceStateTracker;->notifySignalStrength()Z  Lcom/android/internal/telephony/ServiceStateTracker;->pollState()V  Lcom/android/internal/telephony/ServiceStateTracker;->reRegisterNetwork(Landroid/os/Message;)V @@ -4054,23 +3799,7 @@ Lcom/android/internal/widget/ActionBarOverlayLayout;-><init>(Landroid/content/Co  Lcom/android/internal/widget/ActionBarOverlayLayout;->setWindowCallback(Landroid/view/Window$Callback;)V  Lcom/android/internal/widget/EditableInputConnection;-><init>(Landroid/widget/TextView;)V  Lcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings; -Lcom/android/internal/widget/ILockSettings;->getBoolean(Ljava/lang/String;ZI)Z -Lcom/android/internal/widget/ILockSettings;->getLong(Ljava/lang/String;JI)J -Lcom/android/internal/widget/ILockSettings;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String; -Lcom/android/internal/widget/ILockSettings;->havePassword(I)Z -Lcom/android/internal/widget/ILockSettings;->havePattern(I)Z -Lcom/android/internal/widget/ILockSettings;->setBoolean(Ljava/lang/String;ZI)V -Lcom/android/internal/widget/ILockSettings;->setLong(Ljava/lang/String;JI)V -Lcom/android/internal/widget/ILockSettings;->setString(Ljava/lang/String;Ljava/lang/String;I)V  Lcom/android/internal/widget/IRemoteViewsFactory$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/IRemoteViewsFactory; -Lcom/android/internal/widget/IRemoteViewsFactory;->getCount()I -Lcom/android/internal/widget/IRemoteViewsFactory;->getItemId(I)J -Lcom/android/internal/widget/IRemoteViewsFactory;->getLoadingView()Landroid/widget/RemoteViews; -Lcom/android/internal/widget/IRemoteViewsFactory;->getViewAt(I)Landroid/widget/RemoteViews; -Lcom/android/internal/widget/IRemoteViewsFactory;->getViewTypeCount()I -Lcom/android/internal/widget/IRemoteViewsFactory;->hasStableIds()Z -Lcom/android/internal/widget/IRemoteViewsFactory;->isCreated()Z -Lcom/android/internal/widget/IRemoteViewsFactory;->onDataSetChanged()V  Lcom/android/internal/widget/LinearLayoutWithDefaultTouchRecepient;-><init>(Landroid/content/Context;)V  Lcom/android/internal/widget/LinearLayoutWithDefaultTouchRecepient;->setDefaultTouchRecepient(Landroid/view/View;)V  Lcom/android/internal/widget/LockPatternChecker;->checkPassword(Lcom/android/internal/widget/LockPatternUtils;Ljava/lang/String;ILcom/android/internal/widget/LockPatternChecker$OnCheckCallback;)Landroid/os/AsyncTask; @@ -4603,9 +4332,6 @@ Lgov/nist/javax/sip/address/SipUri;->setParameter(Ljava/lang/String;Ljava/lang/S  Lgov/nist/javax/sip/address/SipUri;->setUserParam(Ljava/lang/String;)V  Lgov/nist/javax/sip/parser/URLParser;-><init>(Ljava/lang/String;)V  Lgov/nist/javax/sip/parser/URLParser;->sipURL(Z)Lgov/nist/javax/sip/address/SipUri; -Ljunit/framework/TestCase;->fName:Ljava/lang/String; -Ljunit/framework/TestSuite;->isPublicTestMethod(Ljava/lang/reflect/Method;)Z -Ljunit/framework/TestSuite;->isTestMethod(Ljava/lang/reflect/Method;)Z  Lorg/apache/xalan/extensions/ExpressionContext;->getContextNode()Lorg/w3c/dom/Node;  Lorg/apache/xalan/extensions/ExpressionContext;->getErrorListener()Ljavax/xml/transform/ErrorListener;  Lorg/apache/xalan/extensions/ExpressionContext;->getVariableOrParam(Lorg/apache/xml/utils/QName;)Lorg/apache/xpath/objects/XObject; diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index af451c253f6c..9bc719eae223 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -300,7 +300,6 @@ public final class ActivityThread extends ClientTransactionHandler {      String[] mInstrumentedSplitAppDirs = null;      String mInstrumentedLibDir = null;      boolean mSystemThread = false; -    boolean mJitEnabled = false;      boolean mSomeActivitiesChanged = false;      boolean mUpdatingSystemConfig = false;      /* package */ boolean mHiddenApiWarningShown = false; @@ -1633,7 +1632,6 @@ public final class ActivityThread extends ClientTransactionHandler {          public static final int SUICIDE                 = 130;          @UnsupportedAppUsage          public static final int REMOVE_PROVIDER         = 131; -        public static final int ENABLE_JIT              = 132;          public static final int DISPATCH_PACKAGE_BROADCAST = 133;          @UnsupportedAppUsage          public static final int SCHEDULE_CRASH          = 134; @@ -1683,7 +1681,6 @@ public final class ActivityThread extends ClientTransactionHandler {                      case DESTROY_BACKUP_AGENT: return "DESTROY_BACKUP_AGENT";                      case SUICIDE: return "SUICIDE";                      case REMOVE_PROVIDER: return "REMOVE_PROVIDER"; -                    case ENABLE_JIT: return "ENABLE_JIT";                      case DISPATCH_PACKAGE_BROADCAST: return "DISPATCH_PACKAGE_BROADCAST";                      case SCHEDULE_CRASH: return "SCHEDULE_CRASH";                      case DUMP_HEAP: return "DUMP_HEAP"; @@ -1795,9 +1792,6 @@ public final class ActivityThread extends ClientTransactionHandler {                      completeRemoveProvider((ProviderRefCount)msg.obj);                      Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);                      break; -                case ENABLE_JIT: -                    ensureJitEnabled(); -                    break;                  case DISPATCH_PACKAGE_BROADCAST:                      Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "broadcastPackage");                      handleDispatchPackageBroadcast(msg.arg1, (String[])msg.obj); @@ -1933,7 +1927,6 @@ public final class ActivityThread extends ClientTransactionHandler {              if (stopProfiling) {                  mProfiler.stopProfiling();              } -            ensureJitEnabled();              return false;          }      } @@ -2258,13 +2251,6 @@ public final class ActivityThread extends ClientTransactionHandler {          }      } -    void ensureJitEnabled() { -        if (!mJitEnabled) { -            mJitEnabled = true; -            dalvik.system.VMRuntime.getRuntime().startJitCompilation(); -        } -    } -      @UnsupportedAppUsage      void scheduleGcIdler() {          if (!mGcIdlerScheduled) { @@ -3690,7 +3676,6 @@ public final class ActivityThread extends ClientTransactionHandler {                          ActivityManager.getService().serviceDoneExecuting(                                  data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0);                      } -                    ensureJitEnabled();                  } catch (RemoteException ex) {                      throw ex.rethrowFromSystemServer();                  } @@ -3804,7 +3789,6 @@ public final class ActivityThread extends ClientTransactionHandler {                  } catch (RemoteException e) {                      throw e.rethrowFromSystemServer();                  } -                ensureJitEnabled();              } catch (Exception e) {                  if (!mInstrumentation.onException(s, e)) {                      throw new RuntimeException( @@ -5979,9 +5963,6 @@ public final class ActivityThread extends ClientTransactionHandler {              if (!data.restrictedBackupMode) {                  if (!ArrayUtils.isEmpty(data.providers)) {                      installContentProviders(app, data.providers); -                    // For process that contains content providers, we want to -                    // ensure that the JIT is enabled "at some point". -                    mH.sendEmptyMessageDelayed(H.ENABLE_JIT, 10*1000);                  }              } @@ -6614,12 +6595,6 @@ public final class ActivityThread extends ClientTransactionHandler {          sCurrentActivityThread = this;          mSystemThread = system;          if (!system) { -            ViewRootImpl.addFirstDrawHandler(new Runnable() { -                @Override -                public void run() { -                    ensureJitEnabled(); -                } -            });              android.ddm.DdmHandleAppName.setAppName("<pre-initialized>",                                                      UserHandle.myUserId());              RuntimeInit.setApplicationObject(mAppThread.asBinder()); diff --git a/core/java/android/app/AppComponentFactory.java b/core/java/android/app/AppComponentFactory.java index ae632915dd2d..2cec7f0fc323 100644 --- a/core/java/android/app/AppComponentFactory.java +++ b/core/java/android/app/AppComponentFactory.java @@ -27,6 +27,7 @@ import android.content.pm.ApplicationInfo;   *   * @see #instantiateApplication   * @see #instantiateActivity + * @see #instantiateClassLoader   * @see #instantiateService   * @see #instantiateReceiver   * @see #instantiateProvider @@ -39,8 +40,10 @@ public class AppComponentFactory {       * a custom class loader hierarchy.       *       * @param cl        The default classloader instantiated by platform. +     * @param aInfo     Information about the application being loaded.       */ -    public @NonNull ClassLoader instantiateClassLoader(@NonNull ClassLoader cl) { +    public @NonNull ClassLoader instantiateClassLoader(@NonNull ClassLoader cl, +            @NonNull ApplicationInfo aInfo) {          return cl;      } @@ -133,19 +136,6 @@ public class AppComponentFactory {          return (ContentProvider) cl.loadClass(className).newInstance();      } -    private ApplicationInfo mApplicationInfo = null; - -    void setApplicationInfo(ApplicationInfo info) { -        mApplicationInfo = info; -    } - -    /** -     * Returns the ApplicationInfo associated with this package. -     */ -    public ApplicationInfo getApplicationInfo() { -        return mApplicationInfo; -    } -      /**       * @hide       */ diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index de84281328b2..398b4064d15a 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -2513,7 +2513,7 @@ public class AppOpsManager {       */      public int noteProxyOpNoThrow(int op, String proxiedPackageName) {          try { -            return mService.noteProxyOperation(op, mContext.getOpPackageName(), +            return mService.noteProxyOperation(op, Process.myUid(), mContext.getOpPackageName(),                      Binder.getCallingUid(), proxiedPackageName);          } catch (RemoteException e) {              throw e.rethrowFromSystemServer(); diff --git a/core/java/android/app/AppOpsManagerInternal.java b/core/java/android/app/AppOpsManagerInternal.java index 24c5d234c120..f5d5e6e9a950 100644 --- a/core/java/android/app/AppOpsManagerInternal.java +++ b/core/java/android/app/AppOpsManagerInternal.java @@ -18,12 +18,55 @@ package android.app;  import android.util.SparseIntArray; +import com.android.internal.util.function.QuadFunction; +import com.android.internal.util.function.TriFunction; +  /**   * App ops service local interface.   *   * @hide Only for use within the system server.   */  public abstract class AppOpsManagerInternal { +    /** Interface to override app ops checks via composition */ +    public interface CheckOpsDelegate { +        /** +         * Allows overriding check operation behavior. +         * +         * @param code The op code to check. +         * @param uid The UID for which to check. +         * @param packageName The package for which to check. +         * @param superImpl The super implementation. +         * @return The app op check result. +         */ +        int checkOperation(int code, int uid, String packageName, +                TriFunction<Integer, Integer, String, Integer> superImpl); + +        /** +         * Allows overriding check audio operation behavior. +         * +         * @param code The op code to check. +         * @param usage The audio op usage. +         * @param uid The UID for which to check. +         * @param packageName The package for which to check. +         * @param superImpl The super implementation. +         * @return The app op check result. +         */ +        int checkAudioOperation(int code, int usage, int uid, String packageName, +                QuadFunction<Integer, Integer, Integer, String, Integer> superImpl); + +        /** +         * Allows overriding note operation behavior. +         * +         * @param code The op code to note. +         * @param uid The UID for which to note. +         * @param packageName The package for which to note. +         * @param superImpl The super implementation. +         * @return The app op note result. +         */ +        int noteOperation(int code, int uid, String packageName, +                TriFunction<Integer, Integer, String, Integer> superImpl); +    } +      /**       * Set the currently configured device and profile owners.  Specifies the package uid (value)       * that has been configured for each user (key) that has one.  These will be allowed privileged diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index b192021f821b..52fd84113fdf 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -714,4 +714,19 @@ interface IActivityManager {      /** @see android.app.ActivityManager#alwaysShowUnsupportedCompileSdkWarning */      void alwaysShowUnsupportedCompileSdkWarning(in ComponentName activity); + +    /** +     * Method for the shell UID to start deletating its permission identity to an +     * active instrumenation. The shell can delegate permissions only to one active +     * instrumentation at a time. An active instrumentation is one running and +     * started from the shell. +     */ +    void startDelegateShellPermissionIdentity(int uid); + +    /** +     * Method for the shell UID to stop deletating its permission identity to an +     * active instrumenation. An active instrumentation is one running and +     * started from the shell. +     */ +    void stopDelegateShellPermissionIdentity();  } diff --git a/core/java/android/app/IUiAutomationConnection.aidl b/core/java/android/app/IUiAutomationConnection.aidl index d01938b123b1..ac4bf7d9c2c5 100644 --- a/core/java/android/app/IUiAutomationConnection.aidl +++ b/core/java/android/app/IUiAutomationConnection.aidl @@ -47,7 +47,8 @@ interface IUiAutomationConnection {              in ParcelFileDescriptor source);      void grantRuntimePermission(String packageName, String permission, int userId);      void revokeRuntimePermission(String packageName, String permission, int userId); - +    void adoptShellPermissionIdentity(int uid); +    void dropShellPermissionIdentity();      // Called from the system process.      oneway void shutdown();  } diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index ac33c169288b..3a76de442777 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -232,7 +232,8 @@ public final class LoadedApk {          mResources = Resources.getSystem();          mDefaultClassLoader = ClassLoader.getSystemClassLoader();          mAppComponentFactory = createAppFactory(mApplicationInfo, mDefaultClassLoader); -        mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader); +        mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader, +                new ApplicationInfo(mApplicationInfo));      }      /** @@ -243,19 +244,15 @@ public final class LoadedApk {          mApplicationInfo = info;          mDefaultClassLoader = classLoader;          mAppComponentFactory = createAppFactory(info, mDefaultClassLoader); -        mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader); +        mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader, +                new ApplicationInfo(mApplicationInfo));      }      private AppComponentFactory createAppFactory(ApplicationInfo appInfo, ClassLoader cl) {          if (appInfo.appComponentFactory != null && cl != null) {              try { -                AppComponentFactory factory = (AppComponentFactory) cl.loadClass( -                        appInfo.appComponentFactory).newInstance(); -                // Pass a copy of ApplicationInfo to the factory. Copying protects the framework -                // from apps which would override the factory and change ApplicationInfo contents. -                // ApplicationInfo is used to set up the default class loader. -                factory.setApplicationInfo(new ApplicationInfo(appInfo)); -                return factory; +                return (AppComponentFactory) +                        cl.loadClass(appInfo.appComponentFactory).newInstance();              } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {                  Slog.e(TAG, "Unable to instantiate appComponentFactory", e);              } @@ -712,8 +709,8 @@ public final class LoadedApk {                  mDefaultClassLoader = ClassLoader.getSystemClassLoader();              }              mAppComponentFactory = createAppFactory(mApplicationInfo, mDefaultClassLoader); -            mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader); - +            mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader, +                    new ApplicationInfo(mApplicationInfo));              return;          } @@ -801,7 +798,8 @@ public final class LoadedApk {              }              if (mClassLoader == null) { -                mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader); +                mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader, +                        new ApplicationInfo(mApplicationInfo));              }              return; @@ -915,8 +913,10 @@ public final class LoadedApk {          // Call AppComponentFactory to select/create the main class loader of this app.          // Since this may call code in the app, mDefaultClassLoader must be fully set up          // before invoking the factory. +        // Invoke with a copy of ApplicationInfo to protect against the app changing it.          if (mClassLoader == null) { -            mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader); +            mClassLoader = mAppComponentFactory.instantiateClassLoader(mDefaultClassLoader, +                    new ApplicationInfo(mApplicationInfo));          }      } diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java index c850c85b6e5b..c0903b65737c 100644 --- a/core/java/android/app/UiAutomation.java +++ b/core/java/android/app/UiAutomation.java @@ -35,6 +35,7 @@ import android.os.HandlerThread;  import android.os.IBinder;  import android.os.Looper;  import android.os.ParcelFileDescriptor; +import android.os.Process;  import android.os.RemoteException;  import android.os.SystemClock;  import android.os.UserHandle; @@ -52,6 +53,7 @@ import android.view.accessibility.AccessibilityWindowInfo;  import android.view.accessibility.IAccessibilityInteractionConnection;  import com.android.internal.util.function.pooled.PooledLambda; +  import libcore.io.IoUtils;  import java.io.IOException; @@ -352,6 +354,46 @@ public final class UiAutomation {      }      /** +     * Adopt the permission identity of the shell UID. This allows you to call APIs protected +     * permissions which normal apps cannot hold but are granted to the shell UID. If you +     * already adopted the shell permission identity this method would be a no-op. +     * Note that your permission state becomes that of the shell UID and it is not a +     * combination of your and the shell UID permissions. +     * +     * @see #dropShellPermissionIdentity() +     */ +    public void adoptShellPermissionIdentity() { +        synchronized (mLock) { +            throwIfNotConnectedLocked(); +        } +        try { +            // Calling out without a lock held. +            mUiAutomationConnection.adoptShellPermissionIdentity(Process.myUid()); +        } catch (RemoteException re) { +            Log.e(LOG_TAG, "Error executing adopting shell permission identity!", re); +        } +    } + +    /** +     * Drop the shell permission identity adopted by a previous call to +     * {@link #adoptShellPermissionIdentity()}. If you did not adopt the shell permission +     * identity this method would be a no-op. +     * +     * @see #adoptShellPermissionIdentity() +     */ +    public void dropShellPermissionIdentity() { +        synchronized (mLock) { +            throwIfNotConnectedLocked(); +        } +        try { +            // Calling out without a lock held. +            mUiAutomationConnection.dropShellPermissionIdentity(); +        } catch (RemoteException re) { +            Log.e(LOG_TAG, "Error executing dropping shell permission identity!", re); +        } +    } + +    /**       * Performs a global action. Such an action can be performed at any moment       * regardless of the current application or user location in that application.       * For example going back, going home, opening recents, etc. @@ -1004,6 +1046,8 @@ public final class UiAutomation {       *       * @param command The command to execute.       * @return A file descriptor to the standard output stream. +     * +     * @see #adoptShellPermissionIdentity()       */      public ParcelFileDescriptor executeShellCommand(String command) {          synchronized (mLock) { @@ -1086,22 +1130,6 @@ public final class UiAutomation {          return result;      } -    private static float getDegreesForRotation(int value) { -        switch (value) { -            case Surface.ROTATION_90: { -                return 360f - 90f; -            } -            case Surface.ROTATION_180: { -                return 360f - 180f; -            } -            case Surface.ROTATION_270: { -                return 360f - 270f; -            } default: { -                return 0; -            } -        } -    } -      private boolean isConnectedLocked() {          return mConnectionId != CONNECTION_ID_UNDEFINED;      } diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java index e6347354b723..b406d9e30a53 100644 --- a/core/java/android/app/UiAutomationConnection.java +++ b/core/java/android/app/UiAutomationConnection.java @@ -31,6 +31,7 @@ import android.os.Process;  import android.os.RemoteException;  import android.os.ServiceManager;  import android.os.UserHandle; +import android.util.Log;  import android.view.IWindowManager;  import android.view.InputEvent;  import android.view.SurfaceControl; @@ -38,7 +39,6 @@ import android.view.WindowAnimationFrameStats;  import android.view.WindowContentFrameStats;  import android.view.accessibility.AccessibilityEvent;  import android.view.accessibility.IAccessibilityManager; -import android.util.Log;  import libcore.io.IoUtils; @@ -72,6 +72,9 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub {      private final IPackageManager mPackageManager = IPackageManager.Stub              .asInterface(ServiceManager.getService("package")); +    private final IActivityManager mActivityManager = IActivityManager.Stub +            .asInterface(ServiceManager.getService("activity")); +      private final Object mLock = new Object();      private final Binder mToken = new Binder(); @@ -275,6 +278,36 @@ public final class UiAutomationConnection extends IUiAutomationConnection.Stub {          }      } +    @Override +    public void adoptShellPermissionIdentity(int uid) throws RemoteException { +        synchronized (mLock) { +            throwIfCalledByNotTrustedUidLocked(); +            throwIfShutdownLocked(); +            throwIfNotConnectedLocked(); +        } +        final long identity = Binder.clearCallingIdentity(); +        try { +            mActivityManager.startDelegateShellPermissionIdentity(uid); +        } finally { +            Binder.restoreCallingIdentity(identity); +        } +    } + +    @Override +    public void dropShellPermissionIdentity() throws RemoteException { +        synchronized (mLock) { +            throwIfCalledByNotTrustedUidLocked(); +            throwIfShutdownLocked(); +            throwIfNotConnectedLocked(); +        } +        final long identity = Binder.clearCallingIdentity(); +        try { +            mActivityManager.stopDelegateShellPermissionIdentity(); +        } finally { +            Binder.restoreCallingIdentity(identity); +        } +    } +      public class Repeater implements Runnable {          // Continuously read readFrom and write back to writeTo until EOF is encountered          private final InputStream readFrom; diff --git a/core/java/android/app/timezone/RulesState.java b/core/java/android/app/timezone/RulesState.java index e86d348a85fa..38dd1ebf1c45 100644 --- a/core/java/android/app/timezone/RulesState.java +++ b/core/java/android/app/timezone/RulesState.java @@ -33,7 +33,7 @@ import java.lang.annotation.RetentionPolicy;   *   * <p>The following properties are included:   * <dl> - *     <dt>systemRulesVersion</dt> + *     <dt>baseRulesVersion</dt>   *     <dd>the IANA rules version that shipped with the OS. Always present. e.g. "2017a".</dd>   *     <dt>distroFormatVersionSupported</dt>   *     <dd>the distro format version supported by this device. Always present.</dd> @@ -98,7 +98,7 @@ public final class RulesState implements Parcelable {      private static final byte BYTE_FALSE = 0;      private static final byte BYTE_TRUE = 1; -    private final String mSystemRulesVersion; +    private final String mBaseRulesVersion;      private final DistroFormatVersion mDistroFormatVersionSupported;      private final boolean mOperationInProgress;      @StagedOperationType private final int mStagedOperationType; @@ -106,13 +106,13 @@ public final class RulesState implements Parcelable {      @DistroStatus private final int mDistroStatus;      @Nullable private final DistroRulesVersion mInstalledDistroRulesVersion; -    public RulesState(String systemRulesVersion, DistroFormatVersion distroFormatVersionSupported, +    public RulesState(String baseRulesVersion, DistroFormatVersion distroFormatVersionSupported,              boolean operationInProgress,              @StagedOperationType int stagedOperationType,              @Nullable DistroRulesVersion stagedDistroRulesVersion,              @DistroStatus int distroStatus,              @Nullable DistroRulesVersion installedDistroRulesVersion) { -        this.mSystemRulesVersion = validateRulesVersion("systemRulesVersion", systemRulesVersion); +        this.mBaseRulesVersion = validateRulesVersion("baseRulesVersion", baseRulesVersion);          this.mDistroFormatVersionSupported =                  validateNotNull("distroFormatVersionSupported", distroFormatVersionSupported);          this.mOperationInProgress = operationInProgress; @@ -132,8 +132,8 @@ public final class RulesState implements Parcelable {                  "installedDistroRulesVersion", installedDistroRulesVersion);      } -    public String getSystemRulesVersion() { -        return mSystemRulesVersion; +    public String getBaseRulesVersion() { +        return mBaseRulesVersion;      }      public boolean isOperationInProgress() { @@ -172,14 +172,14 @@ public final class RulesState implements Parcelable {      }      /** -     * Returns true if the system image data files contain IANA rules data that are newer than the +     * Returns true if the base data files contain IANA rules data that are newer than the       * distro IANA rules version supplied, i.e. true when the version specified would be "worse" -     * than the one that is in the system image. Returns false if the system image version is the +     * than the one that is in the base data. Returns false if the base version is the       * same or older, i.e. false when the version specified would be "better" than the one that is -     * in the system image. +     * in the base set.       */ -    public boolean isSystemVersionNewerThan(DistroRulesVersion distroRulesVersion) { -        return mSystemRulesVersion.compareTo(distroRulesVersion.getRulesVersion()) > 0; +    public boolean isBaseVersionNewerThan(DistroRulesVersion distroRulesVersion) { +        return mBaseRulesVersion.compareTo(distroRulesVersion.getRulesVersion()) > 0;      }      public static final Parcelable.Creator<RulesState> CREATOR = @@ -194,14 +194,14 @@ public final class RulesState implements Parcelable {      };      private static RulesState createFromParcel(Parcel in) { -        String systemRulesVersion = in.readString(); +        String baseRulesVersion = in.readString();          DistroFormatVersion distroFormatVersionSupported = in.readParcelable(null);          boolean operationInProgress = in.readByte() == BYTE_TRUE;          int distroStagedState = in.readByte();          DistroRulesVersion stagedDistroRulesVersion = in.readParcelable(null);          int installedDistroStatus = in.readByte();          DistroRulesVersion installedDistroRulesVersion = in.readParcelable(null); -        return new RulesState(systemRulesVersion, distroFormatVersionSupported, operationInProgress, +        return new RulesState(baseRulesVersion, distroFormatVersionSupported, operationInProgress,                  distroStagedState, stagedDistroRulesVersion,                  installedDistroStatus, installedDistroRulesVersion);      } @@ -213,7 +213,7 @@ public final class RulesState implements Parcelable {      @Override      public void writeToParcel(Parcel out, int flags) { -        out.writeString(mSystemRulesVersion); +        out.writeString(mBaseRulesVersion);          out.writeParcelable(mDistroFormatVersionSupported, 0);          out.writeByte(mOperationInProgress ? BYTE_TRUE : BYTE_FALSE);          out.writeByte((byte) mStagedOperationType); @@ -242,7 +242,7 @@ public final class RulesState implements Parcelable {          if (mDistroStatus != that.mDistroStatus) {              return false;          } -        if (!mSystemRulesVersion.equals(that.mSystemRulesVersion)) { +        if (!mBaseRulesVersion.equals(that.mBaseRulesVersion)) {              return false;          }          if (!mDistroFormatVersionSupported.equals(that.mDistroFormatVersionSupported)) { @@ -259,7 +259,7 @@ public final class RulesState implements Parcelable {      @Override      public int hashCode() { -        int result = mSystemRulesVersion.hashCode(); +        int result = mBaseRulesVersion.hashCode();          result = 31 * result + mDistroFormatVersionSupported.hashCode();          result = 31 * result + (mOperationInProgress ? 1 : 0);          result = 31 * result + mStagedOperationType; @@ -275,7 +275,7 @@ public final class RulesState implements Parcelable {      @Override      public String toString() {          return "RulesState{" -                + "mSystemRulesVersion='" + mSystemRulesVersion + '\'' +                + "mBaseRulesVersion='" + mBaseRulesVersion + '\''                  + ", mDistroFormatVersionSupported=" + mDistroFormatVersionSupported                  + ", mOperationInProgress=" + mOperationInProgress                  + ", mStagedOperationType=" + mStagedOperationType diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 92c757ceaa29..72981a773277 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -3623,6 +3623,7 @@ public abstract class PackageManager {       *       * @hide       */ +    @TestApi      @SystemApi      @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS)      public abstract void grantRuntimePermission(@NonNull String packageName, @@ -3649,6 +3650,7 @@ public abstract class PackageManager {       *       * @hide       */ +    @TestApi      @SystemApi      @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS)      public abstract void revokeRuntimePermission(@NonNull String packageName, diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index 755232c6a6b6..7c9943b61ea4 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -29,9 +29,12 @@ import android.os.Bundle;  import android.os.PersistableBundle;  import android.util.SparseArray; +import com.android.internal.util.function.TriFunction; +  import java.lang.annotation.Retention;  import java.lang.annotation.RetentionPolicy;  import java.util.List; +import java.util.function.BiFunction;  /**   * Package manager local system service interface. @@ -64,6 +67,32 @@ public abstract class PackageManagerInternal {          void onPackageRemoved(@NonNull String packageName);      } +    /** Interface to override permission checks via composition */ +    public interface CheckPermissionDelegate { +        /** +         * Allows overriding check permission behavior. +         * +         * @param permName The permission to check. +         * @param pkgName The package for which to check. +         * @param userId The user for which to check. +         * @param superImpl The super implementation. +         * @return The check permission result. +         */ +        int checkPermission(String permName, String pkgName, int userId, +                TriFunction<String, String, Integer, Integer> superImpl); + +        /** +         * Allows overriding check UID permission behavior. +         * +         * @param permName The permission to check. +         * @param uid The UID for which to check. +         * @param superImpl The super implementation. +         * @return The check permission result. +         */ +        int checkUidPermission(String permName, int uid, +                BiFunction<String, Integer, Integer> superImpl); +    } +      /**       * Provider for package names.       */ @@ -633,4 +662,18 @@ public abstract class PackageManagerInternal {       * Ask the package manager to compile layouts in the given package.       */      public abstract boolean compileLayouts(String packageName); + +    /** +     * Get the delegate to influence permission checking. +     * +     * @return The delegate instance or null to clear. +     */ +    public abstract @Nullable CheckPermissionDelegate getCheckPermissionDelegate(); + +    /** +     * Set a delegate to influence permission checking. +     * +     * @param delegate A delegate instance or null to clear. +     */ +    public abstract void setCheckPermissionDelegate(@Nullable CheckPermissionDelegate delegate);  } diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 92b30a440d69..63ba00bc9d4e 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -3668,7 +3668,8 @@ public class ConnectivityManager {      /**       * Registers to receive notifications about all networks which satisfy the given       * {@link NetworkRequest}.  The callbacks will continue to be called until -     * either the application exits or link #unregisterNetworkCallback(NetworkCallback)} is called. +     * either the application exits or {@link #unregisterNetworkCallback(NetworkCallback)} is +     * called.       *       * @param request {@link NetworkRequest} describing this request.       * @param networkCallback The {@link NetworkCallback} that the system will call as suitable @@ -3684,7 +3685,8 @@ public class ConnectivityManager {      /**       * Registers to receive notifications about all networks which satisfy the given       * {@link NetworkRequest}.  The callbacks will continue to be called until -     * either the application exits or link #unregisterNetworkCallback(NetworkCallback)} is called. +     * either the application exits or {@link #unregisterNetworkCallback(NetworkCallback)} is +     * called.       *       * @param request {@link NetworkRequest} describing this request.       * @param networkCallback The {@link NetworkCallback} that the system will call as suitable @@ -4275,6 +4277,8 @@ public class ConnectivityManager {       * @return {@code uid} if the connection is found and the app has permission to observe it       * (e.g., if it is associated with the calling VPN app's tunnel) or       * {@link android.os.Process#INVALID_UID} if the connection is not found. +     * Throws {@link SecurityException} if the caller is not the active VPN for the current user. +     * Throws {@link IllegalArgumentException} if an unsupported protocol is requested.       */      public int getConnectionOwnerUid(int protocol, @NonNull InetSocketAddress local,              @NonNull InetSocketAddress remote) { diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 83bb3a0c8c15..2f03734278da 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -47,10 +47,12 @@ interface IConnectivityManager  {      Network getActiveNetwork();      Network getActiveNetworkForUid(int uid, boolean ignoreBlocked); +    @UnsupportedAppUsage      NetworkInfo getActiveNetworkInfo();      NetworkInfo getActiveNetworkInfoForUid(int uid, boolean ignoreBlocked);      NetworkInfo getNetworkInfo(int networkType);      NetworkInfo getNetworkInfoForUid(in Network network, int uid, boolean ignoreBlocked); +    @UnsupportedAppUsage      NetworkInfo[] getAllNetworkInfo();      Network getNetworkForType(int networkType);      Network[] getAllNetworks(); @@ -58,12 +60,14 @@ interface IConnectivityManager      boolean isNetworkSupported(int networkType); +    @UnsupportedAppUsage      LinkProperties getActiveLinkProperties();      LinkProperties getLinkPropertiesForType(int networkType);      LinkProperties getLinkProperties(in Network network);      NetworkCapabilities getNetworkCapabilities(in Network network); +    @UnsupportedAppUsage      NetworkState[] getAllNetworkState();      NetworkQuotaInfo getActiveNetworkQuotaInfo(); @@ -75,6 +79,7 @@ interface IConnectivityManager      int untether(String iface, String callerPkg); +    @UnsupportedAppUsage      int getLastTetherError(String iface);      boolean isTetheringSupported(String callerPkg); @@ -84,16 +89,21 @@ interface IConnectivityManager      void stopTethering(int type, String callerPkg); +    @UnsupportedAppUsage      String[] getTetherableIfaces(); +    @UnsupportedAppUsage      String[] getTetheredIfaces(); +    @UnsupportedAppUsage      String[] getTetheringErroredIfaces();      String[] getTetheredDhcpRanges(); +    @UnsupportedAppUsage      String[] getTetherableUsbRegexs(); +    @UnsupportedAppUsage      String[] getTetherableWifiRegexs();      String[] getTetherableBluetoothRegexs(); @@ -118,12 +128,11 @@ interface IConnectivityManager      VpnConfig getVpnConfig(int userId); +    @UnsupportedAppUsage      void startLegacyVpn(in VpnProfile profile);      LegacyVpnInfo getLegacyVpnInfo(int userId); -    VpnInfo[] getAllVpnInfo(); -      boolean updateLockdownVpn();      boolean isAlwaysOnVpnPackageSupported(int userId, String packageName);      boolean setAlwaysOnVpnPackage(int userId, String packageName, boolean lockdown, diff --git a/core/java/android/net/INetworkPolicyManager.aidl b/core/java/android/net/INetworkPolicyManager.aidl index e92302a939d8..385cb1d68b57 100644 --- a/core/java/android/net/INetworkPolicyManager.aidl +++ b/core/java/android/net/INetworkPolicyManager.aidl @@ -31,9 +31,11 @@ import android.telephony.SubscriptionPlan;  interface INetworkPolicyManager {      /** Control UID policies. */ +    @UnsupportedAppUsage      void setUidPolicy(int uid, int policy);      void addUidPolicy(int uid, int policy);      void removeUidPolicy(int uid, int policy); +    @UnsupportedAppUsage      int getUidPolicy(int uid);      int[] getUidsWithPolicy(int policy); @@ -41,14 +43,18 @@ interface INetworkPolicyManager {      void unregisterListener(INetworkPolicyListener listener);      /** Control network policies atomically. */ +    @UnsupportedAppUsage      void setNetworkPolicies(in NetworkPolicy[] policies);      NetworkPolicy[] getNetworkPolicies(String callingPackage);      /** Snooze limit on policy matching given template. */ +    @UnsupportedAppUsage      void snoozeLimit(in NetworkTemplate template);      /** Control if background data is restricted system-wide. */ +    @UnsupportedAppUsage      void setRestrictBackground(boolean restrictBackground); +    @UnsupportedAppUsage      boolean getRestrictBackground();      /** Callback used to change internal state on tethering */ @@ -64,6 +70,7 @@ interface INetworkPolicyManager {      void setDeviceIdleMode(boolean enabled);      void setWifiMeteredOverride(String networkId, int meteredOverride); +    @UnsupportedAppUsage      NetworkQuotaInfo getNetworkQuotaInfo(in NetworkState state);      SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage); diff --git a/core/java/android/net/INetworkStatsService.aidl b/core/java/android/net/INetworkStatsService.aidl index 8e6f27238846..41efc5040885 100644 --- a/core/java/android/net/INetworkStatsService.aidl +++ b/core/java/android/net/INetworkStatsService.aidl @@ -19,16 +19,19 @@ package android.net;  import android.net.DataUsageRequest;  import android.net.INetworkStatsSession;  import android.net.Network; +import android.net.NetworkState;  import android.net.NetworkStats;  import android.net.NetworkStatsHistory;  import android.net.NetworkTemplate;  import android.os.IBinder;  import android.os.Messenger; +import com.android.internal.net.VpnInfo;  /** {@hide} */  interface INetworkStatsService {      /** Start a statistics query session. */ +    @UnsupportedAppUsage      INetworkStatsSession openSession();      /** Start a statistics query session. If calling package is profile or device owner then it is @@ -37,9 +40,11 @@ interface INetworkStatsService {       *  PACKAGE_USAGE_STATS permission is always checked. If PACKAGE_USAGE_STATS is not granted       *  READ_NETWORK_USAGE_STATS is checked for.       */ +    @UnsupportedAppUsage      INetworkStatsSession openSessionForUsageStats(int flags, String callingPackage);      /** Return data layer snapshot of UID network usage. */ +    @UnsupportedAppUsage      NetworkStats getDataLayerSnapshotForUid(int uid);      /** Get a detailed snapshot of stats since boot for all UIDs. @@ -52,14 +57,20 @@ interface INetworkStatsService {      NetworkStats getDetailedUidStats(in String[] requiredIfaces);      /** Return set of any ifaces associated with mobile networks since boot. */ +    @UnsupportedAppUsage      String[] getMobileIfaces();      /** Increment data layer count of operations performed for UID and tag. */      void incrementOperationCount(int uid, int tag, int operationCount);      /** Force update of ifaces. */ -    void forceUpdateIfaces(in Network[] defaultNetworks); +    void forceUpdateIfaces( +         in Network[] defaultNetworks, +         in VpnInfo[] vpnArray, +         in NetworkState[] networkStates, +         in String activeIface);      /** Force update of statistics. */ +    @UnsupportedAppUsage      void forceUpdate();      /** Registers a callback on data usage. */ diff --git a/core/java/android/net/INetworkStatsSession.aidl b/core/java/android/net/INetworkStatsSession.aidl index 5229a3b3b9f6..f13f2cb664ba 100644 --- a/core/java/android/net/INetworkStatsSession.aidl +++ b/core/java/android/net/INetworkStatsSession.aidl @@ -27,13 +27,17 @@ interface INetworkStatsSession {      NetworkStats getDeviceSummaryForNetwork(in NetworkTemplate template, long start, long end);      /** Return network layer usage summary for traffic that matches template. */ +    @UnsupportedAppUsage      NetworkStats getSummaryForNetwork(in NetworkTemplate template, long start, long end);      /** Return historical network layer stats for traffic that matches template. */ +    @UnsupportedAppUsage      NetworkStatsHistory getHistoryForNetwork(in NetworkTemplate template, int fields);      /** Return network layer usage summary per UID for traffic that matches template. */ +    @UnsupportedAppUsage      NetworkStats getSummaryForAllUid(in NetworkTemplate template, long start, long end, boolean includeTags);      /** Return historical network layer stats for specific UID traffic that matches template. */ +    @UnsupportedAppUsage      NetworkStatsHistory getHistoryForUid(in NetworkTemplate template, int uid, int set, int tag, int fields);      /** Return historical network layer stats for specific UID traffic that matches template. */      NetworkStatsHistory getHistoryIntervalForUid(in NetworkTemplate template, int uid, int set, int tag, int fields, long start, long end); @@ -41,6 +45,7 @@ interface INetworkStatsSession {      /** Return array of uids that have stats and are accessible to the calling user */      int[] getRelevantUids(); +    @UnsupportedAppUsage      void close();  } diff --git a/core/java/android/net/InetAddresses.java b/core/java/android/net/InetAddresses.java index 8e6c69a97edb..01b795e456fa 100644 --- a/core/java/android/net/InetAddresses.java +++ b/core/java/android/net/InetAddresses.java @@ -16,6 +16,8 @@  package android.net; +import android.annotation.NonNull; +  import libcore.net.InetAddressUtils;  import java.net.InetAddress; @@ -40,7 +42,7 @@ public class InetAddresses {       * @param address the address to parse.       * @return true if the supplied address is numeric, false otherwise.       */ -    public static boolean isNumericAddress(String address) { +    public static boolean isNumericAddress(@NonNull String address) {          return InetAddressUtils.isNumericAddress(address);      } @@ -57,7 +59,7 @@ public class InetAddresses {       * @return an {@link InetAddress} instance corresponding to the address.       * @throws IllegalArgumentException if {@code address} is not a numeric address.       */ -    public static InetAddress parseNumericAddress(String address) { +    public static @NonNull InetAddress parseNumericAddress(@NonNull String address) {          return InetAddressUtils.parseNumericAddress(address);      }  } diff --git a/core/java/android/net/LinkAddress.java b/core/java/android/net/LinkAddress.java index 8d779aaa2312..8b0196088021 100644 --- a/core/java/android/net/LinkAddress.java +++ b/core/java/android/net/LinkAddress.java @@ -25,6 +25,7 @@ import static android.system.OsConstants.RT_SCOPE_LINK;  import static android.system.OsConstants.RT_SCOPE_SITE;  import static android.system.OsConstants.RT_SCOPE_UNIVERSE; +import android.annotation.NonNull;  import android.annotation.SystemApi;  import android.annotation.TestApi;  import android.annotation.UnsupportedAppUsage; @@ -177,7 +178,7 @@ public class LinkAddress implements Parcelable {       */      @SystemApi      @TestApi -    public LinkAddress(InetAddress address, int prefixLength) { +    public LinkAddress(@NonNull InetAddress address, int prefixLength) {          this(address, prefixLength, 0, 0);          this.scope = scopeForUnicastAddress(address);      } @@ -196,12 +197,12 @@ public class LinkAddress implements Parcelable {      /**       * Constructs a new {@code LinkAddress} from a string such as "192.0.2.5/24" or       * "2001:db8::1/64". The flags are set to zero and the scope is determined from the address. -     * @param string The string to parse. +     * @param address The string to parse.       * @hide       */      @SystemApi      @TestApi -    public LinkAddress(String address) { +    public LinkAddress(@NonNull String address) {          this(address, 0, 0);          this.scope = scopeForUnicastAddress(this.address);      } @@ -209,7 +210,7 @@ public class LinkAddress implements Parcelable {      /**       * Constructs a new {@code LinkAddress} from a string such as "192.0.2.5/24" or       * "2001:db8::1/64", with the specified flags and scope. -     * @param string The string to parse. +     * @param address The string to parse.       * @param flags The address flags.       * @param scope The address scope.       * @hide diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index 1d2d81dc4fbe..0a63e75d1a31 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -143,6 +143,7 @@ public final class NetworkCapabilities implements Parcelable {              NET_CAPABILITY_NOT_CONGESTED,              NET_CAPABILITY_NOT_SUSPENDED,              NET_CAPABILITY_OEM_PAID, +            NET_CAPABILITY_MCX      })      public @interface NetCapability { } @@ -297,8 +298,14 @@ public final class NetworkCapabilities implements Parcelable {      @SystemApi      public static final int NET_CAPABILITY_OEM_PAID = 22; +    /** +     * Indicates this is a network that has the ability to reach a carrier's Mission Critical +     * servers. +     */ +    public static final int NET_CAPABILITY_MCX = 23; +      private static final int MIN_NET_CAPABILITY = NET_CAPABILITY_MMS; -    private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_OEM_PAID; +    private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_MCX;      /**       * Network capabilities that are expected to be mutable, i.e., can change while a particular @@ -346,7 +353,8 @@ public final class NetworkCapabilities implements Parcelable {              (1 << NET_CAPABILITY_IA) |              (1 << NET_CAPABILITY_IMS) |              (1 << NET_CAPABILITY_RCS) | -            (1 << NET_CAPABILITY_XCAP); +            (1 << NET_CAPABILITY_XCAP) | +            (1 << NET_CAPABILITY_MCX);      /**       * Capabilities that force network to be restricted. @@ -1614,6 +1622,7 @@ public final class NetworkCapabilities implements Parcelable {              case NET_CAPABILITY_NOT_CONGESTED:  return "NOT_CONGESTED";              case NET_CAPABILITY_NOT_SUSPENDED:  return "NOT_SUSPENDED";              case NET_CAPABILITY_OEM_PAID:       return "OEM_PAID"; +            case NET_CAPABILITY_MCX:            return "MCX";              default:                            return Integer.toString(capability);          }      } diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java index 90dccb5b82d5..45860b3858ce 100644 --- a/core/java/android/net/SSLCertificateSocketFactory.java +++ b/core/java/android/net/SSLCertificateSocketFactory.java @@ -23,8 +23,7 @@ import android.util.Log;  import com.android.internal.annotations.VisibleForTesting;  import com.android.internal.os.RoSystemProperties; -import com.android.org.conscrypt.Conscrypt; -import com.android.org.conscrypt.OpenSSLContextImpl; +import com.android.org.conscrypt.ClientSessionContext;  import com.android.org.conscrypt.OpenSSLSocketImpl;  import com.android.org.conscrypt.SSLClientSessionCache; @@ -33,6 +32,8 @@ import java.net.InetAddress;  import java.net.Socket;  import java.net.SocketException;  import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException;  import java.security.PrivateKey;  import java.security.cert.X509Certificate; @@ -40,6 +41,7 @@ import javax.net.SocketFactory;  import javax.net.ssl.HostnameVerifier;  import javax.net.ssl.HttpsURLConnection;  import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLContext;  import javax.net.ssl.SSLException;  import javax.net.ssl.SSLPeerUnverifiedException;  import javax.net.ssl.SSLSession; @@ -251,11 +253,12 @@ public class SSLCertificateSocketFactory extends SSLSocketFactory {      private SSLSocketFactory makeSocketFactory(              KeyManager[] keyManagers, TrustManager[] trustManagers) {          try { -            OpenSSLContextImpl sslContext =  (OpenSSLContextImpl) Conscrypt.newPreferredSSLContextSpi(); -            sslContext.engineInit(keyManagers, trustManagers, null); -            sslContext.engineGetClientSessionContext().setPersistentCache(mSessionCache); -            return sslContext.engineGetSocketFactory(); -        } catch (KeyManagementException e) { +            SSLContext sslContext = SSLContext.getInstance("TLS", "AndroidOpenSSL"); +            sslContext.init(keyManagers, trustManagers, null); +            ((ClientSessionContext) sslContext.getClientSessionContext()) +                .setPersistentCache(mSessionCache); +            return sslContext.getSocketFactory(); +        } catch (KeyManagementException | NoSuchAlgorithmException | NoSuchProviderException e) {              Log.wtf(TAG, e);              return (SSLSocketFactory) SSLSocketFactory.getDefault();  // Fallback          } diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java index af3ee0911d2f..28b2707bc02d 100644 --- a/core/java/android/net/Uri.java +++ b/core/java/android/net/Uri.java @@ -402,7 +402,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {                  }                  return builder.toString();              } else if (scheme.equalsIgnoreCase("http") || scheme.equalsIgnoreCase("https") -                    || scheme.equalsIgnoreCase("ftp")) { +                    || scheme.equalsIgnoreCase("ftp") || scheme.equalsIgnoreCase("rtsp")) {                  ssp = "//" + ((getHost() != null) ? getHost() : "")                          + ((getPort() != -1) ? (":" + getPort()) : "")                          + "/..."; diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java index 784f23311103..870d8b1b7c22 100644 --- a/core/java/android/net/VpnService.java +++ b/core/java/android/net/VpnService.java @@ -19,6 +19,8 @@ package android.net;  import static android.system.OsConstants.AF_INET;  import static android.system.OsConstants.AF_INET6; +import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.RequiresPermission;  import android.annotation.SystemApi;  import android.annotation.UnsupportedAppUsage; @@ -478,7 +480,8 @@ public class VpnService extends Service {           * system-managed dialogs and notifications. This is recommended           * not required.           */ -        public Builder setSession(String session) { +        @NonNull +        public Builder setSession(@NonNull String session) {              mConfig.session = session;              return this;          } @@ -488,7 +491,8 @@ public class VpnService extends Service {           * configure the VPN connection. If it is not set, the button           * to configure will not be shown in system-managed dialogs.           */ -        public Builder setConfigureIntent(PendingIntent intent) { +        @NonNull +        public Builder setConfigureIntent(@NonNull PendingIntent intent) {              mConfig.configureIntent = intent;              return this;          } @@ -500,6 +504,7 @@ public class VpnService extends Service {           *           * @throws IllegalArgumentException if the value is not positive.           */ +        @NonNull          public Builder setMtu(int mtu) {              if (mtu <= 0) {                  throw new IllegalArgumentException("Bad mtu"); @@ -512,7 +517,8 @@ public class VpnService extends Service {           * Sets an HTTP proxy for the VPN network. This proxy is only a recommendation           * and it is possible that some apps will ignore it.           */ -        public Builder setHttpProxy(ProxyInfo proxyInfo) { +        @NonNull +        public Builder setHttpProxy(@NonNull ProxyInfo proxyInfo) {              mConfig.proxyInfo = proxyInfo;              return this;          } @@ -527,7 +533,8 @@ public class VpnService extends Service {           *           * @throws IllegalArgumentException if the address is invalid.           */ -        public Builder addAddress(InetAddress address, int prefixLength) { +        @NonNull +        public Builder addAddress(@NonNull InetAddress address, int prefixLength) {              check(address, prefixLength);              if (address.isAnyLocalAddress()) { @@ -549,7 +556,8 @@ public class VpnService extends Service {           * @throws IllegalArgumentException if the address is invalid.           * @see #addAddress(InetAddress, int)           */ -        public Builder addAddress(String address, int prefixLength) { +        @NonNull +        public Builder addAddress(@NonNull String address, int prefixLength) {              return addAddress(InetAddress.parseNumericAddress(address), prefixLength);          } @@ -562,7 +570,8 @@ public class VpnService extends Service {           *           * @throws IllegalArgumentException if the route is invalid.           */ -        public Builder addRoute(InetAddress address, int prefixLength) { +        @NonNull +        public Builder addRoute(@NonNull InetAddress address, int prefixLength) {              check(address, prefixLength);              int offset = prefixLength / 8; @@ -590,7 +599,8 @@ public class VpnService extends Service {           * @throws IllegalArgumentException if the route is invalid.           * @see #addRoute(InetAddress, int)           */ -        public Builder addRoute(String address, int prefixLength) { +        @NonNull +        public Builder addRoute(@NonNull String address, int prefixLength) {              return addRoute(InetAddress.parseNumericAddress(address), prefixLength);          } @@ -604,7 +614,8 @@ public class VpnService extends Service {           *           * @throws IllegalArgumentException if the address is invalid.           */ -        public Builder addDnsServer(InetAddress address) { +        @NonNull +        public Builder addDnsServer(@NonNull InetAddress address) {              if (address.isLoopbackAddress() || address.isAnyLocalAddress()) {                  throw new IllegalArgumentException("Bad address");              } @@ -626,14 +637,16 @@ public class VpnService extends Service {           * @throws IllegalArgumentException if the address is invalid.           * @see #addDnsServer(InetAddress)           */ -        public Builder addDnsServer(String address) { +        @NonNull +        public Builder addDnsServer(@NonNull String address) {              return addDnsServer(InetAddress.parseNumericAddress(address));          }          /**           * Add a search domain to the DNS resolver.           */ -        public Builder addSearchDomain(String domain) { +        @NonNull +        public Builder addSearchDomain(@NonNull String domain) {              if (mConfig.searchDomains == null) {                  mConfig.searchDomains = new ArrayList<String>();              } @@ -659,6 +672,7 @@ public class VpnService extends Service {           *           * @return this {@link Builder} object to facilitate chaining of method calls.           */ +        @NonNull          public Builder allowFamily(int family) {              if (family == AF_INET) {                  mConfig.allowIPv4 = true; @@ -702,7 +716,8 @@ public class VpnService extends Service {           *           * @return this {@link Builder} object to facilitate chaining method calls.           */ -        public Builder addAllowedApplication(String packageName) +        @NonNull +        public Builder addAllowedApplication(@NonNull String packageName)                  throws PackageManager.NameNotFoundException {              if (mConfig.disallowedApplications != null) {                  throw new UnsupportedOperationException("addDisallowedApplication already called"); @@ -734,7 +749,8 @@ public class VpnService extends Service {           *           * @return this {@link Builder} object to facilitate chaining method calls.           */ -        public Builder addDisallowedApplication(String packageName) +        @NonNull +        public Builder addDisallowedApplication(@NonNull String packageName)                  throws PackageManager.NameNotFoundException {              if (mConfig.allowedApplications != null) {                  throw new UnsupportedOperationException("addAllowedApplication already called"); @@ -757,6 +773,7 @@ public class VpnService extends Service {           *           * @return this {@link Builder} object to facilitate chaining of method calls.           */ +        @NonNull          public Builder allowBypass() {              mConfig.allowBypass = true;              return this; @@ -771,6 +788,7 @@ public class VpnService extends Service {           *           * @return this {@link Builder} object to facilitate chaining method calls.           */ +        @NonNull          public Builder setBlocking(boolean blocking) {              mConfig.blocking = blocking;              return this; @@ -785,7 +803,8 @@ public class VpnService extends Service {           *           * @return this {@link Builder} object to facilitate chaining method calls.           */ -        public Builder setUnderlyingNetworks(Network[] networks) { +        @NonNull +        public Builder setUnderlyingNetworks(@Nullable Network[] networks) {              mConfig.underlyingNetworks = networks != null ? networks.clone() : null;              return this;          } @@ -806,6 +825,7 @@ public class VpnService extends Service {           * @see #setUnderlyingNetworks(Networks[])           * @see ConnectivityManager#isActiveNetworkMetered()           */ +        @NonNull          public Builder setMetered(boolean isMetered) {              mConfig.isMetered = isMetered;              return this; @@ -854,6 +874,7 @@ public class VpnService extends Service {           *         in {@code AndroidManifest.xml}.           * @see VpnService           */ +        @Nullable          public ParcelFileDescriptor establish() {              mConfig.addresses = mAddresses;              mConfig.routes = mRoutes; diff --git a/core/java/android/net/http/SslCertificate.java b/core/java/android/net/http/SslCertificate.java index 6fcd6ebe148a..01dd08f4ad9c 100644 --- a/core/java/android/net/http/SslCertificate.java +++ b/core/java/android/net/http/SslCertificate.java @@ -16,6 +16,7 @@  package android.net.http; +import android.annotation.Nullable;  import android.annotation.UnsupportedAppUsage;  import android.content.Context;  import android.os.Bundle; @@ -252,7 +253,7 @@ public class SslCertificate {       * @return The {@code X509Certificate} used to create this {@code SslCertificate} or       * {@code null} if no certificate was provided.       */ -    public X509Certificate getX509Certificate() { +    public @Nullable X509Certificate getX509Certificate() {          return mX509Certificate;      } diff --git a/core/java/android/net/metrics/ValidationProbeEvent.java b/core/java/android/net/metrics/ValidationProbeEvent.java index 42e8aa6dc248..a43dc60cec84 100644 --- a/core/java/android/net/metrics/ValidationProbeEvent.java +++ b/core/java/android/net/metrics/ValidationProbeEvent.java @@ -79,7 +79,7 @@ public final class ValidationProbeEvent implements IpConnectivityLog.Event {      }      /** -     * Utility to create an instance of {@link ApfProgramEvent}. +     * Utility to create an instance of {@link ValidationProbeEvent}.       */      public static class Builder {          private long mDurationMs; diff --git a/core/java/android/nfc/INfcAdapterExtras.aidl b/core/java/android/nfc/INfcAdapterExtras.aidl index 41ebf636c89e..dd260bc6f2f6 100644 --- a/core/java/android/nfc/INfcAdapterExtras.aidl +++ b/core/java/android/nfc/INfcAdapterExtras.aidl @@ -23,11 +23,18 @@ import android.os.Bundle;   * {@hide}   */  interface INfcAdapterExtras { +    @UnsupportedAppUsage      Bundle open(in String pkg, IBinder b); +    @UnsupportedAppUsage      Bundle close(in String pkg, IBinder b); +    @UnsupportedAppUsage      Bundle transceive(in String pkg, in byte[] data_in); +    @UnsupportedAppUsage      int getCardEmulationRoute(in String pkg); +    @UnsupportedAppUsage      void setCardEmulationRoute(in String pkg, int route); +    @UnsupportedAppUsage      void authenticate(in String pkg, in byte[] token); +    @UnsupportedAppUsage      String getDriverName(in String pkg);  } diff --git a/core/java/android/os/BugreportManager.java b/core/java/android/os/BugreportManager.java index 27f7e2296e7f..684369a6f720 100644 --- a/core/java/android/os/BugreportManager.java +++ b/core/java/android/os/BugreportManager.java @@ -59,7 +59,8 @@ public class BugreportManager {                  BUGREPORT_ERROR_INVALID_INPUT,                  BUGREPORT_ERROR_RUNTIME,                  BUGREPORT_ERROR_USER_DENIED_CONSENT, -                BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT +                BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT, +                BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS          })          /** Possible error codes taking a bugreport can encounter */ @@ -81,6 +82,10 @@ public class BugreportManager {          public static final int BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT =                  IDumpstateListener.BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT; +        /** There is currently a bugreport running. The caller should try again later. */ +        public static final int BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS = +                IDumpstateListener.BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS; +          /**           * Called when there is a progress update.           * @param progress the progress in [0.0, 100.0] @@ -96,6 +101,9 @@ public class BugreportManager {           * <p>If {@code BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT} is passed, then the consent timed           * out, but the bugreport could be available in the internal directory of dumpstate for           * manual retrieval. +         * +         * <p> If {@code BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS} is passed, then the +         * caller should try later, as only one bugreport can be in progress at a time.           */          public void onError(@BugreportErrorCode int errorCode) {} diff --git a/core/java/android/os/HwBlob.java b/core/java/android/os/HwBlob.java index 0ec63b5815f1..2c453bfc4d42 100644 --- a/core/java/android/os/HwBlob.java +++ b/core/java/android/os/HwBlob.java @@ -17,6 +17,7 @@  package android.os;  import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.SystemApi;  import android.annotation.TestApi; @@ -241,7 +242,7 @@ public class HwBlob {       * @param x a {@link NativeHandle} instance to write       * @throws IndexOutOfBoundsException when [offset, offset + sizeof(jobject)] is out of range       */ -    public native final void putNativeHandle(long offset, NativeHandle x); +    public native final void putNativeHandle(long offset, @Nullable NativeHandle x);      /**       * Put a boolean array contiguously at an offset in the blob. diff --git a/core/java/android/os/HwParcel.java b/core/java/android/os/HwParcel.java index 7919a00166bf..dc640c95b515 100644 --- a/core/java/android/os/HwParcel.java +++ b/core/java/android/os/HwParcel.java @@ -17,6 +17,8 @@  package android.os;  import android.annotation.IntDef; +import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.SystemApi;  import android.annotation.TestApi; @@ -123,7 +125,7 @@ public class HwParcel {       *       * @param val to write       */ -    public native final void writeNativeHandle(NativeHandle val); +    public native final void writeNativeHandle(@Nullable NativeHandle val);      /**       * Writes an array of boolean values to the end of the parcel. @@ -170,6 +172,9 @@ public class HwParcel {      private native final void writeStringVector(String[] val);      /**       * Writes an array of native handles to the end of the parcel. +     * +     * Individual elements may be null but not the whole array. +     *       * @param val array of {@link NativeHandle} objects to write       */      private native final void writeNativeHandleVector(NativeHandle[] val); @@ -284,7 +289,7 @@ public class HwParcel {       * Helper method to write a list of native handles to the end of the parcel.       * @param val list of {@link NativeHandle} objects to write       */ -    public final void writeNativeHandleVector(ArrayList<NativeHandle> val) { +    public final void writeNativeHandleVector(@NonNull ArrayList<NativeHandle> val) {          writeNativeHandleVector(val.toArray(new NativeHandle[val.size()]));      } @@ -359,7 +364,7 @@ public class HwParcel {       * @return a {@link NativeHandle} instance parsed from the parcel       * @throws IllegalArgumentException if the parcel has no more data       */ -    public native final NativeHandle readNativeHandle(); +    public native final @Nullable NativeHandle readNativeHandle();      /**       * Reads an embedded native handle (without duplicating the underlying       * file descriptors) from the parcel. These file descriptors will only @@ -372,7 +377,7 @@ public class HwParcel {       * @return a {@link NativeHandle} instance parsed from the parcel       * @throws IllegalArgumentException if the parcel has no more data       */ -    public native final NativeHandle readEmbeddedNativeHandle( +    public native final @Nullable NativeHandle readEmbeddedNativeHandle(              long parentHandle, long offset);      /** @@ -521,7 +526,7 @@ public class HwParcel {       * @return array of {@link NativeHandle} objects.       * @throws IllegalArgumentException if the parcel has no more data       */ -    public final ArrayList<NativeHandle> readNativeHandleVector() { +    public final @NonNull ArrayList<NativeHandle> readNativeHandleVector() {          return new ArrayList<NativeHandle>(Arrays.asList(readNativeHandleAsArray()));      } diff --git a/core/java/android/os/NativeHandle.java b/core/java/android/os/NativeHandle.java index f13bf5fccd38..8d341b603eb4 100644 --- a/core/java/android/os/NativeHandle.java +++ b/core/java/android/os/NativeHandle.java @@ -99,6 +99,8 @@ public final class NativeHandle implements Closeable {       * @return a boolean value       */      public boolean hasSingleFileDescriptor() { +        checkOpen(); +          return mFds.length == 1 && mInts.length == 0;      } @@ -108,7 +110,7 @@ public final class NativeHandle implements Closeable {       * If this method is called, this must also be explicitly closed with       * {@link #close()}.       */ -    public NativeHandle dup() throws java.io.IOException { +    public @NonNull NativeHandle dup() throws java.io.IOException {          FileDescriptor[] fds = new FileDescriptor[mFds.length];          try {              for (int i = 0; i < mFds.length; i++) { @@ -123,6 +125,12 @@ public final class NativeHandle implements Closeable {          return new NativeHandle(fds, mInts, true /*own*/);      } +    private void checkOpen() { +        if (mFds == null) { +            throw new IllegalStateException("NativeHandle is invalidated after close."); +        } +    } +      /**       * Closes the file descriptors if they are owned by this object.       * @@ -130,19 +138,20 @@ public final class NativeHandle implements Closeable {       */      @Override      public void close() throws java.io.IOException { -        if (!mOwn) { -            return; -        } - -        try { -            for (FileDescriptor fd : mFds) { -                Os.close(fd); +        checkOpen(); + +        if (mOwn) { +            try { +                for (FileDescriptor fd : mFds) { +                    Os.close(fd); +                } +            } catch (ErrnoException e) { +                e.rethrowAsIOException();              } -        } catch (ErrnoException e) { -            e.rethrowAsIOException(); + +            mOwn = false;          } -        mOwn = false;          mFds = null;          mInts = null;      } @@ -154,7 +163,9 @@ public final class NativeHandle implements Closeable {       * @throws IllegalStateException if this object contains either zero or       *         more than one file descriptor, or a non-empty data stream.       */ -    public FileDescriptor getFileDescriptor() { +    public @NonNull FileDescriptor getFileDescriptor() { +        checkOpen(); +          if (!hasSingleFileDescriptor()) {              throw new IllegalStateException(                      "NativeHandle is not single file descriptor. Contents must" @@ -171,6 +182,8 @@ public final class NativeHandle implements Closeable {       * @hide       */      private int[] getFdsAsIntArray() { +        checkOpen(); +          int numFds = mFds.length;          int[] fds = new int[numFds]; @@ -182,11 +195,13 @@ public final class NativeHandle implements Closeable {      }      /** -     * Fetch file descriptors. +     * Fetch file descriptors       *       * @return the fds.       */ -    public FileDescriptor[] getFileDescriptors() { +    public @NonNull FileDescriptor[] getFileDescriptors() { +        checkOpen(); +          return mFds;      } @@ -195,7 +210,9 @@ public final class NativeHandle implements Closeable {       *       * @return the opaque data stream.       */ -    public int[] getInts() { +    public @NonNull int[] getInts() { +        checkOpen(); +          return mInts;      }  } diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java index f63c0adbdf4b..44adc1c5cba4 100644 --- a/core/java/android/provider/CallLog.java +++ b/core/java/android/provider/CallLog.java @@ -783,7 +783,7 @@ public class CallLog {                  String postDialDigits, String viaNumber, int presentation, int callType,                  int features, PhoneAccountHandle accountHandle, long start, int duration,                  Long dataUsage, boolean addForAllUsers, UserHandle userToBeInsertedTo, -                boolean isRead, int callBlockReason, String callScreeningAppName, +                boolean isRead, int callBlockReason, CharSequence callScreeningAppName,                  String callScreeningComponentName, CallIdentification callIdentification) {              if (VERBOSE_LOG) {                  Log.v(LOG_TAG, String.format("Add call: number=%s, user=%s, for all=%s", @@ -836,15 +836,19 @@ public class CallLog {              }              values.put(BLOCK_REASON, callBlockReason); -            values.put(CALL_SCREENING_APP_NAME, callScreeningAppName); +            values.put(CALL_SCREENING_APP_NAME, charSequenceToString(callScreeningAppName));              values.put(CALL_SCREENING_COMPONENT_NAME, callScreeningComponentName);              if (callIdentification != null) {                  values.put(CALL_ID_PACKAGE_NAME, callIdentification.getCallScreeningPackageName()); -                values.put(CALL_ID_APP_NAME, callIdentification.getCallScreeningAppName()); -                values.put(CALL_ID_NAME, callIdentification.getName()); -                values.put(CALL_ID_DESCRIPTION, callIdentification.getDescription()); -                values.put(CALL_ID_DETAILS, callIdentification.getDetails()); +                values.put(CALL_ID_APP_NAME, +                        charSequenceToString(callIdentification.getCallScreeningAppName())); +                values.put(CALL_ID_NAME, +                        charSequenceToString(callIdentification.getName())); +                values.put(CALL_ID_DESCRIPTION, +                        charSequenceToString(callIdentification.getDescription())); +                values.put(CALL_ID_DETAILS, +                        charSequenceToString(callIdentification.getDetails()));                  values.put(CALL_ID_NUISANCE_CONFIDENCE, callIdentification.getNuisanceConfidence());              } else {                  values.putNull(CALL_ID_PACKAGE_NAME); @@ -987,6 +991,10 @@ public class CallLog {              return result;          } +        private static String charSequenceToString(CharSequence sequence) { +            return sequence == null ? null : sequence.toString(); +        } +          /** @hide */          public static boolean shouldHaveSharedCallLogEntries(Context context,                  UserManager userManager, int userId) { diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index e945c5fb12fb..946d38667fea 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -10475,8 +10475,9 @@ public final class Settings {          /**           * The threshold value for the number of consecutive dns timeout events received to be a -         * signal of data stall. Set the value to 0 or less than 0 to disable. Note that the value -         * should be larger than 0 if the DNS data stall detection is enabled. +         * signal of data stall. The number of consecutive timeouts needs to be {@code >=} this +         * threshold to be considered a data stall. Set the value to {@code <= 0} to disable. Note +         * that the value should be {@code > 0} if the DNS data stall detection is enabled.           *           * @hide           */ @@ -10507,9 +10508,12 @@ public final class Settings {                  "data_stall_valid_dns_time_threshold";          /** -         * Which data stall detection signal to use. Possible values are a union of the powers of 2 -         * of DATA_STALL_EVALUATION_TYPE_*. +         * Which data stall detection signal to use. This is a bitmask constructed by bitwise-or-ing +         * (i.e. {@code |}) the DATA_STALL_EVALUATION_TYPE_* values.           * +         * Type: int +         * Valid values: +         *   {@link #DATA_STALL_EVALUATION_TYPE_DNS} : Use dns as a signal.           * @hide           */          @SystemApi @@ -10517,6 +10521,15 @@ public final class Settings {          public static final String DATA_STALL_EVALUATION_TYPE = "data_stall_evaluation_type";          /** +         * Use dns timeout counts to detect data stall. +         * +         * @hide +         */ +        @SystemApi +        @TestApi +        public static final int DATA_STALL_EVALUATION_TYPE_DNS = 1; + +        /**           * Whether to try cellular data recovery when a bad network is reported.           *           * @hide diff --git a/core/java/android/service/carrier/ApnService.java b/core/java/android/service/carrier/ApnService.java index d53eb37ca786..57e4b1b40748 100644 --- a/core/java/android/service/carrier/ApnService.java +++ b/core/java/android/service/carrier/ApnService.java @@ -16,6 +16,8 @@  package android.service.carrier; +import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.SystemApi;  import android.annotation.WorkerThread;  import android.app.Service; @@ -60,7 +62,8 @@ public abstract class ApnService extends Service {      };      @Override -    public IBinder onBind(Intent intent) { +    @NonNull +    public IBinder onBind(@Nullable Intent intent) {          return mBinder;      } @@ -73,5 +76,6 @@ public abstract class ApnService extends Service {       * subId.       */      @WorkerThread +    @NonNull      public abstract List<ContentValues> onRestoreApns(int subId);  } diff --git a/core/java/android/service/carrier/CarrierIdentifier.java b/core/java/android/service/carrier/CarrierIdentifier.java index 568ca0f6b56e..8c73a87e2132 100644 --- a/core/java/android/service/carrier/CarrierIdentifier.java +++ b/core/java/android/service/carrier/CarrierIdentifier.java @@ -16,6 +16,7 @@  package android.service.carrier; +import android.annotation.NonNull;  import android.annotation.Nullable;  import android.os.Parcel;  import android.os.Parcelable; @@ -74,7 +75,7 @@ public class CarrierIdentifier implements Parcelable {       * @param preciseCarrierId precise carrier identifier       * {@link TelephonyManager#getSimPreciseCarrierId()}       */ -    public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, +    public CarrierIdentifier(@NonNull String mcc, @NonNull String mnc, @Nullable String spn,                               @Nullable String imsi, @Nullable String gid1, @Nullable String gid2,                               int carrierid, int preciseCarrierId) {          mMcc = mcc; diff --git a/core/java/android/service/euicc/EuiccService.java b/core/java/android/service/euicc/EuiccService.java index 53cc25b14285..4f321dc07c2f 100644 --- a/core/java/android/service/euicc/EuiccService.java +++ b/core/java/android/service/euicc/EuiccService.java @@ -101,10 +101,23 @@ public abstract class EuiccService extends Service {       */      public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS =              "android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS"; +      /** @see android.telephony.euicc.EuiccManager#ACTION_PROVISION_EMBEDDED_SUBSCRIPTION */      public static final String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION =              "android.service.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION"; +    /** @see android.telephony.euicc.EuiccManager#ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED */ +    public static final String ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED = +            "android.service.euicc.action.TOGGLE_SUBSCRIPTION_PRIVILEGED"; + +    /** @see android.telephony.euicc.EuiccManager#ACTION_DELETE_SUBSCRIPTION_PRIVILEGED */ +    public static final String ACTION_DELETE_SUBSCRIPTION_PRIVILEGED = +            "android.service.euicc.action.DELETE_SUBSCRIPTION_PRIVILEGED"; + +    /** @see android.telephony.euicc.EuiccManager#ACTION_RENAME_SUBSCRIPTION_PRIVILEGED */ +    public static final String ACTION_RENAME_SUBSCRIPTION_PRIVILEGED = +            "android.service.euicc.action.RENAME_SUBSCRIPTION_PRIVILEGED"; +      // LUI resolution actions. These are called by the platform to resolve errors in situations that      // require user interaction.      // TODO(b/33075886): Define extras for any input parameters to these dialogs once they are diff --git a/core/java/android/speech/IRecognitionListener.aidl b/core/java/android/speech/IRecognitionListener.aidl index 3d3c44bf1efe..e77851b0e405 100644 --- a/core/java/android/speech/IRecognitionListener.aidl +++ b/core/java/android/speech/IRecognitionListener.aidl @@ -83,5 +83,6 @@ oneway interface IRecognitionListener {       * @param eventType the type of the occurred event       * @param params a Bundle containing the passed parameters       */ +    @UnsupportedAppUsage      void onEvent(in int eventType, in Bundle params);  } diff --git a/core/java/android/util/LocalLog.java b/core/java/android/util/LocalLog.java index adfa4fc55567..8b5659b3fa31 100644 --- a/core/java/android/util/LocalLog.java +++ b/core/java/android/util/LocalLog.java @@ -17,6 +17,7 @@  package android.util;  import android.annotation.UnsupportedAppUsage; +  import java.io.FileDescriptor;  import java.io.PrintWriter;  import java.time.LocalDateTime; @@ -55,6 +56,10 @@ public final class LocalLog {      @UnsupportedAppUsage      public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { +        dump(pw); +    } + +    public synchronized void dump(PrintWriter pw) {          Iterator<String> itr = mLog.iterator();          while (itr.hasNext()) {              pw.println(itr.next()); @@ -62,6 +67,10 @@ public final class LocalLog {      }      public synchronized void reverseDump(FileDescriptor fd, PrintWriter pw, String[] args) { +        reverseDump(pw); +    } + +    public synchronized void reverseDump(PrintWriter pw) {          Iterator<String> itr = mLog.descendingIterator();          while (itr.hasNext()) {              pw.println(itr.next()); @@ -75,10 +84,16 @@ public final class LocalLog {          }          @UnsupportedAppUsage          public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { -            mLog.dump(fd, pw, args); +            mLog.dump(pw); +        } +        public void dump(PrintWriter pw) { +            mLog.dump(pw);          }          public void reverseDump(FileDescriptor fd, PrintWriter pw, String[] args) { -            mLog.reverseDump(fd, pw, args); +            mLog.reverseDump(pw); +        } +        public void reverseDump(PrintWriter pw) { +            mLog.reverseDump(pw);          }      } diff --git a/core/java/android/util/apk/ApkSignatureVerifier.java b/core/java/android/util/apk/ApkSignatureVerifier.java index de9f55b09200..544cc1c76d4e 100644 --- a/core/java/android/util/apk/ApkSignatureVerifier.java +++ b/core/java/android/util/apk/ApkSignatureVerifier.java @@ -397,15 +397,18 @@ public class ApkSignatureVerifier {      /**       * @return the verity root hash in the Signing Block.       */ -    public static byte[] getVerityRootHash(String apkPath) -            throws IOException, SignatureNotFoundException, SecurityException { +    public static byte[] getVerityRootHash(String apkPath) throws IOException, SecurityException {          // first try v3          try {              return ApkSignatureSchemeV3Verifier.getVerityRootHash(apkPath);          } catch (SignatureNotFoundException e) {              // try older version          } -        return ApkSignatureSchemeV2Verifier.getVerityRootHash(apkPath); +        try { +            return ApkSignatureSchemeV2Verifier.getVerityRootHash(apkPath); +        } catch (SignatureNotFoundException e) { +            return null; +        }      }      /** diff --git a/core/java/android/view/IRecentsAnimationController.aidl b/core/java/android/view/IRecentsAnimationController.aidl index 94b9bc099d56..aa27878580a9 100644 --- a/core/java/android/view/IRecentsAnimationController.aidl +++ b/core/java/android/view/IRecentsAnimationController.aidl @@ -41,6 +41,7 @@ interface IRecentsAnimationController {       * the home activity should be moved to the top. Otherwise, the home activity is hidden and the       * user is returned to the app.       */ +    @UnsupportedAppUsage      void finish(boolean moveHomeToTop);      /** @@ -50,6 +51,7 @@ interface IRecentsAnimationController {       * may register the recents animation input consumer prior to starting the recents animation       * and then enable it mid-animation to start receiving touch events.       */ +    @UnsupportedAppUsage      void setInputConsumerEnabled(boolean enabled);      /** @@ -58,6 +60,7 @@ interface IRecentsAnimationController {      * they can control the SystemUI flags, otherwise the SystemUI flags from home activity will be      * taken.      */ +    @UnsupportedAppUsage      void setAnimationTargetsBehindSystemBars(boolean behindSystemBars);      /** diff --git a/core/java/android/view/IRecentsAnimationRunner.aidl b/core/java/android/view/IRecentsAnimationRunner.aidl index 4cdf66441514..6e382f416b62 100644 --- a/core/java/android/view/IRecentsAnimationRunner.aidl +++ b/core/java/android/view/IRecentsAnimationRunner.aidl @@ -33,6 +33,7 @@ oneway interface IRecentsAnimationRunner {       * wallpaper not drawing in time, or the handler not finishing the animation within a predefined       * amount of time.       */ +    @UnsupportedAppUsage      void onAnimationCanceled() = 1;      /** @@ -42,6 +43,7 @@ oneway interface IRecentsAnimationRunner {       * @param minimizedHomeBounds Specifies the bounds of the minimized home app, will be       *                            {@code null} if the device is not currently in split screen       */ +    @UnsupportedAppUsage      void onAnimationStart(in IRecentsAnimationController controller,              in RemoteAnimationTarget[] apps, in Rect homeContentInsets,              in Rect minimizedHomeBounds) = 2; diff --git a/core/java/android/view/IRemoteAnimationFinishedCallback.aidl b/core/java/android/view/IRemoteAnimationFinishedCallback.aidl index ae58b226ec03..a99162b6c857 100644 --- a/core/java/android/view/IRemoteAnimationFinishedCallback.aidl +++ b/core/java/android/view/IRemoteAnimationFinishedCallback.aidl @@ -23,5 +23,6 @@ package android.view;   * {@hide}   */  interface IRemoteAnimationFinishedCallback { +    @UnsupportedAppUsage      void onAnimationFinished();  } diff --git a/core/java/android/view/IRemoteAnimationRunner.aidl b/core/java/android/view/IRemoteAnimationRunner.aidl index 1350ebf10a4f..73b023c99665 100644 --- a/core/java/android/view/IRemoteAnimationRunner.aidl +++ b/core/java/android/view/IRemoteAnimationRunner.aidl @@ -33,6 +33,7 @@ oneway interface IRemoteAnimationRunner {       * @param apps The list of apps to animate.       * @param finishedCallback The callback to invoke when the animation is finished.       */ +    @UnsupportedAppUsage      void onAnimationStart(in RemoteAnimationTarget[] apps,              in IRemoteAnimationFinishedCallback finishedCallback); @@ -40,5 +41,6 @@ oneway interface IRemoteAnimationRunner {       * Called when the animation was cancelled. From this point on, any updates onto the leashes       * won't have any effect anymore.       */ +    @UnsupportedAppUsage      void onAnimationCancelled();  } diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 131fe1395585..f4b003e392fa 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -75,10 +75,13 @@ interface IWindowManager              in IInputContext inputContext);      boolean inputMethodClientHasFocus(IInputMethodClient client); +    @UnsupportedAppUsage      void getInitialDisplaySize(int displayId, out Point size); +    @UnsupportedAppUsage      void getBaseDisplaySize(int displayId, out Point size);      void setForcedDisplaySize(int displayId, int width, int height);      void clearForcedDisplaySize(int displayId); +    @UnsupportedAppUsage      int getInitialDisplayDensity(int displayId);      int getBaseDisplayDensity(int displayId);      void setForcedDisplayDensityForUser(int displayId, int density, int userId); @@ -93,6 +96,7 @@ interface IWindowManager      void removeWindowToken(IBinder token, int displayId);      void setFocusedApp(IBinder token, boolean moveFocusNow);      void prepareAppTransition(int transit, boolean alwaysKeepCurrent); +    @UnsupportedAppUsage      int getPendingAppTransition();      void overridePendingAppTransition(String packageName, int enterAnim, int exitAnim,              IRemoteCallback startedCallback); @@ -122,16 +126,20 @@ interface IWindowManager       * used for recents, where generating the thumbnails of the specs takes a non-trivial amount of       * time, so we want to move that off the critical path for starting the new activity.       */ +    @UnsupportedAppUsage      void overridePendingAppTransitionMultiThumbFuture(              IAppTransitionAnimationSpecsFuture specsFuture, IRemoteCallback startedCallback,              boolean scaleUp); +    @UnsupportedAppUsage      void overridePendingAppTransitionRemote(in RemoteAnimationAdapter remoteAnimationAdapter); +    @UnsupportedAppUsage      void executeAppTransition();      /**        * Used by system ui to report that recents has shown itself.        * @deprecated to be removed once prebuilts are updated        */ +    @UnsupportedAppUsage      void endProlongedAnimations();      // Re-evaluate the current orientation from the caller's state. @@ -150,7 +158,9 @@ interface IWindowManager      void disableKeyguard(IBinder token, String tag);      void reenableKeyguard(IBinder token);      void exitKeyguardSecurely(IOnKeyguardExitResult callback); +    @UnsupportedAppUsage      boolean isKeyguardLocked(); +    @UnsupportedAppUsage      boolean isKeyguardSecure();      void dismissKeyguard(IKeyguardDismissCallback callback, CharSequence message); @@ -160,9 +170,12 @@ interface IWindowManager      void closeSystemDialogs(String reason);      // These can only be called with the SET_ANIMATON_SCALE permission. +    @UnsupportedAppUsage      float getAnimationScale(int which);      float[] getAnimationScales(); +    @UnsupportedAppUsage      void setAnimationScale(int which, float scale); +    @UnsupportedAppUsage      void setAnimationScales(in float[] scales);      float getCurrentAnimatorScale(); @@ -181,6 +194,7 @@ interface IWindowManager      // should be enabled.  The 'enabled' value is null or blank for      // the system default (differs per build variant) or any valid      // boolean string as parsed by SystemProperties.getBoolean(). +    @UnsupportedAppUsage      void setStrictModeVisualIndicatorPreference(String enabled);      /** @@ -219,6 +233,7 @@ interface IWindowManager       * Remove a rotation watcher set using watchRotation.       * @hide       */ +    @UnsupportedAppUsage      void removeRotationWatcher(IRotationWatcher watcher);      /** @@ -234,12 +249,14 @@ interface IWindowManager       * thawRotation() is called.       * @hide       */ +    @UnsupportedAppUsage      void freezeRotation(int rotation);      /**       * Release the orientation lock imposed by freezeRotation().       * @hide       */ +    @UnsupportedAppUsage      void thawRotation();      /** @@ -290,16 +307,19 @@ interface IWindowManager      /**       * Called by System UI to notify of changes to the visibility and height of the shelf.       */ +    @UnsupportedAppUsage      void setShelfHeight(boolean visible, int shelfHeight);      /**       * Called by System UI to enable or disable haptic feedback on the navigation bar buttons.       */ +    @UnsupportedAppUsage      void setNavBarVirtualKeyHapticFeedbackEnabled(boolean enabled);      /**       * Device has a software navigation bar (separate from the status bar).       */ +    @UnsupportedAppUsage      boolean hasNavigationBar();      /** @@ -310,11 +330,13 @@ interface IWindowManager      /**       * Lock the device immediately with the specified options (can be null).       */ +    @UnsupportedAppUsage      void lockNow(in Bundle options);      /**       * Device is in safe mode.       */ +    @UnsupportedAppUsage      boolean isSafeModeEnabled();      /** @@ -342,6 +364,7 @@ interface IWindowManager       * @return the dock side the current docked stack is at; must be one of the       *         WindowManagerGlobal.DOCKED_* values       */ +    @UnsupportedAppUsage      int getDockedStackSide();      /** @@ -354,6 +377,7 @@ interface IWindowManager       * Registers a listener that will be called when the dock divider changes its visibility or when       * the docked stack gets added/removed.       */ +    @UnsupportedAppUsage      void registerDockedStackListener(IDockedStackListener listener);      /** @@ -380,6 +404,7 @@ interface IWindowManager      /**       * Retrieves the current stable insets from the primary display.       */ +    @UnsupportedAppUsage      void getStableInsets(int displayId, out Rect outInsets);      /** @@ -398,6 +423,7 @@ interface IWindowManager       * Destroy an input consumer by name.  This method will also dispose the input channels       * associated with that InputConsumer.       */ +    @UnsupportedAppUsage      boolean destroyInputConsumer(String name);      /** diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl index f868a00f0359..d6d5d81cfa43 100644 --- a/core/java/android/view/IWindowSession.aidl +++ b/core/java/android/view/IWindowSession.aidl @@ -49,6 +49,7 @@ interface IWindowSession {      int addToDisplayWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs,              in int viewVisibility, in int layerStackId, out Rect outContentInsets,              out Rect outStableInsets); +    @UnsupportedAppUsage      void remove(IWindow window);      /** @@ -123,6 +124,7 @@ interface IWindowSession {       * completely transparent, allowing it to work with the surface flinger       * to optimize compositing of this part of the window.       */ +    @UnsupportedAppUsage      void setTransparentRegion(IWindow window, in Region region);      /** @@ -144,11 +146,15 @@ interface IWindowSession {       */      void getDisplayFrame(IWindow window, out Rect outDisplayFrame); +    @UnsupportedAppUsage      void finishDrawing(IWindow window); +    @UnsupportedAppUsage      void setInTouchMode(boolean showFocus); +    @UnsupportedAppUsage      boolean getInTouchMode(); +    @UnsupportedAppUsage      boolean performHapticFeedback(IWindow window, int effectId, boolean always);      /** @@ -167,6 +173,7 @@ interface IWindowSession {       * @param data Data transferred by drag and drop       * @return Token of drag operation which will be passed to cancelDragAndDrop.       */ +    @UnsupportedAppUsage      IBinder performDrag(IWindow window, int flags, in SurfaceControl surface, int touchSource,              float touchX, float touchY, float thumbCenterX, float thumbCenterY, in ClipData data); diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java index e48bcfdb7203..a52dec29883e 100644 --- a/core/java/android/view/RenderNodeAnimator.java +++ b/core/java/android/view/RenderNodeAnimator.java @@ -322,6 +322,7 @@ public class RenderNodeAnimator extends Animator {          return mUnscaledStartDelay;      } +    @UnsupportedAppUsage      @Override      public RenderNodeAnimator setDuration(long duration) {          checkMutable(); diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 798401d87b5a..3fe06f10c758 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -4818,11 +4818,8 @@ public final class ViewRootImpl implements ViewParent,          protected int onProcess(QueuedInputEvent q) {              if (q.mEvent instanceof KeyEvent) {                  return processKeyEvent(q); -            } else { -                final int source = q.mEvent.getSource(); -                if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) { -                    return processPointerEvent(q); -                } +            } else if (q.mEvent instanceof MotionEvent) { +                return processMotionEvent(q);              }              return FORWARD;          } @@ -4846,6 +4843,23 @@ public final class ViewRootImpl implements ViewParent,              return FORWARD;          } +        private int processMotionEvent(QueuedInputEvent q) { +            final MotionEvent event = (MotionEvent) q.mEvent; + +            if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) { +                return processPointerEvent(q); +            } + +            // If the motion event is from an absolute position device, exit touch mode +            final int action = event.getActionMasked(); +            if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_SCROLL) { +                if (event.isFromSource(InputDevice.SOURCE_CLASS_POSITION)) { +                    ensureTouchMode(false); +                } +            } +            return FORWARD; +        } +          private int processPointerEvent(QueuedInputEvent q) {              final MotionEvent event = (MotionEvent)q.mEvent; @@ -5178,6 +5192,12 @@ public final class ViewRootImpl implements ViewParent,          private int processGenericMotionEvent(QueuedInputEvent q) {              final MotionEvent event = (MotionEvent)q.mEvent; +            if (event.isFromSource(InputDevice.SOURCE_TOUCHPAD)) { +                if (hasPointerCapture() && mView.dispatchCapturedPointerEvent(event)) { +                    return FINISH_HANDLED; +                } +            } +              // Deliver the event to the view.              if (mView.dispatchGenericMotionEvent(event)) {                  return FINISH_HANDLED; diff --git a/core/java/android/webkit/IWebViewUpdateService.aidl b/core/java/android/webkit/IWebViewUpdateService.aidl index dbca7ff72c7b..9a549e4bc913 100644 --- a/core/java/android/webkit/IWebViewUpdateService.aidl +++ b/core/java/android/webkit/IWebViewUpdateService.aidl @@ -61,6 +61,7 @@ interface IWebViewUpdateService {      /**       * Used by DevelopmentSetting to get the name of the WebView provider currently in use.       */ +    @UnsupportedAppUsage      String getCurrentWebViewPackageName();      /** @@ -72,6 +73,7 @@ interface IWebViewUpdateService {       * Used by Settings to determine whether a certain package can be enabled/disabled by the user -       * the package should not be modifiable in this way if it is a fallback package.       */ +    @UnsupportedAppUsage      boolean isFallbackPackage(String packageName);      /** diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl index 0ed972477123..4e0e290f4f74 100644 --- a/core/java/com/android/internal/app/IAppOpsService.aidl +++ b/core/java/com/android/internal/app/IAppOpsService.aidl @@ -28,21 +28,26 @@ interface IAppOpsService {      int noteOperation(int code, int uid, String packageName);      int startOperation(IBinder token, int code, int uid, String packageName,              boolean startIfModeDefault); +    @UnsupportedAppUsage      void finishOperation(IBinder token, int code, int uid, String packageName);      void startWatchingMode(int op, String packageName, IAppOpsCallback callback);      void stopWatchingMode(IAppOpsCallback callback);      IBinder getToken(IBinder clientToken);      int permissionToOpCode(String permission); -    int noteProxyOperation(int code, String proxyPackageName, +    int noteProxyOperation(int code, int proxyUid, String proxyPackageName,                  int callingUid, String callingPackageName);      // Remaining methods are only used in Java.      int checkPackage(int uid, String packageName); +    @UnsupportedAppUsage      List<AppOpsManager.PackageOps> getPackagesForOps(in int[] ops); +    @UnsupportedAppUsage      List<AppOpsManager.PackageOps> getOpsForPackage(int uid, String packageName, in int[] ops);      List<AppOpsManager.PackageOps> getUidOps(int uid, in int[] ops);      void setUidMode(int code, int uid, int mode); +    @UnsupportedAppUsage      void setMode(int code, int uid, String packageName, int mode); +    @UnsupportedAppUsage      void resetAllModes(int reqUserId, String reqPackageName);      int checkAudioOperation(int code, int usage, int uid, String packageName);      void setAudioRestriction(int code, int usage, int uid, int mode, in String[] exceptionPackages); diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl index 514ff76372a9..9267155d4fbe 100644 --- a/core/java/com/android/internal/app/IBatteryStats.aidl +++ b/core/java/com/android/internal/app/IBatteryStats.aidl @@ -49,11 +49,13 @@ interface IBatteryStats {      void noteResetFlashlight();      // Remaining methods are only used in Java. +    @UnsupportedAppUsage      byte[] getStatistics();      ParcelFileDescriptor getStatisticsStream();      // Return true if we see the battery as currently charging. +    @UnsupportedAppUsage      boolean isCharging();      // Return the computed amount of time remaining on battery, in milliseconds. @@ -62,6 +64,7 @@ interface IBatteryStats {      // Return the computed amount of time remaining to fully charge, in milliseconds.      // Returns -1 if nothing could be computed. +    @UnsupportedAppUsage      long computeChargeTimeRemaining();      void noteEvent(int code, String name, int uid); @@ -131,6 +134,7 @@ interface IBatteryStats {      void noteDeviceIdleMode(int mode, String activeReason, int activeUid);      void setBatteryState(int status, int health, int plugType, int level, int temp, int volt,              int chargeUAh, int chargeFullUAh); +    @UnsupportedAppUsage      long getAwakeTimeBattery();      long getAwakeTimePlugged(); diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl index ff75a8b5fea4..95971c05533a 100644 --- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl +++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl @@ -50,6 +50,7 @@ interface IVoiceInteractionManagerService {       * @param keyphraseId The unique identifier for the keyphrase.       * @param bcp47Locale The BCP47 language tag  for the keyphrase's locale.       */ +    @UnsupportedAppUsage      SoundTrigger.KeyphraseSoundModel getKeyphraseSoundModel(int keyphraseId, in String bcp47Locale);      /**       * Add/Update the given keyphrase sound model. diff --git a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl index f9bf3736422b..6d1d1abd1ec4 100644 --- a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl +++ b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl @@ -42,6 +42,7 @@ interface IAppWidgetService {      void deleteAppWidgetId(String callingPackage, int appWidgetId);      void deleteHost(String packageName, int hostId);      void deleteAllHosts(); +    @UnsupportedAppUsage      RemoteViews getAppWidgetViews(String callingPackage, int appWidgetId);      int[] getAppWidgetIdsForHost(String callingPackage, int hostId);      IntentSender createAppWidgetConfigIntentSender(String callingPackage, int appWidgetId, @@ -63,11 +64,14 @@ interface IAppWidgetService {      AppWidgetProviderInfo getAppWidgetInfo(String callingPackage, int appWidgetId);      boolean hasBindAppWidgetPermission(in String packageName, int userId);      void setBindAppWidgetPermission(in String packageName, int userId, in boolean permission); +    @UnsupportedAppUsage      boolean bindAppWidgetId(in String callingPackage, int appWidgetId,              int providerProfileId, in ComponentName providerComponent, in Bundle options); +    @UnsupportedAppUsage      boolean bindRemoteViewsService(String callingPackage, int appWidgetId, in Intent intent,              IApplicationThread caller, IBinder token, IServiceConnection connection, int flags); +    @UnsupportedAppUsage      int[] getAppWidgetIds(in ComponentName providerComponent);      boolean isBoundWidgetPackage(String packageName, int userId);      boolean requestPinAppWidget(String packageName, in ComponentName providerComponent, diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 8b06c47c60d1..4ad454514532 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -230,6 +230,15 @@ public class BatteryStatsImpl extends BatteryStats {      public boolean mPerProcStateCpuTimesAvailable = true;      /** +     * When per process state cpu times tracking is off, cpu times in KernelSingleUidTimeReader are +     * not updated. So, when the setting is turned on later, we would end up with huge cpu time +     * deltas. This flag tracks the case where tracking is turned on from off so that we won't +     * end up attributing the huge deltas to wrong buckets. +     */ +    @GuardedBy("this") +    private boolean mIsPerProcessStateCpuDataStale; + +    /**       * Uids for which per-procstate cpu times need to be updated.       *       * Contains uid -> procState mappings. @@ -402,7 +411,7 @@ public class BatteryStatsImpl extends BatteryStats {              }              // If the KernelSingleUidTimeReader has stale cpu times, then we shouldn't try to              // compute deltas since it might result in mis-attributing cpu times to wrong states. -            if (mKernelSingleUidTimeReader.hasStaleData()) { +            if (mIsPerProcessStateCpuDataStale) {                  mPendingUids.clear();                  return;              } @@ -485,9 +494,9 @@ public class BatteryStatsImpl extends BatteryStats {                      mKernelUidCpuFreqTimeReader.getAllUidCpuFreqTimeMs();              // If the KernelSingleUidTimeReader has stale cpu times, then we shouldn't try to              // compute deltas since it might result in mis-attributing cpu times to wrong states. -            if (mKernelSingleUidTimeReader.hasStaleData()) { +            if (mIsPerProcessStateCpuDataStale) {                  mKernelSingleUidTimeReader.setAllUidsCpuTimesMs(allUidCpuFreqTimesMs); -                mKernelSingleUidTimeReader.markDataAsStale(false); +                mIsPerProcessStateCpuDataStale = false;                  mPendingUids.clear();                  return;              } @@ -13430,7 +13439,7 @@ public class BatteryStatsImpl extends BatteryStats {          private void updateTrackCpuTimesByProcStateLocked(boolean wasEnabled, boolean isEnabled) {              TRACK_CPU_TIMES_BY_PROC_STATE = isEnabled;              if (isEnabled && !wasEnabled) { -                mKernelSingleUidTimeReader.markDataAsStale(true); +                mIsPerProcessStateCpuDataStale = true;                  mExternalSync.scheduleCpuSyncDueToSettingChange();                  mNumSingleUidCpuTimeReads = 0; diff --git a/core/java/com/android/internal/os/IDropBoxManagerService.aidl b/core/java/com/android/internal/os/IDropBoxManagerService.aidl index d16579c03d7a..aaa548e35a72 100644 --- a/core/java/com/android/internal/os/IDropBoxManagerService.aidl +++ b/core/java/com/android/internal/os/IDropBoxManagerService.aidl @@ -37,5 +37,6 @@ interface IDropBoxManagerService {      boolean isTagEnabled(String tag);      /** @see DropBoxManager#getNextEntry */ +    @UnsupportedAppUsage      DropBoxManager.Entry getNextEntry(String tag, long millis);  } diff --git a/core/java/com/android/internal/os/KernelSingleUidTimeReader.java b/core/java/com/android/internal/os/KernelSingleUidTimeReader.java index 42839171dc53..ad628524f443 100644 --- a/core/java/com/android/internal/os/KernelSingleUidTimeReader.java +++ b/core/java/com/android/internal/os/KernelSingleUidTimeReader.java @@ -53,8 +53,6 @@ public class KernelSingleUidTimeReader {      private int mReadErrorCounter;      @GuardedBy("this")      private boolean mSingleUidCpuTimesAvailable = true; -    @GuardedBy("this") -    private boolean mHasStaleData;      // We use the freq count obtained from /proc/uid_time_in_state to decide how many longs      // to read from each /proc/uid/<uid>/time_in_state. On the first read, verify if this is      // correct and if not, set {@link #mSingleUidCpuTimesAvailable} to false. This flag will @@ -196,18 +194,6 @@ public class KernelSingleUidTimeReader {          return deltaTimesMs;      } -    public void markDataAsStale(boolean hasStaleData) { -        synchronized (this) { -            mHasStaleData = hasStaleData; -        } -    } - -    public boolean hasStaleData() { -        synchronized (this) { -            return mHasStaleData; -        } -    } -      public void setAllUidsCpuTimesMs(SparseArray<long[]> allUidsCpuTimesMs) {          synchronized (this) {              mLastUidCpuTimeMs.clear(); diff --git a/core/java/com/android/internal/policy/IKeyguardService.aidl b/core/java/com/android/internal/policy/IKeyguardService.aidl index e5d5685ab3e8..54f31f9199cb 100644 --- a/core/java/com/android/internal/policy/IKeyguardService.aidl +++ b/core/java/com/android/internal/policy/IKeyguardService.aidl @@ -88,8 +88,10 @@ oneway interface IKeyguardService {       */      void onScreenTurnedOff(); +    @UnsupportedAppUsage      void setKeyguardEnabled(boolean enabled);      void onSystemReady(); +    @UnsupportedAppUsage      void doKeyguardTimeout(in Bundle options);      void setSwitchingUser(boolean switching);      void setCurrentUser(int userId); diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index 159d49bc0009..4ad81cba89a2 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -30,15 +30,20 @@ import com.android.internal.statusbar.NotificationVisibility;  /** @hide */  interface IStatusBarService  { +    @UnsupportedAppUsage      void expandNotificationsPanel(); +    @UnsupportedAppUsage      void collapsePanels();      void togglePanel(); +    @UnsupportedAppUsage      void disable(int what, IBinder token, String pkg);      void disableForUser(int what, IBinder token, String pkg, int userId);      void disable2(int what, IBinder token, String pkg);      void disable2ForUser(int what, IBinder token, String pkg, int userId);      void setIcon(String slot, String iconPackage, int iconId, int iconLevel, String contentDescription); +    @UnsupportedAppUsage      void setIconVisibility(String slot, boolean visible); +    @UnsupportedAppUsage      void removeIcon(String slot);      void setImeWindowStatus(in IBinder token, int vis, int backDisposition,              boolean showImeSwitcher); @@ -82,6 +87,7 @@ interface IStatusBarService      void addTile(in ComponentName tile);      void remTile(in ComponentName tile);      void clickTile(in ComponentName tile); +    @UnsupportedAppUsage      void handleSystemKey(in int key);      /** diff --git a/core/java/com/android/internal/widget/ILockSettings.aidl b/core/java/com/android/internal/widget/ILockSettings.aidl index 591f15fd5676..62b8c270d910 100644 --- a/core/java/com/android/internal/widget/ILockSettings.aidl +++ b/core/java/com/android/internal/widget/ILockSettings.aidl @@ -30,11 +30,17 @@ import java.util.Map;  /** {@hide} */  interface ILockSettings { +    @UnsupportedAppUsage      void setBoolean(in String key, in boolean value, in int userId); +    @UnsupportedAppUsage      void setLong(in String key, in long value, in int userId); +    @UnsupportedAppUsage      void setString(in String key, in String value, in int userId); +    @UnsupportedAppUsage      boolean getBoolean(in String key, in boolean defaultValue, in int userId); +    @UnsupportedAppUsage      long getLong(in String key, in long defaultValue, in int userId); +    @UnsupportedAppUsage      String getString(in String key, in String defaultValue, in int userId);      void setLockCredential(in String credential, int type, in String savedCredential, int requestedQuality, int userId);      void resetKeyStore(int userId); @@ -43,7 +49,9 @@ interface ILockSettings {      VerifyCredentialResponse verifyCredential(in String credential, int type, long challenge, int userId);      VerifyCredentialResponse verifyTiedProfileChallenge(String credential, int type, long challenge, int userId);      boolean checkVoldPassword(int userId); +    @UnsupportedAppUsage      boolean havePattern(int userId); +    @UnsupportedAppUsage      boolean havePassword(int userId);      byte[] getHashFactor(String currentCredential, int userId);      void setSeparateProfileChallengeEnabled(int userId, boolean enabled, String managedUserPassword); diff --git a/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl b/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl index 7317ecf68fe9..d6efca5d36eb 100644 --- a/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl +++ b/core/java/com/android/internal/widget/IRemoteViewsFactory.aidl @@ -21,15 +21,23 @@ import android.widget.RemoteViews;  /** {@hide} */  interface IRemoteViewsFactory { +    @UnsupportedAppUsage      void onDataSetChanged();      oneway void onDataSetChangedAsync();      oneway void onDestroy(in Intent intent); +    @UnsupportedAppUsage      int getCount(); +    @UnsupportedAppUsage      RemoteViews getViewAt(int position); +    @UnsupportedAppUsage      RemoteViews getLoadingView(); +    @UnsupportedAppUsage      int getViewTypeCount(); +    @UnsupportedAppUsage      long getItemId(int position); +    @UnsupportedAppUsage      boolean hasStableIds(); +    @UnsupportedAppUsage      boolean isCreated();  } diff --git a/core/jni/Android.bp b/core/jni/Android.bp index c385ca11611c..f9813fdb65ab 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -290,6 +290,7 @@ cc_library_shared {          "libhwui",          "libdl",          "libstatslog", +        "server_configurable_flags",      ],      generated_sources: ["android_util_StatsLog.cpp"], diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 565fa6f63120..388285a5687f 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -31,6 +31,7 @@  #include <binder/Parcel.h>  #include <utils/threads.h>  #include <cutils/properties.h> +#include <server_configurable_flags/get_flags.h>  #include <SkGraphics.h> @@ -219,6 +220,23 @@ extern int register_com_android_internal_os_Zygote(JNIEnv *env);  extern int register_com_android_internal_os_ZygoteInit(JNIEnv *env);  extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env); +// Namespace for Android Runtime flags applied during boot time. +static const char* RUNTIME_NATIVE_BOOT_NAMESPACE = "runtime_native_boot"; +// Feature flag name to enable/disable generational garbage collection in ART's +// Concurrent Copying (CC) garbage collector. +static const char* ENABLE_GENERATIONAL_CC = "enable_generational_cc"; +// Runtime option enabling generational garbage collection in ART's Concurrent +// Copying (CC) garbage collector. +static const char* kGenerationalCCRuntimeOption = "-Xgc:generational_cc"; +// Runtime option disabling generational garbage collection in ART's Concurrent +// Copying (CC) garbage collector. +static const char* kNoGenerationalCCRuntimeOption = "-Xgc:nogenerational_cc"; + +// Feature flag name for running the JIT in Zygote experiment, b/119800099. +static const char* ENABLE_APEX_IMAGE = "enable_apex_image"; +// Flag to pass to the runtime when using the apex image. +static const char* kApexImageOption = "-Ximage:/system/framework/apex.art"; +  static AndroidRuntime* gCurRuntime = NULL;  /* @@ -653,8 +671,17 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote)      char jdwpProviderBuf[sizeof("-XjdwpProvider:") - 1 + PROPERTY_VALUE_MAX];      char bootImageBuf[sizeof("-Ximage:") - 1 + PROPERTY_VALUE_MAX]; -    if (parseRuntimeOption("dalvik.vm.boot-image", bootImageBuf, "-Ximage:")) { -        ALOGI("Boot image: '%s'\n", bootImageBuf); +    std::string use_apex_image = +        server_configurable_flags::GetServerConfigurableFlag(RUNTIME_NATIVE_BOOT_NAMESPACE, +                                                             ENABLE_APEX_IMAGE, +                                                             /*default_value=*/ ""); +    if (use_apex_image == "true") { +        addOption(kApexImageOption); +        ALOGI("Using Apex boot image: '%s'\n", kApexImageOption); +    } else if (parseRuntimeOption("dalvik.vm.boot-image", bootImageBuf, "-Ximage:")) { +        ALOGI("Using dalvik.vm.boot-image: '%s'\n", bootImageBuf); +    } else { +        ALOGI("Using default boot image");      }      bool checkJni = false; @@ -769,7 +796,23 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote)        addOption("-XX:LowMemoryMode");      } +    /* +     * Garbage-collection related options. +     */      parseRuntimeOption("dalvik.vm.gctype", gctypeOptsBuf, "-Xgc:"); + +    // If it set, honor the "enable_generational_cc" device configuration; +    // otherwise, let the runtime use its default behavior. +    std::string enable_generational_cc = +        server_configurable_flags::GetServerConfigurableFlag(RUNTIME_NATIVE_BOOT_NAMESPACE, +                                                             ENABLE_GENERATIONAL_CC, +                                                             /*default_value=*/ ""); +    if (enable_generational_cc == "true") { +        addOption(kGenerationalCCRuntimeOption); +    } else if (enable_generational_cc == "false") { +        addOption(kNoGenerationalCCRuntimeOption); +    } +      parseRuntimeOption("dalvik.vm.backgroundgctype", backgroundgcOptsBuf, "-XX:BackgroundGC=");      /* diff --git a/core/jni/android_net_LocalSocketImpl.cpp b/core/jni/android_net_LocalSocketImpl.cpp index a1f2377041e8..1163b860977d 100644 --- a/core/jni/android_net_LocalSocketImpl.cpp +++ b/core/jni/android_net_LocalSocketImpl.cpp @@ -33,14 +33,16 @@  #include <unistd.h>  #include <sys/ioctl.h> +#include <android-base/cmsg.h> +#include <android-base/macros.h>  #include <cutils/sockets.h>  #include <netinet/tcp.h>  #include <nativehelper/ScopedUtfChars.h> -namespace android { +using android::base::ReceiveFileDescriptorVector; +using android::base::SendFileDescriptorVector; -template <typename T> -void UNUSED(T t) {} +namespace android {  static jfieldID field_inboundFileDescriptors;  static jfieldID field_outboundFileDescriptors; @@ -118,67 +120,6 @@ socket_bind_local (JNIEnv *env, jobject object, jobject fileDescriptor,  }  /** - * Processes ancillary data, handling only - * SCM_RIGHTS. Creates appropriate objects and sets appropriate - * fields in the LocalSocketImpl object. Returns 0 on success - * or -1 if an exception was thrown. - */ -static int socket_process_cmsg(JNIEnv *env, jobject thisJ, struct msghdr * pMsg) -{ -    struct cmsghdr *cmsgptr; - -    for (cmsgptr = CMSG_FIRSTHDR(pMsg); -            cmsgptr != NULL; cmsgptr = CMSG_NXTHDR(pMsg, cmsgptr)) { - -        if (cmsgptr->cmsg_level != SOL_SOCKET) { -            continue; -        } - -        if (cmsgptr->cmsg_type == SCM_RIGHTS) { -            int *pDescriptors = (int *)CMSG_DATA(cmsgptr); -            jobjectArray fdArray; -            int count -                = ((cmsgptr->cmsg_len - CMSG_LEN(0)) / sizeof(int)); - -            if (count < 0) { -                jniThrowException(env, "java/io/IOException", -                    "invalid cmsg length"); -                return -1; -            } - -            fdArray = env->NewObjectArray(count, class_FileDescriptor, NULL); - -            if (fdArray == NULL) { -                return -1; -            } - -            for (int i = 0; i < count; i++) { -                jobject fdObject -                        = jniCreateFileDescriptor(env, pDescriptors[i]); - -                if (env->ExceptionCheck()) { -                    return -1; -                } - -                env->SetObjectArrayElement(fdArray, i, fdObject); - -                if (env->ExceptionCheck()) { -                    return -1; -                } -            } - -            env->SetObjectField(thisJ, field_inboundFileDescriptors, fdArray); - -            if (env->ExceptionCheck()) { -                return -1; -            } -        } -    } - -    return 0; -} - -/**   * Reads data from a socket into buf, processing any ancillary data   * and adding it to thisJ.   * @@ -189,47 +130,48 @@ static ssize_t socket_read_all(JNIEnv *env, jobject thisJ, int fd,          void *buffer, size_t len)  {      ssize_t ret; -    struct msghdr msg; -    struct iovec iv; -    unsigned char *buf = (unsigned char *)buffer; -    // Enough buffer for a pile of fd's. We throw an exception if -    // this buffer is too small. -    struct cmsghdr cmsgbuf[2*sizeof(cmsghdr) + 0x100]; - -    memset(&msg, 0, sizeof(msg)); -    memset(&iv, 0, sizeof(iv)); - -    iv.iov_base = buf; -    iv.iov_len = len; +    std::vector<android::base::unique_fd> received_fds; -    msg.msg_iov = &iv; -    msg.msg_iovlen = 1; -    msg.msg_control = cmsgbuf; -    msg.msg_controllen = sizeof(cmsgbuf); - -    ret = TEMP_FAILURE_RETRY(recvmsg(fd, &msg, MSG_NOSIGNAL | MSG_CMSG_CLOEXEC)); - -    if (ret < 0 && errno == EPIPE) { -        // Treat this as an end of stream -        return 0; -    } +    ret = ReceiveFileDescriptorVector(fd, buffer, len, 64, &received_fds);      if (ret < 0) { +        if (errno == EPIPE) { +            // Treat this as an end of stream +            return 0; +        } +          jniThrowIOException(env, errno);          return -1;      } -    if ((msg.msg_flags & (MSG_CTRUNC | MSG_OOB | MSG_ERRQUEUE)) != 0) { -        // To us, any of the above flags are a fatal error +    if (received_fds.size() > 0) { +        jobjectArray fdArray = env->NewObjectArray(received_fds.size(), class_FileDescriptor, NULL); + +        if (fdArray == NULL) { +            // NewObjectArray has thrown. +            return -1; +        } -        jniThrowException(env, "java/io/IOException", -                "Unexpected error or truncation during recvmsg()"); +        for (size_t i = 0; i < received_fds.size(); i++) { +            jobject fdObject = jniCreateFileDescriptor(env, received_fds[i].get()); -        return -1; -    } +            if (env->ExceptionCheck()) { +                return -1; +            } + +            env->SetObjectArrayElement(fdArray, i, fdObject); + +            if (env->ExceptionCheck()) { +                return -1; +            } +        } -    if (ret >= 0) { -        socket_process_cmsg(env, thisJ, &msg); +        for (auto &fd : received_fds) { +            // The fds are stored in java.io.FileDescriptors now. +            static_cast<void>(fd.release()); +        } + +        env->SetObjectField(thisJ, field_inboundFileDescriptors, fdArray);      }      return ret; @@ -243,7 +185,6 @@ static ssize_t socket_read_all(JNIEnv *env, jobject thisJ, int fd,  static int socket_write_all(JNIEnv *env, jobject object, int fd,          void *buf, size_t len)  { -    ssize_t ret;      struct msghdr msg;      unsigned char *buffer = (unsigned char *)buf;      memset(&msg, 0, sizeof(msg)); @@ -256,14 +197,11 @@ static int socket_write_all(JNIEnv *env, jobject object, int fd,          return -1;      } -    struct cmsghdr *cmsg;      int countFds = outboundFds == NULL ? 0 : env->GetArrayLength(outboundFds); -    int fds[countFds]; -    char msgbuf[CMSG_SPACE(countFds)]; +    std::vector<int> fds;      // Add any pending outbound file descriptors to the message      if (outboundFds != NULL) { -          if (env->ExceptionCheck()) {              return -1;          } @@ -274,47 +212,25 @@ static int socket_write_all(JNIEnv *env, jobject object, int fd,                  return -1;              } -            fds[i] = jniGetFDFromFileDescriptor(env, fdObject); +            fds.push_back(jniGetFDFromFileDescriptor(env, fdObject));              if (env->ExceptionCheck()) {                  return -1;              }          } - -        // See "man cmsg" really -        msg.msg_control = msgbuf; -        msg.msg_controllen = sizeof msgbuf; -        cmsg = CMSG_FIRSTHDR(&msg); -        cmsg->cmsg_level = SOL_SOCKET; -        cmsg->cmsg_type = SCM_RIGHTS; -        cmsg->cmsg_len = CMSG_LEN(sizeof fds); -        memcpy(CMSG_DATA(cmsg), fds, sizeof fds);      } -    // We only write our msg_control during the first write -    while (len > 0) { -        struct iovec iv; -        memset(&iv, 0, sizeof(iv)); - -        iv.iov_base = buffer; -        iv.iov_len = len; - -        msg.msg_iov = &iv; -        msg.msg_iovlen = 1; - -        do { -            ret = sendmsg(fd, &msg, MSG_NOSIGNAL); -        } while (ret < 0 && errno == EINTR); +    ssize_t rc = SendFileDescriptorVector(fd, buffer, len, fds); -        if (ret < 0) { +    while (rc != len) { +        if (rc == -1) {              jniThrowIOException(env, errno);              return -1;          } -        buffer += ret; -        len -= ret; +        buffer += rc; +        len -= rc; -        // Wipes out any msg_control too -        memset(&msg, 0, sizeof(msg)); +        rc = send(fd, buffer, len, MSG_NOSIGNAL);      }      return 0; diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index f70cf07b9535..6302aa725fc4 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -127,113 +127,17 @@ jobject android_view_Surface_createFromIGraphicBufferProducer(JNIEnv* env,  }  int android_view_Surface_mapPublicFormatToHalFormat(PublicFormat f) { - -    switch(f) { -        case PublicFormat::JPEG: -        case PublicFormat::DEPTH_POINT_CLOUD: -            return HAL_PIXEL_FORMAT_BLOB; -        case PublicFormat::DEPTH16: -            return HAL_PIXEL_FORMAT_Y16; -        case PublicFormat::RAW_SENSOR: -        case PublicFormat::RAW_DEPTH: -            return HAL_PIXEL_FORMAT_RAW16; -        default: -            // Most formats map 1:1 -            return static_cast<int>(f); -    } +    return mapPublicFormatToHalFormat(f);  }  android_dataspace android_view_Surface_mapPublicFormatToHalDataspace(          PublicFormat f) { -    switch(f) { -        case PublicFormat::JPEG: -            return HAL_DATASPACE_V0_JFIF; -        case PublicFormat::DEPTH_POINT_CLOUD: -        case PublicFormat::DEPTH16: -        case PublicFormat::RAW_DEPTH: -            return HAL_DATASPACE_DEPTH; -        case PublicFormat::RAW_SENSOR: -        case PublicFormat::RAW_PRIVATE: -        case PublicFormat::RAW10: -        case PublicFormat::RAW12: -            return HAL_DATASPACE_ARBITRARY; -        case PublicFormat::YUV_420_888: -        case PublicFormat::NV21: -        case PublicFormat::YV12: -            return HAL_DATASPACE_V0_JFIF; -        default: -            // Most formats map to UNKNOWN -            return HAL_DATASPACE_UNKNOWN; -    } +    return mapPublicFormatToHalDataspace(f);  }  PublicFormat android_view_Surface_mapHalFormatDataspaceToPublicFormat(          int format, android_dataspace dataSpace) { -    switch(format) { -        case HAL_PIXEL_FORMAT_RGBA_8888: -        case HAL_PIXEL_FORMAT_RGBX_8888: -        case HAL_PIXEL_FORMAT_RGBA_FP16: -        case HAL_PIXEL_FORMAT_RGBA_1010102: -        case HAL_PIXEL_FORMAT_RGB_888: -        case HAL_PIXEL_FORMAT_RGB_565: -        case HAL_PIXEL_FORMAT_Y8: -        case HAL_PIXEL_FORMAT_RAW10: -        case HAL_PIXEL_FORMAT_RAW12: -        case HAL_PIXEL_FORMAT_YCbCr_420_888: -        case HAL_PIXEL_FORMAT_YV12: -            // Enums overlap in both name and value -            return static_cast<PublicFormat>(format); -        case HAL_PIXEL_FORMAT_RAW16: -            switch (dataSpace) { -                case HAL_DATASPACE_DEPTH: -                  return PublicFormat::RAW_DEPTH; -                default: -                  return PublicFormat::RAW_SENSOR; -            } -        case HAL_PIXEL_FORMAT_RAW_OPAQUE: -            // Name differs, though value is the same -            return PublicFormat::RAW_PRIVATE; -        case HAL_PIXEL_FORMAT_YCbCr_422_SP: -            // Name differs, though the value is the same -            return PublicFormat::NV16; -        case HAL_PIXEL_FORMAT_YCrCb_420_SP: -            // Name differs, though the value is the same -            return PublicFormat::NV21; -        case HAL_PIXEL_FORMAT_YCbCr_422_I: -            // Name differs, though the value is the same -            return PublicFormat::YUY2; -        case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED: -            // Name differs, though the value is the same -            return PublicFormat::PRIVATE; -        case HAL_PIXEL_FORMAT_Y16: -            // Dataspace-dependent -            switch (dataSpace) { -                case HAL_DATASPACE_DEPTH: -                    return PublicFormat::DEPTH16; -                default: -                    // Assume non-depth Y16 is just Y16. -                    return PublicFormat::Y16; -            } -            break; -        case HAL_PIXEL_FORMAT_BLOB: -            // Dataspace-dependent -            switch (dataSpace) { -                case HAL_DATASPACE_DEPTH: -                    return PublicFormat::DEPTH_POINT_CLOUD; -                case HAL_DATASPACE_V0_JFIF: -                    return PublicFormat::JPEG; -                default: -                    // Assume otherwise-marked blobs are also JPEG -                    return PublicFormat::JPEG; -            } -            break; -        case HAL_PIXEL_FORMAT_BGRA_8888: -            // Not defined in public API -            return PublicFormat::UNKNOWN; - -        default: -            return PublicFormat::UNKNOWN; -    } +    return mapHalFormatDataspaceToPublicFormat(format, dataSpace);  }  // ---------------------------------------------------------------------------- diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index bc1332adacbc..8216b616915c 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -892,6 +892,8 @@ static pid_t ForkCommon(JNIEnv* env, bool is_system_server,      // Turn fdsan back on.      android_fdsan_set_error_level(fdsan_error_level); +  } else { +    ALOGD("Forked child process %d", pid);    }    // We blocked SIGCHLD prior to a fork, we unblock it here. diff --git a/core/jni/include/android_runtime/android_view_Surface.h b/core/jni/include/android_runtime/android_view_Surface.h index 36487b3b40b3..04718cd981ff 100644 --- a/core/jni/include/android_runtime/android_view_Surface.h +++ b/core/jni/include/android_runtime/android_view_Surface.h @@ -19,6 +19,7 @@  #include <android/native_window.h>  #include <system/graphics.h> +#include <ui/PublicFormat.h>  #include "jni.h" @@ -27,39 +28,6 @@ namespace android {  class Surface;  class IGraphicBufferProducer; -/** - * Enum mirroring the public API definitions for image and pixel formats. - * Some of these are hidden in the public API - * - * Keep up to date with android.graphics.ImageFormat and - * android.graphics.PixelFormat - */ -enum class PublicFormat { -    UNKNOWN           = 0x0, -    RGBA_8888         = 0x1, -    RGBX_8888         = 0x2, -    RGB_888           = 0x3, -    RGB_565           = 0x4, -    NV16              = 0x10, -    NV21              = 0x11, -    YUY2              = 0x14, -    RGBA_FP16         = 0x16, -    RAW_SENSOR        = 0x20, -    PRIVATE           = 0x22, -    YUV_420_888       = 0x23, -    RAW_PRIVATE       = 0x24, -    RAW10             = 0x25, -    RAW12             = 0x26, -    RGBA_1010102      = 0x2b, -    JPEG              = 0x100, -    DEPTH_POINT_CLOUD = 0x101, -    RAW_DEPTH         = 0x1002, // @hide -    YV12              = 0x32315659, -    Y8                = 0x20203859, // @hide -    Y16               = 0x20363159, // @hide -    DEPTH16           = 0x44363159 -}; -  /* Gets the underlying ANativeWindow for a Surface. */  extern sp<ANativeWindow> android_view_Surface_getNativeWindow(          JNIEnv* env, jobject surfaceObj); diff --git a/core/jni/runtime_native_boot-flags-test.sh b/core/jni/runtime_native_boot-flags-test.sh new file mode 100755 index 000000000000..cdfeffcc7bbb --- /dev/null +++ b/core/jni/runtime_native_boot-flags-test.sh @@ -0,0 +1,324 @@ +#!/bin/bash + +# 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. +# + +# Test Android Runtime (Boot) device configuration flags (living in namespace +# `runtime_native_boot`). + +me=$(basename $0) + +# Namespace containing the tested flag. +namespace=runtime_native_boot +# Default set of checked zygote processes. +zygotes= + +# Status of whole test script. +exit_status=0 + +function say { +  echo "$me: $*" +} + +function banner { +  local separator=$(echo "$@" | sed s/./=/g ) +  say "$separator" +  say "$@" +  say "$separator" +} + +function fail { +  say "FAILED: $@" +  exit_status=1 +} + +function reboot_and_wait_for_device { +  say "Rebooting device..." +  adb reboot +  adb wait-for-device >/dev/null +  # Wait until the device has finished booting. Give the device 60 iterations +  # (~60 seconds) to try and finish booting before declaring defeat. +  local niters=60 +  for i in $(seq $niters); do +    [[ $(adb shell getprop sys.boot_completed) -eq 1 ]] && return 0 +    sleep 1 +  done +  fail "Device did not finish booting before timeout (~$niters seconds)" +} + +# check_device_config_flag CONTEXT FLAG VALUE +# ------------------------------------------- +# Check that the device configuration flag FLAG is set to VALUE. Use CONTEXT in +# logging. +function check_device_config_flag { +  local context=$1 +  local flag=$2 +  local value=$3 + +  say "[$context] Check that the device configuration flag is set..." +  local flag_value=$(adb shell device_config get "$namespace" "$flag") +  [[ "$flag_value" = "$value" ]] \ +    || fail "Device configuration flag \`$flag\` set to \`$flag_value\` (expected \`$value\`)" +} + +# check_no_device_config_flag CONTEXT FLAG +# ---------------------------------------- +# Check that the device configuration flag FLAG is not set. Use CONTEXT in +# logging. +function check_no_device_config_flag { +  local context=$1 +  local flag=$2 + +  say "[$context] Check that the device configuration flag is not set..." +  local flag_value=$(adb shell device_config get "$namespace" "$flag") +  [[ "$flag_value" = null ]] \ +    || fail "Device configuration flag \`$flag\` set to \`$flag_value\` (expected `null`)" +} + +# get_system_property PROP +# ------------------------ +# Get system property PROP associated with a device configuration flag. +function get_system_property { +  local prop=$1 + +  # Note that we need to be root to read that system property. +  adb root >/dev/null +  local prop_value=$(adb shell getprop "$prop") +  adb unroot >/dev/null +  echo "$prop_value" +} + +# check_system_property CONTEXT PROP VALUE +# ---------------------------------------- +# Check that the system property PROP associated with a device configuration +# flag is set to VALUE. Use CONTEXT in logging. +function check_system_property { +  local context=$1 +  local prop=$2 +  local value=$3 + +  say "[$context] Check that the persistent system property is set..." +  local prop_value=$(get_system_property "$prop") +  [[ "$prop_value" = "$value" ]] \ +    || fail "System property \`$prop\` set to \`$prop_value\` (expected \`$value\`)" +} + +# check_no_system_property CONTEXT PROP +# ------------------------------------- +# Check that the system property PROP associated with a device configuration +# flag is not set. Use CONTEXT in logging. +function check_no_system_property { +  local context=$1 +  local prop=$2 + +  say "[$context] Check that the persistent system property is not set..." +  local prop_value=$(get_system_property "$prop") +  [[ -z "$prop_value" ]] \ +    || fail "System property \`$prop\` set to \`$prop_value\` (expected unset property)" +} + +# find_zygote_runtime_option ZYGOTE RUNTIME_OPTION +# ------------------------------------------------ +# Return whether ZYGOTE is passed RUNTIME_OPTION. +function find_zygote_runtime_option { +  local zygote=$1 +  local runtime_option=$2 + +  adb logcat -d -s "$zygote" | grep -q -e "option\[[0-9]\+\]=$runtime_option" +} + +# check_zygote_runtime_option CONTEXT RUNTIME_OPTION +# -------------------------------------------------- +# Check that all zygote processes are passed RUNTIME_OPTION as runtime option. Use +# CONTEXT in logging. +function check_zygote_runtime_option { +  local context=$1 +  local runtime_option=$2 + +  say \ +    "[$context] Check that all zygote processes are passed \`$runtime_option\` as runtime option..." +  for zygote in $zygotes; do +    find_zygote_runtime_option "$zygote" "$runtime_option" \ +      || fail "Found no \`$runtime_option\` among runtime options passed to \`$zygote\`" +  done +} + +# check_no_zygote_runtime_option CONTEXT RUNTIME_OPTION +# ----------------------------------------------------- +# Check that no zygote process is passed RUNTIME_OPTION as runtime option.  Use +# CONTEXT in logging. +function check_no_zygote_runtime_option { +  local context=$1 +  local runtime_option=$2 + +  say "[$context] Check that no zygote process is passed \`$runtime_option\` as runtime option..." +  for zygote in $zygotes; do +    find_zygote_runtime_option "$zygote" "$runtime_option" \ +      && fail "Found \`$runtime_option\` among runtime options passed to \`$zygote\`" +  done +} + +# check_android_runtime_message CONTEXT MESSAGE +# --------------------------------------------- +# Return whether AndroidRuntime generated MESSAGE in logcat. Use CONTEXT in +# logging. +function check_android_runtime_message { +  local context=$1 +  local message=$2 + +  say "[$context] Check that AndroidRuntime generated expected message in logcat..." +  adb logcat -d -s AndroidRuntime | grep -F -q "$message" \ +    || fail "Found no message \"$message\" generated by AndroidRuntime" +} + +# check_no_android_runtime_message CONTEXT MESSAGE +# ------------------------------------------------ +# Return whether AndroidRuntime did not generate MESSAGE in logcat. Use CONTEXT +# in logging. +function check_no_android_runtime_message { +  local context=$1 +  local message=$2 + +  say "[$context] Check that AndroidRuntime did not generate unexpected message in logcat..." +  adb logcat -d -s AndroidRuntime | grep -F -q -v "$message" \ +    || fail "Found message \"$message\" generated by AndroidRuntime" +} + +# test_android_runtime_flag FLAG VALUE CHECK_EFFECT CHECK_NO_EFFECT +# ----------------------------------------------------------------- +# Test device configuration FLAG with VALUE. CHECK_EFFECT and CHECK_NO_EFFECT +# are functions that are passed a context as sole argument and that respectively +# check the effect or the absence of effect of the flag. +function test_android_runtime_flag { +  local flag=$1 +  local value=$2 +  local check_effect=$3 +  local check_no_effect=$4 + +  # Persistent system property (set after a reboot) associated with the device +  # configuration flag. +  local prop="persist.device_config.$namespace.$flag" + +  banner "Testing \`$flag\` value \`$value\`." + +  say "Setting device configuration flag..." +  adb shell device_config put "$namespace" "$flag" "$value" +  # Give some time to the device to digest this change before rebooting. +  sleep 3 + +  # Check that both the device configuration flag and the associated system +  # property are set, but that flag has not produced an effect on the system (as +  # we haven't rebooted yet). +  local context="Flag set, before reboot" +  check_device_config_flag "$context" "$flag" "$value" +  check_system_property "$context" "$prop" "$value" +  $check_no_effect "$context" + +  # Reboot device for the flag value to take effect. +  reboot_and_wait_for_device +  context="Flag set, after 1st reboot" +  check_device_config_flag "$context" "$flag" "$value" +  check_system_property "$context" "$prop" "$value" +  $check_effect "$context" + +  # Reboot device a second time and check that the state has persisted. +  reboot_and_wait_for_device +  context="Flag set, after 2nd reboot" +  check_device_config_flag "$context" "$flag" "$value" +  check_system_property "$context" "$prop" "$value" +  $check_effect "$context" + +  say "Unsetting device configuration flag..." +  adb shell device_config delete "$namespace" "$flag" >/dev/null +  # Give some time to the device to digest this change before rebooting. +  sleep 3 + +  # Reboot and check that the device is back to its default state. +  reboot_and_wait_for_device +  context="Flag unset, after 3rd reboot" +  check_no_device_config_flag "$context" "$flag" +  check_no_system_property "$context" "$prop" +  $check_no_effect "$context" +} + + +# Pre-test actions. +# ================= + +# Enumerate Zygote processes. +case $(adb shell getprop ro.zygote) in +  (zygote32) zygotes="zygote";; +  (zygote64) zygotes="zygote64";; +  (zygote32_64|zygote64_32) zygotes="zygote zygote64";; +esac + +# Test "enable_generational_cc" flag values. +# ========================================== + +function check_nogenerational_cc { +  check_zygote_runtime_option "$1" "-Xgc:nogenerational_cc" +} +function check_no_nogenerational_cc { +  check_no_zygote_runtime_option "$1" "-Xgc:nogenerational_cc" +} + +function check_generational_cc { +  check_zygote_runtime_option "$1" "-Xgc:generational_cc" +} +function check_no_generational_cc { +  check_no_zygote_runtime_option "$1" "-Xgc:generational_cc" +} + +test_android_runtime_flag \ +  enable_generational_cc false check_nogenerational_cc check_no_nogenerational_cc +test_android_runtime_flag \ +  enable_generational_cc true check_generational_cc check_no_generational_cc + +# Test "enable_apex_image" flag values. +# ===================================== + +default_boot_image_message="Using default boot image" +function check_default_boot_image { +  check_android_runtime_message "$1" "$default_boot_image_message" +} +function check_no_default_boot_image { +  check_no_android_runtime_message "$1" "$default_boot_image_message" +} + +apex_boot_image_option="-Ximage:/system/framework/apex.art" +apex_boot_image_message="Using Apex boot image: '$apex_boot_image_option'" +function check_apex_boot_image { +  check_zygote_runtime_option "$1" "$apex_boot_image_option" +  check_android_runtime_message "$1" "$apex_boot_image_message" +} +function check_no_apex_boot_image { +  check_no_zygote_runtime_option "$1" "$apex_boot_image_option" +  check_no_android_runtime_message "$1" "$apex_boot_image_message" +} + +test_android_runtime_flag \ +  enable_apex_image false check_default_boot_image check_no_default_boot_image +test_android_runtime_flag \ +  enable_apex_image true check_apex_boot_image check_no_apex_boot_image + +# Post-test actions. +# ================== + +if [[ "$exit_status" -eq 0 ]]; then +  banner "All tests passed." +else +  banner "Test(s) failed." +fi +exit $exit_status diff --git a/core/res/res/values-mcc311-mnc480/config.xml b/core/res/res/values-mcc311-mnc480/config.xml index cc7daa8efec6..db2f8d01f93a 100755 --- a/core/res/res/values-mcc311-mnc480/config.xml +++ b/core/res/res/values-mcc311-mnc480/config.xml @@ -19,21 +19,6 @@  <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> -    <!-- CDMA home system id for Verizon --> -    <string-array translatable="false" name="config_cdma_home_system"> -        <item>64</item> -        <item>65</item> -        <item>66</item> -        <item>76</item> -        <item>77</item> -        <item>78</item> -        <item>79</item> -        <item>80</item> -        <item>81</item> -        <item>82</item> -        <item>83</item> -    </string-array> -      <!-- Flag indicating whether the IMS service can be turned off. If false then          the service will not be turned-off completely (the ImsManager.turnOffIms() will          be disabled) but individual Features can be disabled using ImsConfig.setFeatureValue() --> diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index 733878b9882b..8f2d6c3e02f4 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -185,4 +185,20 @@          <item>@string/app_info</item>      </string-array> +    <!-- Device-specific array of SIM slot indexes which are are embedded eUICCs. +         e.g. If a device has two physical slots with indexes 0, 1, and slot 1 is an +         eUICC, then the value of this array should be: +             <integer-array name="non_removable_euicc_slots"> +                 <item>1</item> +             </integer-array> +         If a device has three physical slots and slot 1 and 2 are eUICCs, then the value of +         this array should be: +             <integer-array name="non_removable_euicc_slots"> +                <item>1</item> +                <item>2</item> +             </integer-array> +         This is used to differentiate between removable eUICCs and built in eUICCs, and should +         be set by OEMs for devices which use eUICCs. --> +    <integer-array name="non_removable_euicc_slots"></integer-array> +  </resources> diff --git a/core/res/res/values/colors_device_defaults.xml b/core/res/res/values/colors_device_defaults.xml index 0fe80a154f7a..256c53133096 100644 --- a/core/res/res/values/colors_device_defaults.xml +++ b/core/res/res/values/colors_device_defaults.xml @@ -26,6 +26,8 @@      <color name="primary_dark_device_default_settings">@color/primary_dark_material_settings</color>      <color name="primary_dark_device_default_settings_light">@color/primary_dark_material_settings_light</color> +    <color name="navigation_bar_divider_device_default_settings">#1f000000</color> +      <color name="secondary_device_default_settings">@color/secondary_material_settings</color>      <color name="secondary_device_default_settings_light">@color/secondary_material_settings_light</color>      <color name="tertiary_device_default_settings">@color/tertiary_material_settings</color> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index de07b86819c3..97ae8e5215fe 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -477,22 +477,16 @@               - the return value of TelephonyManager.getTetherApnRequired()                 determines how the array is further modified: -                   * DUN_REQUIRED -                     TYPE_MOBILE is removed (if present) -                     TYPE_MOBILE_HIPRI is removed (if present) -                     TYPE_MOBILE_DUN is appended (if not already present) - -                   * DUN_NOT_REQUIRED -                     TYPE_MOBILE_DUN is removed (if present) -                     TYPE_MOBILE is appended (if not already present) -                     TYPE_MOBILE_HIPRI is appended (if not already present) - -                   * DUN_UNSPECIFIED -                     if any of TYPE_MOBILE{,_DUN,_HIPRI} are present: -                         change nothing -                     else: -                         TYPE_MOBILE is appended -                         TYPE_MOBILE_HIPRI is appended +                   * TRUE (DUN REQUIRED). +                     TYPE_MOBILE is removed (if present). +                     TYPE_MOBILE_HIPRI is removed (if present). +                     TYPE_MOBILE_DUN is appended (if not already present). + +                   * FALSE (DUN NOT REQUIRED). +                     TYPE_MOBILE_DUN is removed (if present). +                     If both of TYPE_MOBILE{,_HIPRI} are not present: +                        TYPE_MOBILE is appended. +                        TYPE_MOBILE_HIPRI is appended.           For other changes applied to this list, now and in the future, see           com.android.server.connectivity.tethering.TetheringConfiguration. @@ -659,7 +653,7 @@      <bool translatable="false" name="config_wifi_framework_enable_associated_network_selection">true</bool>      <!-- Boolean indicating whether single radio chain scan results are to be used for network selection --> -    <bool translatable="false" name="config_wifi_framework_use_single_radio_chain_scan_results_network_selection">false</bool> +    <bool translatable="false" name="config_wifi_framework_use_single_radio_chain_scan_results_network_selection">true</bool>      <!-- Boolean indicating that wifi only link configuratios that have exact same credentials (i.e PSK) -->      <bool translatable="false" name="config_wifi_only_link_same_credential_configurations">true</bool> @@ -2754,14 +2748,6 @@      <bool name="config_networkSamplingWakesDevice">true</bool> -    <!-- Home (non-roaming) values for CDMA roaming indicator. -         Carriers can override this table by resource overlay. If not, -         the default values come from 3GPP2 C.R1001 table -         8.1-1. Enhanced Roaming Indicator Number Assignments --> -    <string-array translatable="false" name="config_cdma_home_system"> -        <item>1</item> -    </string-array> -      <!--From SmsMessage-->      <!--Support decoding the user data payload as pack GSM 8-bit (a GSM alphabet          string that's stored in 8-bit unpacked format) characters.--> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 76791fdef758..4689caa73a38 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2482,7 +2482,6 @@    <java-symbol type="attr" name="lightRadius" />    <java-symbol type="attr" name="ambientShadowAlpha" />    <java-symbol type="attr" name="spotShadowAlpha" /> -  <java-symbol type="array" name="config_cdma_home_system" />    <java-symbol type="bool" name="config_sms_decode_gsm_8bit_data" />    <java-symbol type="dimen" name="text_size_small_material" />    <java-symbol type="attr" name="checkMarkGravity" /> @@ -2844,6 +2843,8 @@    <java-symbol type="array" name="resolver_target_actions_pin" />    <java-symbol type="array" name="resolver_target_actions_unpin" /> +  <java-symbol type="array" name="non_removable_euicc_slots" /> +    <java-symbol type="string" name="install_carrier_app_notification_title" />    <java-symbol type="string" name="install_carrier_app_notification_text" />    <java-symbol type="string" name="install_carrier_app_notification_text_app_name" /> diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml index 14e5082bdebb..83edeac00b33 100644 --- a/core/res/res/values/themes_device_defaults.xml +++ b/core/res/res/values/themes_device_defaults.xml @@ -1447,7 +1447,7 @@ easier.          <item name="colorEdgeEffect">@android:color/black</item>          <!-- Add white nav bar with divider that matches material --> -        <item name="navigationBarDividerColor">#1f000000</item> +        <item name="navigationBarDividerColor">@color/navigation_bar_divider_device_default_settings</item>          <item name="navigationBarColor">@android:color/white</item>          <item name="windowLightNavigationBar">true</item> diff --git a/core/tests/coretests/Android.bp b/core/tests/coretests/Android.bp new file mode 100644 index 000000000000..a90948780d9e --- /dev/null +++ b/core/tests/coretests/Android.bp @@ -0,0 +1,110 @@ +android_test { +    name: "FrameworksCoreTests", + +    srcs: [ +        "src/**/*.java", +        "src/**/I*.aidl", +        "DisabledTestApp/src/**/*.java", +        "EnabledTestApp/src/**/*.java", +        "BinderProxyCountingTestApp/src/**/*.java", +        "BinderProxyCountingTestService/src/**/*.java", +        "aidl/**/I*.aidl", +    ], + +    aidl: { +        local_include_dirs: ["aidl"], +    }, + +    dxflags: ["--core-library"], + +    aaptflags: [ +        "-0 .dat", +        "-0 .gld", +        "-c fa", +    ], +    static_libs: [ +        "frameworks-base-testutils", +        "core-tests-support", +        "android-common", +        "frameworks-core-util-lib", +        "mockwebserver", +        "guava", +        "android-support-test", +        "mockito-target-minus-junit4", +        "espresso-core", +        "ub-uiautomator", +        "platform-test-annotations", +        "compatibility-device-util", +        "truth-prebuilt", +        "print-test-util-lib", +    ], + +    libs: [ +        "android.test.runner", +        "telephony-common", +        "org.apache.http.legacy", +        "android.test.base", +        "android.test.mock", +        "framework-atb-backward-compatibility", +    ], + +    platform_apis: true, +    test_suites: ["device-tests"], + +    certificate: "platform", + +    resource_dirs: ["res"], +    resource_zips: [":FrameworksCoreTests_apks_as_resources"], +} + +// Rules to copy all the test apks to the intermediate raw resource directory +java_genrule { +    name: "FrameworksCoreTests_apks_as_resources", +    srcs: [ +        ":FrameworksCoreTests_install", +        ":FrameworksCoreTests_install_bad_dex", +        ":FrameworksCoreTests_install_complete_package_info", +        ":FrameworksCoreTests_install_decl_perm", +        ":FrameworksCoreTests_install_jni_lib_open_from_apk", +        ":FrameworksCoreTests_install_loc_auto", +        ":FrameworksCoreTests_install_loc_internal", +        ":FrameworksCoreTests_install_loc_sdcard", +        ":FrameworksCoreTests_install_loc_unspecified", +        ":FrameworksCoreTests_install_multi_package", +        ":FrameworksCoreTests_install_split_base", +        ":FrameworksCoreTests_install_split_feature_a", +        ":FrameworksCoreTests_install_use_perm_good", +        ":FrameworksCoreTests_install_uses_feature", +        ":FrameworksCoreTests_install_verifier_bad", +        ":FrameworksCoreTests_install_verifier_good", +        ":FrameworksCoreTests_keyset_permdef_sa_unone", +        ":FrameworksCoreTests_keyset_permuse_sa_ua_ub", +        ":FrameworksCoreTests_keyset_permuse_sb_ua_ub", +        ":FrameworksCoreTests_keyset_sab_ua", +        ":FrameworksCoreTests_keyset_sa_ua", +        ":FrameworksCoreTests_keyset_sa_uab", +        ":FrameworksCoreTests_keyset_sa_ua_ub", +        ":FrameworksCoreTests_keyset_sa_ub", +        ":FrameworksCoreTests_keyset_sa_unone", +        ":FrameworksCoreTests_keyset_sau_ub", +        ":FrameworksCoreTests_keyset_sb_ua", +        ":FrameworksCoreTests_keyset_sb_ub", +        ":FrameworksCoreTests_keyset_splata_api", +        ":FrameworksCoreTests_keyset_splat_api", +        ":FrameworksCoreTests_locales", +        ":FrameworksCoreTests_version_1", +        ":FrameworksCoreTests_version_1_diff", +        ":FrameworksCoreTests_version_1_nosys", +        ":FrameworksCoreTests_version_2", +        ":FrameworksCoreTests_version_2_diff", +        ":FrameworksCoreTests_version_3", +    ], +    out: ["FrameworkCoreTests_apks_as_resources.res.zip"], +    tools: ["soong_zip"], + +    cmd: "mkdir -p $(genDir)/res/raw && " + +        "for i in $(in); do " + +        "  x=$${i##*FrameworksCoreTests_}; echo $${x}; cp $$i $(genDir)/res/raw/$${x%.apk};" + +        "done && " + +        "$(location soong_zip) -o $(out) -C $(genDir)/res -D $(genDir)/res", +} diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk deleted file mode 100644 index 3a9d9a3ff64e..000000000000 --- a/core/tests/coretests/Android.mk +++ /dev/null @@ -1,82 +0,0 @@ -ACTUAL_LOCAL_PATH := $(call my-dir) - -# this var will hold all the test apk module names later. -FrameworkCoreTests_all_apks := - -# We have to include the subdir makefiles first -# so that FrameworkCoreTests_all_apks will be populated correctly. -include $(call all-makefiles-under,$(ACTUAL_LOCAL_PATH)) - -LOCAL_PATH := $(ACTUAL_LOCAL_PATH) - -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -# Include all test java files. -LOCAL_SRC_FILES := \ -	$(call all-java-files-under, src) \ -	$(call all-Iaidl-files-under, src) \ -	$(call all-java-files-under, DisabledTestApp/src) \ -	$(call all-java-files-under, EnabledTestApp/src) \ -	$(call all-java-files-under, BinderProxyCountingTestApp/src) \ -	$(call all-java-files-under, BinderProxyCountingTestService/src) \ -	$(call all-Iaidl-files-under, aidl) - -LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/aidl - -LOCAL_DX_FLAGS := --core-library -LOCAL_JACK_FLAGS := --multi-dex native -LOCAL_AAPT_FLAGS = -0 dat -0 gld -c fa -LOCAL_STATIC_JAVA_LIBRARIES := \ -    frameworks-base-testutils \ -    core-tests-support \ -    android-common \ -    frameworks-core-util-lib \ -    mockwebserver \ -    guava \ -    android-support-test \ -    mockito-target-minus-junit4 \ -    espresso-core \ -    ub-uiautomator \ -    platform-test-annotations \ -    compatibility-device-util \ -    truth-prebuilt \ -    print-test-util-lib - -LOCAL_JAVA_LIBRARIES := \ -    android.test.runner \ -    telephony-common \ -    org.apache.http.legacy \ -    android.test.base \ -    android.test.mock \ -    framework-atb-backward-compatibility \ - -LOCAL_PACKAGE_NAME := FrameworksCoreTests -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_COMPATIBILITY_SUITE := device-tests - -LOCAL_CERTIFICATE := platform - -# intermediate dir to include all the test apks as raw resource -FrameworkCoreTests_intermediates := $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME))/test_apks/res -LOCAL_RESOURCE_DIR := $(FrameworkCoreTests_intermediates) $(LOCAL_PATH)/res - -# Disable AAPT2 because the hacks below depend on the AAPT rules implementation -LOCAL_USE_AAPT2 := false - -include $(BUILD_PACKAGE) -# Rules to copy all the test apks to the intermediate raw resource directory -FrameworkCoreTests_all_apks_res := $(addprefix $(FrameworkCoreTests_intermediates)/raw/, \ -    $(foreach a, $(FrameworkCoreTests_all_apks), $(patsubst FrameworkCoreTests_%,%,$(a)))) - -$(FrameworkCoreTests_all_apks_res): $(FrameworkCoreTests_intermediates)/raw/%: $(call intermediates-dir-for,APPS,FrameworkCoreTests_%)/package.apk -	$(call copy-file-to-new-target) - -# Use R_file_stamp as dependency because we want the test apks in place before the R.java is generated. -$(R_file_stamp) : $(FrameworkCoreTests_all_apks_res) - -FrameworkCoreTests_all_apks := -FrameworkCoreTests_intermediates := -FrameworkCoreTests_all_apks_res := diff --git a/core/tests/coretests/BinderProxyCountingTestApp/Android.bp b/core/tests/coretests/BinderProxyCountingTestApp/Android.bp new file mode 100644 index 000000000000..6279a4873c67 --- /dev/null +++ b/core/tests/coretests/BinderProxyCountingTestApp/Android.bp @@ -0,0 +1,25 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//      http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test_helper_app { +    name: "BinderProxyCountingTestApp", + +    static_libs: ["coretests-aidl"], +    srcs: ["**/*.java"], + +    sdk_version: "current", +    certificate: "platform", + +    test_suites: ["device-tests"], +} diff --git a/core/tests/coretests/BinderProxyCountingTestApp/Android.mk b/core/tests/coretests/BinderProxyCountingTestApp/Android.mk deleted file mode 100644 index 4642694d7b67..000000000000 --- a/core/tests/coretests/BinderProxyCountingTestApp/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (C) 2017 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_STATIC_JAVA_LIBRARIES := coretests-aidl -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := BinderProxyCountingTestApp -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -LOCAL_COMPATIBILITY_SUITE := device-tests -include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/BinderProxyCountingTestService/Android.bp b/core/tests/coretests/BinderProxyCountingTestService/Android.bp new file mode 100644 index 000000000000..22718cb86d66 --- /dev/null +++ b/core/tests/coretests/BinderProxyCountingTestService/Android.bp @@ -0,0 +1,25 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//      http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test_helper_app { +    name: "BinderProxyCountingTestService", + +    static_libs: ["coretests-aidl"], +    srcs: ["**/*.java"], + +    platform_apis: true, +    certificate: "platform", + +    test_suites: ["device-tests"], +} diff --git a/core/tests/coretests/BinderProxyCountingTestService/Android.mk b/core/tests/coretests/BinderProxyCountingTestService/Android.mk deleted file mode 100644 index f852c7afeacd..000000000000 --- a/core/tests/coretests/BinderProxyCountingTestService/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (C) 2017 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_STATIC_JAVA_LIBRARIES := coretests-aidl -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := BinderProxyCountingTestService -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform - -LOCAL_COMPATIBILITY_SUITE := device-tests -include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/BstatsTestApp/Android.bp b/core/tests/coretests/BstatsTestApp/Android.bp new file mode 100644 index 000000000000..424c71a4d8d0 --- /dev/null +++ b/core/tests/coretests/BstatsTestApp/Android.bp @@ -0,0 +1,34 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//      http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test_helper_app { +    name: "BstatsTestApp", + +    test_suites: [ +        "device-tests", +    ], + +    static_libs: ["coretests-aidl"], + +    srcs: ["**/*.java"], + +    sdk_version: "current", +    certificate: "platform", +    dex_preopt: { +        enabled: false, +    }, +    optimize: { +        enabled: false, +    }, +} diff --git a/core/tests/coretests/BstatsTestApp/Android.mk b/core/tests/coretests/BstatsTestApp/Android.mk deleted file mode 100644 index a5872a5e5be9..000000000000 --- a/core/tests/coretests/BstatsTestApp/Android.mk +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (C) 2017 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_COMPATIBILITY_SUITE := device-tests - -LOCAL_STATIC_JAVA_LIBRARIES := coretests-aidl - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := BstatsTestApp -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform -LOCAL_DEX_PREOPT := false -LOCAL_PROGUARD_ENABLED := disabled - -LOCAL_COMPATIBILITY_SUITE := device-tests -include $(BUILD_PACKAGE) diff --git a/core/tests/coretests/DisabledTestApp/Android.bp b/core/tests/coretests/DisabledTestApp/Android.bp new file mode 100644 index 000000000000..419816e42eff --- /dev/null +++ b/core/tests/coretests/DisabledTestApp/Android.bp @@ -0,0 +1,8 @@ +android_test_helper_app { +    name: "DisabledTestApp", + +    srcs: ["**/*.java"], + +    sdk_version: "current", +    certificate: "platform", +} diff --git a/core/tests/coretests/DisabledTestApp/Android.mk b/core/tests/coretests/DisabledTestApp/Android.mk deleted file mode 100644 index e4304f7cef73..000000000000 --- a/core/tests/coretests/DisabledTestApp/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := DisabledTestApp -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/EnabledTestApp/Android.bp b/core/tests/coretests/EnabledTestApp/Android.bp new file mode 100644 index 000000000000..bc4f4bd2e4d7 --- /dev/null +++ b/core/tests/coretests/EnabledTestApp/Android.bp @@ -0,0 +1,8 @@ +android_test_helper_app { +    name: "EnabledTestApp", + +    srcs: ["**/*.java"], + +    sdk_version: "current", +    certificate: "platform", +} diff --git a/core/tests/coretests/EnabledTestApp/Android.mk b/core/tests/coretests/EnabledTestApp/Android.mk deleted file mode 100644 index cd37f0883c63..000000000000 --- a/core/tests/coretests/EnabledTestApp/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := EnabledTestApp -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/aidl/Android.bp b/core/tests/coretests/aidl/Android.bp new file mode 100644 index 000000000000..6e442db78500 --- /dev/null +++ b/core/tests/coretests/aidl/Android.bp @@ -0,0 +1,19 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//      http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +java_test { +    name: "coretests-aidl", +    sdk_version: "current", +    srcs: ["**/*.aidl"], +} diff --git a/core/tests/coretests/aidl/Android.mk b/core/tests/coretests/aidl/Android.mk deleted file mode 100644 index 86e36b61a5ae..000000000000 --- a/core/tests/coretests/aidl/Android.mk +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (C) 2017 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_MODULE_TAGS := tests -LOCAL_SDK_VERSION := current -LOCAL_SRC_FILES := $(call all-subdir-Iaidl-files) -LOCAL_MODULE := coretests-aidl -include $(BUILD_STATIC_JAVA_LIBRARY)
\ No newline at end of file diff --git a/core/tests/coretests/apks/Android.bp b/core/tests/coretests/apks/Android.bp new file mode 100644 index 000000000000..20c87b2d2ce9 --- /dev/null +++ b/core/tests/coretests/apks/Android.bp @@ -0,0 +1,7 @@ +java_defaults { +    name: "FrameworksCoreTests_apks_defaults", +    sdk_version: "current", + +    // Every package should have a native library +    jni_libs: ["libframeworks_coretests_jni"], +} diff --git a/core/tests/coretests/apks/Android.mk b/core/tests/coretests/apks/Android.mk deleted file mode 100644 index 98c0c2aee38b..000000000000 --- a/core/tests/coretests/apks/Android.mk +++ /dev/null @@ -1,7 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -FrameworkCoreTests_BUILD_PACKAGE := $(LOCAL_PATH)/FrameworkCoreTests_apk.mk - -# build sub packages -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/core/tests/coretests/apks/FrameworkCoreTests_apk.mk b/core/tests/coretests/apks/FrameworkCoreTests_apk.mk deleted file mode 100644 index 8a7d72a5200b..000000000000 --- a/core/tests/coretests/apks/FrameworkCoreTests_apk.mk +++ /dev/null @@ -1,16 +0,0 @@ - -LOCAL_MODULE_TAGS := tests - -# Disable dexpreopt. -LOCAL_DEX_PREOPT := false - -# Make sure every package name gets the FrameworkCoreTests_ prefix. -LOCAL_PACKAGE_NAME := FrameworkCoreTests_$(LOCAL_PACKAGE_NAME) -LOCAL_SDK_VERSION := current - -# Every package should have a native library -LOCAL_JNI_SHARED_LIBRARIES := libframeworks_coretests_jni - -FrameworkCoreTests_all_apks += $(LOCAL_PACKAGE_NAME) - -include $(BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install-split-base/Android.bp b/core/tests/coretests/apks/install-split-base/Android.bp new file mode 100644 index 000000000000..ddf75b224359 --- /dev/null +++ b/core/tests/coretests/apks/install-split-base/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_split_base", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install-split-base/Android.mk b/core/tests/coretests/apks/install-split-base/Android.mk deleted file mode 100644 index 5b60e3167fc7..000000000000 --- a/core/tests/coretests/apks/install-split-base/Android.mk +++ /dev/null @@ -1,10 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_split_base - -include $(FrameworkCoreTests_BUILD_PACKAGE)
\ No newline at end of file diff --git a/core/tests/coretests/apks/install-split-feature-a/Android.bp b/core/tests/coretests/apks/install-split-feature-a/Android.bp new file mode 100644 index 000000000000..9ec9893cc408 --- /dev/null +++ b/core/tests/coretests/apks/install-split-feature-a/Android.bp @@ -0,0 +1,11 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_split_feature_a", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], + +    aaptflags: [ +        "--custom-package com.google.android.dexapis.splitapp.feature_a", +        "--package-id 0x80", +    ], +} diff --git a/core/tests/coretests/apks/install-split-feature-a/Android.mk b/core/tests/coretests/apks/install-split-feature-a/Android.mk deleted file mode 100644 index 0f37d16a7688..000000000000 --- a/core/tests/coretests/apks/install-split-feature-a/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_split_feature_a - -LOCAL_USE_AAPT2 := true -LOCAL_AAPT_FLAGS += --custom-package com.google.android.dexapis.splitapp.feature_a -LOCAL_AAPT_FLAGS += --package-id 0x80 - -include $(FrameworkCoreTests_BUILD_PACKAGE)
\ No newline at end of file diff --git a/core/tests/coretests/apks/install/Android.bp b/core/tests/coretests/apks/install/Android.bp new file mode 100644 index 000000000000..e783fe2ec2dc --- /dev/null +++ b/core/tests/coretests/apks/install/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install/Android.mk b/core/tests/coretests/apks/install/Android.mk deleted file mode 100644 index b38dc20a181e..000000000000 --- a/core/tests/coretests/apks/install/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_bad_dex/Android.bp b/core/tests/coretests/apks/install_bad_dex/Android.bp new file mode 100644 index 000000000000..d156793cf22a --- /dev/null +++ b/core/tests/coretests/apks/install_bad_dex/Android.bp @@ -0,0 +1,23 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_bad_dex_", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["src/**/*.java"], +} + +// Inject bad classes.dex file. +java_genrule { +    name: "FrameworksCoreTests_install_bad_dex", +    tools: [ +        "soong_zip", +        "merge_zips", +    ], +    srcs: [ +        ":FrameworksCoreTests_install_bad_dex_", +        "classes.dex", +    ], +    out: ["FrameworksCoreTests_install_bad_dex.apk"], +    cmd: "$(location soong_zip) -o $(genDir)/classes.dex.zip -j -f $(location classes.dex) && " + +        "$(location merge_zips) -ignore-duplicates $(out) $(genDir)/classes.dex.zip " + +        "$(location :FrameworksCoreTests_install_bad_dex_)", +} diff --git a/core/tests/coretests/apks/install_bad_dex/Android.mk b/core/tests/coretests/apks/install_bad_dex/Android.mk deleted file mode 100644 index 05983aa6ec7b..000000000000 --- a/core/tests/coretests/apks/install_bad_dex/Android.mk +++ /dev/null @@ -1,11 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_bad_dex - -include $(FrameworkCoreTests_BUILD_PACKAGE) - -# Override target specific variable PRIVATE_DEX_FILE to inject bad classes.dex file. -$(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(LOCAL_PATH)/classes.dex diff --git a/core/tests/coretests/apks/install_complete_package_info/Android.bp b/core/tests/coretests/apks/install_complete_package_info/Android.bp new file mode 100644 index 000000000000..123558bda076 --- /dev/null +++ b/core/tests/coretests/apks/install_complete_package_info/Android.bp @@ -0,0 +1,7 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_complete_package_info", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} + diff --git a/core/tests/coretests/apks/install_complete_package_info/Android.mk b/core/tests/coretests/apks/install_complete_package_info/Android.mk deleted file mode 100644 index 19bf3561a706..000000000000 --- a/core/tests/coretests/apks/install_complete_package_info/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_complete_package_info -#LOCAL_MANIFEST_FILE := api_test/AndroidManifest.xml - -include $(FrameworkCoreTests_BUILD_PACKAGE) -#include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/apks/install_decl_perm/Android.bp b/core/tests/coretests/apks/install_decl_perm/Android.bp new file mode 100644 index 000000000000..868e8b51bd49 --- /dev/null +++ b/core/tests/coretests/apks/install_decl_perm/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_decl_perm", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_decl_perm/Android.mk b/core/tests/coretests/apks/install_decl_perm/Android.mk deleted file mode 100644 index 86370c8017a5..000000000000 --- a/core/tests/coretests/apks/install_decl_perm/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_decl_perm - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_jni_lib/Android.bp b/core/tests/coretests/apks/install_jni_lib/Android.bp index c1a6bd0b3d21..f20f59958736 100644 --- a/core/tests/coretests/apks/install_jni_lib/Android.bp +++ b/core/tests/coretests/apks/install_jni_lib/Android.bp @@ -14,6 +14,7 @@  cc_test_library {      name: "libframeworks_coretests_jni", +    defaults: ["FrameworksCoreTests_apks_defaults"],      srcs: ["com_android_frameworks_coretests_JNITest.cpp"], diff --git a/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.bp b/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.bp new file mode 100644 index 000000000000..602b704a0a5d --- /dev/null +++ b/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_jni_lib_open_from_apk", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk b/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk deleted file mode 100644 index 6b3b55ed39e9..000000000000 --- a/core/tests/coretests/apks/install_jni_lib_open_from_apk/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_jni_lib_open_from_apk - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_loc_auto/Android.bp b/core/tests/coretests/apks/install_loc_auto/Android.bp new file mode 100644 index 000000000000..6393915ba283 --- /dev/null +++ b/core/tests/coretests/apks/install_loc_auto/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_loc_auto", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_auto/Android.mk b/core/tests/coretests/apks/install_loc_auto/Android.mk deleted file mode 100644 index 6435f3624a15..000000000000 --- a/core/tests/coretests/apks/install_loc_auto/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_loc_auto - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_loc_internal/Android.bp b/core/tests/coretests/apks/install_loc_internal/Android.bp new file mode 100644 index 000000000000..770aaa511b9d --- /dev/null +++ b/core/tests/coretests/apks/install_loc_internal/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_loc_internal", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_internal/Android.mk b/core/tests/coretests/apks/install_loc_internal/Android.mk deleted file mode 100644 index 8cc8b8e0e778..000000000000 --- a/core/tests/coretests/apks/install_loc_internal/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_loc_internal - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_loc_sdcard/Android.bp b/core/tests/coretests/apks/install_loc_sdcard/Android.bp new file mode 100644 index 000000000000..177940102e83 --- /dev/null +++ b/core/tests/coretests/apks/install_loc_sdcard/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_loc_sdcard", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_sdcard/Android.mk b/core/tests/coretests/apks/install_loc_sdcard/Android.mk deleted file mode 100644 index e1411c2276a5..000000000000 --- a/core/tests/coretests/apks/install_loc_sdcard/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_loc_sdcard - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_loc_unspecified/Android.bp b/core/tests/coretests/apks/install_loc_unspecified/Android.bp new file mode 100644 index 000000000000..21c0f82b44ff --- /dev/null +++ b/core/tests/coretests/apks/install_loc_unspecified/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_loc_unspecified", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_loc_unspecified/Android.mk b/core/tests/coretests/apks/install_loc_unspecified/Android.mk deleted file mode 100644 index 0741d04b61d5..000000000000 --- a/core/tests/coretests/apks/install_loc_unspecified/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_loc_unspecified - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_multi_package/Android.bp b/core/tests/coretests/apks/install_multi_package/Android.bp new file mode 100644 index 000000000000..249242e239e4 --- /dev/null +++ b/core/tests/coretests/apks/install_multi_package/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_multi_package", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_multi_package/Android.mk b/core/tests/coretests/apks/install_multi_package/Android.mk deleted file mode 100644 index 3f163def9ce0..000000000000 --- a/core/tests/coretests/apks/install_multi_package/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_multi_package - -LOCAL_USE_AAPT2 := true - -include $(FrameworkCoreTests_BUILD_PACKAGE) -#include $(BUILD_PACKAGE) - diff --git a/core/tests/coretests/apks/install_use_perm_good/Android.bp b/core/tests/coretests/apks/install_use_perm_good/Android.bp new file mode 100644 index 000000000000..bb41ebb2fdca --- /dev/null +++ b/core/tests/coretests/apks/install_use_perm_good/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_use_perm_good", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_use_perm_good/Android.mk b/core/tests/coretests/apks/install_use_perm_good/Android.mk deleted file mode 100644 index e2661a13793a..000000000000 --- a/core/tests/coretests/apks/install_use_perm_good/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_use_perm_good - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_uses_feature/Android.bp b/core/tests/coretests/apks/install_uses_feature/Android.bp new file mode 100644 index 000000000000..0ec747b0f151 --- /dev/null +++ b/core/tests/coretests/apks/install_uses_feature/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_uses_feature", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_uses_feature/Android.mk b/core/tests/coretests/apks/install_uses_feature/Android.mk deleted file mode 100644 index b60d734fe635..000000000000 --- a/core/tests/coretests/apks/install_uses_feature/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_uses_feature - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_verifier_bad/Android.bp b/core/tests/coretests/apks/install_verifier_bad/Android.bp new file mode 100644 index 000000000000..1265739a3107 --- /dev/null +++ b/core/tests/coretests/apks/install_verifier_bad/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_verifier_bad", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_verifier_bad/Android.mk b/core/tests/coretests/apks/install_verifier_bad/Android.mk deleted file mode 100644 index 745b4d32ccc4..000000000000 --- a/core/tests/coretests/apks/install_verifier_bad/Android.mk +++ /dev/null @@ -1,10 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_verifier_bad - -LOCAL_USE_AAPT2 := true - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/install_verifier_good/Android.bp b/core/tests/coretests/apks/install_verifier_good/Android.bp new file mode 100644 index 000000000000..4911ffbd2020 --- /dev/null +++ b/core/tests/coretests/apks/install_verifier_good/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_install_verifier_good", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/install_verifier_good/Android.mk b/core/tests/coretests/apks/install_verifier_good/Android.mk deleted file mode 100644 index 150fd8dd8701..000000000000 --- a/core/tests/coretests/apks/install_verifier_good/Android.mk +++ /dev/null @@ -1,10 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := install_verifier_good - -LOCAL_USE_AAPT2 := true - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/keyset/Android.bp b/core/tests/coretests/apks/keyset/Android.bp new file mode 100644 index 000000000000..e252b081341a --- /dev/null +++ b/core/tests/coretests/apks/keyset/Android.bp @@ -0,0 +1,120 @@ +//apks signed by keyset_A +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_sa_unone", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_A_cert", +    manifest: "uNone/AndroidManifest.xml", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_sa_ua", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_A_cert", +    manifest: "uA/AndroidManifest.xml", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_sa_ub", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_A_cert", +    manifest: "uB/AndroidManifest.xml", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_sa_uab", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_A_cert", +    manifest: "uAB/AndroidManifest.xml", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_sa_ua_ub", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_A_cert", +    manifest: "uAuB/AndroidManifest.xml", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_permdef_sa_unone", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_A_cert", +    manifest: "permDef/AndroidManifest.xml", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_permuse_sa_ua_ub", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_A_cert", +    manifest: "permUse/AndroidManifest.xml", +} + +//apks signed by keyset_B +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_sb_ua", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_B_cert", +    manifest: "uA/AndroidManifest.xml", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_sb_ub", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_B_cert", +    manifest: "uB/AndroidManifest.xml", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_permuse_sb_ua_ub", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_B_cert", +    manifest: "permUse/AndroidManifest.xml", +} + +//apks signed by keyset_A and keyset_B +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_sab_ua", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_A_cert", +    additional_certificates: [":FrameworksCoreTests_keyset_B_cert"], +    manifest: "uA/AndroidManifest.xml", +} + +//apks signed by keyset_A and unit_test +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_sau_ub", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: ":FrameworksCoreTests_keyset_A_cert", +    additional_certificates: [":FrameworksCoreTests_keyset_B_cert"], +    manifest: "uB/AndroidManifest.xml", +} + +//apks signed by platform only +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_splat_api", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: "platform", +    manifest: "api_test/AndroidManifest.xml", +} + +//apks signed by platform and keyset_A +android_test_helper_app { +    name: "FrameworksCoreTests_keyset_splata_api", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    certificate: "platform", +    additional_certificates: [":FrameworksCoreTests_keyset_A_cert"], +    manifest: "api_test/AndroidManifest.xml", +} diff --git a/core/tests/coretests/apks/keyset/Android.mk b/core/tests/coretests/apks/keyset/Android.mk deleted file mode 100644 index 306dc90118f7..000000000000 --- a/core/tests/coretests/apks/keyset/Android.mk +++ /dev/null @@ -1,108 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -#apks signed by keyset_A -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_unone -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uNone/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_ua -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uA/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_uab -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uAB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sa_ua_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := uAuB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_permdef_sa_unone -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := permDef/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_permuse_sa_ua_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := permUse/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by keyset_B -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sb_ua -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := uA/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sb_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := uB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_permuse_sb_ua_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := permUse/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by keyset_A and keyset_B -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sab_ua -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_ADDITIONAL_CERTIFICATES := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := uA/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by keyset_A and unit_test -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_sau_ub -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_ADDITIONAL_CERTIFICATES := $(LOCAL_PATH)/../../certs/keyset_B -LOCAL_MANIFEST_FILE := uB/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by platform only -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_splat_api -LOCAL_CERTIFICATE := platform -LOCAL_MANIFEST_FILE := api_test/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE) - -#apks signed by platform and keyset_A -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := keyset_splata_api -LOCAL_CERTIFICATE := platform -LOCAL_ADDITIONAL_CERTIFICATES := $(LOCAL_PATH)/../../certs/keyset_A -LOCAL_MANIFEST_FILE := api_test/AndroidManifest.xml -include $(FrameworkCoreTests_BUILD_PACKAGE)
\ No newline at end of file diff --git a/core/tests/coretests/apks/locales/Android.bp b/core/tests/coretests/apks/locales/Android.bp new file mode 100644 index 000000000000..4a730ef53404 --- /dev/null +++ b/core/tests/coretests/apks/locales/Android.bp @@ -0,0 +1,6 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_locales", +    defaults: ["FrameworksCoreTests_apks_defaults"], + +    srcs: ["**/*.java"], +} diff --git a/core/tests/coretests/apks/locales/Android.mk b/core/tests/coretests/apks/locales/Android.mk deleted file mode 100644 index 9cb13dd4cd0e..000000000000 --- a/core/tests/coretests/apks/locales/Android.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := locales - -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/version/Android.bp b/core/tests/coretests/apks/version/Android.bp new file mode 100644 index 000000000000..371ccfc301cb --- /dev/null +++ b/core/tests/coretests/apks/version/Android.bp @@ -0,0 +1,54 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_version_1", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    aaptflags: [ +        "--version-code 1", +        "--version-name 1.0", +    ], +    certificate: ":FrameworksCoreTests_unit_test_cert", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_version_2", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    aaptflags: [ +        "--version-code 2", +        "--version-name 2.0", +    ], +    certificate: ":FrameworksCoreTests_unit_test_cert", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_version_3", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    aaptflags: [ +        "--version-code 3", +        "--version-name 3.0", +    ], +    certificate: ":FrameworksCoreTests_unit_test_cert", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_version_1_diff", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    aaptflags: [ +        "--version-code 1", +        "--version-name 1.0", +    ], +    certificate: ":FrameworksCoreTests_unit_test_cert", +} + +android_test_helper_app { +    name: "FrameworksCoreTests_version_2_diff", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    aaptflags: [ +        "--version-code 2", +        "--version-name 2.0", +    ], +    certificate: ":FrameworksCoreTests_unit_test_cert", +} diff --git a/core/tests/coretests/apks/version/Android.mk b/core/tests/coretests/apks/version/Android.mk deleted file mode 100644 index 3635a581dee5..000000000000 --- a/core/tests/coretests/apks/version/Android.mk +++ /dev/null @@ -1,36 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_1 -LOCAL_AAPT_FLAGS := --version-code 1 --version-name 1.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_2 -LOCAL_AAPT_FLAGS := --version-code 2 --version-name 2.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_3 -LOCAL_AAPT_FLAGS := --version-code 3 --version-name 3.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_1_diff -LOCAL_AAPT_FLAGS := --version-code 1 --version-name 1.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test_diff -include $(FrameworkCoreTests_BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_2_diff -LOCAL_AAPT_FLAGS := --version-code 2 --version-name 2.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test_diff -include $(FrameworkCoreTests_BUILD_PACKAGE) diff --git a/core/tests/coretests/apks/version_nosys/Android.bp b/core/tests/coretests/apks/version_nosys/Android.bp new file mode 100644 index 000000000000..575667822393 --- /dev/null +++ b/core/tests/coretests/apks/version_nosys/Android.bp @@ -0,0 +1,10 @@ +android_test_helper_app { +    name: "FrameworksCoreTests_version_1_nosys", +    defaults: ["FrameworksCoreTests_apks_defaults"], +    srcs: ["**/*.java"], +    aaptflags: [ +        "--version-code 1", +        "--version-name 1.0", +    ], +    certificate: ":FrameworksCoreTests_unit_test_cert", +} diff --git a/core/tests/coretests/apks/version_nosys/Android.mk b/core/tests/coretests/apks/version_nosys/Android.mk deleted file mode 100644 index bbc8e12afe8d..000000000000 --- a/core/tests/coretests/apks/version_nosys/Android.mk +++ /dev/null @@ -1,9 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := version_1_nosys -LOCAL_AAPT_FLAGS := --version-code 1 --version-name 1.0 -LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test -include $(FrameworkCoreTests_BUILD_PACKAGE) - diff --git a/core/tests/coretests/certs/Android.bp b/core/tests/coretests/certs/Android.bp new file mode 100644 index 000000000000..bd5c8293f6f6 --- /dev/null +++ b/core/tests/coretests/certs/Android.bp @@ -0,0 +1,14 @@ +android_app_certificate { +    name: "FrameworksCoreTests_keyset_A_cert", +    certificate: "keyset_A", +} + +android_app_certificate { +    name: "FrameworksCoreTests_keyset_B_cert", +    certificate: "keyset_B", +} + +android_app_certificate { +    name: "FrameworksCoreTests_unit_test_cert", +    certificate: "unit_test", +} diff --git a/core/tests/coretests/src/android/app/timezone/RulesStateTest.java b/core/tests/coretests/src/android/app/timezone/RulesStateTest.java index dd462403ed82..e22cb8919594 100644 --- a/core/tests/coretests/src/android/app/timezone/RulesStateTest.java +++ b/core/tests/coretests/src/android/app/timezone/RulesStateTest.java @@ -16,8 +16,6 @@  package android.app.timezone; -import static junit.framework.Assert.fail; -  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; @@ -47,11 +45,11 @@ public class RulesStateTest {                  RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 2));          assertEqualsContract(one, two); -        RulesState differentSystemRules = new RulesState( +        RulesState differentBaseRules = new RulesState(                  "2016b", formatVersion(1, 2), false /* operationInProgress */,                  RulesState.STAGED_OPERATION_INSTALL, rulesVersion("2016a", 3),                  RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 2)); -        assertFalse(one.equals(differentSystemRules)); +        assertFalse(one.equals(differentBaseRules));          RulesState differentFormatVersion = new RulesState(                  "2016a", formatVersion(1, 1), false /* operationInProgress */, @@ -122,14 +120,14 @@ public class RulesStateTest {      }      @Test -    public void isSystemVersionNewerThan() { +    public void isBaseVersionNewerThan() {          RulesState rulesState = new RulesState(                  "2016b", formatVersion(1, 1), false /* operationInProgress */,                  RulesState.STAGED_OPERATION_NONE, null /* stagedDistroRulesVersion */,                  RulesState.DISTRO_STATUS_INSTALLED, rulesVersion("2016b", 3)); -        assertTrue(rulesState.isSystemVersionNewerThan(rulesVersion("2016a", 1))); -        assertFalse(rulesState.isSystemVersionNewerThan(rulesVersion("2016b", 1))); -        assertFalse(rulesState.isSystemVersionNewerThan(rulesVersion("2016c", 1))); +        assertTrue(rulesState.isBaseVersionNewerThan(rulesVersion("2016a", 1))); +        assertFalse(rulesState.isBaseVersionNewerThan(rulesVersion("2016b", 1))); +        assertFalse(rulesState.isBaseVersionNewerThan(rulesVersion("2016c", 1)));      }      private static void assertEqualsContract(RulesState one, RulesState two) { diff --git a/core/tests/utillib/Android.bp b/core/tests/utillib/Android.bp new file mode 100644 index 000000000000..1f742c208ba2 --- /dev/null +++ b/core/tests/utillib/Android.bp @@ -0,0 +1,22 @@ +// Copyright (C) 2010 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: "frameworks-core-util-lib", + +    srcs: ["**/*.java"], + +    static_libs: ["junit"], +    libs: ["android.test.base"], +} diff --git a/core/tests/utillib/Android.mk b/core/tests/utillib/Android.mk deleted file mode 100644 index be1ab1f73d9f..000000000000 --- a/core/tests/utillib/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (C) 2010 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_MODULE := frameworks-core-util-lib -LOCAL_STATIC_JAVA_LIBRARIES := junit -LOCAL_JAVA_LIBRARIES := android.test.base - -include $(BUILD_STATIC_JAVA_LIBRARY) - -# Build the test APKs using their own makefiles -include $(call all-makefiles-under,$(LOCAL_PATH)) - diff --git a/core/xsd/Android.bp b/core/xsd/Android.bp new file mode 100644 index 000000000000..81669eb290db --- /dev/null +++ b/core/xsd/Android.bp @@ -0,0 +1,6 @@ +xsd_config { +    name: "permission", +    srcs: ["permission.xsd"], +    api_dir: "schema", +    package_name: "com.android.xml.permission", +} diff --git a/core/xsd/permission.xsd b/core/xsd/permission.xsd new file mode 100644 index 000000000000..d90863b2c716 --- /dev/null +++ b/core/xsd/permission.xsd @@ -0,0 +1,166 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2019 The Android Open Source Project + +         Licensed under the Apache License, Version 2.0 (the "License"); +         you may not use this file except in compliance with the License. +         You may obtain a copy of the License at + +                    http://www.apache.org/licenses/LICENSE-2.0 + +         Unless required by applicable law or agreed to in writing, software +         distributed under the License is distributed on an "AS IS" BASIS, +         WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +         See the License for the specific language governing permissions and +         limitations under the License. +--> +<!-- TODO: define a targetNamespace. Note that it will break retrocompatibility --> +<xs:schema version="2.0" +           elementFormDefault="qualified" +           attributeFormDefault="unqualified" +           xmlns:xs="http://www.w3.org/2001/XMLSchema"> +    <xs:element name="permissions"> +        <xs:complexType> +            <xs:sequence> +                <xs:element name="group" type="group" maxOccurs="unbounded"/> +                <xs:element name="permission" type="permission" maxOccurs="unbounded"/> +                <xs:element name="assign-permission" type="assign-permission" maxOccurs="unbounded"/> +                <xs:element name="split-permission" type="split-permission" maxOccurs="unbounded"/> +                <xs:element name="library" type="library" maxOccurs="unbounded"/> +                <xs:element name="feature" type="feature" maxOccurs="unbounded"/> +                <xs:element name="unavailable-feature" type="unavailable-feature" maxOccurs="unbounded"/> +                <xs:element name="allow-in-power-save-except-idle" type="allow-in-power-save-except-idle" maxOccurs="unbounded"/> +                <xs:element name="allow-in-power-save" type="allow-in-power-save" maxOccurs="unbounded"/> +                <xs:element name="allow-in-data-usage-save" type="allow-in-data-usage-save" maxOccurs="unbounded"/> +                <xs:element name="allow-unthrottled-location" type="allow-unthrottled-location" maxOccurs="unbounded"/> +                <xs:element name="allow-ignore-location-settings" type="allow-ignore-location-settings" maxOccurs="unbounded"/> +                <xs:element name="allow-implicit-broadcast" type="allow-implicit-broadcast" maxOccurs="unbounded"/> +                <xs:element name="app-link" type="app-link" maxOccurs="unbounded"/> +                <xs:element name="system-user-whitelisted-app" type="system-user-whitelisted-app" maxOccurs="unbounded"/> +                <xs:element name="system-user-blacklisted-app" type="system-user-blacklisted-app" maxOccurs="unbounded"/> +                <xs:element name="default-enabled-vr-app" type="default-enabled-vr-app" maxOccurs="unbounded"/> +                <xs:element name="backup-transport-whitelisted-service" type="backup-transport-whitelisted-service" maxOccurs="unbounded"/> +                <xs:element name="disabled-until-used-preinstalled-carrier-associated-app" type="disabled-until-used-preinstalled-carrier-associated-app" maxOccurs="unbounded"/> +                <xs:element name="disabled-until-used-preinstalled-carrier-app" type="disabled-until-used-preinstalled-carrier-app" maxOccurs="unbounded"/> +                <xs:element name="privapp-permissions" type="privapp-permissions" maxOccurs="unbounded"/> +                <xs:element name="oem-permissions" type="oem-permissions" maxOccurs="unbounded"/> +                <xs:element name="hidden-api-whitelisted-app" type="hidden-api-whitelisted-app" maxOccurs="unbounded"/> +                <xs:element name="allow-association" type="allow-association" maxOccurs="unbounded"/> +                <xs:element name="bugreport-whitelisted" type="bugreport-whitelisted" maxOccurs="unbounded"/> +            </xs:sequence> +        </xs:complexType> +    </xs:element> +    <xs:complexType name="group"> +        <xs:attribute name="gid" type="xs:int"/> +    </xs:complexType> +    <xs:complexType name="permission"> +        <xs:attribute name="name" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="assign-permission"> +        <xs:attribute name="name" type="xs:string"/> +        <xs:attribute name="uid" type="xs:int"/> +    </xs:complexType> +    <xs:complexType name="split-permission"> +        <xs:attribute name="name" type="xs:string"/> +        <xs:attribute name="targetSdk" type="xs:int"/> +        <xs:sequence> +            <xs:element name="library" maxOccurs="unbounded"> +                <xs:complexType> +                    <xs:attribute name="name" type="xs:string"/> +                </xs:complexType> +            </xs:element> +        </xs:sequence> +    </xs:complexType> +    <xs:complexType name="library"> +        <xs:attribute name="name" type="xs:string"/> +        <xs:attribute name="file" type="xs:string"/> +        <xs:attribute name="dependency" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="feature"> +        <xs:attribute name="name" type="xs:string"/> +        <xs:attribute name="notLowRam" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="unavailable-feature"> +        <xs:attribute name="name" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="allow-in-power-save-except-idle"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="allow-in-power-save"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="allow-in-data-usage-save"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="allow-unthrottled-location"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="allow-ignore-location-settings"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="allow-implicit-broadcast"> +        <xs:attribute name="action" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="app-link"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="system-user-whitelisted-app"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="system-user-blacklisted-app"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="default-enabled-vr-app"> +        <xs:attribute name="package" type="xs:string"/> +        <xs:attribute name="class" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="backup-transport-whitelisted-service"> +        <xs:attribute name="service" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="disabled-until-used-preinstalled-carrier-associated-app"> +        <xs:attribute name="package" type="xs:string"/> +        <xs:attribute name="carrierAppPackage" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="disabled-until-used-preinstalled-carrier-app"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="privapp-permissions"> +        <xs:attribute name="package" type="xs:string"/> +        <xs:sequence> +            <xs:element name="permission" maxOccurs="unbounded"> +                <xs:complexType> +                    <xs:attribute name="name" type="xs:string"/> +                </xs:complexType> +            </xs:element> +            <xs:element name="deny-permission" maxOccurs="unbounded"> +                <xs:complexType> +                    <xs:attribute name="name" type="xs:string"/> +                </xs:complexType> +            </xs:element> +        </xs:sequence> +    </xs:complexType> +    <xs:complexType name="oem-permissions"> +        <xs:attribute name="package" type="xs:string"/> +        <xs:sequence> +            <xs:element name="permission" maxOccurs="unbounded"> +                <xs:complexType> +                    <xs:attribute name="name" type="xs:string"/> +                </xs:complexType> +            </xs:element> +            <xs:element name="deny-permission" maxOccurs="unbounded"> +                <xs:complexType> +                    <xs:attribute name="name" type="xs:string"/> +                </xs:complexType> +            </xs:element> +        </xs:sequence> +    </xs:complexType> +    <xs:complexType name="hidden-api-whitelisted-app"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="allow-association"> +        <xs:attribute name="target" type="xs:string"/> +        <xs:attribute name="allowed" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="bugreport-whitelisted"> +        <xs:attribute name="package" type="xs:string"/> +    </xs:complexType> +</xs:schema> diff --git a/core/xsd/schema/README.md b/core/xsd/schema/README.md new file mode 100644 index 000000000000..f52d93d2b65a --- /dev/null +++ b/core/xsd/schema/README.md @@ -0,0 +1 @@ +Please see the [README](https://android.googlesource.com/platform/system/tools/xsdc/+/refs/heads/master/README.md) for details regarding the Configfile as API. diff --git a/core/xsd/schema/current.txt b/core/xsd/schema/current.txt new file mode 100644 index 000000000000..82bb0feac089 --- /dev/null +++ b/core/xsd/schema/current.txt @@ -0,0 +1,242 @@ +// Signature format: 2.0 +package com.android.xml.permission { + +  public class AllowAssociation { +    ctor public AllowAssociation(); +    method public String getAllowed(); +    method public String getTarget(); +    method public void setAllowed(String); +    method public void setTarget(String); +  } + +  public class AllowIgnoreLocationSettings { +    ctor public AllowIgnoreLocationSettings(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class AllowImplicitBroadcast { +    ctor public AllowImplicitBroadcast(); +    method public String getAction(); +    method public void setAction(String); +  } + +  public class AllowInDataUsageSave { +    ctor public AllowInDataUsageSave(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class AllowInPowerSave { +    ctor public AllowInPowerSave(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class AllowInPowerSaveExceptIdle { +    ctor public AllowInPowerSaveExceptIdle(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class AllowUnthrottledLocation { +    ctor public AllowUnthrottledLocation(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class AppLink { +    ctor public AppLink(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class AssignPermission { +    ctor public AssignPermission(); +    method public String getName(); +    method public int getUid(); +    method public void setName(String); +    method public void setUid(int); +  } + +  public class BackupTransportWhitelistedService { +    ctor public BackupTransportWhitelistedService(); +    method public String getService(); +    method public void setService(String); +  } + +  public class BugreportWhitelisted { +    ctor public BugreportWhitelisted(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class DefaultEnabledVrApp { +    ctor public DefaultEnabledVrApp(); +    method public String get_class(); +    method public String get_package(); +    method public void set_class(String); +    method public void set_package(String); +  } + +  public class DisabledUntilUsedPreinstalledCarrierApp { +    ctor public DisabledUntilUsedPreinstalledCarrierApp(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class DisabledUntilUsedPreinstalledCarrierAssociatedApp { +    ctor public DisabledUntilUsedPreinstalledCarrierAssociatedApp(); +    method public String getCarrierAppPackage(); +    method public String get_package(); +    method public void setCarrierAppPackage(String); +    method public void set_package(String); +  } + +  public class Feature { +    ctor public Feature(); +    method public String getName(); +    method public String getNotLowRam(); +    method public void setName(String); +    method public void setNotLowRam(String); +  } + +  public class Group { +    ctor public Group(); +    method public int getGid(); +    method public void setGid(int); +  } + +  public class HiddenApiWhitelistedApp { +    ctor public HiddenApiWhitelistedApp(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class Library { +    ctor public Library(); +    method public String getDependency(); +    method public String getFile(); +    method public String getName(); +    method public void setDependency(String); +    method public void setFile(String); +    method public void setName(String); +  } + +  public class OemPermissions { +    ctor public OemPermissions(); +    method public java.util.List<com.android.xml.permission.OemPermissions.DenyPermission> getDenyPermission(); +    method public java.util.List<com.android.xml.permission.OemPermissions.Permission> getPermission(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public static class OemPermissions.DenyPermission { +    ctor public OemPermissions.DenyPermission(); +    method public String getName(); +    method public void setName(String); +  } + +  public static class OemPermissions.Permission { +    ctor public OemPermissions.Permission(); +    method public String getName(); +    method public void setName(String); +  } + +  public class Permission { +    ctor public Permission(); +    method public String getName(); +    method public void setName(String); +  } + +  public class Permissions { +    ctor public Permissions(); +    method public java.util.List<com.android.xml.permission.AllowAssociation> getAllowAssociation(); +    method public java.util.List<com.android.xml.permission.AllowIgnoreLocationSettings> getAllowIgnoreLocationSettings(); +    method public java.util.List<com.android.xml.permission.AllowImplicitBroadcast> getAllowImplicitBroadcast(); +    method public java.util.List<com.android.xml.permission.AllowInDataUsageSave> getAllowInDataUsageSave(); +    method public java.util.List<com.android.xml.permission.AllowInPowerSave> getAllowInPowerSave(); +    method public java.util.List<com.android.xml.permission.AllowInPowerSaveExceptIdle> getAllowInPowerSaveExceptIdle(); +    method public java.util.List<com.android.xml.permission.AllowUnthrottledLocation> getAllowUnthrottledLocation(); +    method public java.util.List<com.android.xml.permission.AppLink> getAppLink(); +    method public java.util.List<com.android.xml.permission.AssignPermission> getAssignPermission(); +    method public java.util.List<com.android.xml.permission.BackupTransportWhitelistedService> getBackupTransportWhitelistedService(); +    method public java.util.List<com.android.xml.permission.BugreportWhitelisted> getBugreportWhitelisted(); +    method public java.util.List<com.android.xml.permission.DefaultEnabledVrApp> getDefaultEnabledVrApp(); +    method public java.util.List<com.android.xml.permission.DisabledUntilUsedPreinstalledCarrierApp> getDisabledUntilUsedPreinstalledCarrierApp(); +    method public java.util.List<com.android.xml.permission.DisabledUntilUsedPreinstalledCarrierAssociatedApp> getDisabledUntilUsedPreinstalledCarrierAssociatedApp(); +    method public java.util.List<com.android.xml.permission.Feature> getFeature(); +    method public java.util.List<com.android.xml.permission.Group> getGroup(); +    method public java.util.List<com.android.xml.permission.HiddenApiWhitelistedApp> getHiddenApiWhitelistedApp(); +    method public java.util.List<com.android.xml.permission.Library> getLibrary(); +    method public java.util.List<com.android.xml.permission.OemPermissions> getOemPermissions(); +    method public java.util.List<com.android.xml.permission.Permission> getPermission(); +    method public java.util.List<com.android.xml.permission.PrivappPermissions> getPrivappPermissions(); +    method public java.util.List<com.android.xml.permission.SplitPermission> getSplitPermission(); +    method public java.util.List<com.android.xml.permission.SystemUserBlacklistedApp> getSystemUserBlacklistedApp(); +    method public java.util.List<com.android.xml.permission.SystemUserWhitelistedApp> getSystemUserWhitelistedApp(); +    method public java.util.List<com.android.xml.permission.UnavailableFeature> getUnavailableFeature(); +  } + +  public class PrivappPermissions { +    ctor public PrivappPermissions(); +    method public java.util.List<com.android.xml.permission.PrivappPermissions.DenyPermission> getDenyPermission(); +    method public java.util.List<com.android.xml.permission.PrivappPermissions.Permission> getPermission(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public static class PrivappPermissions.DenyPermission { +    ctor public PrivappPermissions.DenyPermission(); +    method public String getName(); +    method public void setName(String); +  } + +  public static class PrivappPermissions.Permission { +    ctor public PrivappPermissions.Permission(); +    method public String getName(); +    method public void setName(String); +  } + +  public class SplitPermission { +    ctor public SplitPermission(); +    method public java.util.List<com.android.xml.permission.SplitPermission.Library> getLibrary(); +    method public String getName(); +    method public int getTargetSdk(); +    method public void setName(String); +    method public void setTargetSdk(int); +  } + +  public static class SplitPermission.Library { +    ctor public SplitPermission.Library(); +    method public String getName(); +    method public void setName(String); +  } + +  public class SystemUserBlacklistedApp { +    ctor public SystemUserBlacklistedApp(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class SystemUserWhitelistedApp { +    ctor public SystemUserWhitelistedApp(); +    method public String get_package(); +    method public void set_package(String); +  } + +  public class UnavailableFeature { +    ctor public UnavailableFeature(); +    method public String getName(); +    method public void setName(String); +  } + +  public class XmlParser { +    ctor public XmlParser(); +    method public static com.android.xml.permission.Permissions read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException; +    method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; +    method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; +  } + +} + diff --git a/core/xsd/schema/last_current.txt b/core/xsd/schema/last_current.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/core/xsd/schema/last_current.txt diff --git a/core/xsd/schema/last_removed.txt b/core/xsd/schema/last_removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/core/xsd/schema/last_removed.txt diff --git a/core/xsd/schema/removed.txt b/core/xsd/schema/removed.txt new file mode 100644 index 000000000000..d802177e249b --- /dev/null +++ b/core/xsd/schema/removed.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index d6131cf2e5d4..507f767ae3e6 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -814,7 +814,7 @@ public final class Bitmap implements Parcelable {       * @return A bitmap that represents the specified subset of source       * @throws IllegalArgumentException if the x, y, width, height values are       *         outside of the dimensions of the source bitmap, or width is <= 0, -     *         or height is <= 0 +     *         or height is <= 0, or if the source bitmap has already been recycled       */      public static Bitmap createBitmap(@NonNull Bitmap source, int x, int y, int width, int height,              @Nullable Matrix m, boolean filter) { @@ -827,6 +827,9 @@ public final class Bitmap implements Parcelable {          if (y + height > source.getHeight()) {              throw new IllegalArgumentException("y + height must be <= bitmap.height()");          } +        if (source.isRecycled()) { +            throw new IllegalArgumentException("cannot use a recycled source in createBitmap"); +        }          // check if we can just return our argument unchanged          if (!source.isMutable() && x == 0 && y == 0 && width == source.getWidth() && diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java index d34d461e8a87..2a286afd7b63 100644 --- a/graphics/java/android/graphics/drawable/GradientDrawable.java +++ b/graphics/java/android/graphics/drawable/GradientDrawable.java @@ -579,9 +579,9 @@ public class GradientDrawable extends Drawable {       * The default value for this property is {@code false}.       * <p>       * <strong>Note</strong>: This property corresponds to the -     * {@code android:useLevel} attribute on the inner {@code <gradient>} +     * {@code android:useLevel} attribute on the inner {@code <gradient>}       * tag, NOT the {@code android:useLevel} attribute on the outer -     * {@code <shape>} tag. For example, +     * {@code <shape>} tag. For example,       * <pre>{@code       * <shape ...>       *     <gradient diff --git a/location/java/com/android/internal/location/ILocationProvider.aidl b/location/java/com/android/internal/location/ILocationProvider.aidl index 39c2d92bf278..1820bb7d711f 100644 --- a/location/java/com/android/internal/location/ILocationProvider.aidl +++ b/location/java/com/android/internal/location/ILocationProvider.aidl @@ -31,14 +31,21 @@ import com.android.internal.location.ProviderRequest;   * @hide   */  interface ILocationProvider { +    @UnsupportedAppUsage      void enable(); +    @UnsupportedAppUsage      void disable(); +    @UnsupportedAppUsage      void setRequest(in ProviderRequest request, in WorkSource ws);      // --- deprecated (but still supported) --- +    @UnsupportedAppUsage      ProviderProperties getProperties(); +    @UnsupportedAppUsage      int getStatus(out Bundle extras); +    @UnsupportedAppUsage      long getStatusUpdateTime(); +    @UnsupportedAppUsage      boolean sendExtraCommand(String command, inout Bundle extras);  } diff --git a/media/java/android/media/MediaHTTPConnection.java b/media/java/android/media/MediaHTTPConnection.java index 5f324f7f97ed..d72476269e18 100644 --- a/media/java/android/media/MediaHTTPConnection.java +++ b/media/java/android/media/MediaHTTPConnection.java @@ -37,7 +37,6 @@ import java.net.URL;  import java.net.UnknownServiceException;  import java.util.HashMap;  import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean;  /** @hide */  public class MediaHTTPConnection extends IMediaHTTPConnection.Stub { @@ -67,7 +66,6 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {      // from com.squareup.okhttp.internal.http      private final static int HTTP_TEMP_REDIRECT = 307;      private final static int MAX_REDIRECTS = 20; -    private AtomicBoolean mIsConnected = new AtomicBoolean(false);      @UnsupportedAppUsage      public MediaHTTPConnection() { @@ -91,7 +89,6 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {              mAllowCrossDomainRedirect = true;              mURL = new URL(uri);              mHeaders = convertHeaderStringToMap(headers); -            mIsConnected.set(true);          } catch (MalformedURLException e) {              return null;          } @@ -142,14 +139,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {      @Override      @UnsupportedAppUsage      public void disconnect() { -        if (mIsConnected.getAndSet(false)) { -            (new Thread() { -                @Override -                public void run() { -                    teardownConnection(); -                } -            }).start(); -        } +        teardownConnection();          mHeaders = null;          mURL = null;      } @@ -334,14 +324,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {      @Override      @UnsupportedAppUsage      public int readAt(long offset, int size) { -        if (!mIsConnected.get()) { -            return -1; -        } -        int result = native_readAt(offset, size); -        if (!mIsConnected.get()) { -            return -1; -        } -        return result; +        return native_readAt(offset, size);      }      private int readAt(long offset, byte[] data, int size) { diff --git a/media/jni/Android.bp b/media/jni/Android.bp index 25c7b5cc5cd6..5966192707f7 100644 --- a/media/jni/Android.bp +++ b/media/jni/Android.bp @@ -20,8 +20,8 @@ cc_library_shared {          "android_media_MediaScanner.cpp",          "android_media_MediaSync.cpp",          "android_media_ResampleInputStream.cpp", +        "android_media_Streams.cpp",          "android_media_SyncParams.cpp", -        "android_media_Utils.cpp",          "android_mtp_MtpDatabase.cpp",          "android_mtp_MtpDevice.cpp",          "android_mtp_MtpServer.cpp", @@ -36,6 +36,7 @@ cc_library_shared {          "libbinder",          "libmedia",          "libmediaextractor", +        "libmedia_jni_utils",          "libmedia_omx",          "libmediametrics",          "libmediadrm", @@ -91,6 +92,36 @@ cc_library_shared {  }  cc_library_shared { +    name: "libmedia_jni_utils", +    srcs: [ +        "android_media_Utils.cpp", +    ], + +    shared_libs: [ +        "liblog", +        "libmedia_omx", +        "libnativewindow", +        "libui", +        "libutils", +        "android.hidl.token@1.0-utils", +    ], + +    include_dirs: [ +        "system/media/camera/include", +    ], + +    export_include_dirs: ["."], + +    cflags: [ +        "-Wall", +        "-Werror", +        "-Wno-error=deprecated-declarations", +        "-Wunused", +        "-Wunreachable-code", +    ], +} + +cc_library_shared {      name: "libmedia2_jni",      srcs: [ diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index 3490ff8fcf43..cf73b21c3300 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -23,7 +23,7 @@  #include "android_media_MediaCrypto.h"  #include "android_media_MediaDescrambler.h"  #include "android_media_MediaMetricsJNI.h" -#include "android_media_Utils.h" +#include "android_media_Streams.h"  #include "android_runtime/AndroidRuntime.h"  #include "android_runtime/android_view_Surface.h"  #include "android_util_Binder.h" diff --git a/media/jni/android_media_MediaCodecList.cpp b/media/jni/android_media_MediaCodecList.cpp index 8de11caf7d7a..878910ab1c87 100644 --- a/media/jni/android_media_MediaCodecList.cpp +++ b/media/jni/android_media_MediaCodecList.cpp @@ -27,7 +27,7 @@  #include "android_runtime/AndroidRuntime.h"  #include "jni.h"  #include <nativehelper/JNIHelp.h> -#include "android_media_Utils.h" +#include "android_media_Streams.h"  using namespace android; diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp index dad0e53963b0..3edac443ab8c 100644 --- a/media/jni/android_media_MediaExtractor.cpp +++ b/media/jni/android_media_MediaExtractor.cpp @@ -21,7 +21,7 @@  #include "android_media_MediaDataSource.h"  #include "android_media_MediaExtractor.h"  #include "android_media_MediaMetricsJNI.h" -#include "android_media_Utils.h" +#include "android_media_Streams.h"  #include "android_os_HwRemoteBinder.h"  #include "android_runtime/AndroidRuntime.h"  #include "android_runtime/Log.h" diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp index c1226fa89fe4..a4807843d7d8 100644 --- a/media/jni/android_media_MediaMetadataRetriever.cpp +++ b/media/jni/android_media_MediaMetadataRetriever.cpp @@ -18,6 +18,7 @@  //#define LOG_NDEBUG 0  #define LOG_TAG "MediaMetadataRetrieverJNI" +#include <cmath>  #include <assert.h>  #include <utils/Log.h>  #include <utils/threads.h> @@ -32,7 +33,7 @@  #include <nativehelper/JNIHelp.h>  #include "android_runtime/AndroidRuntime.h"  #include "android_media_MediaDataSource.h" -#include "android_media_Utils.h" +#include "android_media_Streams.h"  #include "android_util_Binder.h"  #include "android/graphics/GraphicsJNI.h" diff --git a/media/jni/android_media_MediaMuxer.cpp b/media/jni/android_media_MediaMuxer.cpp index f11452a9d80d..f0aa4c3f1ab6 100644 --- a/media/jni/android_media_MediaMuxer.cpp +++ b/media/jni/android_media_MediaMuxer.cpp @@ -18,7 +18,7 @@  #define LOG_TAG "MediaMuxer-JNI"  #include <utils/Log.h> -#include "android_media_Utils.h" +#include "android_media_Streams.h"  #include "android_runtime/AndroidRuntime.h"  #include "jni.h"  #include <nativehelper/JNIHelp.h> diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 5dd01b03274a..2acb0e5818fa 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -45,7 +45,7 @@  #include "android_media_PlaybackParams.h"  #include "android_media_SyncParams.h"  #include "android_media_VolumeShaper.h" -#include "android_media_Utils.h" +#include "android_media_Streams.h"  #include "android_os_Parcel.h"  #include "android_util_Binder.h" diff --git a/media/jni/android_media_Streams.cpp b/media/jni/android_media_Streams.cpp new file mode 100644 index 000000000000..b7cbd97409a2 --- /dev/null +++ b/media/jni/android_media_Streams.cpp @@ -0,0 +1,559 @@ +/* + * Copyright 2019, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *     http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// #define LOG_NDEBUG 0 +#define LOG_TAG "AndroidMediaStreams" + +#include <utils/Log.h> +#include "android_media_Streams.h" + +#include <media/stagefright/foundation/ADebug.h> +#include <media/stagefright/foundation/ABuffer.h> +#include <media/stagefright/foundation/AMessage.h> + +#include <nativehelper/ScopedLocalRef.h> + +namespace android { + +AssetStream::AssetStream(SkStream* stream) +    : mStream(stream), mPosition(0) { +} + +AssetStream::~AssetStream() { +} + +piex::Error AssetStream::GetData( +        const size_t offset, const size_t length, std::uint8_t* data) { +    // Seek first. +    if (mPosition != offset) { +        if (!mStream->seek(offset)) { +            return piex::Error::kFail; +        } +    } + +    // Read bytes. +    size_t size = mStream->read((void*)data, length); +    mPosition = offset + size; + +    return size == length ? piex::Error::kOk : piex::Error::kFail; +} + +BufferedStream::BufferedStream(SkStream* stream) +    : mStream(stream) { +} + +BufferedStream::~BufferedStream() { +} + +piex::Error BufferedStream::GetData( +        const size_t offset, const size_t length, std::uint8_t* data) { +    // Seek first. +    if (offset + length > mStreamBuffer.bytesWritten()) { +        size_t sizeToRead = offset + length - mStreamBuffer.bytesWritten(); +        if (sizeToRead <= kMinSizeToRead) { +            sizeToRead = kMinSizeToRead; +        } + +        void* tempBuffer = malloc(sizeToRead); +        if (tempBuffer == NULL) { +          return piex::Error::kFail; +        } + +        size_t bytesRead = mStream->read(tempBuffer, sizeToRead); +        if (bytesRead != sizeToRead) { +            free(tempBuffer); +            return piex::Error::kFail; +        } +        mStreamBuffer.write(tempBuffer, bytesRead); +        free(tempBuffer); +    } + +    // Read bytes. +    if (mStreamBuffer.read((void*)data, offset, length)) { +        return piex::Error::kOk; +    } else { +        return piex::Error::kFail; +    } +} + +FileStream::FileStream(const int fd) +    : mPosition(0) { +    mFile = fdopen(fd, "r"); +    if (mFile == NULL) { +        return; +    } +} + +FileStream::FileStream(const String8 filename) +    : mPosition(0) { +    mFile = fopen(filename.string(), "r"); +    if (mFile == NULL) { +        return; +    } +} + +FileStream::~FileStream() { +    if (mFile != NULL) { +        fclose(mFile); +        mFile = NULL; +    } +} + +piex::Error FileStream::GetData( +        const size_t offset, const size_t length, std::uint8_t* data) { +    if (mFile == NULL) { +        return piex::Error::kFail; +    } + +    // Seek first. +    if (mPosition != offset) { +        fseek(mFile, offset, SEEK_SET); +    } + +    // Read bytes. +    size_t size = fread((void*)data, sizeof(std::uint8_t), length, mFile); +    mPosition += size; + +    // Handle errors and verify the size. +    if (ferror(mFile) || size != length) { +        ALOGV("GetData read failed: (offset: %zu, length: %zu)", offset, length); +        return piex::Error::kFail; +    } +    return piex::Error::kOk; +} + +bool FileStream::exists() const { +    return mFile != NULL; +} + +bool GetExifFromRawImage( +        piex::StreamInterface* stream, const String8& filename, +        piex::PreviewImageData& image_data) { +    // Reset the PreviewImageData to its default. +    image_data = piex::PreviewImageData(); + +    if (!piex::IsRaw(stream)) { +        // Format not supported. +        ALOGV("Format not supported: %s", filename.string()); +        return false; +    } + +    piex::Error err = piex::GetPreviewImageData(stream, &image_data); + +    if (err != piex::Error::kOk) { +        // The input data seems to be broken. +        ALOGV("Raw image not detected: %s (piex error code: %d)", filename.string(), (int32_t)err); +        return false; +    } + +    return true; +} + +bool ConvertKeyValueArraysToKeyedVector( +        JNIEnv *env, jobjectArray keys, jobjectArray values, +        KeyedVector<String8, String8>* keyedVector) { + +    int nKeyValuePairs = 0; +    bool failed = false; +    if (keys != NULL && values != NULL) { +        nKeyValuePairs = env->GetArrayLength(keys); +        failed = (nKeyValuePairs != env->GetArrayLength(values)); +    } + +    if (!failed) { +        failed = ((keys != NULL && values == NULL) || +                  (keys == NULL && values != NULL)); +    } + +    if (failed) { +        ALOGE("keys and values arrays have different length"); +        jniThrowException(env, "java/lang/IllegalArgumentException", NULL); +        return false; +    } + +    for (int i = 0; i < nKeyValuePairs; ++i) { +        // No need to check on the ArrayIndexOutOfBoundsException, since +        // it won't happen here. +        jstring key = (jstring) env->GetObjectArrayElement(keys, i); +        jstring value = (jstring) env->GetObjectArrayElement(values, i); + +        const char* keyStr = env->GetStringUTFChars(key, NULL); +        if (!keyStr) {  // OutOfMemoryError +            return false; +        } + +        const char* valueStr = env->GetStringUTFChars(value, NULL); +        if (!valueStr) {  // OutOfMemoryError +            env->ReleaseStringUTFChars(key, keyStr); +            return false; +        } + +        keyedVector->add(String8(keyStr), String8(valueStr)); + +        env->ReleaseStringUTFChars(key, keyStr); +        env->ReleaseStringUTFChars(value, valueStr); +        env->DeleteLocalRef(key); +        env->DeleteLocalRef(value); +    } +    return true; +} + +static jobject makeIntegerObject(JNIEnv *env, int32_t value) { +    ScopedLocalRef<jclass> clazz(env, env->FindClass("java/lang/Integer")); +    CHECK(clazz.get() != NULL); + +    jmethodID integerConstructID = +        env->GetMethodID(clazz.get(), "<init>", "(I)V"); +    CHECK(integerConstructID != NULL); + +    return env->NewObject(clazz.get(), integerConstructID, value); +} + +static jobject makeLongObject(JNIEnv *env, int64_t value) { +    ScopedLocalRef<jclass> clazz(env, env->FindClass("java/lang/Long")); +    CHECK(clazz.get() != NULL); + +    jmethodID longConstructID = env->GetMethodID(clazz.get(), "<init>", "(J)V"); +    CHECK(longConstructID != NULL); + +    return env->NewObject(clazz.get(), longConstructID, value); +} + +static jobject makeFloatObject(JNIEnv *env, float value) { +    ScopedLocalRef<jclass> clazz(env, env->FindClass("java/lang/Float")); +    CHECK(clazz.get() != NULL); + +    jmethodID floatConstructID = +        env->GetMethodID(clazz.get(), "<init>", "(F)V"); +    CHECK(floatConstructID != NULL); + +    return env->NewObject(clazz.get(), floatConstructID, value); +} + +static jobject makeByteBufferObject( +        JNIEnv *env, const void *data, size_t size) { +    jbyteArray byteArrayObj = env->NewByteArray(size); +    env->SetByteArrayRegion(byteArrayObj, 0, size, (const jbyte *)data); + +    ScopedLocalRef<jclass> clazz(env, env->FindClass("java/nio/ByteBuffer")); +    CHECK(clazz.get() != NULL); + +    jmethodID byteBufWrapID = +        env->GetStaticMethodID( +                clazz.get(), "wrap", "([B)Ljava/nio/ByteBuffer;"); +    CHECK(byteBufWrapID != NULL); + +    jobject byteBufObj = env->CallStaticObjectMethod( +            clazz.get(), byteBufWrapID, byteArrayObj); + +    env->DeleteLocalRef(byteArrayObj); byteArrayObj = NULL; + +    return byteBufObj; +} + +static void SetMapInt32( +        JNIEnv *env, jobject hashMapObj, jmethodID hashMapPutID, +        const char *key, int32_t value) { +    jstring keyObj = env->NewStringUTF(key); +    jobject valueObj = makeIntegerObject(env, value); + +    env->CallObjectMethod(hashMapObj, hashMapPutID, keyObj, valueObj); + +    env->DeleteLocalRef(valueObj); valueObj = NULL; +    env->DeleteLocalRef(keyObj); keyObj = NULL; +} + +status_t ConvertMessageToMap( +        JNIEnv *env, const sp<AMessage> &msg, jobject *map) { +    ScopedLocalRef<jclass> hashMapClazz( +            env, env->FindClass("java/util/HashMap")); + +    if (hashMapClazz.get() == NULL) { +        return -EINVAL; +    } + +    jmethodID hashMapConstructID = +        env->GetMethodID(hashMapClazz.get(), "<init>", "()V"); + +    if (hashMapConstructID == NULL) { +        return -EINVAL; +    } + +    jmethodID hashMapPutID = +        env->GetMethodID( +                hashMapClazz.get(), +                "put", +                "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + +    if (hashMapPutID == NULL) { +        return -EINVAL; +    } + +    jobject hashMap = env->NewObject(hashMapClazz.get(), hashMapConstructID); + +    for (size_t i = 0; i < msg->countEntries(); ++i) { +        AMessage::Type valueType; +        const char *key = msg->getEntryNameAt(i, &valueType); + +        if (!strncmp(key, "android._", 9)) { +            // don't expose private keys (starting with android._) +            continue; +        } + +        jobject valueObj = NULL; + +        switch (valueType) { +            case AMessage::kTypeInt32: +            { +                int32_t val; +                CHECK(msg->findInt32(key, &val)); + +                valueObj = makeIntegerObject(env, val); +                break; +            } + +            case AMessage::kTypeInt64: +            { +                int64_t val; +                CHECK(msg->findInt64(key, &val)); + +                valueObj = makeLongObject(env, val); +                break; +            } + +            case AMessage::kTypeFloat: +            { +                float val; +                CHECK(msg->findFloat(key, &val)); + +                valueObj = makeFloatObject(env, val); +                break; +            } + +            case AMessage::kTypeString: +            { +                AString val; +                CHECK(msg->findString(key, &val)); + +                valueObj = env->NewStringUTF(val.c_str()); +                break; +            } + +            case AMessage::kTypeBuffer: +            { +                sp<ABuffer> buffer; +                CHECK(msg->findBuffer(key, &buffer)); + +                valueObj = makeByteBufferObject( +                        env, buffer->data(), buffer->size()); +                break; +            } + +            case AMessage::kTypeRect: +            { +                int32_t left, top, right, bottom; +                CHECK(msg->findRect(key, &left, &top, &right, &bottom)); + +                SetMapInt32( +                        env, +                        hashMap, +                        hashMapPutID, +                        AStringPrintf("%s-left", key).c_str(), +                        left); + +                SetMapInt32( +                        env, +                        hashMap, +                        hashMapPutID, +                        AStringPrintf("%s-top", key).c_str(), +                        top); + +                SetMapInt32( +                        env, +                        hashMap, +                        hashMapPutID, +                        AStringPrintf("%s-right", key).c_str(), +                        right); + +                SetMapInt32( +                        env, +                        hashMap, +                        hashMapPutID, +                        AStringPrintf("%s-bottom", key).c_str(), +                        bottom); +                break; +            } + +            default: +                break; +        } + +        if (valueObj != NULL) { +            jstring keyObj = env->NewStringUTF(key); + +            env->CallObjectMethod(hashMap, hashMapPutID, keyObj, valueObj); + +            env->DeleteLocalRef(keyObj); keyObj = NULL; +            env->DeleteLocalRef(valueObj); valueObj = NULL; +        } +    } + +    *map = hashMap; + +    return OK; +} + +status_t ConvertKeyValueArraysToMessage( +        JNIEnv *env, jobjectArray keys, jobjectArray values, +        sp<AMessage> *out) { +    ScopedLocalRef<jclass> stringClass(env, env->FindClass("java/lang/String")); +    CHECK(stringClass.get() != NULL); +    ScopedLocalRef<jclass> integerClass(env, env->FindClass("java/lang/Integer")); +    CHECK(integerClass.get() != NULL); +    ScopedLocalRef<jclass> longClass(env, env->FindClass("java/lang/Long")); +    CHECK(longClass.get() != NULL); +    ScopedLocalRef<jclass> floatClass(env, env->FindClass("java/lang/Float")); +    CHECK(floatClass.get() != NULL); +    ScopedLocalRef<jclass> byteBufClass(env, env->FindClass("java/nio/ByteBuffer")); +    CHECK(byteBufClass.get() != NULL); + +    sp<AMessage> msg = new AMessage; + +    jsize numEntries = 0; + +    if (keys != NULL) { +        if (values == NULL) { +            return -EINVAL; +        } + +        numEntries = env->GetArrayLength(keys); + +        if (numEntries != env->GetArrayLength(values)) { +            return -EINVAL; +        } +    } else if (values != NULL) { +        return -EINVAL; +    } + +    for (jsize i = 0; i < numEntries; ++i) { +        jobject keyObj = env->GetObjectArrayElement(keys, i); + +        if (!env->IsInstanceOf(keyObj, stringClass.get())) { +            return -EINVAL; +        } + +        const char *tmp = env->GetStringUTFChars((jstring)keyObj, NULL); + +        if (tmp == NULL) { +            return -ENOMEM; +        } + +        AString key = tmp; + +        env->ReleaseStringUTFChars((jstring)keyObj, tmp); +        tmp = NULL; + +        if (key.startsWith("android._")) { +            // don't propagate private keys (starting with android._) +            continue; +        } + +        jobject valueObj = env->GetObjectArrayElement(values, i); + +        if (env->IsInstanceOf(valueObj, stringClass.get())) { +            const char *value = env->GetStringUTFChars((jstring)valueObj, NULL); + +            if (value == NULL) { +                return -ENOMEM; +            } + +            msg->setString(key.c_str(), value); + +            env->ReleaseStringUTFChars((jstring)valueObj, value); +            value = NULL; +        } else if (env->IsInstanceOf(valueObj, integerClass.get())) { +            jmethodID intValueID = +                env->GetMethodID(integerClass.get(), "intValue", "()I"); +            CHECK(intValueID != NULL); + +            jint value = env->CallIntMethod(valueObj, intValueID); + +            msg->setInt32(key.c_str(), value); +        } else if (env->IsInstanceOf(valueObj, longClass.get())) { +            jmethodID longValueID = +                env->GetMethodID(longClass.get(), "longValue", "()J"); +            CHECK(longValueID != NULL); + +            jlong value = env->CallLongMethod(valueObj, longValueID); + +            msg->setInt64(key.c_str(), value); +        } else if (env->IsInstanceOf(valueObj, floatClass.get())) { +            jmethodID floatValueID = +                env->GetMethodID(floatClass.get(), "floatValue", "()F"); +            CHECK(floatValueID != NULL); + +            jfloat value = env->CallFloatMethod(valueObj, floatValueID); + +            msg->setFloat(key.c_str(), value); +        } else if (env->IsInstanceOf(valueObj, byteBufClass.get())) { +            jmethodID positionID = +                env->GetMethodID(byteBufClass.get(), "position", "()I"); +            CHECK(positionID != NULL); + +            jmethodID limitID = +                env->GetMethodID(byteBufClass.get(), "limit", "()I"); +            CHECK(limitID != NULL); + +            jint position = env->CallIntMethod(valueObj, positionID); +            jint limit = env->CallIntMethod(valueObj, limitID); + +            sp<ABuffer> buffer = new ABuffer(limit - position); + +            void *data = env->GetDirectBufferAddress(valueObj); + +            if (data != NULL) { +                memcpy(buffer->data(), +                       (const uint8_t *)data + position, +                       buffer->size()); +            } else { +                jmethodID arrayID = +                    env->GetMethodID(byteBufClass.get(), "array", "()[B"); +                CHECK(arrayID != NULL); + +                jbyteArray byteArray = +                    (jbyteArray)env->CallObjectMethod(valueObj, arrayID); +                CHECK(byteArray != NULL); + +                env->GetByteArrayRegion( +                        byteArray, +                        position, +                        buffer->size(), +                        (jbyte *)buffer->data()); + +                env->DeleteLocalRef(byteArray); byteArray = NULL; +            } + +            msg->setBuffer(key.c_str(), buffer); +        } +    } + +    *out = msg; + +    return OK; +} + +}  // namespace android + diff --git a/media/jni/android_media_Streams.h b/media/jni/android_media_Streams.h new file mode 100644 index 000000000000..d174f9a6650c --- /dev/null +++ b/media/jni/android_media_Streams.h @@ -0,0 +1,116 @@ +/* + * Copyright 2019, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *     http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ANDROID_MEDIA_STREAMS_H_ +#define _ANDROID_MEDIA_STREAMS_H_ + +#include "src/piex_types.h" +#include "src/piex.h" + +#include <jni.h> +#include <nativehelper/JNIHelp.h> +#include <utils/KeyedVector.h> +#include <utils/String8.h> +#include <utils/StrongPointer.h> +#include <SkStream.h> + + +namespace android { + +class AssetStream : public piex::StreamInterface { +private: +    SkStream *mStream; +    size_t mPosition; + +public: +    explicit AssetStream(SkStream* stream); +    ~AssetStream(); + +    // Reads 'length' amount of bytes from 'offset' to 'data'. The 'data' buffer +    // provided by the caller, guaranteed to be at least "length" bytes long. +    // On 'kOk' the 'data' pointer contains 'length' valid bytes beginning at +    // 'offset' bytes from the start of the stream. +    // Returns 'kFail' if 'offset' + 'length' exceeds the stream and does not +    // change the contents of 'data'. +    piex::Error GetData( +            const size_t offset, const size_t length, std::uint8_t* data) override; +}; + +class BufferedStream : public piex::StreamInterface { +private: +    SkStream *mStream; +    // Growable memory stream +    SkDynamicMemoryWStream mStreamBuffer; + +    // Minimum size to read on filling the buffer. +    const size_t kMinSizeToRead = 8192; + +public: +    explicit BufferedStream(SkStream* stream); +    ~BufferedStream(); + +    // Reads 'length' amount of bytes from 'offset' to 'data'. The 'data' buffer +    // provided by the caller, guaranteed to be at least "length" bytes long. +    // On 'kOk' the 'data' pointer contains 'length' valid bytes beginning at +    // 'offset' bytes from the start of the stream. +    // Returns 'kFail' if 'offset' + 'length' exceeds the stream and does not +    // change the contents of 'data'. +    piex::Error GetData( +            const size_t offset, const size_t length, std::uint8_t* data) override; +}; + +class FileStream : public piex::StreamInterface { +private: +    FILE *mFile; +    size_t mPosition; + +public: +    explicit FileStream(const int fd); +    explicit FileStream(const String8 filename); +    ~FileStream(); + +    // Reads 'length' amount of bytes from 'offset' to 'data'. The 'data' buffer +    // provided by the caller, guaranteed to be at least "length" bytes long. +    // On 'kOk' the 'data' pointer contains 'length' valid bytes beginning at +    // 'offset' bytes from the start of the stream. +    // Returns 'kFail' if 'offset' + 'length' exceeds the stream and does not +    // change the contents of 'data'. +    piex::Error GetData( +            const size_t offset, const size_t length, std::uint8_t* data) override; +    bool exists() const; +}; + +// Reads EXIF metadata from a given raw image via piex. +// And returns true if the operation is successful; otherwise, false. +bool GetExifFromRawImage( +        piex::StreamInterface* stream, const String8& filename, piex::PreviewImageData& image_data); + +// Returns true if the conversion is successful; otherwise, false. +bool ConvertKeyValueArraysToKeyedVector( +        JNIEnv *env, jobjectArray keys, jobjectArray values, +        KeyedVector<String8, String8>* vector); + +struct AMessage; +status_t ConvertMessageToMap( +        JNIEnv *env, const sp<AMessage> &msg, jobject *map); + +status_t ConvertKeyValueArraysToMessage( +        JNIEnv *env, jobjectArray keys, jobjectArray values, +        sp<AMessage> *msg); + +};  // namespace android + +#endif //  _ANDROID_MEDIA_STREAMS_H_ diff --git a/media/jni/android_media_Utils.cpp b/media/jni/android_media_Utils.cpp index 458d8471dafd..8bdf53440edc 100644 --- a/media/jni/android_media_Utils.cpp +++ b/media/jni/android_media_Utils.cpp @@ -21,543 +21,10 @@  #include <utils/Log.h>  #include "android_media_Utils.h" -#include <media/stagefright/foundation/ADebug.h> -#include <media/stagefright/foundation/ABuffer.h> -#include <media/stagefright/foundation/AMessage.h> - -#include <nativehelper/ScopedLocalRef.h> -  #define ALIGN(x, mask) ( ((x) + (mask) - 1) & ~((mask) - 1) )  namespace android { -AssetStream::AssetStream(SkStream* stream) -    : mStream(stream), mPosition(0) { -} - -AssetStream::~AssetStream() { -} - -piex::Error AssetStream::GetData( -        const size_t offset, const size_t length, std::uint8_t* data) { -    // Seek first. -    if (mPosition != offset) { -        if (!mStream->seek(offset)) { -            return piex::Error::kFail; -        } -    } - -    // Read bytes. -    size_t size = mStream->read((void*)data, length); -    mPosition = offset + size; - -    return size == length ? piex::Error::kOk : piex::Error::kFail; -} - -BufferedStream::BufferedStream(SkStream* stream) -    : mStream(stream) { -} - -BufferedStream::~BufferedStream() { -} - -piex::Error BufferedStream::GetData( -        const size_t offset, const size_t length, std::uint8_t* data) { -    // Seek first. -    if (offset + length > mStreamBuffer.bytesWritten()) { -        size_t sizeToRead = offset + length - mStreamBuffer.bytesWritten(); -        if (sizeToRead <= kMinSizeToRead) { -            sizeToRead = kMinSizeToRead; -        } - -        void* tempBuffer = malloc(sizeToRead); -        if (tempBuffer == NULL) { -          return piex::Error::kFail; -        } - -        size_t bytesRead = mStream->read(tempBuffer, sizeToRead); -        if (bytesRead != sizeToRead) { -            free(tempBuffer); -            return piex::Error::kFail; -        } -        mStreamBuffer.write(tempBuffer, bytesRead); -        free(tempBuffer); -    } - -    // Read bytes. -    if (mStreamBuffer.read((void*)data, offset, length)) { -        return piex::Error::kOk; -    } else { -        return piex::Error::kFail; -    } -} - -FileStream::FileStream(const int fd) -    : mPosition(0) { -    mFile = fdopen(fd, "r"); -    if (mFile == NULL) { -        return; -    } -} - -FileStream::FileStream(const String8 filename) -    : mPosition(0) { -    mFile = fopen(filename.string(), "r"); -    if (mFile == NULL) { -        return; -    } -} - -FileStream::~FileStream() { -    if (mFile != NULL) { -        fclose(mFile); -        mFile = NULL; -    } -} - -piex::Error FileStream::GetData( -        const size_t offset, const size_t length, std::uint8_t* data) { -    if (mFile == NULL) { -        return piex::Error::kFail; -    } - -    // Seek first. -    if (mPosition != offset) { -        fseek(mFile, offset, SEEK_SET); -    } - -    // Read bytes. -    size_t size = fread((void*)data, sizeof(std::uint8_t), length, mFile); -    mPosition += size; - -    // Handle errors and verify the size. -    if (ferror(mFile) || size != length) { -        ALOGV("GetData read failed: (offset: %zu, length: %zu)", offset, length); -        return piex::Error::kFail; -    } -    return piex::Error::kOk; -} - -bool FileStream::exists() const { -    return mFile != NULL; -} - -bool GetExifFromRawImage( -        piex::StreamInterface* stream, const String8& filename, -        piex::PreviewImageData& image_data) { -    // Reset the PreviewImageData to its default. -    image_data = piex::PreviewImageData(); - -    if (!piex::IsRaw(stream)) { -        // Format not supported. -        ALOGV("Format not supported: %s", filename.string()); -        return false; -    } - -    piex::Error err = piex::GetPreviewImageData(stream, &image_data); - -    if (err != piex::Error::kOk) { -        // The input data seems to be broken. -        ALOGV("Raw image not detected: %s (piex error code: %d)", filename.string(), (int32_t)err); -        return false; -    } - -    return true; -} - -bool ConvertKeyValueArraysToKeyedVector( -        JNIEnv *env, jobjectArray keys, jobjectArray values, -        KeyedVector<String8, String8>* keyedVector) { - -    int nKeyValuePairs = 0; -    bool failed = false; -    if (keys != NULL && values != NULL) { -        nKeyValuePairs = env->GetArrayLength(keys); -        failed = (nKeyValuePairs != env->GetArrayLength(values)); -    } - -    if (!failed) { -        failed = ((keys != NULL && values == NULL) || -                  (keys == NULL && values != NULL)); -    } - -    if (failed) { -        ALOGE("keys and values arrays have different length"); -        jniThrowException(env, "java/lang/IllegalArgumentException", NULL); -        return false; -    } - -    for (int i = 0; i < nKeyValuePairs; ++i) { -        // No need to check on the ArrayIndexOutOfBoundsException, since -        // it won't happen here. -        jstring key = (jstring) env->GetObjectArrayElement(keys, i); -        jstring value = (jstring) env->GetObjectArrayElement(values, i); - -        const char* keyStr = env->GetStringUTFChars(key, NULL); -        if (!keyStr) {  // OutOfMemoryError -            return false; -        } - -        const char* valueStr = env->GetStringUTFChars(value, NULL); -        if (!valueStr) {  // OutOfMemoryError -            env->ReleaseStringUTFChars(key, keyStr); -            return false; -        } - -        keyedVector->add(String8(keyStr), String8(valueStr)); - -        env->ReleaseStringUTFChars(key, keyStr); -        env->ReleaseStringUTFChars(value, valueStr); -        env->DeleteLocalRef(key); -        env->DeleteLocalRef(value); -    } -    return true; -} - -static jobject makeIntegerObject(JNIEnv *env, int32_t value) { -    ScopedLocalRef<jclass> clazz(env, env->FindClass("java/lang/Integer")); -    CHECK(clazz.get() != NULL); - -    jmethodID integerConstructID = -        env->GetMethodID(clazz.get(), "<init>", "(I)V"); -    CHECK(integerConstructID != NULL); - -    return env->NewObject(clazz.get(), integerConstructID, value); -} - -static jobject makeLongObject(JNIEnv *env, int64_t value) { -    ScopedLocalRef<jclass> clazz(env, env->FindClass("java/lang/Long")); -    CHECK(clazz.get() != NULL); - -    jmethodID longConstructID = env->GetMethodID(clazz.get(), "<init>", "(J)V"); -    CHECK(longConstructID != NULL); - -    return env->NewObject(clazz.get(), longConstructID, value); -} - -static jobject makeFloatObject(JNIEnv *env, float value) { -    ScopedLocalRef<jclass> clazz(env, env->FindClass("java/lang/Float")); -    CHECK(clazz.get() != NULL); - -    jmethodID floatConstructID = -        env->GetMethodID(clazz.get(), "<init>", "(F)V"); -    CHECK(floatConstructID != NULL); - -    return env->NewObject(clazz.get(), floatConstructID, value); -} - -static jobject makeByteBufferObject( -        JNIEnv *env, const void *data, size_t size) { -    jbyteArray byteArrayObj = env->NewByteArray(size); -    env->SetByteArrayRegion(byteArrayObj, 0, size, (const jbyte *)data); - -    ScopedLocalRef<jclass> clazz(env, env->FindClass("java/nio/ByteBuffer")); -    CHECK(clazz.get() != NULL); - -    jmethodID byteBufWrapID = -        env->GetStaticMethodID( -                clazz.get(), "wrap", "([B)Ljava/nio/ByteBuffer;"); -    CHECK(byteBufWrapID != NULL); - -    jobject byteBufObj = env->CallStaticObjectMethod( -            clazz.get(), byteBufWrapID, byteArrayObj); - -    env->DeleteLocalRef(byteArrayObj); byteArrayObj = NULL; - -    return byteBufObj; -} - -static void SetMapInt32( -        JNIEnv *env, jobject hashMapObj, jmethodID hashMapPutID, -        const char *key, int32_t value) { -    jstring keyObj = env->NewStringUTF(key); -    jobject valueObj = makeIntegerObject(env, value); - -    env->CallObjectMethod(hashMapObj, hashMapPutID, keyObj, valueObj); - -    env->DeleteLocalRef(valueObj); valueObj = NULL; -    env->DeleteLocalRef(keyObj); keyObj = NULL; -} - -status_t ConvertMessageToMap( -        JNIEnv *env, const sp<AMessage> &msg, jobject *map) { -    ScopedLocalRef<jclass> hashMapClazz( -            env, env->FindClass("java/util/HashMap")); - -    if (hashMapClazz.get() == NULL) { -        return -EINVAL; -    } - -    jmethodID hashMapConstructID = -        env->GetMethodID(hashMapClazz.get(), "<init>", "()V"); - -    if (hashMapConstructID == NULL) { -        return -EINVAL; -    } - -    jmethodID hashMapPutID = -        env->GetMethodID( -                hashMapClazz.get(), -                "put", -                "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); - -    if (hashMapPutID == NULL) { -        return -EINVAL; -    } - -    jobject hashMap = env->NewObject(hashMapClazz.get(), hashMapConstructID); - -    for (size_t i = 0; i < msg->countEntries(); ++i) { -        AMessage::Type valueType; -        const char *key = msg->getEntryNameAt(i, &valueType); - -        if (!strncmp(key, "android._", 9)) { -            // don't expose private keys (starting with android._) -            continue; -        } - -        jobject valueObj = NULL; - -        switch (valueType) { -            case AMessage::kTypeInt32: -            { -                int32_t val; -                CHECK(msg->findInt32(key, &val)); - -                valueObj = makeIntegerObject(env, val); -                break; -            } - -            case AMessage::kTypeInt64: -            { -                int64_t val; -                CHECK(msg->findInt64(key, &val)); - -                valueObj = makeLongObject(env, val); -                break; -            } - -            case AMessage::kTypeFloat: -            { -                float val; -                CHECK(msg->findFloat(key, &val)); - -                valueObj = makeFloatObject(env, val); -                break; -            } - -            case AMessage::kTypeString: -            { -                AString val; -                CHECK(msg->findString(key, &val)); - -                valueObj = env->NewStringUTF(val.c_str()); -                break; -            } - -            case AMessage::kTypeBuffer: -            { -                sp<ABuffer> buffer; -                CHECK(msg->findBuffer(key, &buffer)); - -                valueObj = makeByteBufferObject( -                        env, buffer->data(), buffer->size()); -                break; -            } - -            case AMessage::kTypeRect: -            { -                int32_t left, top, right, bottom; -                CHECK(msg->findRect(key, &left, &top, &right, &bottom)); - -                SetMapInt32( -                        env, -                        hashMap, -                        hashMapPutID, -                        AStringPrintf("%s-left", key).c_str(), -                        left); - -                SetMapInt32( -                        env, -                        hashMap, -                        hashMapPutID, -                        AStringPrintf("%s-top", key).c_str(), -                        top); - -                SetMapInt32( -                        env, -                        hashMap, -                        hashMapPutID, -                        AStringPrintf("%s-right", key).c_str(), -                        right); - -                SetMapInt32( -                        env, -                        hashMap, -                        hashMapPutID, -                        AStringPrintf("%s-bottom", key).c_str(), -                        bottom); -                break; -            } - -            default: -                break; -        } - -        if (valueObj != NULL) { -            jstring keyObj = env->NewStringUTF(key); - -            env->CallObjectMethod(hashMap, hashMapPutID, keyObj, valueObj); - -            env->DeleteLocalRef(keyObj); keyObj = NULL; -            env->DeleteLocalRef(valueObj); valueObj = NULL; -        } -    } - -    *map = hashMap; - -    return OK; -} - -status_t ConvertKeyValueArraysToMessage( -        JNIEnv *env, jobjectArray keys, jobjectArray values, -        sp<AMessage> *out) { -    ScopedLocalRef<jclass> stringClass(env, env->FindClass("java/lang/String")); -    CHECK(stringClass.get() != NULL); -    ScopedLocalRef<jclass> integerClass(env, env->FindClass("java/lang/Integer")); -    CHECK(integerClass.get() != NULL); -    ScopedLocalRef<jclass> longClass(env, env->FindClass("java/lang/Long")); -    CHECK(longClass.get() != NULL); -    ScopedLocalRef<jclass> floatClass(env, env->FindClass("java/lang/Float")); -    CHECK(floatClass.get() != NULL); -    ScopedLocalRef<jclass> byteBufClass(env, env->FindClass("java/nio/ByteBuffer")); -    CHECK(byteBufClass.get() != NULL); - -    sp<AMessage> msg = new AMessage; - -    jsize numEntries = 0; - -    if (keys != NULL) { -        if (values == NULL) { -            return -EINVAL; -        } - -        numEntries = env->GetArrayLength(keys); - -        if (numEntries != env->GetArrayLength(values)) { -            return -EINVAL; -        } -    } else if (values != NULL) { -        return -EINVAL; -    } - -    for (jsize i = 0; i < numEntries; ++i) { -        jobject keyObj = env->GetObjectArrayElement(keys, i); - -        if (!env->IsInstanceOf(keyObj, stringClass.get())) { -            return -EINVAL; -        } - -        const char *tmp = env->GetStringUTFChars((jstring)keyObj, NULL); - -        if (tmp == NULL) { -            return -ENOMEM; -        } - -        AString key = tmp; - -        env->ReleaseStringUTFChars((jstring)keyObj, tmp); -        tmp = NULL; - -        if (key.startsWith("android._")) { -            // don't propagate private keys (starting with android._) -            continue; -        } - -        jobject valueObj = env->GetObjectArrayElement(values, i); - -        if (env->IsInstanceOf(valueObj, stringClass.get())) { -            const char *value = env->GetStringUTFChars((jstring)valueObj, NULL); - -            if (value == NULL) { -                return -ENOMEM; -            } - -            msg->setString(key.c_str(), value); - -            env->ReleaseStringUTFChars((jstring)valueObj, value); -            value = NULL; -        } else if (env->IsInstanceOf(valueObj, integerClass.get())) { -            jmethodID intValueID = -                env->GetMethodID(integerClass.get(), "intValue", "()I"); -            CHECK(intValueID != NULL); - -            jint value = env->CallIntMethod(valueObj, intValueID); - -            msg->setInt32(key.c_str(), value); -        } else if (env->IsInstanceOf(valueObj, longClass.get())) { -            jmethodID longValueID = -                env->GetMethodID(longClass.get(), "longValue", "()J"); -            CHECK(longValueID != NULL); - -            jlong value = env->CallLongMethod(valueObj, longValueID); - -            msg->setInt64(key.c_str(), value); -        } else if (env->IsInstanceOf(valueObj, floatClass.get())) { -            jmethodID floatValueID = -                env->GetMethodID(floatClass.get(), "floatValue", "()F"); -            CHECK(floatValueID != NULL); - -            jfloat value = env->CallFloatMethod(valueObj, floatValueID); - -            msg->setFloat(key.c_str(), value); -        } else if (env->IsInstanceOf(valueObj, byteBufClass.get())) { -            jmethodID positionID = -                env->GetMethodID(byteBufClass.get(), "position", "()I"); -            CHECK(positionID != NULL); - -            jmethodID limitID = -                env->GetMethodID(byteBufClass.get(), "limit", "()I"); -            CHECK(limitID != NULL); - -            jint position = env->CallIntMethod(valueObj, positionID); -            jint limit = env->CallIntMethod(valueObj, limitID); - -            sp<ABuffer> buffer = new ABuffer(limit - position); - -            void *data = env->GetDirectBufferAddress(valueObj); - -            if (data != NULL) { -                memcpy(buffer->data(), -                       (const uint8_t *)data + position, -                       buffer->size()); -            } else { -                jmethodID arrayID = -                    env->GetMethodID(byteBufClass.get(), "array", "()[B"); -                CHECK(arrayID != NULL); - -                jbyteArray byteArray = -                    (jbyteArray)env->CallObjectMethod(valueObj, arrayID); -                CHECK(byteArray != NULL); - -                env->GetByteArrayRegion( -                        byteArray, -                        position, -                        buffer->size(), -                        (jbyte *)buffer->data()); - -                env->DeleteLocalRef(byteArray); byteArray = NULL; -            } - -            msg->setBuffer(key.c_str(), buffer); -        } -    } - -    *out = msg; - -    return OK; -} -  // -----------Utility functions used by ImageReader/Writer JNI-----------------  enum { diff --git a/media/jni/android_media_Utils.h b/media/jni/android_media_Utils.h index 821c6b25c333..24f16101d4d9 100644 --- a/media/jni/android_media_Utils.h +++ b/media/jni/android_media_Utils.h @@ -17,100 +17,10 @@  #ifndef _ANDROID_MEDIA_UTILS_H_  #define _ANDROID_MEDIA_UTILS_H_ -#include "src/piex_types.h" -#include "src/piex.h" - -#include <android_runtime/AndroidRuntime.h>  #include <gui/CpuConsumer.h> -#include <jni.h> -#include <nativehelper/JNIHelp.h> -#include <utils/KeyedVector.h> -#include <utils/String8.h> -#include <SkStream.h>  namespace android { -class AssetStream : public piex::StreamInterface { -private: -    SkStream *mStream; -    size_t mPosition; - -public: -    explicit AssetStream(SkStream* stream); -    ~AssetStream(); - -    // Reads 'length' amount of bytes from 'offset' to 'data'. The 'data' buffer -    // provided by the caller, guaranteed to be at least "length" bytes long. -    // On 'kOk' the 'data' pointer contains 'length' valid bytes beginning at -    // 'offset' bytes from the start of the stream. -    // Returns 'kFail' if 'offset' + 'length' exceeds the stream and does not -    // change the contents of 'data'. -    piex::Error GetData( -            const size_t offset, const size_t length, std::uint8_t* data) override; -}; - -class BufferedStream : public piex::StreamInterface { -private: -    SkStream *mStream; -    // Growable memory stream -    SkDynamicMemoryWStream mStreamBuffer; - -    // Minimum size to read on filling the buffer. -    const size_t kMinSizeToRead = 8192; - -public: -    explicit BufferedStream(SkStream* stream); -    ~BufferedStream(); - -    // Reads 'length' amount of bytes from 'offset' to 'data'. The 'data' buffer -    // provided by the caller, guaranteed to be at least "length" bytes long. -    // On 'kOk' the 'data' pointer contains 'length' valid bytes beginning at -    // 'offset' bytes from the start of the stream. -    // Returns 'kFail' if 'offset' + 'length' exceeds the stream and does not -    // change the contents of 'data'. -    piex::Error GetData( -            const size_t offset, const size_t length, std::uint8_t* data) override; -}; - -class FileStream : public piex::StreamInterface { -private: -    FILE *mFile; -    size_t mPosition; - -public: -    explicit FileStream(const int fd); -    explicit FileStream(const String8 filename); -    ~FileStream(); - -    // Reads 'length' amount of bytes from 'offset' to 'data'. The 'data' buffer -    // provided by the caller, guaranteed to be at least "length" bytes long. -    // On 'kOk' the 'data' pointer contains 'length' valid bytes beginning at -    // 'offset' bytes from the start of the stream. -    // Returns 'kFail' if 'offset' + 'length' exceeds the stream and does not -    // change the contents of 'data'. -    piex::Error GetData( -            const size_t offset, const size_t length, std::uint8_t* data) override; -    bool exists() const; -}; - -// Reads EXIF metadata from a given raw image via piex. -// And returns true if the operation is successful; otherwise, false. -bool GetExifFromRawImage( -        piex::StreamInterface* stream, const String8& filename, piex::PreviewImageData& image_data); - -// Returns true if the conversion is successful; otherwise, false. -bool ConvertKeyValueArraysToKeyedVector( -        JNIEnv *env, jobjectArray keys, jobjectArray values, -        KeyedVector<String8, String8>* vector); - -struct AMessage; -status_t ConvertMessageToMap( -        JNIEnv *env, const sp<AMessage> &msg, jobject *map); - -status_t ConvertKeyValueArraysToMessage( -        JNIEnv *env, jobjectArray keys, jobjectArray values, -        sp<AMessage> *msg); -  // -----------Utility functions used by ImageReader/Writer JNI-----------------  typedef CpuConsumer::LockedBuffer LockedImage; diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp index 213c3d9b120c..a6c5fc86249d 100644 --- a/media/jni/android_mtp_MtpDatabase.cpp +++ b/media/jni/android_mtp_MtpDatabase.cpp @@ -18,7 +18,7 @@  #include "utils/Log.h"  #include "utils/String8.h" -#include "android_media_Utils.h" +#include "android_media_Streams.h"  #include "mtp.h"  #include "IMtpDatabase.h"  #include "MtpDataPacket.h" diff --git a/packages/CaptivePortalLogin/Android.bp b/packages/CaptivePortalLogin/Android.bp index 9c31b4d4374f..f545a61aff4f 100644 --- a/packages/CaptivePortalLogin/Android.bp +++ b/packages/CaptivePortalLogin/Android.bp @@ -18,6 +18,7 @@ android_app {      name: "CaptivePortalLogin",      srcs: ["src/**/*.java"],      sdk_version: "system_current", +    min_sdk_version: "28",      certificate: "networkstack",      static_libs: [          "android-support-v4", diff --git a/packages/CaptivePortalLogin/AndroidManifest.xml b/packages/CaptivePortalLogin/AndroidManifest.xml index 0894ee576a2d..44e0a659212a 100644 --- a/packages/CaptivePortalLogin/AndroidManifest.xml +++ b/packages/CaptivePortalLogin/AndroidManifest.xml @@ -17,8 +17,11 @@   */  -->  <manifest xmlns:android="http://schemas.android.com/apk/res/android" -    package="com.android.captiveportallogin" > +    package="com.android.captiveportallogin" +    android:versionCode="11" +    android:versionName="Q-initial"> +    <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28" />      <uses-permission android:name="android.permission.INTERNET" />      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> diff --git a/packages/ExtServices/tests/Android.mk b/packages/ExtServices/tests/Android.mk index 0a95b858a93e..36e573a3a93b 100644 --- a/packages/ExtServices/tests/Android.mk +++ b/packages/ExtServices/tests/Android.mk @@ -8,9 +8,9 @@ LOCAL_CERTIFICATE := platform  LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base  LOCAL_STATIC_JAVA_LIBRARIES := \ -    android-support-test \ +    androidx.test.rules \      mockito-target-minus-junit4 \ -    espresso-core \ +    androidx.test.espresso.core \      truth-prebuilt \      testables diff --git a/packages/ExtServices/tests/AndroidManifest.xml b/packages/ExtServices/tests/AndroidManifest.xml index ddf725b8cdfe..42293b5a0b3e 100644 --- a/packages/ExtServices/tests/AndroidManifest.xml +++ b/packages/ExtServices/tests/AndroidManifest.xml @@ -23,7 +23,7 @@          <uses-library android:name="android.test.runner" />      </application> -    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner" +    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"                       android:targetPackage="android.ext.services"                       android:label="ExtServices Test Cases">      </instrumentation> diff --git a/packages/ExtServices/tests/AndroidTest.xml b/packages/ExtServices/tests/AndroidTest.xml index c3d32de4bfaf..cd26ebc407c1 100644 --- a/packages/ExtServices/tests/AndroidTest.xml +++ b/packages/ExtServices/tests/AndroidTest.xml @@ -23,7 +23,7 @@      <option name="test-tag" value="ExtServicesUnitTests" />      <test class="com.android.tradefed.testtype.AndroidJUnitTest" >          <option name="package" value="android.ext.services.tests.unit" /> -        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" /> +        <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />          <option name="hidden-api-checks" value="false"/>      </test>  </configuration>
\ No newline at end of file diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java index a6b6a6b61581..6ef25e553204 100644 --- a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java +++ b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantTest.java @@ -21,6 +21,7 @@ import static android.app.NotificationManager.IMPORTANCE_LOW;  import static android.app.NotificationManager.IMPORTANCE_MIN;  import static junit.framework.Assert.assertEquals; +  import static org.mockito.ArgumentMatchers.any;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.never; @@ -33,7 +34,6 @@ import android.app.INotificationManager;  import android.app.Notification;  import android.app.NotificationChannel;  import android.content.ContentResolver; -import android.content.IContentProvider;  import android.content.Intent;  import android.os.UserHandle;  import android.provider.Settings; @@ -43,11 +43,11 @@ import android.service.notification.NotificationListenerService.Ranking;  import android.service.notification.NotificationListenerService.RankingMap;  import android.service.notification.NotificationStats;  import android.service.notification.StatusBarNotification; -import android.support.test.InstrumentationRegistry;  import android.test.ServiceTestCase;  import android.testing.TestableContext;  import android.util.AtomicFile; -import android.util.Xml; + +import androidx.test.InstrumentationRegistry;  import com.android.internal.util.FastXmlSerializer; @@ -57,7 +57,6 @@ import org.junit.Test;  import org.mockito.ArgumentCaptor;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; -import org.xmlpull.v1.XmlPullParser;  import org.xmlpull.v1.XmlSerializer;  import java.io.BufferedInputStream; diff --git a/packages/NetworkStack/Android.bp b/packages/NetworkStack/Android.bp index b700bf324817..f210840b976f 100644 --- a/packages/NetworkStack/Android.bp +++ b/packages/NetworkStack/Android.bp @@ -28,6 +28,7 @@ java_library {      static_libs: [          "netd_aidl_interface-java",          "networkstack-aidl-interfaces-java", +        "datastallprotosnano",      ]  } @@ -35,6 +36,7 @@ java_library {  android_app {      name: "NetworkStack",      sdk_version: "system_current", +    min_sdk_version: "28",      certificate: "networkstack",      privileged: true,      static_libs: [ @@ -43,4 +45,4 @@ android_app {      jarjar_rules: "jarjar-rules-shared.txt",      manifest: "AndroidManifest.xml",      required: ["NetworkStackPermissionStub"], -}
\ No newline at end of file +} diff --git a/packages/NetworkStack/AndroidManifest.xml b/packages/NetworkStack/AndroidManifest.xml index 52c209e5f247..003f1e59d743 100644 --- a/packages/NetworkStack/AndroidManifest.xml +++ b/packages/NetworkStack/AndroidManifest.xml @@ -18,7 +18,10 @@  -->  <manifest xmlns:android="http://schemas.android.com/apk/res/android"            package="com.android.networkstack" -          android:sharedUserId="android.uid.networkstack"> +          android:sharedUserId="android.uid.networkstack" +          android:versionCode="11" +          android:versionName="Q-initial"> +    <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28" />      <uses-permission android:name="android.permission.INTERNET" />      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> diff --git a/packages/NetworkStack/src/android/net/metrics/DataStallDetectionStats.java b/packages/NetworkStack/src/android/net/metrics/DataStallDetectionStats.java new file mode 100644 index 000000000000..225dc0f4bfdc --- /dev/null +++ b/packages/NetworkStack/src/android/net/metrics/DataStallDetectionStats.java @@ -0,0 +1,228 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.metrics; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.net.util.NetworkStackUtils; +import android.net.wifi.WifiInfo; + +import com.android.internal.util.HexDump; +import com.android.server.connectivity.nano.CellularData; +import com.android.server.connectivity.nano.DataStallEventProto; +import com.android.server.connectivity.nano.DnsEvent; +import com.android.server.connectivity.nano.WifiData; + +import com.google.protobuf.nano.MessageNano; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * Class to record the stats of detection level information for data stall. + * + * @hide + */ +public final class DataStallDetectionStats { +    private static final int UNKNOWN_SIGNAL_STRENGTH = -1; +    @NonNull +    final byte[] mCellularInfo; +    @NonNull +    final byte[] mWifiInfo; +    @NonNull +    final byte[] mDns; +    final int mEvaluationType; +    final int mNetworkType; + +    public DataStallDetectionStats(@Nullable byte[] cell, @Nullable byte[] wifi, +                @NonNull int[] returnCode, @NonNull long[] dnsTime, int evalType, int netType) { +        mCellularInfo = emptyCellDataIfNull(cell); +        mWifiInfo = emptyWifiInfoIfNull(wifi); + +        DnsEvent dns = new DnsEvent(); +        dns.dnsReturnCode = returnCode; +        dns.dnsTime = dnsTime; +        mDns = MessageNano.toByteArray(dns); +        mEvaluationType = evalType; +        mNetworkType = netType; +    } + +    private byte[] emptyCellDataIfNull(@Nullable byte[] cell) { +        if (cell != null) return cell; + +        CellularData data  = new CellularData(); +        data.ratType = DataStallEventProto.RADIO_TECHNOLOGY_UNKNOWN; +        data.networkMccmnc = ""; +        data.simMccmnc = ""; +        data.signalStrength = UNKNOWN_SIGNAL_STRENGTH; +        return MessageNano.toByteArray(data); +    } + +    private byte[] emptyWifiInfoIfNull(@Nullable byte[] wifi) { +        if (wifi != null) return wifi; + +        WifiData data = new WifiData(); +        data.wifiBand = DataStallEventProto.AP_BAND_UNKNOWN; +        data.signalStrength = UNKNOWN_SIGNAL_STRENGTH; +        return MessageNano.toByteArray(data); +    } + +    @Override +    public String toString() { +        StringBuilder sb = new StringBuilder(); +        sb.append("type: ").append(mNetworkType) +          .append(", evaluation type: ") +          .append(mEvaluationType) +          .append(", wifi info: ") +          .append(HexDump.toHexString(mWifiInfo)) +          .append(", cell info: ") +          .append(HexDump.toHexString(mCellularInfo)) +          .append(", dns: ") +          .append(HexDump.toHexString(mDns)); +        return sb.toString(); +    } + +    @Override +    public boolean equals(@Nullable final Object o) { +        if (!(o instanceof DataStallDetectionStats)) return false; +        final DataStallDetectionStats other = (DataStallDetectionStats) o; +        return (mNetworkType == other.mNetworkType) +            && (mEvaluationType == other.mEvaluationType) +            && Arrays.equals(mWifiInfo, other.mWifiInfo) +            && Arrays.equals(mCellularInfo, other.mCellularInfo) +            && Arrays.equals(mDns, other.mDns); +    } + +    @Override +    public int hashCode() { +        return Objects.hash(mNetworkType, mEvaluationType, mWifiInfo, mCellularInfo, mDns); +    } + +    /** +     * Utility to create an instance of {@Link DataStallDetectionStats} +     * +     * @hide +     */ +    public static class Builder { +        @Nullable +        private byte[] mCellularInfo; +        @Nullable +        private byte[] mWifiInfo; +        @NonNull +        private final List<Integer> mDnsReturnCode = new ArrayList<Integer>(); +        @NonNull +        private final List<Long> mDnsTimeStamp = new ArrayList<Long>(); +        private int mEvaluationType; +        private int mNetworkType; + +        /** +         * Add a dns event into Builder. +         * +         * @param code the return code of the dns event. +         * @param timeMs the elapsedRealtime in ms that the the dns event was received from netd. +         * @return {@code this} {@link Builder} instance. +         */ +        public Builder addDnsEvent(int code, long timeMs) { +            mDnsReturnCode.add(code); +            mDnsTimeStamp.add(timeMs); +            return this; +        } + +        /** +         * Set the dns evaluation type into Builder. +         * +         * @param type the return code of the dns event. +         * @return {@code this} {@link Builder} instance. +         */ +        public Builder setEvaluationType(int type) { +            mEvaluationType = type; +            return this; +        } + +        /** +         * Set the network type into Builder. +         * +         * @param type the network type of the logged network. +         * @return {@code this} {@link Builder} instance. +         */ +        public Builder setNetworkType(int type) { +            mNetworkType = type; +            return this; +        } + +        /** +         * Set the wifi data into Builder. +         * +         * @param info a {@link WifiInfo} of the connected wifi network. +         * @return {@code this} {@link Builder} instance. +         */ +        public Builder setWiFiData(@Nullable final WifiInfo info) { +            WifiData data = new WifiData(); +            data.wifiBand = getWifiBand(info); +            data.signalStrength = (info != null) ? info.getRssi() : UNKNOWN_SIGNAL_STRENGTH; +            mWifiInfo = MessageNano.toByteArray(data); +            return this; +        } + +        private static int getWifiBand(@Nullable final WifiInfo info) { +            if (info == null) return DataStallEventProto.AP_BAND_UNKNOWN; + +            int freq = info.getFrequency(); +            // Refer to ScanResult.is5GHz() and ScanResult.is24GHz(). +            if (freq > 4900 && freq < 5900) { +                return DataStallEventProto.AP_BAND_5GHZ; +            } else if (freq > 2400 && freq < 2500) { +                return DataStallEventProto.AP_BAND_2GHZ; +            } else { +                return DataStallEventProto.AP_BAND_UNKNOWN; +            } +        } + +        /** +         * Set the cellular data into Builder. +         * +         * @param radioType the radio technology of the logged cellular network. +         * @param roaming a boolean indicates if logged cellular network is roaming or not. +         * @param networkMccmnc the mccmnc of the camped network. +         * @param simMccmnc the mccmnc of the sim. +         * @return {@code this} {@link Builder} instance. +         */ +        public Builder setCellData(int radioType, boolean roaming, +                @NonNull String networkMccmnc, @NonNull String simMccmnc, int ss) { +            CellularData data  = new CellularData(); +            data.ratType = radioType; +            data.isRoaming = roaming; +            data.networkMccmnc = networkMccmnc; +            data.simMccmnc = simMccmnc; +            data.signalStrength = ss; +            mCellularInfo = MessageNano.toByteArray(data); +            return this; +        } + +        /** +         * Create a new {@Link DataStallDetectionStats}. +         */ +        public DataStallDetectionStats build() { +            return new DataStallDetectionStats(mCellularInfo, mWifiInfo, +                    NetworkStackUtils.convertToIntArray(mDnsReturnCode), +                    NetworkStackUtils.convertToLongArray(mDnsTimeStamp), +                    mEvaluationType, mNetworkType); +        } +    } +} diff --git a/packages/NetworkStack/src/android/net/metrics/DataStallStatsUtils.java b/packages/NetworkStack/src/android/net/metrics/DataStallStatsUtils.java new file mode 100644 index 000000000000..17a36ad4e6d2 --- /dev/null +++ b/packages/NetworkStack/src/android/net/metrics/DataStallStatsUtils.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.metrics; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.net.captiveportal.CaptivePortalProbeResult; +import android.util.Log; + +import com.android.internal.util.HexDump; +import com.android.server.connectivity.nano.DataStallEventProto; + +/** + * Collection of utilities for data stall metrics. + * + * To see if the logs are properly sent to statsd, execute following command. + * + * $ adb shell cmd stats print-logs + * $ adb logcat | grep statsd  OR $ adb logcat -b stats + * + * @hide + */ +public class DataStallStatsUtils { +    private static final String TAG = DataStallStatsUtils.class.getSimpleName(); +    private static final boolean DBG = false; + +    private static int probeResultToEnum(@Nullable final CaptivePortalProbeResult result) { +        if (result == null) return DataStallEventProto.INVALID; + +        // TODO: Add partial connectivity support. +        if (result.isSuccessful()) { +            return DataStallEventProto.VALID; +        } else if (result.isPortal()) { +            return DataStallEventProto.PORTAL; +        } else { +            return DataStallEventProto.INVALID; +        } +    } + +    /** +     * Write the metric to {@link StatsLog}. +     */ +    public static void write(@NonNull final DataStallDetectionStats stats, +            @NonNull final CaptivePortalProbeResult result) { +        int validationResult = probeResultToEnum(result); +        if (DBG) { +            Log.d(TAG, "write: " + stats + " with result: " + validationResult +                    + ", dns: " + HexDump.toHexString(stats.mDns)); +        } +        // TODO(b/124613085): Send to Statsd once the public StatsLog API is ready. +    } +} diff --git a/packages/NetworkStack/src/android/net/util/NetworkStackUtils.java b/packages/NetworkStack/src/android/net/util/NetworkStackUtils.java index 98123a5c7261..481dbdadbac0 100644 --- a/packages/NetworkStack/src/android/net/util/NetworkStackUtils.java +++ b/packages/NetworkStack/src/android/net/util/NetworkStackUtils.java @@ -16,8 +16,11 @@  package android.net.util; +import android.annotation.NonNull; +  import java.io.FileDescriptor;  import java.io.IOException; +import java.util.List;  /**   * Collection of utilities for the network stack. @@ -40,4 +43,26 @@ public class NetworkStackUtils {          } catch (IOException ignored) {          }      } + +    /** +     * Returns an int array from the given Integer list. +     */ +    public static int[] convertToIntArray(@NonNull List<Integer> list) { +        int[] array = new int[list.size()]; +        for (int i = 0; i < list.size(); i++) { +            array[i] = list.get(i); +        } +        return array; +    } + +    /** +     * Returns a long array from the given long list. +     */ +    public static long[] convertToLongArray(@NonNull List<Long> list) { +        long[] array = new long[list.size()]; +        for (int i = 0; i < list.size(); i++) { +            array[i] = list.get(i); +        } +        return array; +    }  } diff --git a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java index 4b846b0fb372..c3447fdb3d78 100644 --- a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java +++ b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java @@ -32,7 +32,9 @@ import static android.net.metrics.ValidationProbeEvent.DNS_SUCCESS;  import static android.net.metrics.ValidationProbeEvent.PROBE_FALLBACK;  import static android.net.metrics.ValidationProbeEvent.PROBE_PRIVDNS;  import static android.net.util.NetworkStackUtils.isEmpty; +import static android.provider.Settings.Global.DATA_STALL_EVALUATION_TYPE_DNS; +import android.annotation.NonNull;  import android.annotation.Nullable;  import android.app.PendingIntent;  import android.content.BroadcastReceiver; @@ -50,6 +52,8 @@ import android.net.TrafficStats;  import android.net.Uri;  import android.net.captiveportal.CaptivePortalProbeResult;  import android.net.captiveportal.CaptivePortalProbeSpec; +import android.net.metrics.DataStallDetectionStats; +import android.net.metrics.DataStallStatsUtils;  import android.net.metrics.IpConnectivityLog;  import android.net.metrics.NetworkEvent;  import android.net.metrics.ValidationProbeEvent; @@ -66,8 +70,10 @@ import android.os.SystemClock;  import android.os.UserHandle;  import android.provider.Settings;  import android.telephony.AccessNetworkConstants; +import android.telephony.CellSignalStrength;  import android.telephony.NetworkRegistrationState;  import android.telephony.ServiceState; +import android.telephony.SignalStrength;  import android.telephony.TelephonyManager;  import android.text.TextUtils;  import android.util.Log; @@ -123,9 +129,11 @@ public class NetworkMonitor extends StateMachine {      private static final int DEFAULT_DATA_STALL_MIN_EVALUATE_TIME_MS = 60 * 1000;      private static final int DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS = 30 * 60 * 1000; -    private static final int DATA_STALL_EVALUATION_TYPE_DNS = 1;      private static final int DEFAULT_DATA_STALL_EVALUATION_TYPES = -            (1 << DATA_STALL_EVALUATION_TYPE_DNS); +            DATA_STALL_EVALUATION_TYPE_DNS; +    // Reevaluate it as intending to increase the number. Larger log size may cause statsd +    // log buffer bust and have stats log lost. +    private static final int DEFAULT_DNS_LOG_SIZE = 20;      enum EvaluationResult {          VALIDATED(true), @@ -244,6 +252,7 @@ public class NetworkMonitor extends StateMachine {      private final ConnectivityManager mCm;      private final IpConnectivityLog mMetricsLog;      private final Dependencies mDependencies; +    private final DataStallStatsUtils mDetectionStatsUtils;      // Configuration values for captive portal detection probes.      private final String mCaptivePortalUserAgent; @@ -302,17 +311,19 @@ public class NetworkMonitor extends StateMachine {      private final int mDataStallEvaluationType;      private final DnsStallDetector mDnsStallDetector;      private long mLastProbeTime; +    // Set to true if data stall is suspected and reset to false after metrics are sent to statsd. +    private boolean mCollectDataStallMetrics = false;      public NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network,              SharedLog validationLog) {          this(context, cb, network, new IpConnectivityLog(), validationLog, -                Dependencies.DEFAULT); +                Dependencies.DEFAULT, new DataStallStatsUtils());      }      @VisibleForTesting      protected NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network,              IpConnectivityLog logger, SharedLog validationLogs, -            Dependencies deps) { +            Dependencies deps, DataStallStatsUtils detectionStatsUtils) {          // Add suffix indicating which NetworkMonitor we're talking about.          super(TAG + "/" + network.toString()); @@ -325,6 +336,7 @@ public class NetworkMonitor extends StateMachine {          mValidationLogs = validationLogs;          mCallback = cb;          mDependencies = deps; +        mDetectionStatsUtils = detectionStatsUtils;          mNonPrivateDnsBypassNetwork = network;          mNetwork = deps.getPrivateDnsBypassNetwork(network);          mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); @@ -656,6 +668,7 @@ public class NetworkMonitor extends StateMachine {                  case EVENT_DNS_NOTIFICATION:                      mDnsStallDetector.accumulateConsecutiveDnsTimeoutCount(message.arg1);                      if (isDataStall()) { +                        mCollectDataStallMetrics = true;                          validationLog("Suspecting data stall, reevaluate");                          transitionTo(mEvaluatingState);                      } @@ -667,6 +680,66 @@ public class NetworkMonitor extends StateMachine {          }      } +    private void writeDataStallStats(@NonNull final CaptivePortalProbeResult result) { +        /* +         * Collect data stall detection level information for each transport type. Collect type +         * specific information for cellular and wifi only currently. Generate +         * DataStallDetectionStats for each transport type. E.g., if a network supports both +         * TRANSPORT_WIFI and TRANSPORT_VPN, two DataStallDetectionStats will be generated. +         */ +        final int[] transports = mNetworkCapabilities.getTransportTypes(); + +        for (int i = 0; i < transports.length; i++) { +            DataStallStatsUtils.write(buildDataStallDetectionStats(transports[i]), result); +        } +        mCollectDataStallMetrics = false; +    } + +    @VisibleForTesting +    protected DataStallDetectionStats buildDataStallDetectionStats(int transport) { +        final DataStallDetectionStats.Builder stats = new DataStallDetectionStats.Builder(); +        if (VDBG_STALL) log("collectDataStallMetrics: type=" + transport); +        stats.setEvaluationType(DATA_STALL_EVALUATION_TYPE_DNS); +        stats.setNetworkType(transport); +        switch (transport) { +            case NetworkCapabilities.TRANSPORT_WIFI: +                // TODO: Update it if status query in dual wifi is supported. +                final WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); +                stats.setWiFiData(wifiInfo); +                break; +            case NetworkCapabilities.TRANSPORT_CELLULAR: +                final boolean isRoaming = !mNetworkCapabilities.hasCapability( +                        NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING); +                final SignalStrength ss = mTelephonyManager.getSignalStrength(); +                // TODO(b/120452078): Support multi-sim. +                stats.setCellData( +                        mTelephonyManager.getDataNetworkType(), +                        isRoaming, +                        mTelephonyManager.getNetworkOperator(), +                        mTelephonyManager.getSimOperator(), +                        (ss != null) +                        ? ss.getLevel() : CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN); +                break; +            default: +                // No transport type specific information for the other types. +                break; +        } +        addDnsEvents(stats); + +        return stats.build(); +    } + +    @VisibleForTesting +    protected void addDnsEvents(@NonNull final DataStallDetectionStats.Builder stats) { +        final int size = mDnsStallDetector.mResultIndices.size(); +        for (int i = 1; i <= DEFAULT_DNS_LOG_SIZE && i <= size; i++) { +            final int index = mDnsStallDetector.mResultIndices.indexOf(size - i); +            stats.addDnsEvent(mDnsStallDetector.mDnsEvents[index].mReturnCode, +                    mDnsStallDetector.mDnsEvents[index].mTimeStamp); +        } +    } + +      // Being in the MaybeNotifyState State indicates the user may have been notified that sign-in      // is required.  This State takes care to clear the notification upon exit from the State.      private class MaybeNotifyState extends State { @@ -972,6 +1045,11 @@ public class NetworkMonitor extends StateMachine {                      final CaptivePortalProbeResult probeResult =                              (CaptivePortalProbeResult) message.obj;                      mLastProbeTime = SystemClock.elapsedRealtime(); + +                    if (mCollectDataStallMetrics) { +                        writeDataStallStats(probeResult); +                    } +                      if (probeResult.isSuccessful()) {                          // Transit EvaluatingPrivateDnsState to get to Validated                          // state (even if no Private DNS validation required). @@ -1617,7 +1695,6 @@ public class NetworkMonitor extends StateMachine {       */      @VisibleForTesting      protected class DnsStallDetector { -        private static final int DEFAULT_DNS_LOG_SIZE = 50;          private int mConsecutiveTimeoutCount = 0;          private int mSize;          final DnsResult[] mDnsEvents; @@ -1695,7 +1772,7 @@ public class NetworkMonitor extends StateMachine {      }      private boolean dataStallEvaluateTypeEnabled(int type) { -        return (mDataStallEvaluationType & (1 << type)) != 0; +        return (mDataStallEvaluationType & type) != 0;      }      @VisibleForTesting @@ -1715,7 +1792,7 @@ public class NetworkMonitor extends StateMachine {          }          // Check dns signal. Suspect it may be a data stall if both : -        // 1. The number of consecutive DNS query timeouts > mConsecutiveDnsTimeoutThreshold. +        // 1. The number of consecutive DNS query timeouts >= mConsecutiveDnsTimeoutThreshold.          // 2. Those consecutive DNS queries happened in the last mValidDataStallDnsTimeThreshold ms.          if (dataStallEvaluateTypeEnabled(DATA_STALL_EVALUATION_TYPE_DNS)) {              if (mDnsStallDetector.isDataStallSuspected(mConsecutiveDnsTimeoutThreshold, diff --git a/packages/NetworkStack/tests/Android.bp b/packages/NetworkStack/tests/Android.bp index 5c7b514834cb..f22b6472847c 100644 --- a/packages/NetworkStack/tests/Android.bp +++ b/packages/NetworkStack/tests/Android.bp @@ -21,7 +21,7 @@ android_test {      test_suites: ["device-tests"],      resource_dirs: ["res"],      static_libs: [ -        "android-support-test", +        "androidx.test.rules",          "frameworks-base-testutils",          "mockito-target-extended-minus-junit4",          "NetworkStackLib", diff --git a/packages/NetworkStack/tests/AndroidManifest.xml b/packages/NetworkStack/tests/AndroidManifest.xml index 9cb2c21cc399..5dcf6ff1b514 100644 --- a/packages/NetworkStack/tests/AndroidManifest.xml +++ b/packages/NetworkStack/tests/AndroidManifest.xml @@ -47,7 +47,7 @@      <application android:debuggable="true">          <uses-library android:name="android.test.runner" />      </application> -    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner" +    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"          android:targetPackage="com.android.server.networkstack.tests"          android:label="Networking service tests">      </instrumentation> diff --git a/packages/NetworkStack/tests/AndroidTest.xml b/packages/NetworkStack/tests/AndroidTest.xml index 6b08b57731b7..047bc2e67808 100644 --- a/packages/NetworkStack/tests/AndroidTest.xml +++ b/packages/NetworkStack/tests/AndroidTest.xml @@ -23,7 +23,7 @@      <option name="test-tag" value="NetworkStackTests" />      <test class="com.android.tradefed.testtype.AndroidJUnitTest" >          <option name="package" value="com.android.server.networkstack.tests" /> -        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" /> +        <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />          <option name="hidden-api-checks" value="false"/>      </test>  </configuration>
\ No newline at end of file diff --git a/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java b/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java index 3414397d73c3..88a05d506aa4 100644 --- a/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java +++ b/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java @@ -53,14 +53,15 @@ import android.net.util.SharedLog;  import android.os.ConditionVariable;  import android.os.Parcelable;  import android.os.SystemClock; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.system.ErrnoException;  import android.system.Os;  import android.text.format.DateUtils;  import android.util.Log; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.HexDump;  import com.android.server.networkstack.tests.R;  import com.android.server.util.NetworkStackConstants; diff --git a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpLeaseRepositoryTest.java b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpLeaseRepositoryTest.java index 4abd77e9cfde..27d725540d34 100644 --- a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpLeaseRepositoryTest.java +++ b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpLeaseRepositoryTest.java @@ -31,16 +31,15 @@ import static org.junit.Assert.assertTrue;  import static org.junit.Assert.fail;  import static org.mockito.Mockito.when; -import static java.lang.String.format; -  import android.annotation.NonNull;  import android.annotation.Nullable;  import android.net.IpPrefix;  import android.net.MacAddress;  import android.net.dhcp.DhcpServer.Clock;  import android.net.util.SharedLog; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; @@ -48,6 +47,8 @@ import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; +import static java.lang.String.format; +  import java.net.Inet4Address;  import java.util.Arrays;  import java.util.Collections; diff --git a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpPacketTest.java b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpPacketTest.java index 7544e72da02e..4d98403bfd4e 100644 --- a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpPacketTest.java +++ b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpPacketTest.java @@ -48,8 +48,9 @@ import android.net.DhcpResults;  import android.net.LinkAddress;  import android.net.NetworkUtils;  import android.net.metrics.DhcpErrorEvent; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.util.HexDump; @@ -324,7 +325,7 @@ public class DhcpPacketTest {      @Test      public void testOffer1() throws Exception {          // TODO: Turn all of these into golden files. This will probably require using -        // android.support.test.InstrumentationRegistry for obtaining a Context object +        // androidx.test.InstrumentationRegistry for obtaining a Context object          // to read such golden files, along with an appropriate Android.mk.          final ByteBuffer packet = ByteBuffer.wrap(HexDump.hexStringToByteArray(              // IP header. diff --git a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServerTest.java b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServerTest.java index d4c1e2e16731..7d5e9e3ba174 100644 --- a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServerTest.java +++ b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServerTest.java @@ -51,11 +51,12 @@ import android.net.dhcp.DhcpServer.Clock;  import android.net.dhcp.DhcpServer.Dependencies;  import android.net.util.SharedLog;  import android.os.HandlerThread; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import org.junit.After;  import org.junit.Before;  import org.junit.Test; diff --git a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServingParamsTest.java b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServingParamsTest.java index 1004382b3adf..57a87a4d3fb1 100644 --- a/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServingParamsTest.java +++ b/packages/NetworkStack/tests/src/android/net/dhcp/DhcpServingParamsTest.java @@ -29,8 +29,9 @@ import android.annotation.Nullable;  import android.net.LinkAddress;  import android.net.dhcp.DhcpServingParams.InvalidParameterException;  import android.net.shared.Inet4AddressUtils; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java b/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java index aaaff0279fed..19902293b61a 100644 --- a/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java +++ b/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java @@ -47,10 +47,11 @@ import android.net.shared.InitialConfiguration;  import android.net.shared.ProvisioningConfiguration;  import android.net.util.InterfaceParams;  import android.provider.Settings; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.test.mock.MockContentResolver; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.R;  import com.android.internal.util.test.FakeSettingsProvider;  import com.android.server.NetworkObserver; diff --git a/packages/NetworkStack/tests/src/android/net/ip/IpReachabilityMonitorTest.java b/packages/NetworkStack/tests/src/android/net/ip/IpReachabilityMonitorTest.java index e3b5ddf6f4cf..64b168ae2b5a 100644 --- a/packages/NetworkStack/tests/src/android/net/ip/IpReachabilityMonitorTest.java +++ b/packages/NetworkStack/tests/src/android/net/ip/IpReachabilityMonitorTest.java @@ -24,8 +24,9 @@ import android.net.util.InterfaceParams;  import android.net.util.SharedLog;  import android.os.Handler;  import android.os.Looper; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; @@ -33,7 +34,6 @@ import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; -  /**   * Tests for IpReachabilityMonitor.   */ diff --git a/packages/NetworkStack/tests/src/android/net/util/ConnectivityPacketSummaryTest.java b/packages/NetworkStack/tests/src/android/net/util/ConnectivityPacketSummaryTest.java index dfaf52a953c7..71be8b38d3fe 100644 --- a/packages/NetworkStack/tests/src/android/net/util/ConnectivityPacketSummaryTest.java +++ b/packages/NetworkStack/tests/src/android/net/util/ConnectivityPacketSummaryTest.java @@ -20,8 +20,9 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertTrue;  import android.net.MacAddress; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import libcore.util.HexEncoding; diff --git a/packages/NetworkStack/tests/src/android/net/util/PacketReaderTest.java b/packages/NetworkStack/tests/src/android/net/util/PacketReaderTest.java index 6e11c409e104..289dcade99a6 100644 --- a/packages/NetworkStack/tests/src/android/net/util/PacketReaderTest.java +++ b/packages/NetworkStack/tests/src/android/net/util/PacketReaderTest.java @@ -31,12 +31,13 @@ import static org.junit.Assert.fail;  import android.os.Handler;  import android.os.HandlerThread; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.system.ErrnoException;  import android.system.Os;  import android.system.StructTimeval; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.After;  import org.junit.Before;  import org.junit.Test; diff --git a/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java b/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java index 9a16bb77182e..ee2baf20bb8e 100644 --- a/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java +++ b/packages/NetworkStack/tests/src/com/android/server/connectivity/NetworkMonitorTest.java @@ -20,6 +20,7 @@ import static android.net.CaptivePortal.APP_RETURN_DISMISSED;  import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_INVALID;  import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_VALID;  import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; +import static android.provider.Settings.Global.DATA_STALL_EVALUATION_TYPE_DNS;  import static junit.framework.Assert.assertEquals;  import static junit.framework.Assert.assertFalse; @@ -39,6 +40,7 @@ import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; +import android.annotation.NonNull;  import android.content.Context;  import android.net.ConnectivityManager;  import android.net.INetworkMonitorCallbacks; @@ -48,19 +50,24 @@ import android.net.Network;  import android.net.NetworkCapabilities;  import android.net.NetworkInfo;  import android.net.captiveportal.CaptivePortalProbeResult; +import android.net.metrics.DataStallDetectionStats; +import android.net.metrics.DataStallStatsUtils;  import android.net.metrics.IpConnectivityLog;  import android.net.util.SharedLog; +import android.net.wifi.WifiInfo;  import android.net.wifi.WifiManager;  import android.os.Bundle;  import android.os.ConditionVariable;  import android.os.Handler;  import android.os.SystemClock;  import android.provider.Settings; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import android.telephony.CellSignalStrength;  import android.telephony.TelephonyManager;  import android.util.ArrayMap; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; @@ -77,7 +84,6 @@ import java.util.Random;  import javax.net.ssl.SSLHandshakeException; -  @RunWith(AndroidJUnit4.class)  @SmallTest  public class NetworkMonitorTest { @@ -98,6 +104,8 @@ public class NetworkMonitorTest {      private @Mock NetworkMonitor.Dependencies mDependencies;      private @Mock INetworkMonitorCallbacks mCallbacks;      private @Spy Network mNetwork = new Network(TEST_NETID); +    private @Mock DataStallStatsUtils mDataStallStatsUtils; +    private @Mock WifiInfo mWifiInfo;      private static final int TEST_NETID = 4242; @@ -105,10 +113,11 @@ public class NetworkMonitorTest {      private static final String TEST_HTTPS_URL = "https://www.google.com/gen_204";      private static final String TEST_FALLBACK_URL = "http://fallback.google.com/gen_204";      private static final String TEST_OTHER_FALLBACK_URL = "http://otherfallback.google.com/gen_204"; +    private static final String TEST_MCCMNC = "123456"; -    private static final int DATA_STALL_EVALUATION_TYPE_DNS = 1;      private static final int RETURN_CODE_DNS_SUCCESS = 0;      private static final int RETURN_CODE_DNS_TIMEOUT = 255; +    private static final int DEFAULT_DNS_TIMEOUT_THRESHOLD = 5;      private static final int HANDLER_TIMEOUT_MS = 1000; @@ -177,7 +186,7 @@ public class NetworkMonitorTest {          when(mCm.getNetworkCapabilities(any())).thenReturn(METERED_CAPABILITIES);          setMinDataStallEvaluateInterval(500); -        setDataStallEvaluationType(1 << DATA_STALL_EVALUATION_TYPE_DNS); +        setDataStallEvaluationType(DATA_STALL_EVALUATION_TYPE_DNS);          setValidDataStallDnsTimeThreshold(500);          setConsecutiveDnsTimeoutThreshold(5);      } @@ -186,9 +195,9 @@ public class NetworkMonitorTest {          private long mProbeTime = 0;          WrappedNetworkMonitor(Context context, Network network, IpConnectivityLog logger, -                Dependencies deps) { +                Dependencies deps, DataStallStatsUtils statsUtils) {                  super(context, mCallbacks, network, logger, -                        new SharedLog("test_nm"), deps); +                        new SharedLog("test_nm"), deps, statsUtils);          }          @Override @@ -199,11 +208,16 @@ public class NetworkMonitorTest {          protected void setLastProbeTime(long time) {              mProbeTime = time;          } + +        @Override +        protected void addDnsEvents(@NonNull final DataStallDetectionStats.Builder stats) { +            generateTimeoutDnsEvent(stats, DEFAULT_DNS_TIMEOUT_THRESHOLD); +        }      }      private WrappedNetworkMonitor makeMeteredWrappedNetworkMonitor() {          final WrappedNetworkMonitor nm = new WrappedNetworkMonitor( -                mContext, mNetwork, mLogger, mDependencies); +                mContext, mNetwork, mLogger, mDependencies, mDataStallStatsUtils);          when(mCm.getNetworkCapabilities(any())).thenReturn(METERED_CAPABILITIES);          nm.start();          waitForIdle(nm.getHandler()); @@ -212,7 +226,7 @@ public class NetworkMonitorTest {      private WrappedNetworkMonitor makeNotMeteredWrappedNetworkMonitor() {          final WrappedNetworkMonitor nm = new WrappedNetworkMonitor( -                mContext, mNetwork, mLogger, mDependencies); +                mContext, mNetwork, mLogger, mDependencies, mDataStallStatsUtils);          when(mCm.getNetworkCapabilities(any())).thenReturn(NOT_METERED_CAPABILITIES);          nm.start();          waitForIdle(nm.getHandler()); @@ -222,7 +236,7 @@ public class NetworkMonitorTest {      private NetworkMonitor makeMonitor() {          final NetworkMonitor nm = new NetworkMonitor(                  mContext, mCallbacks, mNetwork, mLogger, mValidationLogger, -                mDependencies); +                mDependencies, mDataStallStatsUtils);          nm.start();          waitForIdle(nm.getHandler());          return nm; @@ -384,7 +398,7 @@ public class NetworkMonitorTest {      public void testIsDataStall_EvaluationDnsOnNotMeteredNetwork() {          WrappedNetworkMonitor wrappedMonitor = makeNotMeteredWrappedNetworkMonitor();          wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 100); -        makeDnsTimeoutEvent(wrappedMonitor, 5); +        makeDnsTimeoutEvent(wrappedMonitor, DEFAULT_DNS_TIMEOUT_THRESHOLD);          assertTrue(wrappedMonitor.isDataStall());      } @@ -395,7 +409,7 @@ public class NetworkMonitorTest {          assertFalse(wrappedMonitor.isDataStall());          wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000); -        makeDnsTimeoutEvent(wrappedMonitor, 5); +        makeDnsTimeoutEvent(wrappedMonitor, DEFAULT_DNS_TIMEOUT_THRESHOLD);          assertTrue(wrappedMonitor.isDataStall());      } @@ -429,7 +443,7 @@ public class NetworkMonitorTest {          // Test dns events happened in valid dns time threshold.          WrappedNetworkMonitor wrappedMonitor = makeMeteredWrappedNetworkMonitor();          wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 100); -        makeDnsTimeoutEvent(wrappedMonitor, 5); +        makeDnsTimeoutEvent(wrappedMonitor, DEFAULT_DNS_TIMEOUT_THRESHOLD);          assertFalse(wrappedMonitor.isDataStall());          wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000);          assertTrue(wrappedMonitor.isDataStall()); @@ -438,7 +452,7 @@ public class NetworkMonitorTest {          setValidDataStallDnsTimeThreshold(0);          wrappedMonitor = makeMeteredWrappedNetworkMonitor();          wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 100); -        makeDnsTimeoutEvent(wrappedMonitor, 5); +        makeDnsTimeoutEvent(wrappedMonitor, DEFAULT_DNS_TIMEOUT_THRESHOLD);          assertFalse(wrappedMonitor.isDataStall());          wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000);          assertFalse(wrappedMonitor.isDataStall()); @@ -505,6 +519,59 @@ public class NetworkMonitorTest {                  .notifyNetworkTested(NETWORK_TEST_RESULT_VALID, null);      } +    @Test +    public void testDataStall_StallSuspectedAndSendMetrics() throws IOException { +        WrappedNetworkMonitor wrappedMonitor = makeNotMeteredWrappedNetworkMonitor(); +        wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000); +        makeDnsTimeoutEvent(wrappedMonitor, 5); +        assertTrue(wrappedMonitor.isDataStall()); +        verify(mDataStallStatsUtils, times(1)).write(any(), any()); +    } + +    @Test +    public void testDataStall_NoStallSuspectedAndSendMetrics() throws IOException { +        WrappedNetworkMonitor wrappedMonitor = makeNotMeteredWrappedNetworkMonitor(); +        wrappedMonitor.setLastProbeTime(SystemClock.elapsedRealtime() - 1000); +        makeDnsTimeoutEvent(wrappedMonitor, 3); +        assertFalse(wrappedMonitor.isDataStall()); +        verify(mDataStallStatsUtils, never()).write(any(), any()); +    } + +    @Test +    public void testCollectDataStallMetrics() { +        WrappedNetworkMonitor wrappedMonitor = makeNotMeteredWrappedNetworkMonitor(); + +        when(mTelephony.getDataNetworkType()).thenReturn(TelephonyManager.NETWORK_TYPE_LTE); +        when(mTelephony.getNetworkOperator()).thenReturn(TEST_MCCMNC); +        when(mTelephony.getSimOperator()).thenReturn(TEST_MCCMNC); + +        DataStallDetectionStats.Builder stats = +                new DataStallDetectionStats.Builder() +                .setEvaluationType(DATA_STALL_EVALUATION_TYPE_DNS) +                .setNetworkType(NetworkCapabilities.TRANSPORT_CELLULAR) +                .setCellData(TelephonyManager.NETWORK_TYPE_LTE /* radioType */, +                        true /* roaming */, +                        TEST_MCCMNC /* networkMccmnc */, +                        TEST_MCCMNC /* simMccmnc */, +                        CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN /* signalStrength */); +        generateTimeoutDnsEvent(stats, DEFAULT_DNS_TIMEOUT_THRESHOLD); + +        assertEquals(wrappedMonitor.buildDataStallDetectionStats( +                 NetworkCapabilities.TRANSPORT_CELLULAR), stats.build()); + +        when(mWifi.getConnectionInfo()).thenReturn(mWifiInfo); + +        stats = new DataStallDetectionStats.Builder() +                .setEvaluationType(DATA_STALL_EVALUATION_TYPE_DNS) +                .setNetworkType(NetworkCapabilities.TRANSPORT_WIFI) +                .setWiFiData(mWifiInfo); +        generateTimeoutDnsEvent(stats, DEFAULT_DNS_TIMEOUT_THRESHOLD); + +        assertEquals( +                wrappedMonitor.buildDataStallDetectionStats(NetworkCapabilities.TRANSPORT_WIFI), +                stats.build()); +    } +      private void makeDnsTimeoutEvent(WrappedNetworkMonitor wrappedMonitor, int count) {          for (int i = 0; i < count; i++) {              wrappedMonitor.getDnsStallDetector().accumulateConsecutiveDnsTimeoutCount( @@ -594,5 +661,11 @@ public class NetworkMonitorTest {      private void setStatus(HttpURLConnection connection, int status) throws IOException {          doReturn(status).when(connection).getResponseCode();      } + +    private void generateTimeoutDnsEvent(DataStallDetectionStats.Builder stats, int num) { +        for (int i = 0; i < num; i++) { +            stats.addDnsEvent(RETURN_CODE_DNS_TIMEOUT, 123456789 /* timeMs */); +        } +    }  } diff --git a/packages/NetworkStack/tests/src/com/android/server/util/SharedLogTest.java b/packages/NetworkStack/tests/src/com/android/server/util/SharedLogTest.java index 07ad3123bc53..b1db051d2bd8 100644 --- a/packages/NetworkStack/tests/src/com/android/server/util/SharedLogTest.java +++ b/packages/NetworkStack/tests/src/com/android/server/util/SharedLogTest.java @@ -20,8 +20,9 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertTrue;  import android.net.util.SharedLog; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/packages/NetworkStackPermissionStub/Android.bp b/packages/NetworkStackPermissionStub/Android.bp index dd70cf56b51b..8cee92e5fe6d 100644 --- a/packages/NetworkStackPermissionStub/Android.bp +++ b/packages/NetworkStackPermissionStub/Android.bp @@ -21,6 +21,7 @@ android_app {      // a classes.dex.      srcs: ["src/**/*.java"],      platform_apis: true, +    min_sdk_version: "28",      certificate: "networkstack",      privileged: true,      manifest: "AndroidManifest.xml", diff --git a/packages/NetworkStackPermissionStub/AndroidManifest.xml b/packages/NetworkStackPermissionStub/AndroidManifest.xml index a8742d7ab34f..e83f0503d280 100644 --- a/packages/NetworkStackPermissionStub/AndroidManifest.xml +++ b/packages/NetworkStackPermissionStub/AndroidManifest.xml @@ -18,7 +18,10 @@  -->  <manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.android.networkstack.permissionstub" -    android:sharedUserId="android.uid.networkstack"> +    android:sharedUserId="android.uid.networkstack" +    android:versionCode="11" +    android:versionName="Q-initial"> +    <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28" />      <!--      This package only exists to define the below permissions, and enforce that they are only      granted to apps sharing the same signature. @@ -34,4 +37,4 @@                  android:protectionLevel="signature"/>      <application android:name="com.android.server.NetworkStackPermissionStub"/> -</manifest>
\ No newline at end of file +</manifest> diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index b277666411f9..40c8b01578b7 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -136,6 +136,7 @@      <uses-permission android:name="android.permission.SET_TIME_ZONE" />      <uses-permission android:name="android.permission.DISABLE_HIDDEN_API_CHECKS" />      <uses-permission android:name="android.permission.MANAGE_ROLE_HOLDERS" /> +    <uses-permission android:name="android.permission.OBSERVE_ROLE_HOLDERS" />      <!-- Permission needed to rename bugreport notifications (so they're not shown as Shell) -->      <uses-permission android:name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" />      <!-- Permission needed to hold a wakelock in dumpstate.cpp (drop_root_user()) --> diff --git a/packages/SystemUI/shared/tests/Android.mk b/packages/SystemUI/shared/tests/Android.mk index 02774c946596..34069ef403ac 100644 --- a/packages/SystemUI/shared/tests/Android.mk +++ b/packages/SystemUI/shared/tests/Android.mk @@ -35,7 +35,7 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src)  LOCAL_STATIC_JAVA_LIBRARIES := \  	SystemUISharedLib \      metrics-helper-lib \ -    android-support-test \ +    androidx.test.rules \      mockito-target-inline-minus-junit4 \      SystemUI-proto \      SystemUI-tags \ diff --git a/packages/SystemUI/shared/tests/src/com/android/systemui/shared/SysuiSharedLibTestCase.java b/packages/SystemUI/shared/tests/src/com/android/systemui/shared/SysuiSharedLibTestCase.java index 04b341e38c04..4f4d8784e52d 100644 --- a/packages/SystemUI/shared/tests/src/com/android/systemui/shared/SysuiSharedLibTestCase.java +++ b/packages/SystemUI/shared/tests/src/com/android/systemui/shared/SysuiSharedLibTestCase.java @@ -20,7 +20,8 @@ import android.content.Context;  import android.os.Handler;  import android.os.Looper;  import android.os.MessageQueue; -import android.support.test.InstrumentationRegistry; + +import androidx.test.InstrumentationRegistry;  import org.junit.After;  import org.junit.Before; diff --git a/packages/SystemUI/shared/tests/src/com/android/systemui/shared/recents/model/HighResThumbnailLoaderTest.java b/packages/SystemUI/shared/tests/src/com/android/systemui/shared/recents/model/HighResThumbnailLoaderTest.java index 3b647c12c0b4..e7f33881550f 100644 --- a/packages/SystemUI/shared/tests/src/com/android/systemui/shared/recents/model/HighResThumbnailLoaderTest.java +++ b/packages/SystemUI/shared/tests/src/com/android/systemui/shared/recents/model/HighResThumbnailLoaderTest.java @@ -26,10 +26,10 @@ import static org.mockito.Mockito.never;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.content.ComponentName;  import android.os.Looper; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.shared.SysuiSharedLibTestCase;  import com.android.systemui.shared.recents.model.Task.TaskKey; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java index 24a589665600..72da591e0618 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java @@ -43,6 +43,7 @@ import com.android.systemui.tuner.TunerService.Tunable;  import java.io.FileDescriptor;  import java.io.PrintWriter;  import java.util.ArrayList; +import java.util.Collections;  import java.util.List;  import static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY; @@ -121,7 +122,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu          // Remove all the icons.          for (int i = currentSlots.size() - 1; i >= 0; i--) {              Slot s = currentSlots.get(i); -            slotsToReAdd.put(s, s.getHolderListInViewOrder()); +            slotsToReAdd.put(s, s.getHolderList());              removeAllIconsForSlot(s.getName());          } @@ -200,6 +201,10 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu          Slot mobileSlot = getSlot(slot);          int slotIndex = getSlotIndex(slot); +        // Reverse the sort order to show icons with left to right([Slot1][Slot2]..). +        // StatusBarIconList has UI design that first items go to the right of second items. +        Collections.reverse(iconStates); +          for (MobileIconState state : iconStates) {              StatusBarIconHolder holder = mobileSlot.getHolderForTag(state.subId);              if (holder == null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java index b7e1cfb0097b..fc4122580c2e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java @@ -249,6 +249,25 @@ public class StatusBarIconList {              return holders;          } +        /** +         * Build a list of the {@link StatusBarIconHolder}s in the same order. +         * This provides a safe list that can be iterated and inserted into its group. +         * +         * @return all holders contained here +         */ +        public List<StatusBarIconHolder> getHolderList() { +            ArrayList<StatusBarIconHolder> holders = new ArrayList<>(); +            if (mHolder != null) { +                holders.add(mHolder); +            } + +            if (mSubSlots != null) { +                holders.addAll(mSubSlots); +            } + +            return holders; +        } +          @Override          public String toString() {              return String.format("(%s) %s", mName, subSlotsString()); diff --git a/packages/SystemUI/tests/Android.mk b/packages/SystemUI/tests/Android.mk index 9ee55324efa2..aa3d2d3f7c03 100644 --- a/packages/SystemUI/tests/Android.mk +++ b/packages/SystemUI/tests/Android.mk @@ -39,7 +39,8 @@ LOCAL_STATIC_ANDROID_LIBRARIES := \  LOCAL_STATIC_JAVA_LIBRARIES := \      metrics-helper-lib \ -    android-support-test \ +    androidx.test.rules \ +    hamcrest-library \      mockito-target-inline-minus-junit4 \      testables \      truth-prebuilt \ diff --git a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java index fe235410cc26..14722430016d 100644 --- a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java +++ b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java @@ -16,22 +16,22 @@ package com.android;  import static org.junit.Assert.assertFalse; -import android.support.test.filters.LargeTest; -import android.support.test.filters.MediumTest; -import android.support.test.filters.SmallTest; -import android.support.test.internal.runner.ClassPathScanner; -import android.support.test.internal.runner.ClassPathScanner.ChainedClassNameFilter; -import android.support.test.internal.runner.ClassPathScanner.ExternalClassNameFilter;  import android.testing.AndroidTestingRunner;  import android.text.TextUtils;  import android.util.Log; +import androidx.test.filters.LargeTest; +import androidx.test.filters.MediumTest; +import androidx.test.filters.SmallTest; +import androidx.test.internal.runner.ClassPathScanner; +import androidx.test.internal.runner.ClassPathScanner.ChainedClassNameFilter; +import androidx.test.internal.runner.ClassPathScanner.ExternalClassNameFilter; +  import com.android.systemui.SysuiBaseFragmentTest;  import com.android.systemui.SysuiTestCase;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.junit.internal.builders.AllDefaultPossibilitiesBuilder;  import java.io.IOException;  import java.lang.reflect.Method; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java index e37ea95515d0..dcafa7203ce9 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockAccessibilityDelegateTest.java @@ -20,12 +20,13 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; -import android.support.test.filters.SmallTest;  import android.text.TextUtils;  import android.view.accessibility.AccessibilityEvent;  import android.view.accessibility.AccessibilityNodeInfo;  import android.widget.TextView; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java index 359832f7a542..d1a1ad66b909 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewTest.java @@ -21,12 +21,13 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.verifyZeroInteractions; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.KeyEvent;  import android.view.LayoutInflater; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java index fcf327b5d1fa..8db195a23a15 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java @@ -16,19 +16,18 @@  package com.android.keyguard; -import org.junit.Test; -import org.junit.runner.RunWith; -  import android.content.Context; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.test.UiThreadTest; -import android.util.Log;  import android.view.LayoutInflater; -import android.view.View; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase; +import org.junit.Test; +import org.junit.runner.RunWith; +  @SmallTest  @RunWith(AndroidJUnit4.class)  public class KeyguardSecurityContainerTest extends SysuiTestCase { diff --git a/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java index e1f56a47e641..d1573c3cac76 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java @@ -16,8 +16,6 @@  package com.android.systemui; -import com.android.settingslib.graph.BatteryMeterDrawableBase; -  import static org.mockito.Mockito.any;  import static org.mockito.Mockito.anyFloat;  import static org.mockito.Mockito.anyString; @@ -30,9 +28,12 @@ import static org.mockito.Mockito.verify;  import android.content.res.Resources;  import android.graphics.Canvas; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.settingslib.graph.BatteryMeterDrawableBase; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java b/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java index 3426e117ab13..5513a5408c00 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java @@ -21,7 +21,8 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import android.os.Looper; -import android.support.test.filters.SmallTest; + +import androidx.test.filters.SmallTest;  import com.android.systemui.Dependency.DependencyKey;  import com.android.systemui.statusbar.policy.FlashlightController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java index 08c4235e8a48..4d14c05e64f7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/ExpandHelperTest.java @@ -16,15 +16,18 @@  package com.android.systemui; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +  import android.animation.ObjectAnimator;  import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.annotation.UiThreadTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.annotation.UiThreadTest; +import androidx.test.filters.SmallTest; +  import com.android.systemui.statusbar.ExpandableNotificationRow;  import com.android.systemui.statusbar.NotificationTestHelper; @@ -32,10 +35,6 @@ import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -  @SmallTest  @RunWith(AndroidTestingRunner.class)  @RunWithLooper(setAsMainLooper = true) diff --git a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java index f278a17d0637..4090b1d1adc7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/ForegroundServiceControllerTest.java @@ -30,10 +30,11 @@ import android.app.NotificationManager;  import android.os.Bundle;  import android.os.UserHandle;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.widget.RemoteViews; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.messages.nano.SystemMessageProto;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java index cc969177ab2e..1b9d283bca5c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java @@ -20,8 +20,8 @@ import static com.android.systemui.tuner.TunablePadding.FLAG_END;  import static com.android.systemui.tuner.TunablePadding.FLAG_START;  import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat;  import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat;  import static org.mockito.ArgumentMatchers.any;  import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.anyString; @@ -36,7 +36,6 @@ import static org.mockito.Mockito.when;  import android.app.Fragment;  import android.content.res.Configuration;  import android.os.Handler; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; @@ -44,6 +43,8 @@ import android.view.Display;  import android.view.View;  import android.view.WindowManager; +import androidx.test.filters.SmallTest; +  import com.android.systemui.R.dimen;  import com.android.systemui.ScreenDecorations.TunablePaddingTagListener;  import com.android.systemui.fragments.FragmentHostManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java index 383db053b1f5..c6e85c3f81a0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java @@ -29,9 +29,10 @@ import android.content.Context;  import android.content.Intent;  import android.content.IntentFilter;  import android.net.Uri; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner; +import androidx.test.filters.SmallTest; +  import com.android.settingslib.SliceBroadcastRelay;  import org.junit.Test; diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java index b6335f368183..256cfb28d4de 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java @@ -19,10 +19,11 @@ import static org.mockito.Mockito.when;  import android.app.Fragment;  import android.app.Instrumentation; -import android.support.test.InstrumentationRegistry;  import android.testing.BaseFragmentTest;  import android.testing.DexmakerShareClassLoaderRule; +import androidx.test.InstrumentationRegistry; +  import com.android.systemui.utils.leaks.LeakCheckedTest;  import com.android.systemui.utils.leaks.LeakCheckedTest.SysuiLeakCheck; diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java index a35ca46833e7..4ad103c68312 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java +++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java @@ -23,11 +23,12 @@ import android.os.Handler;  import android.os.Looper;  import android.os.MessageQueue;  import android.os.ParcelFileDescriptor; -import android.support.test.InstrumentationRegistry;  import android.testing.DexmakerShareClassLoaderRule;  import android.testing.LeakCheck;  import android.util.Log; +import androidx.test.InstrumentationRegistry; +  import com.android.keyguard.KeyguardUpdateMonitor;  import org.junit.After; diff --git a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java index 13dc36da2698..1649f9845661 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java +++ b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java @@ -22,8 +22,9 @@ import static org.junit.Assert.assertNotEquals;  import android.app.WallpaperColors;  import android.app.WallpaperManager;  import android.graphics.Color; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.colorextraction.ColorExtractor;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java index 0bbdeb537248..ec9acdf26c8a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/AlwaysOnDisplayPolicyTest.java @@ -19,10 +19,11 @@ package com.android.systemui.doze;  import static com.google.common.truth.Truth.assertThat;  import android.provider.Settings; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.text.format.DateUtils; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationTest.java index bb67d6e03a9d..3062b8f2d2f3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeConfigurationTest.java @@ -20,8 +20,9 @@ import static junit.framework.TestCase.assertEquals;  import android.os.UserHandle;  import android.provider.Settings; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.hardware.AmbientDisplayConfiguration;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java index 368c814f8e0a..43836de3f377 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java @@ -28,8 +28,8 @@ import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.Mockito.doAnswer;  import static org.mockito.Mockito.mock; @@ -38,16 +38,15 @@ import static org.mockito.Mockito.reset;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner; -import android.view.Display; +import android.testing.UiThreadTest; + +import androidx.test.filters.SmallTest;  import com.android.internal.hardware.AmbientDisplayConfiguration;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.util.wakelock.WakeLockFake; -import android.testing.UiThreadTest; -  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java index 5e12781399e5..912a95adfdb6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java @@ -28,14 +28,13 @@ import static com.android.systemui.doze.DozeMachine.State.INITIALIZED;  import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;  import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertThat;  import static org.junit.Assert.assertTrue;  import android.os.PowerManager; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.utils.hardware.FakeSensorManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java index a17a95f6543d..903e4a1efa53 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java @@ -22,9 +22,10 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest;  import android.view.Display; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.phone.DozeParameters; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java index b6039b66e6cb..bfd448a2926d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java @@ -30,19 +30,16 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertThat;  import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.os.Looper; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.Display; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.phone.DozeParameters; -import com.android.systemui.util.wakelock.WakeLock;  import com.android.systemui.util.wakelock.WakeLockFake;  import com.android.systemui.utils.os.FakeHandler; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java index ed935619b2f6..fac58a0a78ea 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java @@ -22,9 +22,10 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest;  import android.view.Display; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.phone.DozeParameters; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java index c2da7f5280b5..e18b625e4e5d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java @@ -27,11 +27,12 @@ import android.app.AlarmManager;  import android.app.Instrumentation;  import android.os.Handler;  import android.os.Looper; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +  import com.android.internal.hardware.AmbientDisplayConfiguration;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.phone.DozeParameters; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java index 0d8d9526f607..25231bcbc1c4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java @@ -27,19 +27,17 @@ import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.anyLong;  import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.Mockito.clearInvocations; -import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.never;  import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.app.AlarmManager;  import android.os.Handler;  import android.os.HandlerThread; -import android.os.PowerManager; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.keyguard.KeyguardUpdateMonitor;  import com.android.systemui.SysuiTestCase; @@ -47,7 +45,6 @@ import com.android.systemui.statusbar.phone.DozeParameters;  import com.android.systemui.util.wakelock.WakeLockFake;  import org.junit.After; -import org.junit.Assert;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; @@ -172,4 +169,4 @@ public class DozeUiTest extends SysuiTestCase {          mDozeUi.transitionTo(UNINITIALIZED, DOZE);          verify(mHost).setAnimateWakeup(eq(false));      } -}
\ No newline at end of file +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeWallpaperStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeWallpaperStateTest.java index 6ac44628b52f..1ea2e296cdad 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeWallpaperStateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeWallpaperStateTest.java @@ -18,16 +18,15 @@ package com.android.systemui.doze;  import static org.mockito.ArgumentMatchers.anyBoolean;  import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.reset;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.app.IWallpaperManager;  import android.os.RemoteException; -import android.support.test.filters.SmallTest; -import com.android.keyguard.KeyguardUpdateMonitor; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.phone.DozeParameters; diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java index 308670dc7cfb..d35fc30da6c4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/DismissCallbackRegistryTest.java @@ -19,12 +19,11 @@ package com.android.systemui.keyguard;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.policy.IKeyguardDismissCallback;  import com.android.systemui.SysuiTestCase; -import com.android.systemui.UiOffloadThread;  import org.junit.Before;  import org.junit.Test; diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java index 46e2bfbb1431..7ae7aa409a6c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java @@ -19,25 +19,28 @@ package com.android.systemui.keyguard;  import static org.mockito.ArgumentMatchers.any;  import static org.mockito.ArgumentMatchers.anyString;  import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.never;  import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when;  import android.app.AlarmManager;  import android.content.ContentResolver;  import android.content.Intent;  import android.net.Uri;  import android.provider.Settings; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; -import android.util.Log; + +import androidx.slice.Slice; +import androidx.slice.SliceItem; +import androidx.slice.SliceProvider; +import androidx.slice.SliceSpecs; +import androidx.slice.builders.ListBuilder; +import androidx.slice.core.SliceQuery; +import androidx.test.filters.SmallTest;  import com.android.systemui.SysuiTestCase; -import com.android.systemui.statusbar.policy.ZenModeController;  import org.junit.Assert;  import org.junit.Before; @@ -50,13 +53,6 @@ import java.util.Arrays;  import java.util.HashSet;  import java.util.concurrent.TimeUnit; -import androidx.slice.Slice; -import androidx.slice.SliceItem; -import androidx.slice.SliceProvider; -import androidx.slice.SliceSpecs; -import androidx.slice.builders.ListBuilder; -import androidx.slice.core.SliceQuery; -  @SmallTest  @RunWith(AndroidTestingRunner.class)  @RunWithLooper(setAsMainLooper = true) diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LifecycleTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LifecycleTest.java index e0807d648f40..50914c86b933 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/LifecycleTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/LifecycleTest.java @@ -19,9 +19,10 @@ package com.android.systemui.keyguard;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ScreenLifecycleTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ScreenLifecycleTest.java index 8c918f6a7af2..06e597e1c87a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ScreenLifecycleTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ScreenLifecycleTest.java @@ -21,9 +21,10 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.verifyNoMoreInteractions; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java index 9eba9b894064..1dc415048f74 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WakefulnessLifecycleTest.java @@ -22,9 +22,10 @@ import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.verifyNoMoreInteractions; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java index cf32760dc803..7ccf9054c1dc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java @@ -16,13 +16,13 @@  package com.android.systemui.keyguard; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.argThat;  import static org.mockito.Mockito.doReturn;  import static org.mockito.Mockito.eq;  import static org.mockito.Mockito.never;  import static org.mockito.Mockito.verify; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.argThat;  import android.app.Activity;  import android.app.ActivityManager; @@ -36,8 +36,9 @@ import android.content.Intent;  import android.os.Bundle;  import android.os.IBinder;  import android.os.UserHandle; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java index 9f3573f6a4ee..6e726cf6bf8d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityTest.java @@ -17,13 +17,11 @@  package com.android.systemui.keyguard;  import static android.app.ActivityManager.TaskDescription; +  import static org.junit.Assert.assertEquals;  import static org.mockito.Mockito.eq;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -  import android.annotation.ColorInt;  import android.annotation.UserIdInt;  import android.app.KeyguardManager; @@ -33,6 +31,9 @@ import android.content.Intent;  import android.graphics.Color;  import android.os.Looper; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.keyguard.WorkLockActivity; diff --git a/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java index b7c1e8ea31b4..3155e57d8ab3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchStateTest.java @@ -26,13 +26,14 @@ import static org.junit.Assert.assertTrue;  import android.os.Handler;  import android.os.Looper;  import android.os.SystemClock; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper;  import android.view.MotionEvent;  import android.view.ViewConfiguration; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginInstanceManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginInstanceManagerTest.java index 04441abee92e..0045d9d0cdbf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginInstanceManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginInstanceManagerTest.java @@ -17,6 +17,7 @@ package com.android.systemui.plugins;  import static junit.framework.Assert.assertFalse;  import static junit.framework.Assert.assertNotNull;  import static junit.framework.Assert.assertTrue; +  import static org.mockito.Matchers.any;  import static org.mockito.Matchers.anyInt;  import static org.mockito.Matchers.eq; @@ -25,19 +26,6 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; -import com.android.systemui.SysuiTestCase; -import com.android.systemui.plugins.PluginInstanceManager.PluginInfo; -import com.android.systemui.plugins.VersionInfo.InvalidVersionException; -import com.android.systemui.plugins.annotations.Requires; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Mockito; -  import android.app.Activity;  import android.app.NotificationManager;  import android.content.BroadcastReceiver; @@ -52,10 +40,24 @@ import android.content.pm.ResolveInfo;  import android.content.pm.ServiceInfo;  import android.os.HandlerThread;  import android.os.UserHandle; -import android.support.test.annotation.UiThreadTest; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.annotation.UiThreadTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; +import com.android.systemui.SysuiTestCase; +import com.android.systemui.plugins.PluginInstanceManager.PluginInfo; +import com.android.systemui.plugins.VersionInfo.InvalidVersionException; +import com.android.systemui.plugins.annotations.Requires; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; +  import java.util.ArrayList;  import java.util.Collections;  import java.util.List; diff --git a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java index 94dbc2ad7147..dfbb855892de 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/plugins/PluginManagerTest.java @@ -26,8 +26,6 @@ import android.content.Context;  import android.content.Intent;  import android.content.pm.PackageManager;  import android.net.Uri; -import android.support.test.annotation.UiThreadTest; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; @@ -36,11 +34,10 @@ import android.testing.TestableLooper.RunWithLooper;  import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;  import com.android.systemui.Dependency;  import com.android.systemui.SysuiTestCase; -import com.android.systemui.plugins.annotations.ProvidesInterface;  import com.android.systemui.plugins.PluginInstanceManager.PluginInfo;  import com.android.systemui.plugins.PluginManagerImpl.PluginInstanceManagerFactory; +import com.android.systemui.plugins.annotations.ProvidesInterface; -import org.junit.After;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/packages/SystemUI/tests/src/com/android/systemui/plugins/VersionInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/plugins/VersionInfoTest.java index 0b4d9b525c1b..6a2f739d5c7d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/plugins/VersionInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/plugins/VersionInfoTest.java @@ -17,13 +17,13 @@ package com.android.systemui.plugins;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; -import android.support.test.filters.SmallTest; +import androidx.test.filters.SmallTest;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.VersionInfo.InvalidVersionException;  import com.android.systemui.plugins.annotations.Requires; -import com.android.systemui.plugins.qs.QS;  import com.android.systemui.plugins.qs.DetailAdapter; +import com.android.systemui.plugins.qs.QS;  import com.android.systemui.plugins.qs.QS.HeightListener;  import org.junit.Rule; diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java index bf6cc53aa5e9..47a969bd0719 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java @@ -16,9 +16,6 @@  package com.android.systemui.power; -import static android.test.MoreAsserts.assertNotEqual; - -import static junit.framework.Assert.assertEquals;  import static junit.framework.Assert.assertFalse;  import static junit.framework.Assert.assertTrue; @@ -31,14 +28,14 @@ import static org.mockito.Mockito.verify;  import android.app.Notification;  import android.app.NotificationManager; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.util.NotificationChannels; -import java.util.concurrent.TimeUnit;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java index dfc1852502e2..0ae9461d38b1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/AutoAddTrackerTest.java @@ -22,10 +22,11 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue;  import android.provider.Settings.Secure; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.Prefs;  import com.android.systemui.Prefs.Key;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java index f845f3adc636..8879e83b4d0e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java @@ -23,7 +23,6 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; @@ -31,6 +30,8 @@ import android.testing.ViewUtils;  import android.view.LayoutInflater;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.internal.logging.MetricsLogger;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java index 703b4d5e22ec..d963689de86f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java @@ -20,13 +20,14 @@ import static org.mockito.Mockito.never;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper;  import android.view.LayoutInflater;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.systemui.R;  import com.android.systemui.R.id;  import com.android.systemui.plugins.ActivityStarter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java index 8cece9262ae8..8a27f12f1503 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java @@ -18,37 +18,31 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertTrue;  import static org.mockito.Mockito.mock; -import android.app.FragmentController; -import android.app.FragmentManagerNonConfig; +import android.content.Context;  import android.os.Looper; -import android.support.test.filters.FlakyTest; +import android.testing.AndroidTestingRunner; +import android.testing.LayoutInflaterBuilder; +import android.testing.TestableLooper; +import android.testing.TestableLooper.RunWithLooper; +import android.view.View; +import android.widget.FrameLayout; + +import androidx.test.filters.SmallTest;  import com.android.internal.logging.MetricsLogger;  import com.android.keyguard.CarrierText;  import com.android.systemui.Dependency;  import com.android.systemui.R; - -import android.os.Parcelable; -import android.support.test.filters.SmallTest; -import android.testing.AndroidTestingRunner; -  import com.android.systemui.SysuiBaseFragmentTest;  import com.android.systemui.statusbar.phone.StatusBarIconController;  import com.android.systemui.statusbar.policy.Clock;  import com.android.systemui.statusbar.policy.UserSwitcherController; -import android.testing.LayoutInflaterBuilder; -import android.testing.TestableLooper; -import android.testing.TestableLooper.RunWithLooper;  import org.junit.Before;  import org.junit.Ignore;  import org.junit.Test;  import org.junit.runner.RunWith; -import android.content.Context; -import android.view.View; -import android.widget.FrameLayout; -  @RunWith(AndroidTestingRunner.class)  @RunWithLooper(setAsMainLooper = true)  @SmallTest diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java index 85cdfcc2ce09..973a5e9ecbd9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java @@ -19,11 +19,12 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.internal.logging.MetricsLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java index e2159d24ad85..ea8c64ac53bb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/SlashImageViewTest.java @@ -16,27 +16,26 @@  package com.android.systemui.qs; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +  import android.content.Context;  import android.graphics.drawable.Drawable; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; + +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.qs.QSTile.SlashState;  import com.android.systemui.qs.tileimpl.SlashImageView; +  import org.junit.Test;  import org.junit.runner.RunWith; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -  @SmallTest  @RunWith(AndroidTestingRunner.class)  @RunWithLooper diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java index 2040e7578910..fef47bd6a392 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java @@ -27,12 +27,12 @@ import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; -import com.android.systemui.plugins.qs.QSIconView;  import com.android.systemui.plugins.qs.QSTile;  import com.android.systemui.qs.tileimpl.QSIconViewImpl;  import com.android.systemui.qs.tileimpl.QSTileView; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTest.java index 4cc0e20dd964..c43c3e629c8a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/TouchAnimatorTest.java @@ -14,18 +14,21 @@  package com.android.systemui.qs; -import android.support.test.runner.AndroidJUnit4; +import static junit.framework.Assert.assertEquals; +  import android.test.suitebuilder.annotation.SmallTest;  import android.view.View; -import com.android.systemui.qs.TouchAnimator.Listener; + +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase; +import com.android.systemui.qs.TouchAnimator.Listener; +  import org.junit.Before; -import org.junit.runner.RunWith;  import org.junit.Test; +import org.junit.runner.RunWith;  import org.mockito.Mockito; -import static junit.framework.Assert.assertEquals; -  @SmallTest  @RunWith(AndroidJUnit4.class)  public class TouchAnimatorTest extends SysuiTestCase { diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java index c3defa4390c5..24a0b69ceee2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/car/CarQsFragmentTest.java @@ -17,7 +17,6 @@ import static org.junit.Assert.assertNotNull;  import static org.mockito.Mockito.mock;  import android.content.Context; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.LayoutInflaterBuilder;  import android.testing.TestableLooper; @@ -25,6 +24,8 @@ import android.testing.TestableLooper.RunWithLooper;  import android.view.View;  import android.widget.FrameLayout; +import androidx.test.filters.SmallTest; +  import com.android.keyguard.CarrierText;  import com.android.systemui.Dependency;  import com.android.systemui.SysuiBaseFragmentTest; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java index 0239ab090dfc..25bac7ae4117 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java @@ -18,11 +18,12 @@ import static org.mockito.ArgumentMatchers.any;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.qs.QSTileHost; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java index f63d2360d976..c10ad58ec8a0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java @@ -14,7 +14,6 @@  package com.android.systemui.qs.customize; -import static junit.framework.Assert.assertEquals;  import static junit.framework.Assert.assertTrue;  import static org.junit.Assert.assertFalse; @@ -23,11 +22,12 @@ import static org.mockito.Mockito.doAnswer;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.Dependency;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.qs.QSTileHost; @@ -38,8 +38,6 @@ import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; -import java.util.ArrayList; -  @SmallTest  @RunWith(AndroidTestingRunner.class)  @RunWithLooper diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java index ba451e1e10dc..ec8552b7f394 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileColorPickerTest.java @@ -15,17 +15,20 @@   */  package com.android.systemui.qs.external; +import static junit.framework.Assert.assertEquals; +  import android.content.res.ColorStateList;  import android.service.quicksettings.Tile; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.runner.AndroidJUnit4; + +import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import com.android.systemui.R; - -import static junit.framework.Assert.assertEquals;  @SmallTest  @RunWith(AndroidJUnit4.class) diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java index e5e8ae3311ef..f35295cf6f99 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java @@ -40,9 +40,10 @@ import android.service.quicksettings.IQSService;  import android.service.quicksettings.IQSTileService;  import android.service.quicksettings.Tile;  import android.service.quicksettings.TileService; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase;  import org.junit.After; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java index cc743245fc42..683e8f4a2511 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java @@ -15,12 +15,19 @@   */  package com.android.systemui.qs.external; +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; +  import android.content.ComponentName;  import android.os.Handler;  import android.os.HandlerThread; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase; +  import org.junit.After;  import org.junit.Before;  import org.junit.Test; @@ -28,10 +35,6 @@ import org.junit.runner.RunWith;  import org.mockito.ArgumentCaptor;  import org.mockito.Mockito; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; -  @SmallTest  @RunWith(AndroidJUnit4.class)  public class TileServiceManagerTest extends SysuiTestCase { diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java index f9f4f497a2ec..633315e8457e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSIconViewImplTest.java @@ -21,14 +21,14 @@ import static org.mockito.Mockito.never;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.content.res.ColorStateList;  import android.graphics.drawable.Drawable;  import android.service.quicksettings.Tile; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.UiThreadTest;  import android.widget.ImageView; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.qs.QSTile.Icon;  import com.android.systemui.plugins.qs.QSTile.State; @@ -36,7 +36,6 @@ import com.android.systemui.plugins.qs.QSTile.State;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.mockito.ArgumentMatcher;  @RunWith(AndroidTestingRunner.class)  @UiThreadTest diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java index 676463407f3f..03e67afd9044 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSTileImplTest.java @@ -32,16 +32,14 @@ import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import static java.lang.Thread.sleep; -  import android.content.Intent;  import android.metrics.LogMaker; -import android.support.test.filters.SmallTest; -import android.support.test.InstrumentationRegistry;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.internal.logging.MetricsLogger;  import com.android.systemui.Dependency;  import com.android.systemui.SysuiTestCase; @@ -55,6 +53,8 @@ import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.ArgumentMatcher; +import static java.lang.Thread.sleep; +  @RunWith(AndroidTestingRunner.class)  @RunWithLooper  @SmallTest diff --git a/packages/SystemUI/tests/src/com/android/systemui/recents/RecentsTest.java b/packages/SystemUI/tests/src/com/android/systemui/recents/RecentsTest.java index bdbd24418d3f..6bbe24937b9a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/recents/RecentsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/recents/RecentsTest.java @@ -27,8 +27,9 @@ import android.app.ActivityManager;  import android.app.ActivityManager.RunningTaskInfo;  import android.app.IActivityManager;  import android.os.SystemClock; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java b/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java index 17d7a4183b16..4162bc1da479 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/settings/CurrentUserTrackerTest.java @@ -17,7 +17,8 @@  package com.android.systemui.settings;  import android.content.Intent; -import android.support.test.filters.SmallTest; + +import androidx.test.filters.SmallTest;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AppOpsListenerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AppOpsListenerTest.java index 0feaa5a7659f..ee4fbc828c2b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AppOpsListenerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AppOpsListenerTest.java @@ -23,10 +23,11 @@ import static org.mockito.Mockito.when;  import android.app.AppOpsManager;  import android.os.Handler;  import android.os.Looper; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.ForegroundServiceController;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java index a02ef98f834d..965923557762 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java @@ -22,7 +22,8 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;  import android.content.ComponentName;  import android.graphics.Rect;  import android.os.Bundle; -import android.support.test.filters.SmallTest; + +import androidx.test.filters.SmallTest;  import com.android.internal.statusbar.StatusBarIcon;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java index ff12c5373af8..210aa56c4d4b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java @@ -33,13 +33,14 @@ import static org.mockito.Mockito.when;  import android.app.AppOpsManager;  import android.app.NotificationChannel; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.util.ArraySet;  import android.view.NotificationHeaderView;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;  import com.android.systemui.statusbar.notification.AboveShelfChangedListener; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/FooterViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/FooterViewTest.java index e6fdfa427196..a7e14dc7c229 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/FooterViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/FooterViewTest.java @@ -16,23 +16,18 @@  package com.android.systemui.statusbar; -import static junit.framework.Assert.assertEquals;  import static junit.framework.Assert.assertFalse;  import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertNull;  import static junit.framework.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn;  import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.LayoutInflater;  import android.view.View; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java index bdd05c7e6384..6e5af99835c3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java @@ -30,12 +30,13 @@ import android.app.trust.TrustManager;  import android.content.Context;  import android.hardware.fingerprint.FingerprintManager;  import android.os.Looper; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.View;  import android.view.ViewGroup; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.keyguard.KeyguardUpdateMonitorCallback;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java index 2af0c3ead215..4a8f28742982 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java @@ -21,10 +21,11 @@ import static org.mockito.Mockito.when;  import android.os.Handler;  import android.os.Looper; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.Dependency;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.phone.NotificationGroupManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java index 9638541ead42..41ee732843f3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java @@ -16,27 +16,10 @@  package com.android.systemui.statusbar; -import com.android.systemui.SysuiTestCase; -import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; - -import android.content.Context; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.testing.AndroidTestingRunner; -import android.testing.TestableLooper; -import android.view.View; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; -  import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE;  import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEUTRAL;  import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_POSITIVE; +  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue;  import static org.mockito.ArgumentMatchers.any; @@ -46,6 +29,22 @@ import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; +import android.content.Context; +import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper; +import android.view.View; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; + +import com.android.systemui.SysuiTestCase; +import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +  /**   * Tests for {@link NotificationBlockingHelperManager}.   */ diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationContentViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationContentViewTest.java index 1fb4c371a408..c4a80a7fd740 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationContentViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationContentViewTest.java @@ -28,13 +28,14 @@ import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.app.AppOpsManager; -import android.support.test.annotation.UiThreadTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArraySet;  import android.view.NotificationHeaderView;  import android.view.View; +import androidx.test.annotation.UiThreadTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase;  import org.junit.Assert; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationCustomViewWrapperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationCustomViewWrapperTest.java index a34588d4f29d..99fe4457a8ba 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationCustomViewWrapperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationCustomViewWrapperTest.java @@ -16,12 +16,13 @@  package com.android.systemui.statusbar; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.View;  import android.widget.RemoteViews; +import androidx.test.filters.SmallTest; +  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.notification.NotificationCustomViewWrapper; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java index 77522e44b183..f62b13c1ddf7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java @@ -44,12 +44,13 @@ import android.media.session.MediaSession;  import android.os.Bundle;  import android.service.notification.NotificationListenerService;  import android.service.notification.StatusBarNotification; -import android.support.test.annotation.UiThreadTest; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.util.ArraySet; +import androidx.test.annotation.UiThreadTest; +import androidx.test.filters.SmallTest; +  import com.android.systemui.ForegroundServiceController;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.phone.NotificationGroupManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationEntryManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationEntryManagerTest.java index afe16cf13b76..2e14e715e517 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationEntryManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationEntryManagerTest.java @@ -19,7 +19,6 @@ package com.android.systemui.statusbar;  import static junit.framework.Assert.assertNotNull;  import static junit.framework.Assert.assertNull;  import static junit.framework.Assert.assertTrue; -import static junit.framework.Assert.assertFalse;  import static org.junit.Assert.assertEquals;  import static org.mockito.ArgumentMatchers.any; @@ -43,12 +42,13 @@ import android.os.Looper;  import android.os.UserHandle;  import android.service.notification.NotificationListenerService;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.util.ArraySet;  import android.widget.FrameLayout; +import androidx.test.filters.SmallTest; +  import com.android.internal.logging.MetricsLogger;  import com.android.internal.statusbar.IStatusBarService;  import com.android.systemui.ForegroundServiceController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsManagerTest.java index cba1b548611b..72e932c29627 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsManagerTest.java @@ -19,8 +19,8 @@ package com.android.systemui.statusbar;  import static android.app.AppOpsManager.OP_CAMERA;  import static android.app.AppOpsManager.OP_RECORD_AUDIO;  import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW; -  import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE; +  import static junit.framework.Assert.assertNotNull;  import static org.junit.Assert.assertEquals; @@ -32,10 +32,10 @@ import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.ArgumentMatchers.isNull;  import static org.mockito.Mockito.doNothing;  import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when;  import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when;  import android.app.INotificationManager;  import android.app.Notification; @@ -47,12 +47,13 @@ import android.os.Binder;  import android.os.Handler;  import android.provider.Settings;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.util.ArraySet;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;  import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; @@ -63,11 +64,8 @@ import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.ArgumentCaptor;  import org.mockito.Mock; -import org.mockito.junit.MockitoRule;  import org.mockito.junit.MockitoJUnit; - -import java.util.HashSet; -import java.util.Set; +import org.mockito.junit.MockitoRule;  /**   * Tests for {@link NotificationGutsManager}. diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationListenerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationListenerTest.java index 26f91b329d46..cab762c50ce1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationListenerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationListenerTest.java @@ -16,8 +16,6 @@  package com.android.systemui.statusbar; -import static junit.framework.Assert.assertTrue; -  import static org.mockito.ArgumentMatchers.any;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; @@ -28,10 +26,11 @@ import android.os.Looper;  import android.os.UserHandle;  import android.service.notification.NotificationListenerService;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; @@ -40,9 +39,6 @@ import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; -import java.util.HashSet; -import java.util.Set; -  @SmallTest  @RunWith(AndroidTestingRunner.class)  @TestableLooper.RunWithLooper diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java index 2401519940e5..849ae89880d8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerTest.java @@ -36,10 +36,11 @@ import android.os.Handler;  import android.os.Looper;  import android.os.UserManager;  import android.provider.Settings; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.policy.DeviceProvisionedController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLoggerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLoggerTest.java index 42bf290c70fd..760c66dd7e28 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLoggerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationLoggerTest.java @@ -30,10 +30,11 @@ import android.os.Looper;  import android.os.RemoteException;  import android.os.UserHandle;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import androidx.test.filters.SmallTest; +  import com.android.internal.statusbar.IStatusBarService;  import com.android.internal.statusbar.NotificationVisibility;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMenuRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMenuRowTest.java index 2a5a1eea2b76..088b01d8ecab 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMenuRowTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMenuRowTest.java @@ -22,15 +22,14 @@ import static org.mockito.Mockito.when;  import android.app.Notification;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper;  import android.testing.ViewUtils; -import android.testing.ViewUtils; -import android.view.View;  import android.view.ViewGroup; +import androidx.test.filters.SmallTest; +  import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;  import com.android.systemui.utils.leaks.LeakCheckedTest; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java index 7a2cb3af55ca..9066b880d6a9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java @@ -13,10 +13,11 @@ import android.os.Looper;  import android.os.UserHandle;  import android.service.notification.NotificationListenerService;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.google.android.collect.Sets; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationTestHelper.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationTestHelper.java index 2b0c6bfac988..ae89e5ce327a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationTestHelper.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationTestHelper.java @@ -23,11 +23,12 @@ import android.app.Notification;  import android.content.Context;  import android.os.UserHandle;  import android.service.notification.StatusBarNotification; -import android.support.test.InstrumentationRegistry;  import android.text.TextUtils;  import android.view.LayoutInflater;  import android.widget.RemoteViews; +import androidx.test.InstrumentationRegistry; +  import com.android.systemui.R;  import com.android.systemui.statusbar.notification.NotificationInflaterTest;  import com.android.systemui.statusbar.phone.HeadsUpManagerPhone; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java index 0d0d1f86c53f..a64ca5c60c96 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java @@ -25,13 +25,14 @@ import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.view.View;  import android.view.ViewGroup;  import android.widget.LinearLayout; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper;  import com.android.systemui.statusbar.notification.VisualStabilityManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java index 42dad114b6b6..0c1fa4e0834b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ScrimViewTest.java @@ -28,13 +28,14 @@ import android.graphics.Color;  import android.graphics.Rect;  import android.graphics.drawable.ColorDrawable;  import android.graphics.drawable.Drawable; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper;  import android.testing.ViewUtils;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.internal.colorextraction.ColorExtractor;  import com.android.internal.colorextraction.drawable.GradientDrawable;  import com.android.systemui.statusbar.policy.ConfigurationController; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java index e91530d0af5a..8d5e381af7a5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar;  import static junit.framework.Assert.assertFalse;  import static junit.framework.Assert.assertTrue; +  import static org.mockito.ArgumentMatchers.argThat;  import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.ArgumentMatchers.isNull; @@ -26,10 +27,11 @@ import static org.mockito.Mockito.when;  import android.app.Notification;  import android.os.RemoteException;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import androidx.test.filters.SmallTest; +  import com.android.internal.statusbar.IStatusBarService;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java index e529e4c44c41..4c20b61083f7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java @@ -1,6 +1,7 @@  package com.android.systemui.statusbar;  import static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY; +  import static junit.framework.Assert.assertEquals;  import static junit.framework.Assert.assertNull;  import static junit.framework.Assert.assertTrue; @@ -8,19 +9,21 @@ import static junit.framework.Assert.assertTrue;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.when; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.phone.StatusBarIconHolder;  import com.android.systemui.statusbar.phone.StatusBarIconList;  import com.android.systemui.statusbar.phone.StatusBarIconList.Slot; -import java.util.ArrayList; -import java.util.List;  import org.junit.Test;  import org.junit.runner.RunWith; +import java.util.ArrayList; +import java.util.List; +  @SmallTest  @RunWith(AndroidJUnit4.class)  public class StatusBarIconListTest extends SysuiTestCase { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java index 7b2071ca14fd..c995ab2e1ca4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java @@ -38,8 +38,9 @@ import android.content.res.Resources;  import android.graphics.Color;  import android.graphics.drawable.Icon;  import android.os.UserHandle; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.statusbar.StatusBarIcon;  import com.android.internal.util.NotificationColorUtil; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/AboveShelfObserverTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/AboveShelfObserverTest.java index 00e9995970d9..82e4b08f99b8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/AboveShelfObserverTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/AboveShelfObserverTest.java @@ -19,7 +19,6 @@ package com.android.systemui.statusbar.notification;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/MediaNotificationProcessorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/MediaNotificationProcessorTest.java index 5d3a86da4874..b03abecbc59b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/MediaNotificationProcessorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/MediaNotificationProcessorTest.java @@ -27,10 +27,11 @@ import static org.mockito.Mockito.verifyZeroInteractions;  import android.app.Notification;  import android.graphics.Bitmap;  import android.graphics.drawable.Drawable; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest;  import android.widget.RemoteViews; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java index aa8a08cb575d..a9ee8a8378c8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationInflaterTest.java @@ -29,13 +29,14 @@ import android.os.CancellationSignal;  import android.os.Handler;  import android.os.Looper;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.View;  import android.view.ViewGroup;  import android.widget.RemoteViews; +import androidx.test.filters.SmallTest; +  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.ExpandableNotificationRow; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationViewWrapperTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationViewWrapperTest.java index 7e2e505b66a7..6071c7be00ae 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationViewWrapperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationViewWrapperTest.java @@ -17,18 +17,16 @@  package com.android.systemui.statusbar.notification;  import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.ExpandableNotificationRow;  import com.android.systemui.statusbar.NotificationTestHelper; -import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java index 95ce0d89cd2c..52c8049d41ad 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/VisualStabilityManagerTest.java @@ -16,10 +16,18 @@  package com.android.systemui.statusbar.notification; +import static junit.framework.Assert.assertEquals; + +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +  import android.service.notification.StatusBarNotification; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.ExpandableNotificationRow;  import com.android.systemui.statusbar.NotificationData; @@ -30,12 +38,6 @@ import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import static junit.framework.Assert.assertEquals; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -  @SmallTest  @RunWith(AndroidJUnit4.class)  public class VisualStabilityManagerTest extends SysuiTestCase { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java index 23365a419d31..8a6bdc22811a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java @@ -20,21 +20,21 @@ import static org.mockito.Mockito.never;  import static org.mockito.Mockito.verify;  import android.os.Handler; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; + +import androidx.test.filters.SmallTest; +  import com.android.internal.app.ColorDisplayController; -import com.android.systemui.Dependency; -import com.android.systemui.Prefs;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.qs.AutoAddTracker;  import com.android.systemui.qs.QSTileHost; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.Mock; -import org.mockito.Mockito;  import org.mockito.MockitoAnnotations;  @RunWith(AndroidTestingRunner.class) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java index 231cdf5e8e7d..2e2d4f360981 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java @@ -21,21 +21,21 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.when;  import android.app.StatusBarManager; -import android.support.test.filters.SmallTest; +import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper.RunWithLooper;  import android.view.View;  import android.view.ViewPropertyAnimator; -import com.android.systemui.R; -import android.testing.AndroidTestingRunner; +import androidx.test.filters.SmallTest; +import com.android.systemui.R;  import com.android.systemui.SysuiBaseFragmentTest;  import com.android.systemui.statusbar.CommandQueue;  import com.android.systemui.tuner.TunerService; -import android.testing.TestableLooper.RunWithLooper;  import org.junit.Before; -import org.junit.runner.RunWith;  import org.junit.Test; +import org.junit.runner.RunWith;  import org.mockito.Mockito;  @RunWith(AndroidTestingRunner.class) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java index 532019fe09c6..f6f4eb489603 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java @@ -16,11 +16,21 @@  package com.android.systemui.statusbar.phone; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; +import static junit.framework.Assert.fail; + +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; +  import android.content.Context;  import android.os.PowerManager; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.doze.DozeScreenState;  import com.android.systemui.statusbar.phone.DozeParameters.IntInOutMatcher; @@ -29,18 +39,6 @@ import org.junit.Assert;  import org.junit.Test;  import org.junit.runner.RunWith; -import static junit.framework.Assert.assertTrue; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.fail; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -  @SmallTest  @RunWith(AndroidJUnit4.class)  public class DozeParametersTest extends SysuiTestCase { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeScrimControllerTest.java index 203ebe6d5132..b2128a642740 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeScrimControllerTest.java @@ -23,11 +23,11 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.never;  import static org.mockito.Mockito.verify; -import android.os.Debug; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.doze.DozeHost; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java index 952d0864bdbd..32e142968520 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java @@ -17,24 +17,19 @@  package com.android.systemui.statusbar.phone;  import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyObject; -import static org.mockito.Mockito.atLeast;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.reset;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.View;  import android.widget.TextView; -import com.android.systemui.Dependency; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase; -import com.android.systemui.TestableDependency; -import com.android.systemui.statusbar.CommandQueue;  import com.android.systemui.statusbar.ExpandableNotificationRow;  import com.android.systemui.statusbar.HeadsUpStatusBarView;  import com.android.systemui.statusbar.NotificationTestHelper; @@ -46,8 +41,6 @@ import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import java.util.HashSet; -  @SmallTest  @RunWith(AndroidTestingRunner.class)  @RunWithLooper(setAsMainLooper = true) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java index aa991cb71aac..d25875089878 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java @@ -16,16 +16,26 @@  package com.android.systemui.statusbar.phone; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertNull; +import static junit.framework.Assert.assertTrue; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +  import android.app.ActivityManager;  import android.app.Instrumentation;  import android.app.Notification;  import android.os.UserHandle; -import android.view.View;  import android.service.notification.StatusBarNotification; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import android.view.View; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; @@ -42,15 +52,6 @@ import org.mockito.Mock;  import org.mockito.junit.MockitoJUnit;  import org.mockito.junit.MockitoRule; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertNull; -import static junit.framework.Assert.assertTrue; -import static junit.framework.Assert.assertFalse; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -  @SmallTest  @RunWith(AndroidTestingRunner.class)  @TestableLooper.RunWithLooper diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java index 12b14c807917..2832e8888eba 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java @@ -29,13 +29,14 @@ import static org.mockito.Mockito.verifyZeroInteractions;  import static org.mockito.Mockito.when;  import android.graphics.Color; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.view.ViewGroup;  import android.view.ViewTreeObserver;  import android.widget.FrameLayout; +import androidx.test.filters.SmallTest; +  import com.android.internal.widget.LockPatternUtils;  import com.android.keyguard.KeyguardHostView;  import com.android.keyguard.KeyguardSecurityModel; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardPresentationTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardPresentationTest.java index 54291536093c..d4e86873d0be 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardPresentationTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardPresentationTest.java @@ -16,16 +16,15 @@  package com.android.systemui.statusbar.phone; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.view.LayoutInflater; -import android.view.View; + +import androidx.test.filters.SmallTest;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; -import org.junit.Assert;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java index 17df8003dfa9..3231be06a844 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarFragmentTest.java @@ -19,14 +19,16 @@ import static org.mockito.Mockito.when;  import android.content.Context;  import android.os.Looper; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.LeakCheck.Tracker; +import android.testing.TestableLooper.RunWithLooper;  import android.view.Display;  import android.view.WindowManager; +import android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener; -import com.android.systemui.Dependency; +import androidx.test.filters.SmallTest; +import com.android.systemui.Dependency;  import com.android.systemui.OverviewProxyService;  import com.android.systemui.SysuiBaseFragmentTest;  import com.android.systemui.recents.Recents; @@ -34,9 +36,6 @@ import com.android.systemui.stackdivider.Divider;  import com.android.systemui.statusbar.CommandQueue;  import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; -import android.testing.TestableLooper.RunWithLooper; -import android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener; -  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java index 76f57f049561..695e26fde377 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java @@ -21,11 +21,12 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.IWindowManager; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.CommandQueue; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java index 667a5082892d..52b88679b8cd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NearestTouchFrameTest.java @@ -17,19 +17,19 @@ package com.android.systemui.statusbar.phone;  import static org.mockito.ArgumentMatchers.any;  import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.never;  import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.content.res.Configuration; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.MotionEvent;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java index 9c558748697a..ac5ed95c16ec 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java @@ -37,11 +37,12 @@ import android.app.AlarmManager;  import android.graphics.Color;  import android.os.Handler;  import android.os.Looper; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.internal.colorextraction.ColorExtractor.GradientColors;  import com.android.internal.util.function.TriConsumer;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java index 72b0156d25f9..9ccc35227e7a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java @@ -14,28 +14,26 @@  package com.android.systemui.statusbar.phone; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; -  import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON;  import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE;  import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI; -import static org.mockito.ArgumentMatchers.eq; + +import static junit.framework.Assert.assertTrue; +  import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import android.graphics.Rect; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.ViewGroup;  import android.widget.LinearLayout; +import androidx.test.filters.SmallTest; +  import com.android.internal.statusbar.StatusBarIcon; -import com.android.systemui.statusbar.StatusIconDisplayable;  import com.android.systemui.statusbar.StatusBarIconView;  import com.android.systemui.statusbar.StatusBarMobileView;  import com.android.systemui.statusbar.StatusBarWifiView; +import com.android.systemui.statusbar.StatusIconDisplayable;  import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager;  import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager;  import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java index 94ab9d2a7d04..91c47ca73fd0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java @@ -25,11 +25,12 @@ import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.content.Context; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.view.ViewGroup; +import androidx.test.filters.SmallTest; +  import com.android.internal.widget.LockPatternUtils;  import com.android.keyguard.KeyguardHostView;  import com.android.keyguard.ViewMediatorCallback; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index 0a412b96ed54..a2d60c019e4e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -41,28 +41,25 @@ import android.app.Notification;  import android.app.StatusBarManager;  import android.app.trust.TrustManager;  import android.content.Context; -import android.content.pm.UserInfo;  import android.hardware.fingerprint.FingerprintManager;  import android.metrics.LogMaker;  import android.os.Binder;  import android.os.Handler; -import android.os.HandlerThread;  import android.os.IPowerManager;  import android.os.Looper;  import android.os.PowerManager;  import android.os.RemoteException;  import android.os.UserHandle;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.support.test.metricshelper.MetricsAsserts;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper;  import android.util.SparseArray; -import android.view.Gravity; -import android.view.View;  import android.view.ViewGroup.LayoutParams; +import androidx.test.filters.SmallTest; +  import com.android.internal.logging.MetricsLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent;  import com.android.internal.logging.testing.FakeMetricsLogger; @@ -72,8 +69,8 @@ import com.android.systemui.ForegroundServiceController;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.assist.AssistManager; -import com.android.systemui.keyguard.KeyguardViewMediator;  import com.android.systemui.classifier.FalsingManager; +import com.android.systemui.keyguard.KeyguardViewMediator;  import com.android.systemui.keyguard.WakefulnessLifecycle;  import com.android.systemui.recents.misc.SystemServicesProxy;  import com.android.systemui.statusbar.ActivatableNotificationView; @@ -81,7 +78,6 @@ import com.android.systemui.statusbar.AppOpsListener;  import com.android.systemui.statusbar.CommandQueue;  import com.android.systemui.statusbar.ExpandableNotificationRow;  import com.android.systemui.statusbar.FooterView; -import com.android.systemui.statusbar.FooterViewButton;  import com.android.systemui.statusbar.KeyguardIndicationController;  import com.android.systemui.statusbar.NotificationData;  import com.android.systemui.statusbar.NotificationData.Entry; @@ -116,7 +112,6 @@ import org.mockito.MockitoAnnotations;  import java.io.ByteArrayOutputStream;  import java.io.PrintWriter;  import java.util.ArrayList; -import java.util.function.Predicate;  @SmallTest  @RunWith(AndroidTestingRunner.class) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java index a068a5e574eb..d91561845c4a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowViewTest.java @@ -20,19 +20,14 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.content.Context;  import android.os.SystemClock; -import android.service.notification.StatusBarNotification; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.MotionEvent; -import android.view.View; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.DragDownHelper; -import com.android.systemui.statusbar.ExpandableNotificationRow; -import com.android.systemui.statusbar.NotificationData;  import com.android.systemui.statusbar.StatusBarState;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java index dcd531dc9eb7..b2998410aba8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemUIDialogTest.java @@ -15,6 +15,7 @@  package com.android.systemui.statusbar.phone;  import static junit.framework.Assert.assertTrue; +  import static org.mockito.Matchers.any;  import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.verify; @@ -22,10 +23,11 @@ import static org.mockito.Mockito.verify;  import android.content.Context;  import android.content.Intent;  import android.content.IntentFilter; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; @@ -33,7 +35,6 @@ import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.ArgumentCaptor; -  @RunWith(AndroidTestingRunner.class)  @RunWithLooper(setAsMainLooper = true)  @SmallTest diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java index d2463502cb19..79db3acf7c98 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BluetoothControllerImplTest.java @@ -15,8 +15,8 @@  package com.android.systemui.statusbar.policy;  import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue;  import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; @@ -25,11 +25,11 @@ import android.bluetooth.BluetoothAdapter;  import android.bluetooth.BluetoothDevice;  import android.bluetooth.BluetoothProfile;  import android.os.Looper; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; -import android.util.Log; + +import androidx.test.filters.SmallTest;  import com.android.settingslib.bluetooth.BluetoothEventManager;  import com.android.settingslib.bluetooth.CachedBluetoothDevice; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java index ed0f9ab224eb..85f60338b6e8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java @@ -15,29 +15,33 @@   */  package com.android.systemui.statusbar.policy; +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; + +import static org.mockito.Matchers.eq; +  import android.os.HandlerThread; -import android.support.test.runner.AndroidJUnit4;  import android.telephony.SubscriptionInfo;  import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;  import com.android.systemui.statusbar.policy.NetworkController.IconState;  import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; -import java.util.ArrayList; -import java.util.List; +  import org.junit.Before; -import org.junit.runner.RunWith;  import org.junit.Test; +import org.junit.runner.RunWith;  import org.mockito.ArgumentCaptor;  import org.mockito.Mock;  import org.mockito.Mockito;  import org.mockito.MockitoAnnotations; -import static junit.framework.Assert.assertTrue; -import static junit.framework.Assert.assertEquals; - -import static org.mockito.Matchers.eq; +import java.util.ArrayList; +import java.util.List;  @SmallTest  @RunWith(AndroidJUnit4.class) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java index b22a6468f5fa..97eaad6151c7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ExtensionControllerImplTest.java @@ -23,11 +23,12 @@ import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.content.res.Configuration; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.Dependency;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.OverlayPlugin; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/IconLoggerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/IconLoggerImplTest.java index 5c347301bd8c..7e3507acdcad 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/IconLoggerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/IconLoggerImplTest.java @@ -31,21 +31,20 @@ import static org.mockito.Mockito.when;  import static java.lang.Thread.sleep; -import android.metrics.LogMaker; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.MessageHandler;  import android.testing.TestableLooper.RunWithLooper;  import android.util.Log; +import androidx.test.filters.SmallTest; +  import com.android.internal.logging.MetricsLogger;  import com.android.systemui.SysuiTestCase;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.mockito.ArgumentMatcher;  @RunWith(AndroidTestingRunner.class)  @RunWithLooper diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java index f85923522b34..39bdf204cd65 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyButtonViewTest.java @@ -21,12 +21,13 @@ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_  import static org.mockito.ArgumentMatchers.argThat;  import android.metrics.LogMaker; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper;  import android.view.KeyEvent; +import androidx.test.filters.SmallTest; +  import com.android.internal.logging.MetricsLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java index e1b97bdadadc..99023e224818 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/LocationControllerImplTest.java @@ -20,11 +20,12 @@ import static org.mockito.Mockito.when;  import android.content.Intent;  import android.location.LocationManager; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.policy.LocationController.LocationChangeCallback; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java index eefdeee1001e..93cf3e8317ce 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerEthernetTest.java @@ -1,7 +1,8 @@  package com.android.systemui.statusbar.policy; +import static junit.framework.Assert.assertEquals; +  import android.net.NetworkCapabilities; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; @@ -13,8 +14,6 @@ import org.junit.runner.RunWith;  import org.mockito.ArgumentCaptor;  import org.mockito.Mockito; -import static junit.framework.Assert.assertEquals; -  @SmallTest  @RunWith(AndroidTestingRunner.class)  @RunWithLooper diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java index c24336d3cbff..bcbba8b163af 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java @@ -15,11 +15,16 @@   */  package com.android.systemui.statusbar.policy; +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; + +import static org.mockito.Mockito.mock; +  import android.content.Intent;  import android.net.ConnectivityManager;  import android.net.NetworkCapabilities;  import android.os.Looper; -import android.support.test.runner.AndroidJUnit4;  import android.telephony.ServiceState;  import android.telephony.SignalStrength;  import android.telephony.SubscriptionInfo; @@ -42,11 +47,6 @@ import org.mockito.Mockito;  import java.util.ArrayList;  import java.util.List; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; -import static junit.framework.Assert.assertFalse; -import static org.mockito.Mockito.mock; -  @SmallTest  @RunWith(AndroidTestingRunner.class)  @RunWithLooper diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.java index 3b47eae03fa0..02c9b925c0fa 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisablerTest.java @@ -14,9 +14,8 @@  package com.android.systemui.statusbar.policy; -import static com.google.common.truth.Truth.assertThat; -  import static junit.framework.TestCase.assertTrue; +  import static org.junit.Assert.assertFalse;  import static org.mockito.ArgumentMatchers.anyBoolean;  import static org.mockito.Mockito.atLeastOnce; @@ -24,9 +23,10 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import android.content.res.Configuration; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.CommandQueue; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java index a6fa4f54067d..36c89b8c6487 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java @@ -22,13 +22,14 @@ import android.content.Intent;  import android.content.IntentFilter;  import android.content.pm.ShortcutManager;  import android.os.Handler; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.view.View;  import android.widget.EditText;  import android.widget.ImageButton; +import androidx.test.filters.SmallTest; +  import com.android.systemui.Dependency;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java index f76de5a03d2d..552ecc617c4e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SecurityControllerTest.java @@ -23,11 +23,9 @@ import static org.mockito.Matchers.any;  import static org.mockito.Matchers.anyInt;  import static org.mockito.Matchers.argThat;  import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.doNothing;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when;  import android.app.admin.DevicePolicyManager;  import android.content.ComponentName; @@ -37,28 +35,26 @@ import android.content.pm.StringParceledListSlice;  import android.content.pm.UserInfo;  import android.net.ConnectivityManager;  import android.net.ConnectivityManager.NetworkCallback; -import android.net.NetworkCapabilities;  import android.net.NetworkRequest;  import android.os.UserManager;  import android.security.IKeyChainService; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; -import com.android.systemui.statusbar.policy.SecurityController.SecurityControllerCallback; -import com.android.systemui.SysuiTestCase; +import androidx.test.runner.AndroidJUnit4; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.List; +import com.android.systemui.SysuiTestCase; +import com.android.systemui.statusbar.policy.SecurityController.SecurityControllerCallback;  import org.junit.After;  import org.junit.Before; -import org.junit.Ignore;  import org.junit.Test;  import org.junit.runner.RunWith; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit;  @SmallTest  @RunWith(AndroidJUnit4.class) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java index c573ca88a471..dbc88a0be435 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java @@ -33,7 +33,6 @@ import android.content.Intent;  import android.content.IntentFilter;  import android.content.res.Resources;  import android.service.notification.StatusBarNotification; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.view.View; @@ -41,6 +40,8 @@ import android.view.ViewGroup;  import android.widget.Button;  import android.widget.LinearLayout; +import androidx.test.filters.SmallTest; +  import com.android.keyguard.KeyguardHostView.OnDismissAction;  import com.android.systemui.R;  import com.android.systemui.SysuiTestCase; @@ -48,8 +49,6 @@ import com.android.systemui.statusbar.NotificationData;  import com.android.systemui.statusbar.SmartReplyController;  import com.android.systemui.statusbar.phone.KeyguardDismissUtil; -import java.util.concurrent.atomic.AtomicReference; -  import org.junit.After;  import org.junit.Before;  import org.junit.Test; @@ -57,6 +56,8 @@ import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; +import java.util.concurrent.atomic.AtomicReference; +  @RunWith(AndroidTestingRunner.class)  @TestableLooper.RunWithLooper  @SmallTest diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java index 7437e83469c6..ee5f2ed03e2c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/ZenModeControllerImplTest.java @@ -27,10 +27,11 @@ import android.os.Handler;  import android.os.Looper;  import android.provider.Settings;  import android.service.notification.ZenModeConfig; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.policy.ZenModeController.Callback; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java index 8a74019dca36..2b0ad8041893 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationChildrenContainerTest.java @@ -16,13 +16,13 @@  package com.android.systemui.statusbar.stack; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.NotificationHeaderView;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.ExpandableNotificationRow;  import com.android.systemui.statusbar.NotificationTestHelper; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationRoundnessManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationRoundnessManagerTest.java index 16e69f455103..01df7833195d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationRoundnessManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationRoundnessManagerTest.java @@ -20,11 +20,12 @@ import static org.mockito.Mockito.atLeast;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.view.View; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.statusbar.ExpandableNotificationRow;  import com.android.systemui.statusbar.NotificationTestHelper; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java index 5400e3bab678..aaa691d1d9bd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayoutTest.java @@ -26,9 +26,9 @@ import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.annotation.UiThreadTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.annotation.UiThreadTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.ExpandHelper;  import com.android.systemui.R; diff --git a/packages/SystemUI/tests/src/com/android/systemui/tuner/TunablePaddingTest.java b/packages/SystemUI/tests/src/com/android/systemui/tuner/TunablePaddingTest.java index 3bfefe7b4d9b..2af526bcc2f1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/tuner/TunablePaddingTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/tuner/TunablePaddingTest.java @@ -20,14 +20,14 @@ import static org.mockito.Mockito.doAnswer;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import static org.mockito.Mockito.withSettings; -import android.support.test.filters.SmallTest;  import android.testing.LeakCheck.Tracker;  import android.util.DisplayMetrics;  import android.view.View;  import android.view.WindowManager; +import androidx.test.filters.SmallTest; +  import com.android.systemui.utils.leaks.LeakCheckedTest;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/AsyncSensorManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/AsyncSensorManagerTest.java index 469bdc0918d9..6b605d732976 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/AsyncSensorManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/AsyncSensorManagerTest.java @@ -24,9 +24,10 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;  import android.hardware.SensorEventListener;  import android.hardware.SensorManager; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.utils.hardware.FakeSensorManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java index 50b4f3f15d8a..f5bcb0b6976f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java @@ -15,22 +15,20 @@  package com.android.systemui.util;  import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.eq;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import android.app.Notification;  import android.app.NotificationChannel;  import android.app.NotificationManager;  import android.content.Context;  import android.net.Uri;  import android.provider.Settings; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest;  import android.util.ArraySet; + +import androidx.test.runner.AndroidJUnit4; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.util.NotificationChannels; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/GarbageMonitorTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/GarbageMonitorTest.java index c095472e0c62..bcc20c2d1b37 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/GarbageMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/GarbageMonitorTest.java @@ -24,11 +24,12 @@ import static org.mockito.Mockito.when;  import android.content.Context;  import android.os.Looper; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakDetectorTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakDetectorTest.java index 11bb398501de..c68c9206a2d8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakDetectorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakDetectorTest.java @@ -17,8 +17,8 @@  package com.android.systemui.util.leak; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.util.leak.ReferenceTestUtils.CollectionWaiter; @@ -28,8 +28,6 @@ import org.junit.Ignore;  import org.junit.Test;  import org.junit.runner.RunWith; -import java.io.FileDescriptor; -import java.io.FileNotFoundException;  import java.io.FileOutputStream;  import java.io.PrintWriter;  import java.util.ArrayList; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java index 6711ce8afa35..abec80eef3f9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java @@ -24,8 +24,9 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify;  import android.app.NotificationManager; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/ReferenceTestUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/ReferenceTestUtilsTest.java index b8a3e39f665c..726187d12e3c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/ReferenceTestUtilsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/ReferenceTestUtilsTest.java @@ -18,8 +18,8 @@ package com.android.systemui.util.leak;  import static org.junit.Assert.assertEquals; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/WeakIdentityHashMapTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/WeakIdentityHashMapTest.java index ce6212ef5aae..2b28e2f590ec 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/WeakIdentityHashMapTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/WeakIdentityHashMapTest.java @@ -20,8 +20,8 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNotSame;  import static org.junit.Assert.assertTrue; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase;  import com.android.systemui.util.leak.ReferenceTestUtils.CollectionWaiter; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java index 43942f72993e..f91e313fd0c8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java @@ -20,10 +20,11 @@ import static org.mockito.Mockito.never;  import static org.mockito.Mockito.verify;  import android.animation.Animator; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import org.junit.Before; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/SettableWakeLockTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/SettableWakeLockTest.java index 39316eda1565..73a9e7eaf273 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/SettableWakeLockTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/SettableWakeLockTest.java @@ -21,8 +21,8 @@ import static junit.framework.TestCase.assertTrue;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java index d925364b0e69..4682b863518b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java @@ -19,11 +19,10 @@ package com.android.systemui.util.wakelock;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; -import android.content.Context;  import android.os.PowerManager; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java index 6b20a1e0b937..fb82b8fed76c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/UtilTest.java @@ -16,7 +16,8 @@  package com.android.systemui.volume;  import android.media.MediaMetadata; -import android.support.test.filters.SmallTest; + +import androidx.test.filters.SmallTest;  import com.android.systemui.SysuiTestCase; diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java index a4ed45997d2a..f4d0854b2c9f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java @@ -25,7 +25,9 @@ import static org.mockito.Mockito.when;  import android.content.Context;  import android.media.AudioManager;  import android.media.session.MediaSession; -import android.support.test.filters.SmallTest; + +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.keyguard.WakefulnessLifecycle;  import com.android.systemui.statusbar.phone.StatusBar; diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java index 43d60e41a6b2..329bbf4b75d9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java @@ -16,32 +16,19 @@  package com.android.systemui.volume; -import static android.media.AudioManager.RINGER_MODE_NORMAL; -import static android.media.AudioManager.RINGER_MODE_SILENT; -import static android.media.AudioManager.RINGER_MODE_VIBRATE; -import static android.media.AudioManager.STREAM_RING; - -import static com.android.systemui.volume.Events.DISMISS_REASON_UNKNOWN; -import static com.android.systemui.volume.Events.SHOW_REASON_UNKNOWN;  import static com.android.systemui.volume.VolumeDialogControllerImpl.STREAMS;  import static junit.framework.Assert.assertTrue; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -  import android.app.KeyguardManager;  import android.media.AudioManager; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper; -import android.text.TextUtils;  import android.view.View;  import android.view.ViewGroup; -import android.widget.ImageView; -import com.android.systemui.R; +import androidx.test.filters.SmallTest; +  import com.android.systemui.SysuiTestCase;  import com.android.systemui.plugins.VolumeDialogController;  import com.android.systemui.plugins.VolumeDialogController.State; @@ -49,7 +36,6 @@ import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;  import org.junit.Before;  import org.junit.Ignore; -import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java index 786d757557d1..5c273de23761 100644 --- a/services/core/java/com/android/server/AppOpsService.java +++ b/services/core/java/com/android/server/AppOpsService.java @@ -22,6 +22,7 @@ import android.app.ActivityThread;  import android.app.AppGlobals;  import android.app.AppOpsManager;  import android.app.AppOpsManagerInternal; +import android.app.AppOpsManagerInternal.CheckOpsDelegate;  import android.content.ContentResolver;  import android.content.Context;  import android.content.pm.ApplicationInfo; @@ -207,6 +208,8 @@ public class AppOpsService extends IAppOpsService.Stub {      SparseIntArray mProfileOwners; +    private CheckOpsDelegate mCheckOpsDelegate; +      /**       * All times are in milliseconds. These constants are kept synchronized with the system       * global Settings. Any access to this class or its fields should be done while @@ -1411,15 +1414,39 @@ public class AppOpsService extends IAppOpsService.Stub {          }      } +    public CheckOpsDelegate getAppOpsServiceDelegate() { +        synchronized (this) { +            return mCheckOpsDelegate; +        } +    } + +    public void setAppOpsServiceDelegate(CheckOpsDelegate delegate) { +        synchronized (this) { +            mCheckOpsDelegate = delegate; +        } +    } +      @Override      public int checkOperation(int code, int uid, String packageName) { -        verifyIncomingUid(uid); -        verifyIncomingOp(code); -        String resolvedPackageName = resolvePackageName(uid, packageName); -        if (resolvedPackageName == null) { -            return AppOpsManager.MODE_IGNORED; +        final CheckOpsDelegate delegate; +        synchronized (this) { +            if (mCheckOpsDelegate == null) { +                return checkOperationImpl(code, uid, packageName); +            } +            delegate = mCheckOpsDelegate;          } +        return delegate.checkOperation(code, uid, packageName, +                    AppOpsService.this::checkOperationImpl); +    } + +    private int checkOperationImpl(int code, int uid, String packageName) {          synchronized (this) { +            verifyIncomingUid(uid); +            verifyIncomingOp(code); +            String resolvedPackageName = resolvePackageName(uid, packageName); +            if (resolvedPackageName == null) { +                return AppOpsManager.MODE_IGNORED; +            }              if (isOpRestrictedLocked(uid, code, resolvedPackageName)) {                  return AppOpsManager.MODE_IGNORED;              } @@ -1439,20 +1466,33 @@ public class AppOpsService extends IAppOpsService.Stub {      @Override      public int checkAudioOperation(int code, int usage, int uid, String packageName) { -        boolean suspended; -        try { -            suspended = isPackageSuspendedForUser(packageName, uid); -        } catch (IllegalArgumentException ex) { -            // Package not found. -            suspended = false; -        } - -        if (suspended) { -            Slog.i(TAG, "Audio disabled for suspended package=" + packageName + " for uid=" + uid); -            return AppOpsManager.MODE_IGNORED; +        final CheckOpsDelegate delegate; +        synchronized (this) { +            if (mCheckOpsDelegate == null) { +                return checkAudioOperationImpl(code, usage, uid, packageName); +            } +            delegate = mCheckOpsDelegate;          } +        return delegate.checkAudioOperation(code, usage, uid, packageName, +                AppOpsService.this::checkAudioOperationImpl); +    } +    private int checkAudioOperationImpl(int code, int usage, int uid, String packageName) {          synchronized (this) { +            boolean suspended; +            try { +                suspended = isPackageSuspendedForUser(packageName, uid); +            } catch (IllegalArgumentException ex) { +                // Package not found. +                suspended = false; +            } + +            if (suspended) { +                Slog.i(TAG, "Audio disabled for suspended package=" + packageName +                        + " for uid=" + uid); +                return AppOpsManager.MODE_IGNORED; +            } +              final int mode = checkRestrictionLocked(code, usage, uid, packageName);              if (mode != AppOpsManager.MODE_ALLOWED) {                  return mode; @@ -1530,10 +1570,10 @@ public class AppOpsService extends IAppOpsService.Stub {      }      @Override -    public int noteProxyOperation(int code, String proxyPackageName, -            int proxiedUid, String proxiedPackageName) { +    public int noteProxyOperation(int code, int proxyUid, +            String proxyPackageName, int proxiedUid, String proxiedPackageName) { +        verifyIncomingUid(proxyUid);          verifyIncomingOp(code); -        final int proxyUid = Binder.getCallingUid();          String resolveProxyPackageName = resolvePackageName(proxyUid, proxyPackageName);          if (resolveProxyPackageName == null) {              return AppOpsManager.MODE_IGNORED; @@ -1553,6 +1593,18 @@ public class AppOpsService extends IAppOpsService.Stub {      @Override      public int noteOperation(int code, int uid, String packageName) { +        final CheckOpsDelegate delegate; +        synchronized (this) { +            if (mCheckOpsDelegate == null) { +                return noteOperationImpl(code, uid, packageName); +            } +            delegate = mCheckOpsDelegate; +        } +        return delegate.noteOperation(code, uid, packageName, +                AppOpsService.this::noteOperationImpl); +    } + +    private int noteOperationImpl(int code, int uid, String packageName) {          verifyIncomingUid(uid);          verifyIncomingOp(code);          String resolvedPackageName = resolvePackageName(uid, packageName); diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 1035efb80366..ac71ae5c2114 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -71,6 +71,8 @@ import android.net.INetworkMonitorCallbacks;  import android.net.INetworkPolicyListener;  import android.net.INetworkPolicyManager;  import android.net.INetworkStatsService; +import android.net.InetAddresses; +import android.net.IpPrefix;  import android.net.LinkProperties;  import android.net.LinkProperties.CompareResult;  import android.net.MatchAllNetworkSpecifier; @@ -1571,8 +1573,7 @@ public class ConnectivityService extends IConnectivityManager.Stub      public boolean isActiveNetworkMetered() {          enforceAccessPermission(); -        final int uid = Binder.getCallingUid(); -        final NetworkCapabilities caps = getUnfilteredActiveNetworkState(uid).networkCapabilities; +        final NetworkCapabilities caps = getNetworkCapabilities(getActiveNetwork());          if (caps != null) {              return !caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);          } else { @@ -1740,6 +1741,12 @@ public class ConnectivityService extends IConnectivityManager.Stub                  }              }          } + +        @Override +        public void onNat64PrefixEvent(int netId, boolean added, +                                       String prefixString, int prefixLength) { +            mHandler.post(() -> handleNat64PrefixEvent(netId, added, prefixString, prefixLength)); +        }      };      @VisibleForTesting @@ -2767,6 +2774,29 @@ public class ConnectivityService extends IConnectivityManager.Stub          handleUpdateLinkProperties(nai, new LinkProperties(nai.linkProperties));      } +    private void handleNat64PrefixEvent(int netId, boolean added, String prefixString, +            int prefixLength) { +        NetworkAgentInfo nai = mNetworkForNetId.get(netId); +        if (nai == null) return; + +        log(String.format("NAT64 prefix %s on netId %d: %s/%d", +                          (added ? "added" : "removed"), netId, prefixString, prefixLength)); + +        IpPrefix prefix = null; +        if (added) { +            try { +                prefix = new IpPrefix(InetAddresses.parseNumericAddress(prefixString), +                        prefixLength); +            } catch (IllegalArgumentException e) { +                loge("Invalid NAT64 prefix " + prefixString + "/" + prefixLength); +                return; +            } +        } + +        nai.clatd.setNat64Prefix(prefix); +        handleUpdateLinkProperties(nai, new LinkProperties(nai.linkProperties)); +    } +      private void updateLingerState(NetworkAgentInfo nai, long now) {          // 1. Update the linger timer. If it's changed, reschedule or cancel the alarm.          // 2. If the network was lingering and there are now requests, unlinger it. @@ -2882,7 +2912,7 @@ public class ConnectivityService extends IConnectivityManager.Stub              e.rethrowFromSystemServer();          }          mNetworkAgentInfos.remove(nai.messenger); -        nai.maybeStopClat(); +        nai.clatd.update();          synchronized (mNetworkForNetId) {              // Remove the NetworkAgent, but don't mark the netId as              // available until we've told netd to delete it below. @@ -4065,12 +4095,14 @@ public class ConnectivityService extends IConnectivityManager.Stub      }      /** -     * Return the information of all ongoing VPNs. This method is used by NetworkStatsService -     * and not available in ConnectivityManager. +     * Return the information of all ongoing VPNs. +     * +     * <p>This method is used to update NetworkStatsService. +     * +     * <p>Must be called on the handler thread.       */ -    @Override -    public VpnInfo[] getAllVpnInfo() { -        enforceConnectivityInternalPermission(); +    private VpnInfo[] getAllVpnInfo() { +        ensureRunningOnConnectivityServiceThread();          synchronized (mVpns) {              if (mLockdownEnabled) {                  return new VpnInfo[0]; @@ -5190,11 +5222,10 @@ public class ConnectivityService extends IConnectivityManager.Stub              LinkProperties oldLp) {          int netId = networkAgent.network.netId; -        // The NetworkAgentInfo does not know whether clatd is running on its network or not. Before -        // we do anything else, make sure its LinkProperties are accurate. -        if (networkAgent.clatd != null) { -            networkAgent.clatd.fixupLinkProperties(oldLp, newLp); -        } +        // The NetworkAgentInfo does not know whether clatd is running on its network or not, or +        // whether there is a NAT64 prefix. Before we do anything else, make sure its LinkProperties +        // are accurate. +        networkAgent.clatd.fixupLinkProperties(oldLp, newLp);          updateInterfaces(newLp, oldLp, netId, networkAgent.networkCapabilities);          updateMtu(newLp, oldLp); @@ -5224,8 +5255,8 @@ public class ConnectivityService extends IConnectivityManager.Stub              synchronized (networkAgent) {                  networkAgent.linkProperties = newLp;              } -            // Start or stop clat accordingly to network state. -            networkAgent.updateClat(mNMS); +            // Start or stop DNS64 detection and 464xlat according to network state. +            networkAgent.clatd.update();              notifyIfacesChangedForNetworkStats();              if (networkAgent.everConnected) {                  try { @@ -5533,6 +5564,8 @@ public class ConnectivityService extends IConnectivityManager.Stub      }      public void handleUpdateLinkProperties(NetworkAgentInfo nai, LinkProperties newLp) { +        ensureRunningOnConnectivityServiceThread(); +          if (getNetworkAgentInfoForNetId(nai.network.netId) != nai) {              // Ignore updates for disconnected networks              return; @@ -6367,6 +6400,7 @@ public class ConnectivityService extends IConnectivityManager.Stub       * Must be called on the handler thread.       */      private Network[] getDefaultNetworks() { +        ensureRunningOnConnectivityServiceThread();          ArrayList<Network> defaultNetworks = new ArrayList<>();          NetworkAgentInfo defaultNetwork = getDefaultNetwork();          for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) { @@ -6382,8 +6416,15 @@ public class ConnectivityService extends IConnectivityManager.Stub       * properties tracked by NetworkStatsService on an active iface has changed.       */      private void notifyIfacesChangedForNetworkStats() { +        ensureRunningOnConnectivityServiceThread(); +        String activeIface = null; +        LinkProperties activeLinkProperties = getActiveLinkProperties(); +        if (activeLinkProperties != null) { +            activeIface = activeLinkProperties.getInterfaceName(); +        }          try { -            mStatsService.forceUpdateIfaces(getDefaultNetworks()); +            mStatsService.forceUpdateIfaces( +                    getDefaultNetworks(), getAllVpnInfo(), getAllNetworkState(), activeIface);          } catch (Exception ignored) {          }      } diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index 3b5c9f53d9a1..d8a54f7ce6a8 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -177,8 +177,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {      private ServiceState[] mServiceState; -    private int[] mNetworkType; -      private int[] mVoiceActivationState;      private int[] mDataActivationState; @@ -213,6 +211,9 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {      private CallAttributes mCallAttributes = new CallAttributes(new PreciseCallState(),              TelephonyManager.NETWORK_TYPE_UNKNOWN, new CallQuality()); +    // network type of the call associated with the mCallAttributes and mCallQuality +    private int mCallNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN; +      private int[] mSrvccState;      private int mDefaultSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; @@ -374,7 +375,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {          mDataConnectionNetworkType = new int[numPhones];          mCallIncomingNumber = new String[numPhones];          mServiceState = new ServiceState[numPhones]; -        mNetworkType = new int[numPhones];          mVoiceActivationState = new int[numPhones];          mDataActivationState = new int[numPhones];          mUserMobileDataState = new boolean[numPhones]; @@ -395,7 +395,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {              mDataActivationState[i] = TelephonyManager.SIM_ACTIVATION_STATE_UNKNOWN;              mCallIncomingNumber[i] =  "";              mServiceState[i] =  new ServiceState(); -            mNetworkType[i] = mServiceState[i].getVoiceNetworkType();              mSignalStrength[i] =  new SignalStrength();              mUserMobileDataState[i] = false;              mMessageWaiting[i] =  false; @@ -997,21 +996,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {              if (validatePhoneId(phoneId)) {                  mServiceState[phoneId] = state; -                boolean notifyCallAttributes = true; -                if (mNetworkType[phoneId] != mServiceState[phoneId].getVoiceNetworkType()) { -                    mNetworkType[phoneId] = state.getVoiceNetworkType(); -                    mCallAttributes = new CallAttributes(mPreciseCallState, mNetworkType[phoneId], -                            mCallQuality); -                } else { -                    // No change to network type, so no need to notify call attributes -                    notifyCallAttributes = false; -                } - -                if (mCallQuality == null) { -                    // No call quality reported yet, so no need to notify call attributes -                    notifyCallAttributes = false; -                } -                  for (Record r : mRecords) {                      if (VDBG) {                          log("notifyServiceStateForSubscriber: r=" + r + " subId=" + subId @@ -1039,14 +1023,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {                              mRemoveList.add(r.binder);                          }                      } -                    if (notifyCallAttributes && r.matchPhoneStateListenerEvent( -                                    PhoneStateListener.LISTEN_CALL_ATTRIBUTES_CHANGED)) { -                        try { -                            r.callback.onCallAttributesChanged(mCallAttributes); -                        } catch (RemoteException ex) { -                            mRemoveList.add(r.binder); -                        } -                    }                  }              } else {                  log("notifyServiceStateForSubscriber: INVALID phoneId=" + phoneId); @@ -1478,7 +1454,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {          synchronized (mRecords) {              mPreciseDataConnectionState = new PreciseDataConnectionState(                      TelephonyManager.DATA_UNKNOWN,TelephonyManager.NETWORK_TYPE_UNKNOWN, -                    ApnSetting.getApnTypesBitmaskFromString(apnType), "", null, +                    ApnSetting.getApnTypesBitmaskFromString(apnType), null, null,                      DataFailCause.NONE);              for (Record r : mRecords) {                  if (r.matchPhoneStateListenerEvent( @@ -1494,7 +1470,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {          }          broadcastDataConnectionFailed(apnType, subId);          broadcastPreciseDataConnectionStateChanged(TelephonyManager.DATA_UNKNOWN, -                TelephonyManager.NETWORK_TYPE_UNKNOWN, apnType, "", null, +                TelephonyManager.NETWORK_TYPE_UNKNOWN, apnType, null, null,                  DataFailCause.NONE);      } @@ -1573,7 +1549,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {                  log("notifyPreciseCallState: mCallQuality is null, skipping call attributes");                  notifyCallAttributes = false;              } else { -                mCallAttributes = new CallAttributes(mPreciseCallState, mNetworkType[phoneId], +                mCallAttributes = new CallAttributes(mPreciseCallState, mCallNetworkType,                          mCallQuality);              } @@ -1840,16 +1816,16 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {      }      @Override -    public void notifyCallQualityChanged(CallQuality callQuality, int phoneId) { +    public void notifyCallQualityChanged(CallQuality callQuality, int phoneId, +            int callNetworkType) {          if (!checkNotifyPermission("notifyCallQualityChanged()")) {              return;          }          // merge CallQuality with PreciseCallState and network type          mCallQuality = callQuality; -        mCallAttributes = new CallAttributes(mPreciseCallState, -                mNetworkType[phoneId], -                callQuality); +        mCallNetworkType = callNetworkType; +        mCallAttributes = new CallAttributes(mPreciseCallState, callNetworkType, callQuality);          synchronized (mRecords) {              TelephonyManager tm = (TelephonyManager) mContext.getSystemService( @@ -1886,7 +1862,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {                  pw.println("mCallState=" + mCallState[i]);                  pw.println("mCallIncomingNumber=" + mCallIncomingNumber[i]);                  pw.println("mServiceState=" + mServiceState[i]); -                pw.println("mNetworkType=" + mNetworkType[i]);                  pw.println("mVoiceActivationState= " + mVoiceActivationState[i]);                  pw.println("mDataActivationState= " + mDataActivationState[i]);                  pw.println("mUserMobileDataState= " + mUserMobileDataState[i]); @@ -1900,6 +1875,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {                  pw.println("mImsCallDisconnectCause=" + mImsReasonInfo.get(i).toString());                  pw.decreaseIndent();              } +            pw.println("mCallNetworkType=" + mCallNetworkType);              pw.println("mPreciseDataConnectionState=" + mPreciseDataConnectionState);              pw.println("mPreciseCallState=" + mPreciseCallState);              pw.println("mCallDisconnectCause=" + mCallDisconnectCause); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 52a3536e63d4..e18f3740a969 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -233,6 +233,7 @@ import android.app.ActivityThread;  import android.app.AlertDialog;  import android.app.AppGlobals;  import android.app.AppOpsManager; +import android.app.AppOpsManagerInternal.CheckOpsDelegate;  import android.app.ApplicationErrorReport;  import android.app.ApplicationThreadConstants;  import android.app.BroadcastOptions; @@ -296,6 +297,7 @@ import android.content.pm.PackageInfo;  import android.content.pm.PackageManager;  import android.content.pm.PackageManager.NameNotFoundException;  import android.content.pm.PackageManagerInternal; +import android.content.pm.PackageManagerInternal.CheckPermissionDelegate;  import android.content.pm.ParceledListSlice;  import android.content.pm.PathPermission;  import android.content.pm.PermissionInfo; @@ -432,6 +434,8 @@ import com.android.internal.util.FastPrintWriter;  import com.android.internal.util.FastXmlSerializer;  import com.android.internal.util.MemInfoReader;  import com.android.internal.util.Preconditions; +import com.android.internal.util.function.QuadFunction; +import com.android.internal.util.function.TriFunction;  import com.android.server.AlarmManagerInternal;  import com.android.server.AppOpsService;  import com.android.server.AttributeCache; @@ -516,6 +520,7 @@ import java.util.concurrent.CountDownLatch;  import java.util.concurrent.Executor;  import java.util.concurrent.atomic.AtomicBoolean;  import java.util.concurrent.atomic.AtomicLong; +import java.util.function.BiFunction;  public class ActivityManagerService extends IActivityManager.Stub          implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback { @@ -2659,7 +2664,7 @@ public class ActivityManagerService extends IActivityManager.Stub                      ProcessRecord proc;                      int procState;                      int statType; -                    int pid; +                    int pid = -1;                      long lastPssTime;                      synchronized (ActivityManagerService.this) {                          if (mPendingPssProcesses.size() <= 0) { @@ -22177,6 +22182,8 @@ public class ActivityManagerService extends IActivityManager.Stub              // Can't call out of the system process with a lock held, so post a message.              if (app.instr.mUiAutomationConnection != null) { +                mAppOpsService.setAppOpsServiceDelegate(null); +                getPackageManagerInternalLocked().setCheckPermissionDelegate(null);                  mHandler.obtainMessage(SHUTDOWN_UI_AUTOMATION_CONNECTION_MSG,                          app.instr.mUiAutomationConnection).sendToTarget();              } @@ -27189,4 +27196,143 @@ public class ActivityManagerService extends IActivityManager.Stub              }          }      } + +    @Override +    public void startDelegateShellPermissionIdentity(int delegateUid) { +        if (UserHandle.getCallingAppId() != Process.SHELL_UID +                && UserHandle.getCallingAppId() != Process.ROOT_UID) { +            throw new SecurityException("Only the shell can delegate its permissions"); +        } + +        // We allow delegation only to one instrumentation started from the shell +        synchronized (ActivityManagerService.this) { +            // If there is a delegate it should be the same instance for app ops and permissions. +            if (mAppOpsService.getAppOpsServiceDelegate() +                    != getPackageManagerInternalLocked().getCheckPermissionDelegate()) { +                throw new IllegalStateException("Bad shell delegate state"); +            } + +            // If the delegate is already set up for the target UID, nothing to do. +            if (mAppOpsService.getAppOpsServiceDelegate() != null) { +                if (!(mAppOpsService.getAppOpsServiceDelegate() instanceof ShellDelegate)) { +                    throw new IllegalStateException("Bad shell delegate state"); +                } +                if (((ShellDelegate) mAppOpsService.getAppOpsServiceDelegate()) +                        .getDelegateUid() != delegateUid) { +                    throw new SecurityException("Shell can delegate permissions only " +                            + "to one instrumentation at a time"); +                } +                return; +            } + +            final int instrCount = mActiveInstrumentation.size(); +            for (int i = 0; i < instrCount; i++) { +                final ActiveInstrumentation instr = mActiveInstrumentation.get(i); +                if (instr.mTargetInfo.uid != delegateUid) { +                    continue; +                } +                // If instrumentation started from the shell the connection is not null +                if (instr.mUiAutomationConnection == null) { +                    throw new SecurityException("Shell can delegate its permissions" + +                            " only to an instrumentation started from the shell"); +                } + +                // Hook them up... +                final ShellDelegate shellDelegate = new ShellDelegate( +                        instr.mTargetInfo.packageName, delegateUid); +                mAppOpsService.setAppOpsServiceDelegate(shellDelegate); +                getPackageManagerInternalLocked().setCheckPermissionDelegate(shellDelegate); +                return; +            } +        } +    } + +    @Override +    public void stopDelegateShellPermissionIdentity() { +        if (UserHandle.getCallingAppId() != Process.SHELL_UID +                && UserHandle.getCallingAppId() != Process.ROOT_UID) { +            throw new SecurityException("Only the shell can delegate its permissions"); +        } +        synchronized (ActivityManagerService.this) { +            mAppOpsService.setAppOpsServiceDelegate(null); +            getPackageManagerInternalLocked().setCheckPermissionDelegate(null); +        } +    } + +    private class ShellDelegate implements CheckOpsDelegate, CheckPermissionDelegate { +        private final String mTargetPackageName; +        private final int mTargetUid; + +        ShellDelegate(String targetPacakgeName, int targetUid) { +            mTargetPackageName = targetPacakgeName; +            mTargetUid = targetUid; +        } + +        int getDelegateUid() { +            return mTargetUid; +        } + +        @Override +        public int checkOperation(int code, int uid, String packageName, +                TriFunction<Integer, Integer, String, Integer> superImpl) { +            if (uid == mTargetUid) { +                final long identity = Binder.clearCallingIdentity(); +                try { +                    return superImpl.apply(code, Process.SHELL_UID, +                            "com.android.shell"); +                } finally { +                    Binder.restoreCallingIdentity(identity); +                } +            } +            return superImpl.apply(code, uid, packageName); +        } + +        @Override +        public int checkAudioOperation(int code, int usage, int uid, String packageName, +                QuadFunction<Integer, Integer, Integer, String, Integer> superImpl) { +            if (uid == mTargetUid) { +                final long identity = Binder.clearCallingIdentity(); +                try { +                    return superImpl.apply(code, usage, Process.SHELL_UID, +                            "com.android.shell"); +                } finally { +                    Binder.restoreCallingIdentity(identity); +                } +            } +            return superImpl.apply(code, usage, uid, packageName); +        } + +        @Override +        public int noteOperation(int code, int uid, String packageName, +                TriFunction<Integer, Integer, String, Integer> superImpl) { +            if (uid == mTargetUid) { +                final long identity = Binder.clearCallingIdentity(); +                try { +                    return mAppOpsService.noteProxyOperation(code, Process.SHELL_UID, +                            "com.android.shell", uid, packageName); +                } finally { +                    Binder.restoreCallingIdentity(identity); +                } +            } +            return superImpl.apply(code, uid, packageName); +        } + +        @Override +        public int checkPermission(String permName, String pkgName, int userId, +                TriFunction<String, String, Integer, Integer> superImpl) { +            if (mTargetPackageName.equals(pkgName)) { +                return superImpl.apply(permName, "com.android.shell", userId); +            } +            return superImpl.apply(permName, pkgName, userId); +        } + +        @Override +        public int checkUidPermission(String permName, int uid, +                BiFunction<String, Integer, Integer> superImpl) { +            if (uid == mTargetUid) { +                return superImpl.apply(permName, Process.SHELL_UID); +            } +            return superImpl.apply(permName, uid); +        } +    }  } diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java index 9d9b1cfdf6e2..2646d7669d79 100644 --- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java +++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java @@ -18,19 +18,24 @@ package com.android.server.connectivity;  import android.net.ConnectivityManager;  import android.net.INetd; +import android.net.InetAddresses;  import android.net.InterfaceConfiguration; +import android.net.IpPrefix;  import android.net.LinkAddress;  import android.net.LinkProperties;  import android.net.NetworkInfo;  import android.net.RouteInfo;  import android.os.INetworkManagementService;  import android.os.RemoteException; +import android.os.ServiceSpecificException;  import android.util.Slog; +import com.android.internal.annotations.VisibleForTesting;  import com.android.internal.util.ArrayUtils;  import com.android.server.net.BaseNetworkObserver;  import java.net.Inet4Address; +import java.net.Inet6Address;  import java.util.Objects;  /** @@ -67,15 +72,16 @@ public class Nat464Xlat extends BaseNetworkObserver {      private final NetworkAgentInfo mNetwork;      private enum State { -        IDLE,       // start() not called. Base iface and stacked iface names are null. -        STARTING,   // start() called. Base iface and stacked iface names are known. -        RUNNING,    // start() called, and the stacked iface is known to be up. -        STOPPING;   // stop() called, this Nat464Xlat is still registered as a network observer for -                    // the stacked interface. +        IDLE,         // start() not called. Base iface and stacked iface names are null. +        DISCOVERING,  // same as IDLE, except prefix discovery in progress. +        STARTING,     // start() called. Base iface and stacked iface names are known. +        RUNNING,      // start() called, and the stacked iface is known to be up.      } +    private IpPrefix mNat64Prefix;      private String mBaseIface;      private String mIface; +    private Inet6Address mIPv6Address;      private State mState = State.IDLE;      public Nat464Xlat(NetworkAgentInfo nai, INetd netd, INetworkManagementService nmService) { @@ -85,20 +91,51 @@ public class Nat464Xlat extends BaseNetworkObserver {      }      /** -     * Determines whether a network requires clat. +     * Whether to attempt 464xlat on this network. This is true for an IPv6-only network that is +     * currently connected and where the NetworkAgent has not disabled 464xlat. It is the signal to +     * enable NAT64 prefix discovery. +     *       * @param network the NetworkAgentInfo corresponding to the network.       * @return true if the network requires clat, false otherwise.       */ -    public static boolean requiresClat(NetworkAgentInfo nai) { +    @VisibleForTesting +    protected static boolean requiresClat(NetworkAgentInfo nai) {          // TODO: migrate to NetworkCapabilities.TRANSPORT_*.          final boolean supported = ArrayUtils.contains(NETWORK_TYPES, nai.networkInfo.getType());          final boolean connected = ArrayUtils.contains(NETWORK_STATES, nai.networkInfo.getState()); -        // We only run clat on networks that don't have a native IPv4 address. -        final boolean hasIPv4Address = -                (nai.linkProperties != null) && nai.linkProperties.hasIPv4Address(); -        final boolean skip464xlat = -                (nai.netMisc() != null) && nai.netMisc().skip464xlat; -        return supported && connected && !hasIPv4Address && !skip464xlat; + +        // Only run clat on networks that have a global IPv6 address and don't have a native IPv4 +        // address. +        LinkProperties lp = nai.linkProperties; +        final boolean isIpv6OnlyNetwork = (lp != null) && lp.hasGlobalIPv6Address() +                && !lp.hasIPv4Address(); + +        // If the network tells us it doesn't use clat, respect that. +        final boolean skip464xlat = (nai.netMisc() != null) && nai.netMisc().skip464xlat; + +        return supported && connected && isIpv6OnlyNetwork && !skip464xlat; +    } + +    /** +     * Whether the clat demon should be started on this network now. This is true if requiresClat is +     * true and a NAT64 prefix has been discovered. +     * +     * @param nai the NetworkAgentInfo corresponding to the network. +     * @return true if the network should start clat, false otherwise. +     */ +    @VisibleForTesting +    protected static boolean shouldStartClat(NetworkAgentInfo nai) { +        LinkProperties lp = nai.linkProperties; +        return requiresClat(nai) && lp != null && lp.getNat64Prefix() != null; +    } + +    /** +     * @return true if we have started prefix discovery and not yet stopped it (regardless of +     * whether it is still running or has succeeded). +     * A true result corresponds to internal states DISCOVERING, STARTING and RUNNING. +     */ +    public boolean isPrefixDiscoveryStarted() { +        return mState == State.DISCOVERING || isStarted();      }      /** @@ -106,7 +143,7 @@ public class Nat464Xlat extends BaseNetworkObserver {       * A true result corresponds to internal states STARTING and RUNNING.       */      public boolean isStarted() { -        return mState != State.IDLE; +        return (mState == State.STARTING || mState == State.RUNNING);      }      /** @@ -124,32 +161,31 @@ public class Nat464Xlat extends BaseNetworkObserver {      }      /** -     * @return true if clatd has been stopped. -     */ -    public boolean isStopping() { -        return mState == State.STOPPING; -    } - -    /**       * Start clatd, register this Nat464Xlat as a network observer for the stacked interface,       * and set internal state.       */      private void enterStartingState(String baseIface) {          try {              mNMService.registerObserver(this); -        } catch(RemoteException e) { -            Slog.e(TAG, -                    "startClat: Can't register interface observer for clat on " + mNetwork.name()); +        } catch (RemoteException e) { +            Slog.e(TAG, "Can't register interface observer for clat on " + mNetwork.name());              return;          } + +        String addrStr = null;          try { -            mNetd.clatdStart(baseIface); -        } catch(RemoteException|IllegalStateException e) { -            Slog.e(TAG, "Error starting clatd on " + baseIface, e); +            addrStr = mNetd.clatdStart(baseIface, mNat64Prefix.toString()); +        } catch (RemoteException | ServiceSpecificException e) { +            Slog.e(TAG, "Error starting clatd on " + baseIface + ": " + e);          }          mIface = CLAT_PREFIX + baseIface;          mBaseIface = baseIface;          mState = State.STARTING; +        try { +            mIPv6Address = (Inet6Address) InetAddresses.parseNumericAddress(addrStr); +        } catch (ClassCastException | IllegalArgumentException | NullPointerException e) { +            Slog.e(TAG, "Invalid IPv6 address " + addrStr); +        }      }      /** @@ -161,37 +197,27 @@ public class Nat464Xlat extends BaseNetworkObserver {      }      /** -     * Stop clatd, and turn ND offload on if it had been turned off. -     */ -    private void enterStoppingState() { -        try { -            mNetd.clatdStop(mBaseIface); -        } catch(RemoteException|IllegalStateException e) { -            Slog.e(TAG, "Error stopping clatd on " + mBaseIface, e); -        } - -        mState = State.STOPPING; -    } - -    /**       * Unregister as a base observer for the stacked interface, and clear internal state.       */ -    private void enterIdleState() { +    private void leaveStartedState() {          try {              mNMService.unregisterObserver(this); -        } catch(RemoteException|IllegalStateException e) { -            Slog.e(TAG, "Error unregistering clatd observer on " + mBaseIface, e); +        } catch (RemoteException | IllegalStateException e) { +            Slog.e(TAG, "Error unregistering clatd observer on " + mBaseIface + ": " + e);          } -          mIface = null;          mBaseIface = null;          mState = State.IDLE; +        if (requiresClat(mNetwork)) { +            mState = State.DISCOVERING; +        } else { +            stopPrefixDiscovery(); +            mState = State.IDLE; +        }      } -    /** -     * Starts the clat daemon. -     */ -    public void start() { +    @VisibleForTesting +    protected void start() {          if (isStarted()) {              Slog.e(TAG, "startClat: already started");              return; @@ -212,28 +238,92 @@ public class Nat464Xlat extends BaseNetworkObserver {          enterStartingState(baseIface);      } -    /** -     * Stops the clat daemon. -     */ -    public void stop() { +    @VisibleForTesting +    protected void stop() {          if (!isStarted()) { +            Slog.e(TAG, "stopClat: already stopped");              return;          } +          Slog.i(TAG, "Stopping clatd on " + mBaseIface); +        try { +            mNetd.clatdStop(mBaseIface); +        } catch (RemoteException | ServiceSpecificException e) { +            Slog.e(TAG, "Error stopping clatd on " + mBaseIface + ": " + e); +        } + +        String iface = mIface; +        boolean wasRunning = isRunning(); + +        // Change state before updating LinkProperties. handleUpdateLinkProperties ends up calling +        // fixupLinkProperties, and if at that time the state is still RUNNING, fixupLinkProperties +        // would wrongly inform ConnectivityService that there is still a stacked interface. +        leaveStartedState(); + +        if (wasRunning) { +            LinkProperties lp = new LinkProperties(mNetwork.linkProperties); +            lp.removeStackedLink(iface); +            mNetwork.connService().handleUpdateLinkProperties(mNetwork, lp); +        } +    } + +    private void startPrefixDiscovery() { +        try { +            mNetd.resolverStartPrefix64Discovery(getNetId()); +            mState = State.DISCOVERING; +        } catch (RemoteException | ServiceSpecificException e) { +            Slog.e(TAG, "Error starting prefix discovery on netId " + getNetId() + ": " + e); +        } +    } -        boolean wasStarting = isStarting(); -        enterStoppingState(); -        if (wasStarting) { -            enterIdleState(); +    private void stopPrefixDiscovery() { +        try { +            mNetd.resolverStopPrefix64Discovery(getNetId()); +        } catch (RemoteException | ServiceSpecificException e) { +            Slog.e(TAG, "Error stopping prefix discovery on netId " + getNetId() + ": " + e);          }      }      /** +     * Starts/stops NAT64 prefix discovery and clatd as necessary. +     */ +    public void update() { +        // TODO: turn this class into a proper StateMachine. // http://b/126113090 +        if (requiresClat(mNetwork)) { +            if (!isPrefixDiscoveryStarted()) { +                startPrefixDiscovery(); +            } else if (shouldStartClat(mNetwork)) { +                // NAT64 prefix detected. Start clatd. +                // TODO: support the NAT64 prefix changing after it's been discovered. There is no +                // need to support this at the moment because it cannot happen without changes to +                // the Dns64Configuration code in netd. +                start(); +            } else { +                // NAT64 prefix removed. Stop clatd and go back into DISCOVERING state. +                stop(); +            } +        } else { +            // Network no longer requires clat. Stop clat and prefix discovery. +            if (isStarted()) { +                stop(); +            } else if (isPrefixDiscoveryStarted()) { +                leaveStartedState(); +            } +        } +    } + +    public void setNat64Prefix(IpPrefix nat64Prefix) { +        mNat64Prefix = nat64Prefix; +    } + +    /**       * Copies the stacked clat link in oldLp, if any, to the passed LinkProperties.       * This is necessary because the LinkProperties in mNetwork come from the transport layer, which       * has no idea that 464xlat is running on top of it.       */      public void fixupLinkProperties(LinkProperties oldLp, LinkProperties lp) { +        lp.setNat64Prefix(mNat64Prefix); +          if (!isRunning()) {              return;          } @@ -272,7 +362,7 @@ public class Nat464Xlat extends BaseNetworkObserver {          try {              InterfaceConfiguration config = mNMService.getInterfaceConfig(iface);              return config.getLinkAddress(); -        } catch(RemoteException|IllegalStateException e) { +        } catch (RemoteException | IllegalStateException e) {              Slog.e(TAG, "Error getting link properties: " + e);              return null;          } @@ -282,6 +372,20 @@ public class Nat464Xlat extends BaseNetworkObserver {       * Adds stacked link on base link and transitions to RUNNING state.       */      private void handleInterfaceLinkStateChanged(String iface, boolean up) { +        // TODO: if we call start(), then stop(), then start() again, and the +        // interfaceLinkStateChanged notification for the first start is delayed past the first +        // stop, then the code becomes out of sync with system state and will behave incorrectly. +        // +        // This is not trivial to fix because: +        // 1. It is not guaranteed that start() will eventually result in the interface coming up, +        //    because there could be an error starting clat (e.g., if the interface goes down before +        //    the packet socket can be bound). +        // 2. If start is called multiple times, there is nothing in the interfaceLinkStateChanged +        //    notification that says which start() call the interface was created by. +        // +        // Once this code is converted to StateMachine, it will be possible to use deferMessage to +        // ensure it stays in STARTING state until the interfaceLinkStateChanged notification fires, +        // and possibly use a timeout (or provide some guarantees at the lower layer) to address #1.          if (!isStarting() || !up || !Objects.equals(mIface, iface)) {              return;          } @@ -307,20 +411,16 @@ public class Nat464Xlat extends BaseNetworkObserver {          if (!Objects.equals(mIface, iface)) {              return;          } -        if (!isRunning() && !isStopping()) { +        if (!isRunning()) {              return;          }          Slog.i(TAG, "interface " + iface + " removed"); -        if (!isStopping()) { -            // Ensure clatd is stopped if stop() has not been called: this likely means that clatd -            // has crashed. -            enterStoppingState(); -        } -        enterIdleState(); -        LinkProperties lp = new LinkProperties(mNetwork.linkProperties); -        lp.removeStackedLink(iface); -        mNetwork.connService().handleUpdateLinkProperties(mNetwork, lp); +        // If we're running, and the interface was removed, then we didn't call stop(), and it's +        // likely that clatd crashed. Ensure we call stop() so we can start clatd again. Calling +        // stop() will also update LinkProperties, and if clatd crashed, the LinkProperties update +        // will cause ConnectivityService to call start() again. +        stop();      }      @Override @@ -337,4 +437,9 @@ public class Nat464Xlat extends BaseNetworkObserver {      public String toString() {          return "mBaseIface: " + mBaseIface + ", mIface: " + mIface + ", mState: " + mState;      } + +    @VisibleForTesting +    protected int getNetId() { +        return mNetwork.network.netId; +    }  } diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java index d0cff25dbf05..f11a0de1bf77 100644 --- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java +++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java @@ -236,7 +236,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {      public final AsyncChannel asyncChannel;      // Used by ConnectivityService to keep track of 464xlat. -    public Nat464Xlat clatd; +    public final Nat464Xlat clatd;      // Set after asynchronous creation of the NetworkMonitor.      private volatile INetworkMonitor mNetworkMonitor; @@ -244,8 +244,6 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {      private static final String TAG = ConnectivityService.class.getSimpleName();      private static final boolean VDBG = false;      private final ConnectivityService mConnService; -    private final INetd mNetd; -    private final INetworkManagementService mNMS;      private final Context mContext;      private final Handler mHandler; @@ -260,9 +258,8 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {          linkProperties = lp;          networkCapabilities = nc;          currentScore = score; +        clatd = new Nat464Xlat(this, netd, nms);          mConnService = connService; -        mNetd = netd; -        mNMS = nms;          mContext = context;          mHandler = handler;          networkMisc = misc; @@ -595,32 +592,6 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {          for (LingerTimer timer : mLingerTimers) { pw.println(timer); }      } -    public void updateClat(INetworkManagementService netd) { -        if (Nat464Xlat.requiresClat(this)) { -            maybeStartClat(); -        } else { -            maybeStopClat(); -        } -    } - -    /** Ensure clat has started for this network. */ -    public void maybeStartClat() { -        if (clatd != null && clatd.isStarted()) { -            return; -        } -        clatd = new Nat464Xlat(this, mNetd, mNMS); -        clatd.start(); -    } - -    /** Ensure clat has stopped for this network. */ -    public void maybeStopClat() { -        if (clatd == null) { -            return; -        } -        clatd.stop(); -        clatd = null; -    } -      public String toString() {          return "NetworkAgentInfo{ ni{" + networkInfo + "}  "                  + "network{" + network + "}  nethandle{" + network.getNetworkHandle() + "}  " diff --git a/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java b/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java index 8a9ac23cf06a..65de83b2045c 100644 --- a/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java +++ b/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java @@ -16,10 +16,12 @@  package com.android.server.connectivity;  import static android.net.SocketKeepalive.DATA_RECEIVED; +import static android.net.SocketKeepalive.ERROR_HARDWARE_UNSUPPORTED;  import static android.net.SocketKeepalive.ERROR_INVALID_SOCKET;  import static android.net.SocketKeepalive.ERROR_SOCKET_NOT_IDLE;  import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_ERROR;  import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_INPUT; +import static android.system.OsConstants.ENOPROTOOPT;  import static android.system.OsConstants.FIONREAD;  import static android.system.OsConstants.IPPROTO_TCP;  import static android.system.OsConstants.TIOCOUTQ; @@ -179,12 +181,13 @@ public class TcpKeepaliveController {              trw = NetworkUtils.getTcpRepairWindow(fd);          } catch (ErrnoException e) {              Log.e(TAG, "Exception reading TCP state from socket", e); -            try { -                Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR, TCP_REPAIR_OFF); -            } catch (ErrnoException ex) { -                Log.e(TAG, "Exception while turning off repair mode due to exception", ex); +            if (e.errno == ENOPROTOOPT) { +                // ENOPROTOOPT may happen in kernel version lower than 4.8. +                // Treat it as ERROR_HARDWARE_UNSUPPORTED. +                throw new InvalidSocketException(ERROR_HARDWARE_UNSUPPORTED, e); +            } else { +                throw new InvalidSocketException(ERROR_INVALID_SOCKET, e);              } -            throw new InvalidSocketException(ERROR_INVALID_SOCKET, e);          } finally {              dropAllIncomingPackets(fd, false);          } diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index c91e1a12078e..13ff30d6ad3e 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -289,8 +289,8 @@ public class Tethering extends BaseNetworkObserver {      }      private void maybeUpdateConfiguration() { -        final int dunCheck = TetheringConfiguration.checkDunRequired(mContext); -        if (dunCheck == mConfig.dunCheck) return; +        final boolean isDunRequired = TetheringConfiguration.checkDunRequired(mContext); +        if (isDunRequired == mConfig.isDunRequired) return;          updateConfiguration();      } diff --git a/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java b/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java index 8a46ff18979f..935b79546d63 100644 --- a/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java +++ b/services/core/java/com/android/server/connectivity/tethering/TetheringConfiguration.java @@ -67,11 +67,6 @@ public class TetheringConfiguration {      private static final String[] EMPTY_STRING_ARRAY = new String[0]; -    @VisibleForTesting -    public static final int DUN_NOT_REQUIRED = 0; -    public static final int DUN_REQUIRED = 1; -    public static final int DUN_UNSPECIFIED = 2; -      // Default ranges used for the legacy DHCP server.      // USB is  192.168.42.1 and 255.255.255.0      // Wifi is 192.168.43.1 and 255.255.255.0 @@ -90,7 +85,6 @@ public class TetheringConfiguration {      public final String[] tetherableUsbRegexs;      public final String[] tetherableWifiRegexs;      public final String[] tetherableBluetoothRegexs; -    public final int dunCheck;      public final boolean isDunRequired;      public final boolean chooseUpstreamAutomatically;      public final Collection<Integer> preferredUpstreamIfaceTypes; @@ -116,12 +110,10 @@ public class TetheringConfiguration {          tetherableWifiRegexs = getResourceStringArray(res, config_tether_wifi_regexs);          tetherableBluetoothRegexs = getResourceStringArray(res, config_tether_bluetooth_regexs); -        dunCheck = checkDunRequired(ctx); -        configLog.log("DUN check returned: " + dunCheckString(dunCheck)); +        isDunRequired = checkDunRequired(ctx);          chooseUpstreamAutomatically = getResourceBoolean(res, config_tether_upstream_automatic); -        preferredUpstreamIfaceTypes = getUpstreamIfaceTypes(res, dunCheck); -        isDunRequired = preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN); +        preferredUpstreamIfaceTypes = getUpstreamIfaceTypes(res, isDunRequired);          legacyDhcpRanges = getLegacyDhcpRanges(res);          defaultIPv4DNS = copy(DEFAULT_IPV4_DNS); @@ -230,53 +222,43 @@ public class TetheringConfiguration {          return upstreamNames;      } -    public static int checkDunRequired(Context ctx) { +    /** Check whether dun is required. */ +    public static boolean checkDunRequired(Context ctx) {          final TelephonyManager tm = (TelephonyManager) ctx.getSystemService(TELEPHONY_SERVICE); -        return (tm != null) ? tm.getTetherApnRequired() : DUN_UNSPECIFIED; -    } - -    private static String dunCheckString(int dunCheck) { -        switch (dunCheck) { -            case DUN_NOT_REQUIRED: return "DUN_NOT_REQUIRED"; -            case DUN_REQUIRED:     return "DUN_REQUIRED"; -            case DUN_UNSPECIFIED:  return "DUN_UNSPECIFIED"; -            default: -                return String.format("UNKNOWN (%s)", dunCheck); -        } +        return (tm != null) ? tm.getTetherApnRequired() : false;      } -    private static Collection<Integer> getUpstreamIfaceTypes(Resources res, int dunCheck) { +    private static Collection<Integer> getUpstreamIfaceTypes(Resources res, boolean dunRequired) {          final int[] ifaceTypes = res.getIntArray(config_tether_upstream_types);          final ArrayList<Integer> upstreamIfaceTypes = new ArrayList<>(ifaceTypes.length);          for (int i : ifaceTypes) {              switch (i) {                  case TYPE_MOBILE:                  case TYPE_MOBILE_HIPRI: -                    if (dunCheck == DUN_REQUIRED) continue; +                    if (dunRequired) continue;                      break;                  case TYPE_MOBILE_DUN: -                    if (dunCheck == DUN_NOT_REQUIRED) continue; +                    if (!dunRequired) continue;                      break;              }              upstreamIfaceTypes.add(i);          }          // Fix up upstream interface types for DUN or mobile. NOTE: independent -        // of the value of |dunCheck|, cell data of one form or another is +        // of the value of |dunRequired|, cell data of one form or another is          // *always* an upstream, regardless of the upstream interface types          // specified by configuration resources. -        if (dunCheck == DUN_REQUIRED) { +        if (dunRequired) {              appendIfNotPresent(upstreamIfaceTypes, TYPE_MOBILE_DUN); -        } else if (dunCheck == DUN_NOT_REQUIRED) { -            appendIfNotPresent(upstreamIfaceTypes, TYPE_MOBILE); -            appendIfNotPresent(upstreamIfaceTypes, TYPE_MOBILE_HIPRI);          } else { -            // Fix upstream interface types for case DUN_UNSPECIFIED.              // Do not modify if a cellular interface type is already present in the              // upstream interface types. Add TYPE_MOBILE and TYPE_MOBILE_HIPRI if no              // cellular interface types are found in the upstream interface types. -            if (!(containsOneOf(upstreamIfaceTypes, -                    TYPE_MOBILE_DUN, TYPE_MOBILE, TYPE_MOBILE_HIPRI))) { +            // This preserves backwards compatibility and prevents the DUN and default +            // mobile types incorrectly appearing together, which could happen on +            // previous releases in the common case where checkDunRequired returned +            // DUN_UNSPECIFIED. +            if (!containsOneOf(upstreamIfaceTypes, TYPE_MOBILE, TYPE_MOBILE_HIPRI)) {                  upstreamIfaceTypes.add(TYPE_MOBILE);                  upstreamIfaceTypes.add(TYPE_MOBILE_HIPRI);              } diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java index 2e7cbc684c3e..8fa435cd9381 100644 --- a/services/core/java/com/android/server/net/NetworkStatsService.java +++ b/services/core/java/com/android/server/net/NetworkStatsService.java @@ -82,7 +82,6 @@ import android.content.IntentFilter;  import android.content.pm.ApplicationInfo;  import android.content.pm.PackageManager;  import android.net.DataUsageRequest; -import android.net.IConnectivityManager;  import android.net.INetworkManagementEventObserver;  import android.net.INetworkStatsService;  import android.net.INetworkStatsSession; @@ -195,8 +194,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {      private final boolean mUseBpfTrafficStats; -    private IConnectivityManager mConnManager; -      @VisibleForTesting      public static final String ACTION_NETWORK_STATS_POLL =              "com.android.server.action.NETWORK_STATS_POLL"; @@ -258,6 +255,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {      private final ArrayMap<String, NetworkIdentitySet> mActiveUidIfaces = new ArrayMap<>();      /** Current default active iface. */ +    @GuardedBy("mStatsLock")      private String mActiveIface;      /** Set of any ifaces associated with mobile networks since boot. */ @@ -268,6 +266,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {      @GuardedBy("mStatsLock")      private Network[] mDefaultNetworks = new Network[0]; +    /** Set containing info about active VPNs and their underlying networks. */ +    @GuardedBy("mStatsLock") +    private VpnInfo[] mVpnInfos = new VpnInfo[0]; +      private final DropBoxNonMonotonicObserver mNonMonotonicObserver =              new DropBoxNonMonotonicObserver(); @@ -375,10 +377,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {          mHandlerCallback = callback;      } -    public void bindConnectivityManager(IConnectivityManager connManager) { -        mConnManager = checkNotNull(connManager, "missing IConnectivityManager"); -    } -      public void systemReady() {          mSystemReady = true; @@ -857,13 +855,17 @@ public class NetworkStatsService extends INetworkStatsService.Stub {      }      @Override -    public void forceUpdateIfaces(Network[] defaultNetworks) { +    public void forceUpdateIfaces( +            Network[] defaultNetworks, +            VpnInfo[] vpnArray, +            NetworkState[] networkStates, +            String activeIface) {          mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);          assertBandwidthControlEnabled();          final long token = Binder.clearCallingIdentity();          try { -            updateIfaces(defaultNetworks); +            updateIfaces(defaultNetworks, vpnArray, networkStates, activeIface);          } finally {              Binder.restoreCallingIdentity(token);          } @@ -1127,11 +1129,17 @@ public class NetworkStatsService extends INetworkStatsService.Stub {          }      }; -    private void updateIfaces(Network[] defaultNetworks) { +    private void updateIfaces( +            Network[] defaultNetworks, +            VpnInfo[] vpnArray, +            NetworkState[] networkStates, +            String activeIface) {          synchronized (mStatsLock) {              mWakeLock.acquire();              try { -                updateIfacesLocked(defaultNetworks); +                mVpnInfos = vpnArray; +                mActiveIface = activeIface; +                updateIfacesLocked(defaultNetworks, networkStates);              } finally {                  mWakeLock.release();              } @@ -1145,7 +1153,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {       * {@link NetworkIdentitySet}.       */      @GuardedBy("mStatsLock") -    private void updateIfacesLocked(Network[] defaultNetworks) { +    private void updateIfacesLocked(Network[] defaultNetworks, NetworkState[] states) {          if (!mSystemReady) return;          if (LOGV) Slog.v(TAG, "updateIfacesLocked()"); @@ -1157,18 +1165,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {          // will be persisted during next alarm poll event.          performPollLocked(FLAG_PERSIST_NETWORK); -        final NetworkState[] states; -        final LinkProperties activeLink; -        try { -            states = mConnManager.getAllNetworkState(); -            activeLink = mConnManager.getActiveLinkProperties(); -        } catch (RemoteException e) { -            // ignored; service lives in system_server -            return; -        } - -        mActiveIface = activeLink != null ? activeLink.getInterfaceName() : null; -          // Rebuild active interfaces based on connected networks          mActiveIfaces.clear();          mActiveUidIfaces.clear(); @@ -1280,7 +1276,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {          Trace.traceEnd(TRACE_TAG_NETWORK);          // For per-UID stats, pass the VPN info so VPN traffic is reattributed to responsible apps. -        VpnInfo[] vpnArray = mConnManager.getAllVpnInfo(); +        VpnInfo[] vpnArray = mVpnInfos;          Trace.traceBegin(TRACE_TAG_NETWORK, "recordUid");          mUidRecorder.recordSnapshotLocked(uidSnapshot, mActiveUidIfaces, vpnArray, currentTime);          Trace.traceEnd(TRACE_TAG_NETWORK); diff --git a/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java b/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java index 1dada92ab118..f4454ae2a180 100644 --- a/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java +++ b/services/core/java/com/android/server/os/BugreportManagerServiceImpl.java @@ -146,8 +146,8 @@ class BugreportManagerServiceImpl extends IDumpstate.Stub {          if (isDumpstateBinderServiceRunningLocked()) {              Slog.w(TAG, "'dumpstate' is already running. Cannot start a new bugreport"                      + " while another one is currently in progress."); -            // TODO(b/111441001): Use a new error code; add this to the documentation of the API. -            reportError(listener, IDumpstateListener.BUGREPORT_ERROR_RUNTIME_ERROR); +            reportError(listener, +                    IDumpstateListener.BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS);              return;          } diff --git a/services/core/java/com/android/server/pm/OWNERS b/services/core/java/com/android/server/pm/OWNERS index 8ce2568ac3e2..3c1ee3ece7ad 100644 --- a/services/core/java/com/android/server/pm/OWNERS +++ b/services/core/java/com/android/server/pm/OWNERS @@ -14,72 +14,72 @@ per-file ApexManager.java = dariofreni@google.com, narayan@google.com, toddke@an  per-file StagingManager.java = dariofreni@google.com, narayan@google.com, toddke@android.com, toddke@google.com  # dex -per-file AbstractStatsBase.java = agampe@google.com -per-file AbstractStatsBase.java = calin@google.com -per-file AbstractStatsBase.java = ngeoffray@google.com -per-file BackgroundDexOptService.java = agampe@google.com -per-file BackgroundDexOptService.java = calin@google.com -per-file BackgroundDexOptService.java = ngeoffray@google.com -per-file CompilerStats.java = agampe@google.com -per-file CompilerStats.java = calin@google.com -per-file CompilerStats.java = ngeoffray@google.com -per-file DynamicCodeLoggingService.java = agampe@google.com -per-file DynamicCodeLoggingService.java = calin@google.com -per-file DynamicCodeLoggingService.java = ngeoffray@google.com -per-file InstructionSets.java = agampe@google.com -per-file InstructionSets.java = calin@google.com -per-file InstructionSets.java = ngeoffray@google.com -per-file OtaDexoptService.java = agampe@google.com -per-file OtaDexoptService.java = calin@google.com -per-file OtaDexoptService.java = ngeoffray@google.com -per-file OtaDexoptShellCommand.java = agampe@google.com -per-file OtaDexoptShellCommand.java = calin@google.com -per-file OtaDexoptShellCommand.java = ngeoffray@google.com -per-file PackageDexOptimizer.java = agampe@google.com -per-file PackageDexOptimizer.java = calin@google.com -per-file PackageDexOptimizer.java = ngeoffray@google.com -per-file PackageManagerServiceCompilerMapping.java = agampe@google.com -per-file PackageManagerServiceCompilerMapping.java = calin@google.com -per-file PackageManagerServiceCompilerMapping.java = ngeoffray@google.com -per-file PackageUsage.java = agampe@google.com -per-file PackageUsage.java = calin@google.com -per-file PackageUsage.java = ngeoffray@google.com +per-file AbstractStatsBase.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file AbstractStatsBase.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file AbstractStatsBase.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file BackgroundDexOptService.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file BackgroundDexOptService.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file BackgroundDexOptService.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file CompilerStats.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file CompilerStats.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file CompilerStats.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file DynamicCodeLoggingService.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file DynamicCodeLoggingService.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file DynamicCodeLoggingService.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file InstructionSets.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file InstructionSets.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file InstructionSets.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file OtaDexoptService.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file OtaDexoptService.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file OtaDexoptService.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file OtaDexoptShellCommand.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file OtaDexoptShellCommand.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file OtaDexoptShellCommand.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file PackageDexOptimizer.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file PackageDexOptimizer.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file PackageDexOptimizer.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file PackageManagerServiceCompilerMapping.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file PackageManagerServiceCompilerMapping.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file PackageManagerServiceCompilerMapping.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com +per-file PackageUsage.java = agampe@google.com, toddke@google.com, svetoslavganov@google.com +per-file PackageUsage.java = calin@google.com, toddke@google.com, svetoslavganov@google.com +per-file PackageUsage.java = ngeoffray@google.com, toddke@google.com, svetoslavganov@google.com  # multi user / cross profile -per-file CrossProfileAppsServiceImpl.java = omakoto@google.com -per-file CrossProfileAppsServiceImpl.java = yamasani@google.com -per-file CrossProfileAppsService.java = omakoto@google.com -per-file CrossProfileAppsService.java = yamasani@google.com -per-file CrossProfileIntentFilter.java = omakoto@google.com -per-file CrossProfileIntentFilter.java = yamasani@google.com -per-file CrossProfileIntentResolver.java = omakoto@google.com -per-file CrossProfileIntentResolver.java = yamasani@google.com -per-file UserManagerService.java = omakoto@google.com -per-file UserManagerService.java = yamasani@google.com -per-file UserRestrictionsUtils.java = omakoto@google.com -per-file UserRestrictionsUtils.java = yamasani@google.com -per-file UserRestrictionsUtils.java = rubinxu@google.com -per-file UserRestrictionsUtils.java = sandness@google.com +per-file CrossProfileAppsServiceImpl.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file CrossProfileAppsServiceImpl.java = yamasani@google.com, omakoto@google.com, hackbod@google.com +per-file CrossProfileAppsService.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file CrossProfileAppsService.java = yamasani@google.com, omakoto@google.com, hackbod@google.com +per-file CrossProfileIntentFilter.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file CrossProfileIntentFilter.java = yamasani@google.com, omakoto@google.com, hackbod@google.com +per-file CrossProfileIntentResolver.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file CrossProfileIntentResolver.java = yamasani@google.com, omakoto@google.com, hackbod@google.com +per-file UserManagerService.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file UserManagerService.java = yamasani@google.com, omakoto@google.com, hackbod@google.com +per-file UserRestrictionsUtils.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file UserRestrictionsUtils.java = yamasani@google.com, omakoto@google.com, hackbod@google.com +per-file UserRestrictionsUtils.java = rubinxu@google.com, yamasani@google.com, hackbod@google.com +per-file UserRestrictionsUtils.java = sandness@google.com, yamasani@google.com, hackbod@google.com  # security -per-file KeySetHandle.java = cbrubaker@google.com -per-file KeySetManagerService.java = cbrubaker@google.com -per-file PackageKeySetData.java = cbrubaker@google.com -per-file PackageSignatures.java = cbrubaker@google.com -per-file SELinuxMMAC.java = cbrubaker@google.com +per-file KeySetHandle.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com +per-file KeySetManagerService.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com +per-file PackageKeySetData.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com +per-file PackageSignatures.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com +per-file SELinuxMMAC.java = cbrubaker@google.com, svetoslavganov@google.com, hackbod@google.com  # shortcuts -per-file LauncherAppsService.java = omakoto@google.com -per-file ShareTargetInfo.java = omakoto@google.com -per-file ShortcutBitmapSaver.java = omakoto@google.com -per-file ShortcutDumpFiles.java = omakoto@google.com -per-file ShortcutLauncher.java = omakoto@google.com -per-file ShortcutNonPersistentUser.java = omakoto@google.com -per-file ShortcutPackage.java = omakoto@google.com -per-file ShortcutPackageInfo.java = omakoto@google.com -per-file ShortcutPackageItem.java = omakoto@google.com -per-file ShortcutParser.java = omakoto@google.com -per-file ShortcutRequestPinProcessor.java = omakoto@google.com -per-file ShortcutService.java = omakoto@google.com -per-file ShortcutUser.java = omakoto@google.com +per-file LauncherAppsService.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShareTargetInfo.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutBitmapSaver.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutDumpFiles.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutLauncher.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutNonPersistentUser.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutPackage.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutPackageInfo.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutPackageItem.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutParser.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutRequestPinProcessor.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutService.java = omakoto@google.com, yamasani@google.com, hackbod@google.com +per-file ShortcutUser.java = omakoto@google.com, yamasani@google.com, hackbod@google.com diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java index 41eaa24d898e..1c0b78f23002 100644 --- a/services/core/java/com/android/server/pm/OtaDexoptService.java +++ b/services/core/java/com/android/server/pm/OtaDexoptService.java @@ -333,7 +333,7 @@ public class OtaDexoptService extends IOtaDexopt.Stub {          PackageDexOptimizer optimizer = new OTADexoptPackageDexOptimizer(                  collectingInstaller, mPackageManagerService.mInstallLock, mContext); -        optimizer.performDexOpt(pkg, pkg.usesLibraryInfos, +        optimizer.performDexOpt(pkg,                  null /* ISAs */,                  null /* CompilerStats.PackageStats */,                  mPackageManagerService.getDexManager().getPackageUseInfoOrDefault(pkg.packageName), diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 51575a45fb94..8018c2b7c27d 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -25,10 +25,12 @@ import android.content.pm.dex.ArtManager;  import android.content.pm.dex.DexMetadataHelper;  import android.os.FileUtils;  import android.os.PowerManager; +import android.os.Process;  import android.os.SystemClock;  import android.os.SystemProperties;  import android.os.UserHandle;  import android.os.WorkSource; +import android.os.storage.StorageManager;  import android.util.Log;  import android.util.Slog; @@ -127,7 +129,7 @@ public class PackageDexOptimizer {       * <p>Calls to {@link com.android.server.pm.Installer#dexopt} on {@link #mInstaller} are       * synchronized on {@link #mInstallLock}.       */ -    int performDexOpt(PackageParser.Package pkg, List<SharedLibraryInfo> sharedLibraries, +    int performDexOpt(PackageParser.Package pkg,              String[] instructionSets, CompilerStats.PackageStats packageStats,              PackageDexUsage.PackageUseInfo packageUseInfo, DexoptOptions options) {          if (pkg.applicationInfo.uid == -1) { @@ -140,7 +142,7 @@ public class PackageDexOptimizer {          synchronized (mInstallLock) {              final long acquireTime = acquireWakeLockLI(pkg.applicationInfo.uid);              try { -                return performDexOptLI(pkg, sharedLibraries, instructionSets, +                return performDexOptLI(pkg, instructionSets,                          packageStats, packageUseInfo, options);              } finally {                  releaseWakeLockLI(acquireTime); @@ -148,15 +150,60 @@ public class PackageDexOptimizer {          }      } +    int performDexOpt(SharedLibraryInfo info, String[] instructionSets, DexoptOptions options) { +        String classLoaderContext = DexoptUtils.getClassLoaderContext(info); +        final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets); +        String compilerFilter = PackageManagerServiceCompilerMapping.getCompilerFilterForReason( +                PackageManagerService.REASON_SHARED); +        int result = DEX_OPT_SKIPPED; +        for (String instructionSet : dexCodeInstructionSets) { +            int dexoptNeeded = getDexoptNeeded( +                        info.getPath(), instructionSet, compilerFilter, +                        classLoaderContext, false /* newProfile */, +                        false /* downgrade */); +            if (Math.abs(dexoptNeeded) == DexFile.NO_DEXOPT_NEEDED) { +                continue; +            } +            // Special string recognized by installd. +            final String packageName = "*"; +            final String outputPath = null; +            int dexFlags = DEXOPT_PUBLIC +                    | (options.isBootComplete() ? DEXOPT_BOOTCOMPLETE : 0) +                    | (options.isDexoptIdleBackgroundJob() ? DEXOPT_IDLE_BACKGROUND_JOB : 0); +            dexFlags = adjustDexoptFlags(dexFlags); +            final String uuid = StorageManager.UUID_SYSTEM; +            final String seInfo = null; +            final int targetSdkVersion = 0;  // Builtin libraries targets the system's SDK version +            try { +                mInstaller.dexopt(info.getPath(), Process.SYSTEM_UID, packageName, +                        instructionSet, dexoptNeeded, outputPath, dexFlags, compilerFilter, +                        uuid, classLoaderContext, seInfo, false /* downgrade */, +                        targetSdkVersion, /*profileName*/ null, /*dexMetadataPath*/ null, +                        getReasonName(options.getCompilationReason())); +                // The end result is: +                //  - FAILED if any path failed, +                //  - PERFORMED if at least one path needed compilation, +                //  - SKIPPED when all paths are up to date +                if (result != DEX_OPT_FAILED) { +                    result = DEX_OPT_PERFORMED; +                } +            } catch (InstallerException e) { +                Slog.w(TAG, "Failed to dexopt", e); +                result = DEX_OPT_FAILED; +            } +        } +        return result; +    } +      /**       * Performs dexopt on all code paths of the given package.       * It assumes the install lock is held.       */      @GuardedBy("mInstallLock")      private int performDexOptLI(PackageParser.Package pkg, -            List<SharedLibraryInfo> sharedLibraries,              String[] targetInstructionSets, CompilerStats.PackageStats packageStats,              PackageDexUsage.PackageUseInfo packageUseInfo, DexoptOptions options) { +        final List<SharedLibraryInfo> sharedLibraries = pkg.usesLibraryInfos;          final String[] instructionSets = targetInstructionSets != null ?                  targetInstructionSets : getAppDexInstructionSets(pkg.applicationInfo);          final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6b752f90929d..a98e2d3fd0da 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -177,6 +177,7 @@ import android.content.pm.PackageList;  import android.content.pm.PackageManager;  import android.content.pm.PackageManager.LegacyPackageDeleteObserver;  import android.content.pm.PackageManagerInternal; +import android.content.pm.PackageManagerInternal.CheckPermissionDelegate;  import android.content.pm.PackageManagerInternal.PackageListObserver;  import android.content.pm.PackageParser;  import android.content.pm.PackageParser.ActivityIntentInfo; @@ -297,6 +298,8 @@ import com.android.internal.util.FastXmlSerializer;  import com.android.internal.util.IndentingPrintWriter;  import com.android.internal.util.Preconditions;  import com.android.internal.util.XmlUtils; +import com.android.internal.util.function.QuadFunction; +import com.android.internal.util.function.TriFunction;  import com.android.server.AttributeCache;  import com.android.server.DeviceIdleController;  import com.android.server.EventLogTags; @@ -376,6 +379,7 @@ import java.util.concurrent.TimeUnit;  import java.util.concurrent.atomic.AtomicBoolean;  import java.util.concurrent.atomic.AtomicInteger;  import java.util.function.BiConsumer; +import java.util.function.BiFunction;  import java.util.function.Predicate;  /** @@ -1043,6 +1047,9 @@ public class PackageManagerService extends IPackageManager.Stub          void receiveVerificationResponse(int verificationId);      } +    @GuardedBy("mPackages") +    private CheckPermissionDelegate mCheckPermissionDelegate; +      private class IntentVerifierProxy implements IntentFilterVerifier<ActivityIntentInfo> {          private Context mContext;          private ComponentName mIntentFilterVerifierComponent; @@ -5352,11 +5359,35 @@ public class PackageManagerService extends IPackageManager.Stub      @Override      public int checkPermission(String permName, String pkgName, int userId) { +        final CheckPermissionDelegate checkPermissionDelegate; +        synchronized (mPackages) { +            if (mCheckPermissionDelegate == null)  { +                return checkPermissionImpl(permName, pkgName, userId); +            } +            checkPermissionDelegate = mCheckPermissionDelegate; +        } +        return checkPermissionDelegate.checkPermission(permName, pkgName, userId, +                PackageManagerService.this::checkPermissionImpl); +    } + +    private int checkPermissionImpl(String permName, String pkgName, int userId) {          return mPermissionManager.checkPermission(permName, pkgName, getCallingUid(), userId);      }      @Override      public int checkUidPermission(String permName, int uid) { +        final CheckPermissionDelegate checkPermissionDelegate; +        synchronized (mPackages) { +            if (mCheckPermissionDelegate == null)  { +                return checkUidPermissionImpl(permName, uid); +            } +            checkPermissionDelegate = mCheckPermissionDelegate; +        } +        return checkPermissionDelegate.checkUidPermission(permName, uid, +                PackageManagerService.this::checkUidPermissionImpl); +    } + +    private int checkUidPermissionImpl(String permName, int uid) {          synchronized (mPackages) {              final String[] packageNames = getPackagesForUid(uid);              final PackageParser.Package pkg = (packageNames != null && packageNames.length > 0) @@ -9237,6 +9268,16 @@ public class PackageManagerService extends IPackageManager.Stub      }      @GuardedBy("mPackages") +    public CheckPermissionDelegate getCheckPermissionDelegateLocked() { +        return mCheckPermissionDelegate; +    } + +    @GuardedBy("mPackages") +    public void setCheckPermissionDelegateLocked(CheckPermissionDelegate delegate) { +        mCheckPermissionDelegate = delegate; +    } + +    @GuardedBy("mPackages")      private void notifyPackageUseLocked(String packageName, int reason) {          final PackageParser.Package p = mPackages.get(packageName);          if (p == null) { @@ -9402,21 +9443,30 @@ public class PackageManagerService extends IPackageManager.Stub          // at boot, or background job), the passed 'targetCompilerFilter' stays the same,          // and the first package that uses the library will dexopt it. The          // others will see that the compiled code for the library is up to date. -        Collection<PackageParser.Package> deps = findSharedNonSystemLibraries(p); +        Collection<SharedLibraryInfo> deps = findSharedLibraries(p);          final String[] instructionSets = getAppDexInstructionSets(p.applicationInfo);          if (!deps.isEmpty()) {              DexoptOptions libraryOptions = new DexoptOptions(options.getPackageName(),                      options.getCompilationReason(), options.getCompilerFilter(),                      options.getSplitName(),                      options.getFlags() | DexoptOptions.DEXOPT_AS_SHARED_LIBRARY); -            for (PackageParser.Package depPackage : deps) { -                // TODO: Analyze and investigate if we (should) profile libraries. -                pdo.performDexOpt(depPackage, null /* sharedLibraries */, instructionSets, -                        getOrCreateCompilerPackageStats(depPackage), -                    mDexManager.getPackageUseInfoOrDefault(depPackage.packageName), libraryOptions); +            for (SharedLibraryInfo info : deps) { +                PackageParser.Package depPackage = null; +                synchronized (mPackages) { +                    depPackage = mPackages.get(info.getPackageName()); +                } +                if (depPackage != null) { +                    // TODO: Analyze and investigate if we (should) profile libraries. +                    pdo.performDexOpt(depPackage, instructionSets, +                            getOrCreateCompilerPackageStats(depPackage), +                            mDexManager.getPackageUseInfoOrDefault(depPackage.packageName), +                            libraryOptions); +                } else { +                    pdo.performDexOpt(info, instructionSets, libraryOptions); +                }              }          } -        return pdo.performDexOpt(p, p.usesLibraryInfos, instructionSets, +        return pdo.performDexOpt(p, instructionSets,                  getOrCreateCompilerPackageStats(p),                  mDexManager.getPackageUseInfoOrDefault(p.packageName), options);      } @@ -9453,63 +9503,48 @@ public class PackageManagerService extends IPackageManager.Stub          return BackgroundDexOptService.runIdleOptimizationsNow(this, mContext, packageNames);      } -    List<PackageParser.Package> findSharedNonSystemLibraries(PackageParser.Package p) { -        if (p.usesLibraries != null || p.usesOptionalLibraries != null -                || p.usesStaticLibraries != null) { -            ArrayList<PackageParser.Package> retValue = new ArrayList<>(); +    private static List<SharedLibraryInfo> findSharedLibraries(PackageParser.Package p) { +        if (p.usesLibraryInfos != null) { +            ArrayList<SharedLibraryInfo> retValue = new ArrayList<>();              Set<String> collectedNames = new HashSet<>(); -            findSharedNonSystemLibrariesRecursive(p, retValue, collectedNames); - -            retValue.remove(p); - +            for (SharedLibraryInfo info : p.usesLibraryInfos) { +                findSharedLibrariesRecursive(info, retValue, collectedNames); +            }              return retValue;          } else {              return Collections.emptyList();          }      } -    private void findSharedNonSystemLibrariesRecursive(PackageParser.Package p, -            ArrayList<PackageParser.Package> collected, Set<String> collectedNames) { -        if (!collectedNames.contains(p.packageName)) { -            collectedNames.add(p.packageName); -            collected.add(p); - -            if (p.usesLibraries != null) { -                findSharedNonSystemLibrariesRecursive(p.usesLibraries, -                        null, collected, collectedNames); -            } -            if (p.usesOptionalLibraries != null) { -                findSharedNonSystemLibrariesRecursive(p.usesOptionalLibraries, -                        null, collected, collectedNames); -            } -            if (p.usesStaticLibraries != null) { -                findSharedNonSystemLibrariesRecursive(p.usesStaticLibraries, -                        p.usesStaticLibrariesVersions, collected, collectedNames); -            } -        } -    } +    private static void findSharedLibrariesRecursive(SharedLibraryInfo info, +            ArrayList<SharedLibraryInfo> collected, Set<String> collectedNames) { +        if (!collectedNames.contains(info.getName())) { +            collectedNames.add(info.getName()); +            collected.add(info); -    private void findSharedNonSystemLibrariesRecursive(ArrayList<String> libs, long[] versions, -            ArrayList<PackageParser.Package> collected, Set<String> collectedNames) { -        final int libNameCount = libs.size(); -        for (int i = 0; i < libNameCount; i++) { -            String libName = libs.get(i); -            long version = (versions != null && versions.length == libNameCount) -                    ? versions[i] : PackageManager.VERSION_CODE_HIGHEST; -            PackageParser.Package libPkg = findSharedNonSystemLibrary(libName, version); -            if (libPkg != null) { -                findSharedNonSystemLibrariesRecursive(libPkg, collected, collectedNames); +            if (info.getDependencies() != null) { +                for (SharedLibraryInfo dep : info.getDependencies()) { +                    findSharedLibrariesRecursive(dep, collected, collectedNames); +                }              }          }      } -    private PackageParser.Package findSharedNonSystemLibrary(String name, long version) { -        synchronized (mPackages) { -            SharedLibraryInfo libraryInfo = getSharedLibraryInfoLPr(name, version); -            if (libraryInfo != null) { -                return mPackages.get(libraryInfo.getPackageName()); +    List<PackageParser.Package> findSharedNonSystemLibraries(PackageParser.Package pkg) { +        List<SharedLibraryInfo> deps = findSharedLibraries(pkg); +        if (!deps.isEmpty()) { +            ArrayList<PackageParser.Package> retValue = new ArrayList<>(); +            synchronized (mPackages) { +                for (SharedLibraryInfo info : deps) { +                    PackageParser.Package depPackage = mPackages.get(info.getPackageName()); +                    if (depPackage != null) { +                        retValue.add(depPackage); +                    } +                }              } -            return null; +            return retValue; +        } else { +            return Collections.emptyList();          }      } @@ -17765,7 +17800,7 @@ public class PackageManagerService extends IPackageManager.Stub                      REASON_INSTALL,                      DexoptOptions.DEXOPT_BOOT_COMPLETE |                      DexoptOptions.DEXOPT_INSTALL_WITH_DEX_METADATA_FILE); -            mPackageDexOptimizer.performDexOpt(pkg, pkg.usesLibraryInfos, +            mPackageDexOptimizer.performDexOpt(pkg,                      null /* instructionSets */,                      getOrCreateCompilerPackageStats(pkg),                      mDexManager.getPackageUseInfoOrDefault(pkg.packageName), @@ -24515,6 +24550,20 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());              }              return mArtManagerService.compileLayouts(pkg);          } + +        @Override +        public CheckPermissionDelegate getCheckPermissionDelegate() { +            synchronized (mPackages) { +                return PackageManagerService.this.getCheckPermissionDelegateLocked(); +            } +        } + +        @Override +        public void setCheckPermissionDelegate(CheckPermissionDelegate delegate) { +            synchronized (mPackages) { +                PackageManagerService.this.setCheckPermissionDelegateLocked(delegate); +            } +        }      }      @Override diff --git a/services/core/java/com/android/server/pm/dex/DexoptUtils.java b/services/core/java/com/android/server/pm/dex/DexoptUtils.java index 91ad11e53538..5a473c1819c1 100644 --- a/services/core/java/com/android/server/pm/dex/DexoptUtils.java +++ b/services/core/java/com/android/server/pm/dex/DexoptUtils.java @@ -174,6 +174,18 @@ public final class DexoptUtils {      }      /** +     * Creates the class loader context for the given shared library. +     */ +    public static String getClassLoaderContext(SharedLibraryInfo info) { +        String sharedLibrariesContext = ""; +        if (info.getDependencies() != null) { +            sharedLibrariesContext = encodeSharedLibraries(info.getDependencies()); +        } +        return encodeClassLoader( +                "", SHARED_LIBRARY_LOADER_TYPE, sharedLibrariesContext); +    } + +    /**       * Recursive method to generate the class loader context dependencies for the split with the       * given index. {@param classLoaderContexts} acts as an accumulator. Upton return       * {@code classLoaderContexts[index]} will contain the split dependency. diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java b/services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java index a042fedf8b47..ec15c16981a8 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerInternal.java @@ -21,19 +21,11 @@ import android.annotation.Nullable;  import android.content.pm.PackageParser;  import android.content.pm.PermissionGroupInfo;  import android.content.pm.PermissionInfo; -import android.content.pm.PackageManager.NameNotFoundException;  import android.content.pm.PackageManager.PermissionInfoFlags; -import android.content.pm.PackageParser.Permission; - -import com.android.server.pm.SharedUserSetting; -import com.android.server.pm.permission.PermissionManagerInternal.PermissionCallback;  import java.util.ArrayList;  import java.util.Collection; -import java.util.Iterator;  import java.util.List; -import java.util.Map; -import java.util.Set;  /**   * Internal interfaces to be used by other components within the system server. diff --git a/services/core/java/com/android/server/timezone/RulesManagerService.java b/services/core/java/com/android/server/timezone/RulesManagerService.java index 4b413e5f76bb..296a6526f5a6 100644 --- a/services/core/java/com/android/server/timezone/RulesManagerService.java +++ b/services/core/java/com/android/server/timezone/RulesManagerService.java @@ -16,14 +16,13 @@  package com.android.server.timezone; -import com.android.internal.annotations.VisibleForTesting; -import com.android.server.EventLogTags; -import com.android.server.SystemService; -import com.android.timezone.distro.DistroException; -import com.android.timezone.distro.DistroVersion; -import com.android.timezone.distro.StagedDistroOperation; -import com.android.timezone.distro.TimeZoneDistro; -import com.android.timezone.distro.installer.TimeZoneDistroInstaller; +import static android.app.timezone.RulesState.DISTRO_STATUS_INSTALLED; +import static android.app.timezone.RulesState.DISTRO_STATUS_NONE; +import static android.app.timezone.RulesState.DISTRO_STATUS_UNKNOWN; +import static android.app.timezone.RulesState.STAGED_OPERATION_INSTALL; +import static android.app.timezone.RulesState.STAGED_OPERATION_NONE; +import static android.app.timezone.RulesState.STAGED_OPERATION_UNINSTALL; +import static android.app.timezone.RulesState.STAGED_OPERATION_UNKNOWN;  import android.app.timezone.Callback;  import android.app.timezone.DistroFormatVersion; @@ -37,6 +36,21 @@ import android.os.ParcelFileDescriptor;  import android.os.RemoteException;  import android.util.Slog; +import com.android.internal.annotations.VisibleForTesting; +import com.android.server.EventLogTags; +import com.android.server.SystemService; +import com.android.timezone.distro.DistroException; +import com.android.timezone.distro.DistroVersion; +import com.android.timezone.distro.StagedDistroOperation; +import com.android.timezone.distro.TimeZoneDistro; +import com.android.timezone.distro.installer.TimeZoneDistroInstaller; + +import libcore.icu.ICU; +import libcore.timezone.TimeZoneDataFiles; +import libcore.timezone.TimeZoneFinder; +import libcore.timezone.TzDataSetVersion; +import libcore.timezone.ZoneInfoDB; +  import java.io.File;  import java.io.FileDescriptor;  import java.io.FileInputStream; @@ -46,18 +60,6 @@ import java.io.PrintWriter;  import java.util.Arrays;  import java.util.concurrent.Executor;  import java.util.concurrent.atomic.AtomicBoolean; -import libcore.icu.ICU; -import libcore.timezone.TzDataSetVersion; -import libcore.timezone.TimeZoneFinder; -import libcore.timezone.ZoneInfoDB; - -import static android.app.timezone.RulesState.DISTRO_STATUS_INSTALLED; -import static android.app.timezone.RulesState.DISTRO_STATUS_NONE; -import static android.app.timezone.RulesState.DISTRO_STATUS_UNKNOWN; -import static android.app.timezone.RulesState.STAGED_OPERATION_INSTALL; -import static android.app.timezone.RulesState.STAGED_OPERATION_NONE; -import static android.app.timezone.RulesState.STAGED_OPERATION_UNINSTALL; -import static android.app.timezone.RulesState.STAGED_OPERATION_UNKNOWN;  public final class RulesManagerService extends IRulesManager.Stub { @@ -96,8 +98,6 @@ public final class RulesManagerService extends IRulesManager.Stub {      @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)      static final String REQUIRED_QUERY_PERMISSION =              android.Manifest.permission.QUERY_TIME_ZONE_RULES; -    private static final File SYSTEM_TZ_DATA_FILE = new File("/system/usr/share/zoneinfo/tzdata"); -    private static final File TZ_DATA_DIR = new File("/data/misc/zoneinfo");      private final AtomicBoolean mOperationInProgress = new AtomicBoolean(false);      private final PermissionHelper mPermissionHelper; @@ -108,12 +108,14 @@ public final class RulesManagerService extends IRulesManager.Stub {      private static RulesManagerService create(Context context) {          RulesManagerServiceHelperImpl helper = new RulesManagerServiceHelperImpl(context); +        File baseVersionFile = new File(TimeZoneDataFiles.getRuntimeModuleTzVersionFile()); +        File tzDataDir = new File(TimeZoneDataFiles.getDataTimeZoneRootDir());          return new RulesManagerService(                  helper /* permissionHelper */,                  helper /* executor */,                  helper /* intentHelper */,                  PackageTracker.create(context), -                new TimeZoneDistroInstaller(TAG, SYSTEM_TZ_DATA_FILE, TZ_DATA_DIR)); +                new TimeZoneDistroInstaller(TAG, baseVersionFile, tzDataDir));      }      // A constructor that can be used by tests to supply mocked / faked dependencies. @@ -143,11 +145,11 @@ public final class RulesManagerService extends IRulesManager.Stub {      /** Like {@link #getRulesState()} without the permission check. */      private RulesState getRulesStateInternal() {          synchronized(this) { -            String systemRulesVersion; +            TzDataSetVersion baseVersion;              try { -                systemRulesVersion = mInstaller.getSystemRulesVersion(); +                baseVersion = mInstaller.readBaseVersion();              } catch (IOException e) { -                Slog.w(TAG, "Failed to read system rules", e); +                Slog.w(TAG, "Failed to read base rules version", e);                  return null;              } @@ -196,7 +198,7 @@ public final class RulesManagerService extends IRulesManager.Stub {                      Slog.w(TAG, "Failed to read staged distro.", e);                  }              } -            return new RulesState(systemRulesVersion, DISTRO_FORMAT_VERSION_SUPPORTED, +            return new RulesState(baseVersion.rulesVersion, DISTRO_FORMAT_VERSION_SUPPORTED,                      operationInProgress, stagedOperationStatus, stagedDistroRulesVersion,                      distroStatus, installedDistroRulesVersion);          } @@ -454,13 +456,13 @@ public final class RulesManagerService extends IRulesManager.Stub {                              pw.println("Operation in progress: " + value);                              break;                          } -                        case 's': { -                            // Report system image rules version +                        case 'b': { +                            // Report base rules version                              String value = "Unknown";                              if (rulesState != null) { -                                value = rulesState.getSystemRulesVersion(); +                                value = rulesState.getBaseRulesVersion();                              } -                            pw.println("System rules version: " + value); +                            pw.println("Base rules version: " + value);                              break;                          }                          case 'c': { diff --git a/services/core/xsd/Android.bp b/services/core/xsd/Android.bp new file mode 100644 index 000000000000..5e1ea897b86e --- /dev/null +++ b/services/core/xsd/Android.bp @@ -0,0 +1,6 @@ +xsd_config { +    name: "default-permissions", +    srcs: ["default-permissions.xsd"], +    api_dir: "schema", +    package_name: "com.android.server.pm.permission", +} diff --git a/services/core/xsd/default-permissions.xsd b/services/core/xsd/default-permissions.xsd new file mode 100644 index 000000000000..d800a26cdceb --- /dev/null +++ b/services/core/xsd/default-permissions.xsd @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2019 The Android Open Source Project + +         Licensed under the Apache License, Version 2.0 (the "License"); +         you may not use this file except in compliance with the License. +         You may obtain a copy of the License at + +                    http://www.apache.org/licenses/LICENSE-2.0 + +         Unless required by applicable law or agreed to in writing, software +         distributed under the License is distributed on an "AS IS" BASIS, +         WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +         See the License for the specific language governing permissions and +         limitations under the License. +--> +<!-- TODO: define a targetNamespace. Note that it will break retrocompatibility --> +<xs:schema version="2.0" +           elementFormDefault="qualified" +           attributeFormDefault="unqualified" +           xmlns:xs="http://www.w3.org/2001/XMLSchema"> +    <xs:element name="exceptions"> +        <xs:complexType> +            <xs:sequence> +                <xs:element name="exception" type="exception" maxOccurs="unbounded"/> +            </xs:sequence> +        </xs:complexType> +    </xs:element> +    <xs:complexType name="exception"> +        <xs:sequence> +            <xs:element name="permission" type="permission"/> +        </xs:sequence> +        <xs:attribute name="package" type="xs:string"/> +        <xs:attribute name="sha256-cert-digest" type="xs:string"/> +        <xs:attribute name="brand" type="xs:string"/> +    </xs:complexType> +    <xs:complexType name="permission"> +        <xs:attribute name="name" type="xs:string"/> +        <xs:attribute name="fixed" type="xs:boolean"/> +    </xs:complexType> +</xs:schema> diff --git a/services/core/xsd/schema/README.md b/services/core/xsd/schema/README.md new file mode 100644 index 000000000000..f52d93d2b65a --- /dev/null +++ b/services/core/xsd/schema/README.md @@ -0,0 +1 @@ +Please see the [README](https://android.googlesource.com/platform/system/tools/xsdc/+/refs/heads/master/README.md) for details regarding the Configfile as API. diff --git a/services/core/xsd/schema/current.txt b/services/core/xsd/schema/current.txt new file mode 100644 index 000000000000..4e67e5c235a0 --- /dev/null +++ b/services/core/xsd/schema/current.txt @@ -0,0 +1,37 @@ +// Signature format: 2.0 +package com.android.server.pm.permission { + +  public class Exception { +    ctor public Exception(); +    method public String getBrand(); +    method public com.android.server.pm.permission.Permission getPermission(); +    method public String getSha256CertDigest(); +    method public String get_package(); +    method public void setBrand(String); +    method public void setPermission(com.android.server.pm.permission.Permission); +    method public void setSha256CertDigest(String); +    method public void set_package(String); +  } + +  public class Exceptions { +    ctor public Exceptions(); +    method public java.util.List<com.android.server.pm.permission.Exception> getException(); +  } + +  public class Permission { +    ctor public Permission(); +    method public boolean getFixed(); +    method public String getName(); +    method public void setFixed(boolean); +    method public void setName(String); +  } + +  public class XmlParser { +    ctor public XmlParser(); +    method public static com.android.server.pm.permission.Exceptions read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException; +    method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; +    method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; +  } + +} + diff --git a/services/core/xsd/schema/last_current.txt b/services/core/xsd/schema/last_current.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/services/core/xsd/schema/last_current.txt diff --git a/services/core/xsd/schema/last_removed.txt b/services/core/xsd/schema/last_removed.txt new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/services/core/xsd/schema/last_removed.txt diff --git a/services/core/xsd/schema/removed.txt b/services/core/xsd/schema/removed.txt new file mode 100644 index 000000000000..d802177e249b --- /dev/null +++ b/services/core/xsd/schema/removed.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 2733da92f932..d288910871bc 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -1235,7 +1235,6 @@ public final class SystemServer {                  ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity,                              /* allowIsolated= */ false,                      DUMP_FLAG_PRIORITY_HIGH | DUMP_FLAG_PRIORITY_NORMAL); -                networkStats.bindConnectivityManager(connectivity);                  networkPolicy.bindConnectivityManager(connectivity);              } catch (Throwable e) {                  reportWtf("starting Connectivity Service", e); @@ -1683,19 +1682,6 @@ public final class SystemServer {          mSystemServiceManager.startService(StatsCompanionService.Lifecycle.class);          traceEnd(); -        if (safeMode) { -            traceBeginAndSlog("EnterSafeModeAndDisableJitCompilation"); -            mActivityManagerService.enterSafeMode(); -            // Disable the JIT for the system_server process -            VMRuntime.getRuntime().disableJitCompilation(); -            traceEnd(); -        } else { -            // Enable the JIT for the system_server process -            traceBeginAndSlog("StartJitCompilation"); -            VMRuntime.getRuntime().startJitCompilation(); -            traceEnd(); -        } -          // MMS service broker          traceBeginAndSlog("StartMmsService");          mmsService = mSystemServiceManager.startService(MmsServiceBroker.class); diff --git a/services/net/java/android/net/ip/RouterAdvertisementDaemon.java b/services/net/java/android/net/ip/RouterAdvertisementDaemon.java index 8e3023bc08d4..339607bbc73d 100644 --- a/services/net/java/android/net/ip/RouterAdvertisementDaemon.java +++ b/services/net/java/android/net/ip/RouterAdvertisementDaemon.java @@ -275,6 +275,9 @@ public class RouterAdvertisementDaemon {      public void stop() {          closeSocket(); +        // Wake up mMulticastTransmitter thread to interrupt a potential 1 day sleep before +        // the thread's termination. +        maybeNotifyMulticastTransmitter();          mMulticastTransmitter = null;          mUnicastResponder = null;      } diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp index d2d6e32fb1b0..d148ea1d9734 100644 --- a/services/tests/servicestests/Android.bp +++ b/services/tests/servicestests/Android.bp @@ -27,7 +27,7 @@ android_test {          "services.net",          "services.usage",          "guava", -        "android-support-test", +        "androidx.test.rules",          "mockito-target-minus-junit4",          "platform-test-annotations",          "ShortcutManagerTestUtils", @@ -85,7 +85,7 @@ java_library {          "utils/**/*.java",      ],      static_libs: [ -        "android-support-test", +        "androidx.test.rules",          "mockito-target-minus-junit4",      ],      libs: [ diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml index 13ba2293de85..5a0f3a46da56 100644 --- a/services/tests/servicestests/AndroidManifest.xml +++ b/services/tests/servicestests/AndroidManifest.xml @@ -222,7 +222,7 @@      </application>      <instrumentation -        android:name="android.support.test.runner.AndroidJUnitRunner" +        android:name="androidx.test.runner.AndroidJUnitRunner"          android:targetPackage="com.android.frameworks.servicestests"          android:label="Frameworks Services Tests" />  </manifest> diff --git a/services/tests/servicestests/AndroidTest.xml b/services/tests/servicestests/AndroidTest.xml index 5ac68d4b69d4..4d653b99439c 100644 --- a/services/tests/servicestests/AndroidTest.xml +++ b/services/tests/servicestests/AndroidTest.xml @@ -28,7 +28,7 @@      <option name="test-tag" value="FrameworksServicesTests" />      <test class="com.android.tradefed.testtype.AndroidJUnitTest" >          <option name="package" value="com.android.frameworks.servicestests" /> -        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" /> +        <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />          <option name="hidden-api-checks" value="false"/>      </test>  </configuration> diff --git a/services/tests/servicestests/src/com/android/server/AlarmManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/AlarmManagerServiceTest.java index 918807d0392c..1f63d6165617 100644 --- a/services/tests/servicestests/src/com/android/server/AlarmManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/AlarmManagerServiceTest.java @@ -20,10 +20,11 @@ import static android.app.AlarmManager.RTC_WAKEUP;  import static org.junit.Assert.assertEquals; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.SparseArray; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.ObjectUtils;  import com.android.server.AlarmManagerService.Alarm; diff --git a/services/tests/servicestests/src/com/android/server/AppOpsUpgradeTest.java b/services/tests/servicestests/src/com/android/server/AppOpsUpgradeTest.java index 4d77fab808ba..aac96a1dd847 100644 --- a/services/tests/servicestests/src/com/android/server/AppOpsUpgradeTest.java +++ b/services/tests/servicestests/src/com/android/server/AppOpsUpgradeTest.java @@ -25,13 +25,14 @@ import android.content.Context;  import android.content.res.AssetManager;  import android.os.Handler;  import android.os.HandlerThread; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.Log;  import android.util.SparseArray;  import android.util.Xml; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/BatteryServiceTest.java b/services/tests/servicestests/src/com/android/server/BatteryServiceTest.java index 106f9e8c2705..cb12ba7d7679 100644 --- a/services/tests/servicestests/src/com/android/server/BatteryServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/BatteryServiceTest.java @@ -17,27 +17,24 @@  package com.android.server;  import static junit.framework.Assert.*; +  import static org.mockito.Mockito.*;  import android.hardware.health.V2_0.IHealth;  import android.hidl.manager.V1_0.IServiceManager;  import android.hidl.manager.V1_0.IServiceNotification; -import android.os.RemoteException; -import android.support.test.filters.SmallTest;  import android.test.AndroidTestCase; -import android.util.Slog; -import java.util.Arrays; -import java.util.Collection; -import java.util.NoSuchElementException; +import androidx.test.filters.SmallTest; -import org.junit.runner.RunWith;  import org.mockito.ArgumentMatcher;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; -import org.mockito.Spy;  import org.mockito.invocation.InvocationOnMock; +import java.util.Arrays; +import java.util.Collection; +import java.util.NoSuchElementException;  public class BatteryServiceTest extends AndroidTestCase { diff --git a/services/tests/servicestests/src/com/android/server/BootReceiverFixFsckFsStatTest.java b/services/tests/servicestests/src/com/android/server/BootReceiverFixFsckFsStatTest.java index 69c149912034..9ba3308622ed 100644 --- a/services/tests/servicestests/src/com/android/server/BootReceiverFixFsckFsStatTest.java +++ b/services/tests/servicestests/src/com/android/server/BootReceiverFixFsckFsStatTest.java @@ -18,10 +18,8 @@ package com.android.server;  import static junit.framework.Assert.*; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; - -import junit.framework.Assert; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/GestureLauncherServiceTest.java b/services/tests/servicestests/src/com/android/server/GestureLauncherServiceTest.java index 33e4165718a5..2ec6830b7755 100644 --- a/services/tests/servicestests/src/com/android/server/GestureLauncherServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/GestureLauncherServiceTest.java @@ -33,12 +33,13 @@ import android.os.Looper;  import android.os.UserHandle;  import android.platform.test.annotations.Presubmit;  import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.test.mock.MockContentResolver; -import android.view.KeyEvent;  import android.util.MutableBoolean; +import android.view.KeyEvent; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.logging.MetricsLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -46,17 +47,16 @@ import com.android.internal.util.test.FakeSettingsProvider;  import com.android.server.LocalServices;  import com.android.server.statusbar.StatusBarManagerInternal; -import java.util.List; -  import org.junit.Before;  import org.junit.BeforeClass;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.junit.runners.JUnit4;  import org.mockito.ArgumentCaptor;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; +import java.util.List; +  /**   * Unit tests for {@link GestureLauncherService}.   * runtest frameworks-services -c com.android.server.GestureLauncherServiceTest diff --git a/services/tests/servicestests/src/com/android/server/NetworkManagementInternalTest.java b/services/tests/servicestests/src/com/android/server/NetworkManagementInternalTest.java index a5ac20e951ec..ebbebcb02923 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkManagementInternalTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkManagementInternalTest.java @@ -29,10 +29,11 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue;  import android.net.NetworkPolicyManager; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArrayMap; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; @@ -52,7 +53,7 @@ import java.util.function.BiFunction;   * Install: adb install -r \   *     ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk   * Run: adb shell am instrument -e class com.android.server.NetworkManagementInternalTest -w \ - *     com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + *     com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @SmallTest  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java index 39b639168f82..85d0c4cddff1 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java @@ -122,8 +122,6 @@ import android.os.RemoteException;  import android.os.SimpleClock;  import android.os.SystemClock;  import android.os.UserHandle; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.telephony.CarrierConfigManager;  import android.telephony.SubscriptionManager;  import android.telephony.SubscriptionPlan; @@ -137,6 +135,9 @@ import android.util.Pair;  import android.util.Range;  import android.util.RecurrenceRule; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.telephony.PhoneConstants;  import com.android.internal.util.test.BroadcastInterceptingContext;  import com.android.internal.util.test.BroadcastInterceptingContext.FutureIntent; @@ -144,11 +145,11 @@ import com.android.server.net.NetworkPolicyManagerInternal;  import com.android.server.net.NetworkPolicyManagerService;  import com.android.server.net.NetworkStatsManagerInternal; +import com.google.common.util.concurrent.AbstractFuture; +  import libcore.io.IoUtils;  import libcore.io.Streams; -import com.google.common.util.concurrent.AbstractFuture; -  import org.junit.After;  import org.junit.Before;  import org.junit.Rule; @@ -200,7 +201,7 @@ import java.util.stream.Collectors;      m -j32 FrameworksServicesTests && adb install -r -g \      ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk && \      adb shell am instrument -e class "com.android.server.NetworkPolicyManagerServiceTest" -w \ -    "com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner" +    "com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner"   * </code></pre>   */  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java index 4176d2a7d9d5..e9e96c9c7efb 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java @@ -24,14 +24,12 @@ import static junit.framework.Assert.assertTrue;  import static junit.framework.Assert.fail;  import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyBoolean;  import static org.mockito.Matchers.anyListOf;  import static org.mockito.Matchers.anyString;  import static org.mockito.Matchers.eq;  import static org.mockito.Mockito.atLeastOnce;  import static org.mockito.Mockito.doThrow;  import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.timeout;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify; @@ -47,7 +45,6 @@ import android.content.Intent;  import android.content.pm.PackageManager;  import android.content.pm.PackageManagerInternal;  import android.content.res.Resources; -import android.database.ContentObserver;  import android.net.INetworkRecommendationProvider;  import android.net.INetworkScoreCache;  import android.net.NetworkKey; @@ -69,9 +66,10 @@ import android.os.Message;  import android.os.RemoteException;  import android.os.UserHandle;  import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.devicepolicy.MockUtils; diff --git a/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java b/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java index 6874624ae193..52428e8bc478 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkScorerAppManagerTest.java @@ -34,7 +34,6 @@ import android.Manifest.permission;  import android.app.AppOpsManager;  import android.content.ComponentName;  import android.content.Context; -import android.content.Intent;  import android.content.pm.ActivityInfo;  import android.content.pm.ApplicationInfo;  import android.content.pm.PackageManager; @@ -45,14 +44,14 @@ import android.net.NetworkScoreManager;  import android.net.NetworkScorerAppData;  import android.os.Bundle;  import android.provider.Settings; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.R;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.mockito.ArgumentMatcher;  import org.mockito.Mock;  import org.mockito.Mockito;  import org.mockito.MockitoAnnotations; diff --git a/services/tests/servicestests/src/com/android/server/WatchdogDiagnosticsTest.java b/services/tests/servicestests/src/com/android/server/WatchdogDiagnosticsTest.java index 6e76b679940b..4d229efc8328 100644 --- a/services/tests/servicestests/src/com/android/server/WatchdogDiagnosticsTest.java +++ b/services/tests/servicestests/src/com/android/server/WatchdogDiagnosticsTest.java @@ -18,14 +18,14 @@ package com.android.server;  import static org.junit.Assert.assertEquals; -import android.support.test.runner.AndroidJUnit4; - -import java.io.PrintWriter; -import java.io.StringWriter; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; +import java.io.PrintWriter; +import java.io.StringWriter; +  /**   * Unit tests for {@link WatchdogDiagnostics}   */ diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerTest.java index 5d09e31a3dc7..4c0f38aa2998 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilityManagerTest.java @@ -18,6 +18,7 @@ package com.android.server.accessibility;  import static junit.framework.TestCase.assertFalse;  import static junit.framework.TestCase.assertSame; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertTrue;  import static org.junit.Assert.fail; @@ -30,13 +31,14 @@ import android.accessibilityservice.AccessibilityServiceInfo;  import android.app.Instrumentation;  import android.os.Looper;  import android.os.UserHandle; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.view.accessibility.AccessibilityEvent;  import android.view.accessibility.AccessibilityManager;  import android.view.accessibility.IAccessibilityManager;  import android.view.accessibility.IAccessibilityManagerClient; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.IntPair;  import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/accessibility/KeyEventDispatcherTest.java b/services/tests/servicestests/src/com/android/server/accessibility/KeyEventDispatcherTest.java index 18193984dd19..236b45894fb3 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/KeyEventDispatcherTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/KeyEventDispatcherTest.java @@ -19,6 +19,7 @@ package com.android.server.accessibility;  import static junit.framework.TestCase.assertEquals;  import static junit.framework.TestCase.assertFalse;  import static junit.framework.TestCase.assertTrue; +  import static org.mockito.Matchers.anyInt;  import static org.mockito.Matchers.anyLong;  import static org.mockito.Matchers.anyObject; @@ -30,11 +31,6 @@ import static org.mockito.Mockito.verifyZeroInteractions;  import static org.mockito.Mockito.when;  import static org.mockito.hamcrest.MockitoHamcrest.argThat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -  import android.content.Context;  import android.os.Handler;  import android.os.IPowerManager; @@ -42,9 +38,10 @@ import android.os.Looper;  import android.os.Message;  import android.os.PowerManager;  import android.os.RemoteException; -import android.support.test.runner.AndroidJUnit4;  import android.view.KeyEvent; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.accessibility.KeyEventDispatcher.KeyEventFilter;  import com.android.server.policy.WindowManagerPolicy; @@ -56,6 +53,11 @@ import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.ArgumentCaptor; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +  /**   * Tests for KeyEventDispatcher   */ diff --git a/services/tests/servicestests/src/com/android/server/accessibility/KeyboardInterceptorTest.java b/services/tests/servicestests/src/com/android/server/accessibility/KeyboardInterceptorTest.java index ceb3f9d23ce7..851e22173420 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/KeyboardInterceptorTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/KeyboardInterceptorTest.java @@ -23,14 +23,19 @@ import static org.junit.Assert.assertFalse;  import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.Matchers.anyInt;  import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.isNull; -import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import static org.mockito.hamcrest.MockitoHamcrest.argThat; -import org.hamcrest.BaseMatcher; +import android.os.Looper; +import android.view.KeyEvent; + +import androidx.test.runner.AndroidJUnit4; + +import com.android.server.policy.WindowManagerPolicy; +import com.android.server.policy.WindowManagerPolicy.WindowState; +  import org.hamcrest.Description;  import org.hamcrest.TypeSafeMatcher;  import org.junit.Before; @@ -42,13 +47,6 @@ import org.mockito.Mock;  import org.mockito.Mockito;  import org.mockito.MockitoAnnotations; -import android.os.Looper; -import android.support.test.runner.AndroidJUnit4; -import android.view.KeyEvent; - -import com.android.server.policy.WindowManagerPolicy; -import com.android.server.policy.WindowManagerPolicy.WindowState; -  /**   * Tests for KeyboardInterceptor   */ diff --git a/services/tests/servicestests/src/com/android/server/accessibility/MagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/MagnificationControllerTest.java index d3a3090956a7..cda4a4bd96cf 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/MagnificationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/MagnificationControllerTest.java @@ -17,9 +17,9 @@  package com.android.server.accessibility;  import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertThat;  import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse;  import static org.mockito.ArgumentMatchers.anyFloat;  import static org.mockito.Matchers.anyObject;  import static org.mockito.Matchers.eq; @@ -43,9 +43,10 @@ import android.graphics.Region;  import android.os.Handler;  import android.os.Looper;  import android.os.Message; -import android.support.test.runner.AndroidJUnit4;  import android.view.MagnificationSpec; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.R;  import com.android.server.wm.WindowManagerInternal;  import com.android.server.wm.WindowManagerInternal.MagnificationCallbacks; diff --git a/services/tests/servicestests/src/com/android/server/accessibility/MagnificationGestureHandlerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/MagnificationGestureHandlerTest.java index 23fe0ffda60e..79e4d705db19 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/MagnificationGestureHandlerTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/MagnificationGestureHandlerTest.java @@ -35,12 +35,13 @@ import static org.mockito.Mockito.verify;  import android.annotation.NonNull;  import android.content.Context;  import android.os.Message; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.util.DebugUtils;  import android.view.InputDevice;  import android.view.MotionEvent; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.testutils.OffsettableClock;  import com.android.server.testutils.TestHandler; @@ -50,7 +51,6 @@ import org.junit.runner.RunWith;  import java.util.function.IntConsumer; -  /**   * Tests the state transitions of {@link MagnificationGestureHandler}   * diff --git a/services/tests/servicestests/src/com/android/server/accessibility/MotionEventInjectorTest.java b/services/tests/servicestests/src/com/android/server/accessibility/MotionEventInjectorTest.java index 6cacb1fe0c06..5f0fa874b7da 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/MotionEventInjectorTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/MotionEventInjectorTest.java @@ -19,6 +19,7 @@ package com.android.server.accessibility;  import static android.view.MotionEvent.ACTION_DOWN;  import static android.view.MotionEvent.ACTION_UP;  import static android.view.WindowManagerPolicyConstants.FLAG_PASS_TO_USER; +  import static org.hamcrest.CoreMatchers.allOf;  import static org.hamcrest.CoreMatchers.anyOf;  import static org.hamcrest.CoreMatchers.everyItem; @@ -45,18 +46,14 @@ import android.os.Handler;  import android.os.Looper;  import android.os.Message;  import android.os.RemoteException; -import android.support.test.runner.AndroidJUnit4;  import android.util.Log; -import android.util.Pair;  import android.view.InputDevice;  import android.view.KeyEvent;  import android.view.MotionEvent; +import android.view.accessibility.AccessibilityEvent; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import androidx.test.runner.AndroidJUnit4; -import android.view.accessibility.AccessibilityEvent;  import org.hamcrest.Description;  import org.hamcrest.Matcher;  import org.hamcrest.TypeSafeMatcher; @@ -66,6 +63,10 @@ import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.ArgumentCaptor; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +  /**   * Tests for MotionEventInjector   */ diff --git a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java index f2057c5e6971..7a96f4cf1bc8 100644 --- a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java @@ -17,6 +17,7 @@  package com.android.server.accounts;  import static android.database.sqlite.SQLiteDatabase.deleteDatabase; +  import static org.mockito.Matchers.any;  import static org.mockito.Matchers.anyBoolean;  import static org.mockito.Matchers.anyInt; @@ -25,7 +26,6 @@ import static org.mockito.Matchers.eq;  import static org.mockito.Mockito.atLeast;  import static org.mockito.Mockito.never;  import static org.mockito.Mockito.nullable; -import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; @@ -35,11 +35,10 @@ import android.accounts.AccountManagerInternal;  import android.accounts.CantAddAccountActivity;  import android.accounts.IAccountManagerResponse;  import android.app.AppOpsManager; +import android.app.INotificationManager;  import android.app.admin.DevicePolicyManager;  import android.app.admin.DevicePolicyManagerInternal; -import android.app.INotificationManager;  import android.content.BroadcastReceiver; -import android.content.ComponentName;  import android.content.Context;  import android.content.Intent;  import android.content.IntentFilter; @@ -68,7 +67,6 @@ import android.test.mock.MockContext;  import android.test.suitebuilder.annotation.SmallTest;  import android.util.Log; -import com.android.frameworks.servicestests.R;  import com.android.server.LocalServices;  import org.mockito.ArgumentCaptor; @@ -91,7 +89,6 @@ import java.util.concurrent.Executors;  import java.util.concurrent.TimeUnit;  import java.util.concurrent.atomic.AtomicLong; -  /**   * Tests for {@link AccountManagerService}.   * <p>Run with:<pre> @@ -99,7 +96,7 @@ import java.util.concurrent.atomic.AtomicLong;   * adb install -r ${OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk   * adb shell am instrument -w -e package com.android.server.accounts \   * com.android.frameworks.servicestests\ - * /android.support.test.runner.AndroidJUnitRunner + * /androidx.test.runner.AndroidJUnitRunner   * </pre>   */  public class AccountManagerServiceTest extends AndroidTestCase { diff --git a/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java b/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java index 65920fda946e..6b530026f8ae 100644 --- a/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java +++ b/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java @@ -30,11 +30,12 @@ import android.content.Context;  import android.database.Cursor;  import android.database.sqlite.SQLiteStatement;  import android.os.Build; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest;  import android.util.Pair; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.After;  import org.junit.Before;  import org.junit.Test; @@ -55,7 +56,7 @@ import java.util.Map;   * adb install \   * -r out/target/product/marlin/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   * adb shell am instrument -e class com.android.server.accounts.AccountsDbTest \ - * -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + * -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   * </pre>   */  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityLaunchParamsModifierTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityLaunchParamsModifierTests.java index f741c70e4821..d75a3fc8d20b 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityLaunchParamsModifierTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityLaunchParamsModifierTests.java @@ -16,28 +16,29 @@  package com.android.server.am; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; +import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; + +import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_DONE; +import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_SKIP; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +  import android.app.ActivityOptions;  import android.content.pm.ActivityInfo;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.am.LaunchParamsController.LaunchParams; -import org.junit.runner.RunWith; +  import org.junit.Before;  import org.junit.Test; - -import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; -import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; -import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_DONE; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.doAnswer; - -import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_SKIP; +import org.junit.runner.RunWith;  /**   * Tests for exercising resizing bounds due to activity options. diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityManagerInternalTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityManagerInternalTest.java index bce87dc58819..9a7488e42326 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityManagerInternalTest.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityManagerInternalTest.java @@ -21,8 +21,9 @@ import static org.junit.Assert.assertTrue;  import android.app.ActivityManagerInternal;  import android.os.SystemClock; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; @@ -43,7 +44,7 @@ import org.mockito.MockitoAnnotations;   * Install: adb install -r \   *     ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk   * Run: adb shell am instrument -e class com.android.server.am.ActivityManagerInternalTest -w \ - *     com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + *     com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @RunWith(AndroidJUnit4.class)  public class ActivityManagerInternalTest { diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java index 7ca06f983bfa..c1df6afeaf3c 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityManagerServiceTest.java @@ -28,6 +28,7 @@ import static android.app.ActivityManager.PROCESS_STATE_RECEIVER;  import static android.app.ActivityManager.PROCESS_STATE_SERVICE;  import static android.app.ActivityManager.PROCESS_STATE_TOP;  import static android.util.DebugUtils.valueToString; +  import static com.android.server.am.ActivityManagerInternalTest.CustomThread;  import static com.android.server.am.ActivityManagerService.DISPATCH_UIDS_CHANGED_UI_MSG;  import static com.android.server.am.ActivityManagerService.Injector; @@ -62,10 +63,11 @@ import android.os.Message;  import android.os.Process;  import android.os.RemoteException;  import android.os.SystemClock; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.MediumTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.MediumTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.os.BatteryStatsImpl;  import com.android.server.AppOpsService; @@ -99,7 +101,7 @@ import java.util.function.Function;   * Install: adb install -r \   *     ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk   * Run: adb shell am instrument -e class com.android.server.am.ActivityManagerServiceTest -w \ - *     com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + *     com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @SmallTest  @FlakyTest(bugId = 113616538) diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java index 5ee1c405bb0e..5ee7477b486c 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityRecordTests.java @@ -22,11 +22,7 @@ import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;  import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;  import static android.view.Display.DEFAULT_DISPLAY; -import static com.android.server.am.ActivityStack.ActivityState.DESTROYED; -import static com.android.server.am.ActivityStack.ActivityState.DESTROYING; -import static com.android.server.am.ActivityStack.ActivityState.FINISHING;  import static com.android.server.am.ActivityStack.ActivityState.INITIALIZING; -import static com.android.server.am.ActivityStack.ActivityState.PAUSED;  import static com.android.server.am.ActivityStack.ActivityState.PAUSING;  import static com.android.server.am.ActivityStack.ActivityState.STOPPED;  import static com.android.server.am.ActivityStack.REMOVE_TASK_MODE_MOVING; @@ -53,14 +49,14 @@ import android.app.servertransaction.ClientTransaction;  import android.app.servertransaction.PauseActivityItem;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.MutableBoolean; -import org.junit.runner.RunWith; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before; -import org.junit.Ignore;  import org.junit.Test; +import org.junit.runner.RunWith;  import org.mockito.invocation.InvocationOnMock;  /** diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java index 1ce41a641935..f36c57973240 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackSupervisorTests.java @@ -47,10 +47,11 @@ import android.app.ActivityOptions;  import android.app.WaitResult;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.SparseIntArray; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java index e2b7c063714a..be0c689ab89f 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java @@ -33,23 +33,20 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.Mockito.anyInt;  import static org.mockito.Mockito.doReturn;  import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify;  import android.content.pm.ActivityInfo;  import android.os.UserHandle;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import org.junit.runner.RunWith; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test; +import org.junit.runner.RunWith;  /**   * Tests for the {@link ActivityStack} class. diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStartControllerTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStartControllerTests.java index 7948e4cfcaaa..3464ac2a3044 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStartControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStartControllerTests.java @@ -19,23 +19,24 @@ package com.android.server.am;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +  import android.content.Intent;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.am.ActivityStackSupervisor.PendingActivityLaunch;  import com.android.server.am.ActivityStarter.Factory; -import org.junit.runner.RunWith;  import org.junit.Test; - -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.times; +import org.junit.runner.RunWith;  import java.util.Random; diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java index b4b34c507942..d1550d736e0b 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStartInterceptorTest.java @@ -37,9 +37,10 @@ import android.content.pm.PackageManagerInternal;  import android.content.pm.UserInfo;  import android.os.UserHandle;  import android.os.UserManager; -import android.support.test.filters.SmallTest;  import android.testing.DexmakerShareClassLoaderRule; +import androidx.test.filters.SmallTest; +  import com.android.internal.app.SuspendedAppActivity;  import com.android.internal.app.UnlaunchableAppActivity;  import com.android.server.LocalServices; diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java index 8d056fc4a8c0..f956a364315b 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java @@ -32,29 +32,9 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;  import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;  import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; - -import android.app.ActivityOptions; -import android.app.IApplicationThread; -import android.content.ComponentName; -import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.ActivityInfo.WindowLayout; -import android.content.pm.ApplicationInfo; -import android.content.pm.IPackageManager; -import android.graphics.Rect; -import android.os.IBinder; -import android.os.RemoteException; -import android.platform.test.annotations.Presubmit; -import android.service.voice.IVoiceInteractionSession; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import android.view.Gravity; - -import org.junit.runner.RunWith; -import org.junit.Test; -  import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;  import static android.content.Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED; +  import static com.android.server.am.ActivityManagerService.ANIMATE;  import static org.junit.Assert.assertEquals; @@ -65,21 +45,37 @@ import static org.mockito.Mockito.anyInt;  import static org.mockito.Mockito.anyObject;  import static org.mockito.Mockito.clearInvocations;  import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doNothing;  import static org.mockito.Mockito.doReturn;  import static org.mockito.Mockito.eq;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.never;  import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import android.app.ActivityOptions; +import android.app.IApplicationThread; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ActivityInfo.WindowLayout; +import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; +import android.graphics.Rect; +import android.os.IBinder; +import android.os.RemoteException; +import android.platform.test.annotations.Presubmit; +import android.service.voice.IVoiceInteractionSession; +import android.view.Gravity; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.os.BatteryStatsImpl; -import com.android.server.am.ActivityStarter.Factory;  import com.android.server.am.LaunchParamsController.LaunchParamsModifier;  import com.android.server.am.TaskRecord.TaskRecordFactory; -import java.util.ArrayList; +import org.junit.Test; +import org.junit.runner.RunWith;  /**   * Tests for the {@link ActivityStarter} class. diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java index 1cd111fce0ec..deb9f62ad67d 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java @@ -21,21 +21,17 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;  import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;  import static android.view.Display.DEFAULT_DISPLAY; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.doReturn; +  import static org.mockito.Mockito.any;  import static org.mockito.Mockito.anyBoolean;  import static org.mockito.Mockito.anyInt;  import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.spy;  import android.app.ActivityOptions; -import com.android.server.wm.DisplayWindowController; - -import org.junit.Rule; -import org.mockito.invocation.InvocationOnMock; -  import android.app.IApplicationThread;  import android.content.ComponentName;  import android.content.Context; @@ -49,23 +45,25 @@ import android.hardware.display.DisplayManager;  import android.os.HandlerThread;  import android.os.Looper;  import android.service.voice.IVoiceInteractionSession; -import android.support.test.InstrumentationRegistry;  import android.testing.DexmakerShareClassLoaderRule; +import androidx.test.InstrumentationRegistry;  import com.android.internal.app.IVoiceInteractor; -  import com.android.server.AttributeCache;  import com.android.server.wm.AppWindowContainerController; +import com.android.server.wm.DisplayWindowController;  import com.android.server.wm.PinnedStackWindowController;  import com.android.server.wm.StackWindowController;  import com.android.server.wm.TaskWindowContainerController;  import com.android.server.wm.WindowManagerService;  import com.android.server.wm.WindowTestUtils; +  import org.junit.After;  import org.junit.Before; +import org.junit.Rule;  import org.mockito.MockitoAnnotations; - +import org.mockito.invocation.InvocationOnMock;  /**   * A base class to handle common operations in activity related unit tests. diff --git a/services/tests/servicestests/src/com/android/server/am/AppErrorDialogTest.java b/services/tests/servicestests/src/com/android/server/am/AppErrorDialogTest.java index eee8ef3a9ee7..d08cac130bf7 100644 --- a/services/tests/servicestests/src/com/android/server/am/AppErrorDialogTest.java +++ b/services/tests/servicestests/src/com/android/server/am/AppErrorDialogTest.java @@ -18,11 +18,12 @@ package com.android.server.am;  import android.content.Context;  import android.os.Handler; -import android.support.test.InstrumentationRegistry; -import android.support.test.annotation.UiThreadTest; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.annotation.UiThreadTest; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.AppOpsService; diff --git a/services/tests/servicestests/src/com/android/server/am/AssistDataRequesterTest.java b/services/tests/servicestests/src/com/android/server/am/AssistDataRequesterTest.java index 5b1c26016df5..d985364a7cee 100644 --- a/services/tests/servicestests/src/com/android/server/am/AssistDataRequesterTest.java +++ b/services/tests/servicestests/src/com/android/server/am/AssistDataRequesterTest.java @@ -41,13 +41,14 @@ import android.os.Bundle;  import android.os.Handler;  import android.os.IBinder;  import android.os.Looper; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.Log;  import android.view.IWindowManager; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.am.AssistDataRequester.AssistDataRequesterCallbacks;  import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/am/ClientLifecycleManagerTests.java b/services/tests/servicestests/src/com/android/server/am/ClientLifecycleManagerTests.java index ef6d5e81b472..b4ad183db386 100644 --- a/services/tests/servicestests/src/com/android/server/am/ClientLifecycleManagerTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ClientLifecycleManagerTests.java @@ -9,8 +9,9 @@ import android.app.IApplicationThread;  import android.app.servertransaction.ClientTransaction;  import android.os.Binder;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java b/services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java index da30c11be81a..fe8256eeb977 100644 --- a/services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java +++ b/services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java @@ -26,18 +26,18 @@ import android.content.Context;  import android.os.Bundle;  import android.os.Handler;  import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.test.mock.MockContentResolver; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.test.FakeSettingsProvider;  import com.android.server.AppOpsService;  import org.junit.AfterClass;  import org.junit.Before;  import org.junit.BeforeClass; -import org.junit.Ignore;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.Mock; @@ -58,7 +58,7 @@ import java.io.File;   * Install: adb install -r \   *     ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk   * Run: adb shell am instrument -e class com.android.server.am.CoreSettingsObserverTest -w \ - *     com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + *     com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @SmallTest  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/am/GlobalSettingsToPropertiesMapperTest.java b/services/tests/servicestests/src/com/android/server/am/GlobalSettingsToPropertiesMapperTest.java index d9b3e1c0173b..765aaad45efb 100644 --- a/services/tests/servicestests/src/com/android/server/am/GlobalSettingsToPropertiesMapperTest.java +++ b/services/tests/servicestests/src/com/android/server/am/GlobalSettingsToPropertiesMapperTest.java @@ -18,11 +18,12 @@ package com.android.server.am;  import android.content.ContentResolver;  import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.test.mock.MockContentResolver; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.Preconditions;  import com.android.internal.util.test.FakeSettingsProvider; diff --git a/services/tests/servicestests/src/com/android/server/am/LaunchParamsControllerTests.java b/services/tests/servicestests/src/com/android/server/am/LaunchParamsControllerTests.java index 161c2875bf49..8d675dd3032d 100644 --- a/services/tests/servicestests/src/com/android/server/am/LaunchParamsControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/am/LaunchParamsControllerTests.java @@ -16,20 +16,14 @@  package com.android.server.am; -import android.app.ActivityOptions; -import android.content.pm.ActivityInfo.WindowLayout; -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; - -import com.android.server.am.LaunchParamsController.LaunchParams; -import org.junit.runner.RunWith; -import org.junit.Before; -import org.junit.Test; +import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; -import com.android.server.am.LaunchParamsController.LaunchParamsModifier; +import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_CONTINUE; +import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_DONE; +import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_SKIP; -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals;  import static org.mockito.Mockito.any;  import static org.mockito.Mockito.anyInt;  import static org.mockito.Mockito.doNothing; @@ -40,12 +34,19 @@ import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify; -import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_DONE; -import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_CONTINUE; -import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_SKIP; +import android.app.ActivityOptions; +import android.content.pm.ActivityInfo.WindowLayout; +import android.platform.test.annotations.Presubmit; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.server.am.LaunchParamsController.LaunchParams; +import com.android.server.am.LaunchParamsController.LaunchParamsModifier; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith;  /**   * Tests for exercising {@link LaunchParamsController}. diff --git a/services/tests/servicestests/src/com/android/server/am/LockTaskControllerTest.java b/services/tests/servicestests/src/com/android/server/am/LockTaskControllerTest.java index f46d712df65b..863a0d8d34a4 100644 --- a/services/tests/servicestests/src/com/android/server/am/LockTaskControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/am/LockTaskControllerTest.java @@ -52,12 +52,13 @@ import android.os.Message;  import android.os.UserHandle;  import android.platform.test.annotations.Presubmit;  import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest;  import android.telecom.TelecomManager;  import android.testing.DexmakerShareClassLoaderRule;  import android.util.Pair; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +  import com.android.internal.statusbar.IStatusBarService;  import com.android.internal.widget.LockPatternUtils;  import com.android.server.LocalServices; diff --git a/services/tests/servicestests/src/com/android/server/am/MemoryStatUtilTest.java b/services/tests/servicestests/src/com/android/server/am/MemoryStatUtilTest.java index 5518ca5bd8cc..06c74371eb51 100644 --- a/services/tests/servicestests/src/com/android/server/am/MemoryStatUtilTest.java +++ b/services/tests/servicestests/src/com/android/server/am/MemoryStatUtilTest.java @@ -16,15 +16,15 @@  package com.android.server.am; +import static com.android.server.am.MemoryStatUtil.MemoryStat;  import static com.android.server.am.MemoryStatUtil.parseMemoryStatFromMemcg;  import static com.android.server.am.MemoryStatUtil.parseMemoryStatFromProcfs; -import static com.android.server.am.MemoryStatUtil.MemoryStat;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNull; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java b/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java index 2baf9952cb9e..f5f507f8b210 100644 --- a/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java +++ b/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java @@ -20,16 +20,14 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull; -import android.annotation.Nullable;  import android.app.ActivityOptions; -import android.os.Handler;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import android.util.ArrayMap;  import android.view.RemoteAnimationAdapter; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.testutils.OffsettableClock;  import com.android.server.testutils.TestHandler; diff --git a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java index b73ac8934cb0..aa9123b16aa7 100644 --- a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java +++ b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java @@ -35,16 +35,10 @@ import static org.junit.Assert.fail;  import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.anyString;  import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static java.lang.Integer.MAX_VALUE; - -import android.annotation.TestApi;  import android.app.ActivityManager;  import android.app.ActivityManager.RecentTaskInfo;  import android.app.ActivityManager.RunningTaskInfo; -import android.app.WindowConfiguration;  import android.content.ComponentName;  import android.content.Context;  import android.content.pm.PackageManager; @@ -53,24 +47,26 @@ import android.content.pm.UserInfo;  import android.content.res.Configuration;  import android.graphics.Rect;  import android.os.Bundle; -import android.os.Debug;  import android.os.Looper;  import android.os.RemoteException;  import android.os.SystemClock;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.MutableLong;  import android.util.SparseArray;  import android.util.SparseBooleanArray; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.am.RecentTasks.Callbacks;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; +import static java.lang.Integer.MAX_VALUE; +  import java.io.File;  import java.util.ArrayList;  import java.util.Arrays; diff --git a/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java b/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java index eefd973112f5..fa6a95ce275c 100644 --- a/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java +++ b/services/tests/servicestests/src/com/android/server/am/RecentsAnimationTest.java @@ -16,15 +16,13 @@  package com.android.server.am; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; -import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK; -import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; +  import static com.android.server.wm.RecentsAnimationController.REORDER_KEEP_IN_PLACE; +  import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyInt;  import static org.mockito.Mockito.doReturn;  import static org.mockito.Mockito.eq;  import static org.mockito.Mockito.mock; @@ -35,11 +33,14 @@ import android.content.ComponentName;  import android.content.Context;  import android.content.Intent;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.IRecentsAnimationRunner; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.AttributeCache; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java b/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java index c6ce7e1188e8..19288a9c28d7 100644 --- a/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java +++ b/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java @@ -30,11 +30,12 @@ import android.app.ActivityManager.RunningTaskInfo;  import android.content.ComponentName;  import android.content.Context;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.SparseArray; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/am/SafeActivityOptionsTest.java b/services/tests/servicestests/src/com/android/server/am/SafeActivityOptionsTest.java index 168bc1782d56..8e4e7e6b63c3 100644 --- a/services/tests/servicestests/src/com/android/server/am/SafeActivityOptionsTest.java +++ b/services/tests/servicestests/src/com/android/server/am/SafeActivityOptionsTest.java @@ -20,9 +20,10 @@ import static org.junit.Assert.assertEquals;  import android.app.ActivityOptions;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java b/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java index 3d323f0eb783..eec55b162b3e 100644 --- a/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java +++ b/services/tests/servicestests/src/com/android/server/am/TaskLaunchParamsModifierTests.java @@ -16,31 +16,24 @@  package com.android.server.am; -import android.content.pm.ActivityInfo.WindowLayout; -import android.graphics.Rect; -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; - -import android.view.Gravity; - -import org.junit.runner.RunWith; -import org.junit.Before; -import org.junit.Test; - -import org.mockito.invocation.InvocationOnMock; -  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;  import static com.android.server.am.LaunchParamsController.LaunchParamsModifier.RESULT_CONTINUE; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.doAnswer;  import static org.junit.Assert.assertEquals; +import android.content.pm.ActivityInfo.WindowLayout; +import android.graphics.Rect; +import android.platform.test.annotations.Presubmit; +import android.view.Gravity; + +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith;  /**   * Tests for exercising resizing task bounds. diff --git a/services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java b/services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java index 057fdc8c10bb..5aecec005fdb 100644 --- a/services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java +++ b/services/tests/servicestests/src/com/android/server/am/TaskRecordTests.java @@ -29,20 +29,17 @@ import android.app.ActivityManager;  import android.content.ComponentName;  import android.content.Intent;  import android.content.pm.ActivityInfo; -import android.content.res.XmlResourceParser;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit;  import android.service.voice.IVoiceInteractionSession; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.Xml; -import com.android.frameworks.servicestests.R; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.app.IVoiceInteractor;  import com.android.server.am.TaskRecord.TaskRecordFactory; -import org.junit.After;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; @@ -57,9 +54,7 @@ import java.io.FileReader;  import java.io.IOException;  import java.io.OutputStream;  import java.io.Reader; -import java.nio.file.Files;  import java.util.ArrayList; -import java.util.Comparator;  /**   * Tests for exercising {@link TaskRecord}. diff --git a/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java b/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java index 0359096892bb..9406160b52ca 100644 --- a/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java +++ b/services/tests/servicestests/src/com/android/server/am/TaskStackChangedListenerTest.java @@ -16,7 +16,8 @@  package com.android.server.am; -import static android.support.test.InstrumentationRegistry.getInstrumentation; +import static androidx.test.InstrumentationRegistry.getInstrumentation; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; @@ -32,23 +33,25 @@ import android.content.ComponentName;  import android.content.Context;  import android.content.Intent;  import android.content.pm.ActivityInfo; -import android.content.res.Resources.Theme;  import android.os.RemoteException; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.support.test.uiautomator.UiDevice;  import android.text.TextUtils; -import android.util.Pair; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.annotations.GuardedBy; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; +  import org.junit.After;  import org.junit.Assert;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +  @MediumTest  @RunWith(AndroidJUnit4.class)  public class TaskStackChangedListenerTest { diff --git a/services/tests/servicestests/src/com/android/server/appops/AppOpsActiveWatcherTest.java b/services/tests/servicestests/src/com/android/server/appops/AppOpsActiveWatcherTest.java index 7f397d6a2cfc..7e0dfcfd73f0 100644 --- a/services/tests/servicestests/src/com/android/server/appops/AppOpsActiveWatcherTest.java +++ b/services/tests/servicestests/src/com/android/server/appops/AppOpsActiveWatcherTest.java @@ -31,9 +31,10 @@ import android.app.AppOpsManager;  import android.app.AppOpsManager.OnOpActiveChangedListener;  import android.content.Context;  import android.os.Process; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/appops/AppOpsServiceTest.java b/services/tests/servicestests/src/com/android/server/appops/AppOpsServiceTest.java index ad21a789b201..2c255cb75498 100644 --- a/services/tests/servicestests/src/com/android/server/appops/AppOpsServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/appops/AppOpsServiceTest.java @@ -29,9 +29,10 @@ import android.content.Context;  import android.os.Handler;  import android.os.HandlerThread;  import android.os.Process; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/appwidget/AppWidgetServiceImplTest.java b/services/tests/servicestests/src/com/android/server/appwidget/AppWidgetServiceImplTest.java index 1bb93ccef093..f3c76b609c25 100644 --- a/services/tests/servicestests/src/com/android/server/appwidget/AppWidgetServiceImplTest.java +++ b/services/tests/servicestests/src/com/android/server/appwidget/AppWidgetServiceImplTest.java @@ -53,7 +53,6 @@ import java.util.List;  import java.util.Random;  import java.util.concurrent.CountDownLatch; -  /**   * Tests for {@link AppWidgetManager} and {@link AppWidgetServiceImpl}.   * @@ -61,7 +60,7 @@ import java.util.concurrent.CountDownLatch;   adb install \   -r -g ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   adb shell am instrument -e class com.android.server.appwidget.AppWidgetServiceImplTest \ - -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @SmallTest  public class AppWidgetServiceImplTest extends InstrumentationTestCase { diff --git a/services/tests/servicestests/src/com/android/server/backup/BackupPasswordManagerTest.java b/services/tests/servicestests/src/com/android/server/backup/BackupPasswordManagerTest.java index bc162977de2b..bcf4c08d9bc4 100644 --- a/services/tests/servicestests/src/com/android/server/backup/BackupPasswordManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/BackupPasswordManagerTest.java @@ -25,8 +25,9 @@ import static org.mockito.Mockito.doThrow;  import android.content.Context;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.backup.utils.PasswordUtils; diff --git a/services/tests/servicestests/src/com/android/server/backup/DataChangedJournalTest.java b/services/tests/servicestests/src/com/android/server/backup/DataChangedJournalTest.java index c27fd079bb89..ff450afbe972 100644 --- a/services/tests/servicestests/src/com/android/server/backup/DataChangedJournalTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/DataChangedJournalTest.java @@ -19,8 +19,9 @@ package com.android.server.backup;  import static com.google.common.truth.Truth.assertThat;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Rule; diff --git a/services/tests/servicestests/src/com/android/server/backup/ProcessedPackagesJournalTest.java b/services/tests/servicestests/src/com/android/server/backup/ProcessedPackagesJournalTest.java index b4a1f1857d77..cf4f9753ad9f 100644 --- a/services/tests/servicestests/src/com/android/server/backup/ProcessedPackagesJournalTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/ProcessedPackagesJournalTest.java @@ -19,8 +19,9 @@ package com.android.server.backup;  import static com.google.common.truth.Truth.assertThat;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.google.android.collect.Sets; diff --git a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java index bbd999bdc466..79eba680c998 100644 --- a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java @@ -43,8 +43,9 @@ import android.os.Process;  import android.os.RemoteException;  import android.os.UserHandle;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/backup/restore/PerformAdbRestoreTaskTest.java b/services/tests/servicestests/src/com/android/server/backup/restore/PerformAdbRestoreTaskTest.java index 05f4c1339265..00c63915c83d 100644 --- a/services/tests/servicestests/src/com/android/server/backup/restore/PerformAdbRestoreTaskTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/restore/PerformAdbRestoreTaskTest.java @@ -20,9 +20,10 @@ import static com.google.common.truth.Truth.assertThat;  import android.content.Context;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.frameworks.servicestests.R; diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/AppBackupUtilsTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/AppBackupUtilsTest.java index 4f18be728d85..944a5585ffdc 100644 --- a/services/tests/servicestests/src/com/android/server/backup/utils/AppBackupUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/utils/AppBackupUtilsTest.java @@ -20,7 +20,6 @@ import static com.google.common.truth.Truth.assertThat;  import static org.mockito.Mockito.doReturn;  import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when;  import android.content.pm.ApplicationInfo;  import android.content.pm.PackageInfo; @@ -31,8 +30,9 @@ import android.content.pm.Signature;  import android.content.pm.SigningInfo;  import android.os.Process;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.backup.BackupManagerService;  import com.android.server.backup.testutils.PackageManagerStub; diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/BackupManagerMonitorUtilsTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/BackupManagerMonitorUtilsTest.java index c40b411a21d7..d3fd89c3018a 100644 --- a/services/tests/servicestests/src/com/android/server/backup/utils/BackupManagerMonitorUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/utils/BackupManagerMonitorUtilsTest.java @@ -18,9 +18,9 @@ package com.android.server.backup.utils;  import static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_CATEGORY;  import static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_ID; +import static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION;  import static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_NAME;  import static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_VERSION; -import static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION;  import static com.google.common.truth.Truth.assertThat; @@ -33,8 +33,9 @@ import android.content.pm.PackageInfo;  import android.os.Bundle;  import android.os.RemoteException;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/BackupObserverUtilsTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/BackupObserverUtilsTest.java index ebe6133e3bc7..cdffd35ab8d8 100644 --- a/services/tests/servicestests/src/com/android/server/backup/utils/BackupObserverUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/utils/BackupObserverUtilsTest.java @@ -23,8 +23,9 @@ import android.app.backup.BackupProgress;  import android.app.backup.IBackupObserver;  import android.os.RemoteException;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/DataStreamFileCodecTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/DataStreamFileCodecTest.java index bfb95c1a3eda..efd460387b85 100644 --- a/services/tests/servicestests/src/com/android/server/backup/utils/DataStreamFileCodecTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/utils/DataStreamFileCodecTest.java @@ -19,8 +19,10 @@ package com.android.server.backup.utils;  import static com.google.common.truth.Truth.assertThat;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Rule;  import org.junit.Test;  import org.junit.rules.TemporaryFolder; diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/FullBackupRestoreObserverUtilsTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/FullBackupRestoreObserverUtilsTest.java index 2f56598a0b86..9b861a4dbf03 100644 --- a/services/tests/servicestests/src/com/android/server/backup/utils/FullBackupRestoreObserverUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/utils/FullBackupRestoreObserverUtilsTest.java @@ -24,8 +24,9 @@ import static org.mockito.Mockito.verify;  import android.app.backup.IFullBackupRestoreObserver;  import android.os.RemoteException;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/FullBackupUtilsTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/FullBackupUtilsTest.java index 4e3de6415c10..ae0452a60161 100644 --- a/services/tests/servicestests/src/com/android/server/backup/utils/FullBackupUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/utils/FullBackupUtilsTest.java @@ -25,8 +25,9 @@ import static org.mockito.Mockito.verifyZeroInteractions;  import android.os.ParcelFileDescriptor;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.After;  import org.junit.Before; @@ -40,7 +41,6 @@ import java.io.DataOutputStream;  import java.io.EOFException;  import java.io.File;  import java.io.FileOutputStream; -import java.io.IOException;  import java.io.OutputStream;  import java.util.Random; diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/SparseArrayUtilsTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/SparseArrayUtilsTest.java index db55120dc023..679e098e782e 100644 --- a/services/tests/servicestests/src/com/android/server/backup/utils/SparseArrayUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/utils/SparseArrayUtilsTest.java @@ -19,10 +19,11 @@ package com.android.server.backup.utils;  import static com.google.common.truth.Truth.assertThat;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.SparseArray; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.google.android.collect.Sets;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/backup/utils/TarBackupReaderTest.java b/services/tests/servicestests/src/com/android/server/backup/utils/TarBackupReaderTest.java index 2830a7459dc8..12f2991b3fea 100644 --- a/services/tests/servicestests/src/com/android/server/backup/utils/TarBackupReaderTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/utils/TarBackupReaderTest.java @@ -29,8 +29,6 @@ import static android.app.backup.BackupManagerMonitor.LOG_EVENT_ID_VERSION_OF_BA  import static com.google.common.truth.Truth.assertThat;  import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.verifyNoMoreInteractions;  import static org.mockito.Mockito.verifyZeroInteractions; @@ -47,13 +45,14 @@ import android.content.pm.SigningInfo;  import android.os.Bundle;  import android.os.Process;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.frameworks.servicestests.R; -import com.android.server.backup.FileMetadata;  import com.android.server.backup.BackupManagerService; +import com.android.server.backup.FileMetadata;  import com.android.server.backup.restore.PerformAdbRestoreTask;  import com.android.server.backup.restore.RestorePolicy;  import com.android.server.backup.testutils.PackageManagerStub; diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyConstantsTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyConstantsTest.java index 175fdd84fb04..be05245deea1 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyConstantsTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyConstantsTest.java @@ -28,7 +28,7 @@ import android.test.suitebuilder.annotation.SmallTest;   -w com.android.frameworks.servicestests - -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @SmallTest  public class DevicePolicyConstantsTest extends AndroidTestCase { diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java index cd3928558c4b..3f470548f5d2 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java @@ -37,12 +37,13 @@ import android.os.UserHandle;  import android.os.UserManager;  import android.os.UserManagerInternal;  import android.security.KeyChain; -import android.support.annotation.NonNull;  import android.telephony.TelephonyManager;  import android.util.ArrayMap;  import android.util.Pair;  import android.view.IWindowManager; +import androidx.annotation.NonNull; +  import com.android.internal.util.FunctionalUtils.ThrowingRunnable;  import com.android.internal.widget.LockPatternUtils;  import com.android.server.net.NetworkPolicyManagerInternal; diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index 26ce7e4cb77c..7c2c841da2ad 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -117,7 +117,7 @@ import java.util.concurrent.TimeUnit;   adb install \     -r ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   adb shell am instrument -e class com.android.server.devicepolicy.DevicePolicyManagerTest \ -   -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner +   -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   (mmma frameworks/base/services/tests/servicestests/ for non-ninja build)   * diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java index 213961c1e1d9..be00bb662d17 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java @@ -30,11 +30,12 @@ import android.os.Bundle;  import android.os.Handler;  import android.os.UserHandle;  import android.os.UserManagerInternal; -import android.support.annotation.NonNull;  import android.test.mock.MockContext;  import android.util.ArrayMap;  import android.util.ExceptionUtils; +import androidx.annotation.NonNull; +  import com.android.internal.util.FunctionalUtils;  import org.junit.Assert; diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/OverlayPackagesProviderTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/OverlayPackagesProviderTest.java index 939a2725fb07..34edd9fb020b 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/OverlayPackagesProviderTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/OverlayPackagesProviderTest.java @@ -33,11 +33,12 @@ import android.content.pm.ResolveInfo;  import android.content.pm.ServiceInfo;  import android.content.res.Resources;  import android.os.RemoteException; -import android.support.test.InstrumentationRegistry;  import android.test.AndroidTestCase;  import android.test.mock.MockPackageManager;  import android.view.inputmethod.InputMethodInfo; +import androidx.test.InstrumentationRegistry; +  import com.android.internal.R;  import com.android.internal.view.IInputMethodManager; diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/OwnersTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/OwnersTest.java index cb6a7472d3bc..5899bb0e94fe 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/OwnersTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/OwnersTest.java @@ -16,12 +16,12 @@  package com.android.server.devicepolicy; -import com.android.server.devicepolicy.DevicePolicyManagerServiceTestable.OwnersTestable; -  import android.content.ComponentName;  import android.os.UserHandle;  import android.test.suitebuilder.annotation.SmallTest; +import com.android.server.devicepolicy.DevicePolicyManagerServiceTestable.OwnersTestable; +  /**   * Tests for the DeviceOwner object that saves & loads device and policy owner information.   * run this test with: @@ -29,7 +29,7 @@ import android.test.suitebuilder.annotation.SmallTest;   adb install \     -r out/target/product/hammerhead/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   adb shell am instrument -e class com.android.server.devicepolicy.OwnersTest \ -   -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner +   -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   (mmma frameworks/base/services/tests/servicestests/ for non-ninja build)   */ diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/SystemUpdatePolicyTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/SystemUpdatePolicyTest.java index e4e97012367a..e51859b5c829 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/SystemUpdatePolicyTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/SystemUpdatePolicyTest.java @@ -20,6 +20,7 @@ import static android.app.admin.SystemUpdatePolicy.ValidationFailedException.ERR  import static android.app.admin.SystemUpdatePolicy.ValidationFailedException.ERROR_DUPLICATE_OR_OVERLAP;  import static android.app.admin.SystemUpdatePolicy.ValidationFailedException.ERROR_NEW_FREEZE_PERIOD_TOO_CLOSE;  import static android.app.admin.SystemUpdatePolicy.ValidationFailedException.ERROR_NEW_FREEZE_PERIOD_TOO_LONG; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertTrue;  import static org.junit.Assert.fail; @@ -27,10 +28,10 @@ import static org.junit.Assert.fail;  import android.app.admin.FreezePeriod;  import android.app.admin.SystemUpdatePolicy;  import android.os.Parcel; -import android.support.test.runner.AndroidJUnit4; -import android.util.Pair;  import android.util.Xml; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.FastXmlSerializer;  import org.junit.Test; @@ -50,7 +51,6 @@ import java.util.ArrayList;  import java.util.List;  import java.util.concurrent.TimeUnit; -  /**   * Unit tests for {@link android.app.admin.SystemUpdatePolicy}.   * Throughout this test, we use "MM-DD" format to denote dates without year. diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/TransferOwnershipMetadataManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/TransferOwnershipMetadataManagerTest.java index e3e61ac29cce..257acb88141e 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/TransferOwnershipMetadataManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/TransferOwnershipMetadataManagerTest.java @@ -30,9 +30,10 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue;  import android.os.Environment; -import android.support.test.runner.AndroidJUnit4;  import android.util.Log; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.devicepolicy.TransferOwnershipMetadataManager.Injector;  import com.android.server.devicepolicy.TransferOwnershipMetadataManager.Metadata; diff --git a/services/tests/servicestests/src/com/android/server/display/AmbientBrightnessStatsTrackerTest.java b/services/tests/servicestests/src/com/android/server/display/AmbientBrightnessStatsTrackerTest.java index 8502e69dd060..e8e6dedaa258 100644 --- a/services/tests/servicestests/src/com/android/server/display/AmbientBrightnessStatsTrackerTest.java +++ b/services/tests/servicestests/src/com/android/server/display/AmbientBrightnessStatsTrackerTest.java @@ -25,9 +25,10 @@ import static org.junit.Assert.assertTrue;  import android.hardware.display.AmbientBrightnessDayStats;  import android.os.SystemClock;  import android.os.UserManager; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java index 284d443bbcf9..ccdb76d74b05 100644 --- a/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java +++ b/services/tests/servicestests/src/com/android/server/display/BrightnessMappingStrategyTest.java @@ -30,11 +30,11 @@ import android.content.res.Resources;  import android.content.res.TypedArray;  import android.hardware.display.BrightnessConfiguration;  import android.os.PowerManager; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.MathUtils;  import android.util.Spline; -import android.util.Slog; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java index 75dc96f13da4..ece9f42bd0eb 100644 --- a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java +++ b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java @@ -46,11 +46,12 @@ import android.os.RemoteException;  import android.os.SystemClock;  import android.os.UserManager;  import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.AtomicFile; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java b/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java index 6bd8011f1aa9..53711a623704 100644 --- a/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java @@ -16,6 +16,10 @@  package com.android.server.display; +import static com.google.common.truth.Truth.assertWithMessage; + +import static org.mockito.Mockito.doReturn; +  import android.annotation.NonNull;  import android.app.ActivityManager;  import android.app.AlarmManager; @@ -26,10 +30,11 @@ import android.os.UserHandle;  import android.provider.Settings;  import android.provider.Settings.Secure;  import android.provider.Settings.System; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.test.mock.MockContentResolver; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.app.ColorDisplayController;  import com.android.internal.util.test.FakeSettingsProvider;  import com.android.server.LocalServices; @@ -37,24 +42,22 @@ import com.android.server.SystemService;  import com.android.server.twilight.TwilightListener;  import com.android.server.twilight.TwilightManager;  import com.android.server.twilight.TwilightState; -import java.time.LocalDateTime; -import java.time.ZoneId; +  import org.junit.After;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.Mockito; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId;  import java.util.Calendar;  import java.util.HashMap; -import java.time.LocalTime;  import java.util.Map;  import java.util.concurrent.CountDownLatch;  import java.util.concurrent.TimeUnit; -import static com.google.common.truth.Truth.assertWithMessage; -import static org.mockito.Mockito.doReturn; -  @RunWith(AndroidJUnit4.class)  public class ColorDisplayServiceTest { diff --git a/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java b/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java index 675000e91a1c..196454bd32ce 100644 --- a/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java +++ b/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java @@ -22,23 +22,21 @@ import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue;  import android.hardware.display.BrightnessConfiguration; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import android.util.AtomicFile;  import android.util.Pair; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import java.io.FileInputStream;  import java.io.ByteArrayInputStream;  import java.io.ByteArrayOutputStream;  import java.io.FileNotFoundException; -import java.io.InputStream;  import java.io.IOException; +import java.io.InputStream;  import java.io.OutputStream; -import java.io.PrintWriter;  import java.nio.charset.StandardCharsets;  @SmallTest diff --git a/services/tests/servicestests/src/com/android/server/job/BackgroundRestrictionsTest.java b/services/tests/servicestests/src/com/android/server/job/BackgroundRestrictionsTest.java index 14b118ebd2e1..be8e569c7a45 100644 --- a/services/tests/servicestests/src/com/android/server/job/BackgroundRestrictionsTest.java +++ b/services/tests/servicestests/src/com/android/server/job/BackgroundRestrictionsTest.java @@ -38,11 +38,12 @@ import android.os.ServiceManager;  import android.os.SystemClock;  import android.os.UserHandle;  import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.LargeTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.Log; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.LargeTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.servicestests.apps.jobtestapp.TestJobActivity;  import org.junit.After; diff --git a/services/tests/servicestests/src/com/android/server/job/JobSetTest.java b/services/tests/servicestests/src/com/android/server/job/JobSetTest.java index 83bd9fc2f648..e62e07d6858f 100644 --- a/services/tests/servicestests/src/com/android/server/job/JobSetTest.java +++ b/services/tests/servicestests/src/com/android/server/job/JobSetTest.java @@ -29,13 +29,14 @@ import android.content.Context;  import android.content.pm.PackageManagerInternal;  import android.os.Build;  import android.os.UserHandle; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArraySet;  import android.util.Log;  import android.util.SparseArray; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.LocalServices;  import com.android.server.job.controllers.JobStatus; diff --git a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java index 4ee2ff48fd62..543f51cba41f 100644 --- a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java +++ b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java @@ -22,12 +22,13 @@ import android.os.Parcel;  import android.os.Parcelable;  import android.os.PersistableBundle;  import android.os.SystemClock; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.test.RenamingDelegatingContext;  import android.util.Log;  import android.util.Pair; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.HexDump;  import com.android.server.IoThread;  import com.android.server.LocalServices; diff --git a/services/tests/servicestests/src/com/android/server/job/controllers/JobStatusTest.java b/services/tests/servicestests/src/com/android/server/job/controllers/JobStatusTest.java index d78af22e49c9..1752479ade35 100644 --- a/services/tests/servicestests/src/com/android/server/job/controllers/JobStatusTest.java +++ b/services/tests/servicestests/src/com/android/server/job/controllers/JobStatusTest.java @@ -21,7 +21,8 @@ import static org.junit.Assert.assertEquals;  import android.app.job.JobInfo;  import android.content.ComponentName;  import android.os.SystemClock; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.runner.AndroidJUnit4;  import com.android.server.job.JobSchedulerService; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsShellCommandTest.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsShellCommandTest.java index 424c08c4c931..9b6975c338db 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsShellCommandTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsShellCommandTest.java @@ -29,24 +29,20 @@ import static org.mockito.Mockito.never;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import static java.io.FileDescriptor.*; -  import android.app.ActivityManager;  import android.content.Context;  import android.os.Binder; -import android.os.Debug;  import android.os.Handler;  import android.os.Looper;  import android.os.ResultReceiver;  import android.os.ShellCallback;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import com.android.internal.widget.LockPatternUtils; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; -import junit.framework.Assert; +import com.android.internal.widget.LockPatternUtils;  import org.junit.Before;  import org.junit.Test; @@ -54,7 +50,9 @@ import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; -import java.io.FileDescriptor; +import static java.io.FileDescriptor.err; +import static java.io.FileDescriptor.in; +import static java.io.FileDescriptor.out;  /**   * Test class for {@link LockSettingsShellCommand}. diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java index 90947f44ef2b..a82c25028bc4 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java @@ -20,6 +20,7 @@ import static android.security.keystore.recovery.KeyChainProtectionParams.TYPE_L  import static android.security.keystore.recovery.KeyChainProtectionParams.UI_FORMAT_PASSWORD;  import static android.security.keystore.recovery.KeyChainProtectionParams.UI_FORMAT_PATTERN;  import static android.security.keystore.recovery.KeyChainProtectionParams.UI_FORMAT_PIN; +  import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PASSWORD;  import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN; @@ -31,7 +32,6 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; -  import static org.mockito.ArgumentMatchers.any;  import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.eq; @@ -50,9 +50,10 @@ import android.security.keystore.recovery.KeyDerivationParams;  import android.security.keystore.recovery.RecoveryController;  import android.security.keystore.recovery.TrustedRootCertificates;  import android.security.keystore.recovery.WrappedApplicationKey; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.locksettings.recoverablekeystore.storage.RecoverableKeyStoreDb;  import com.android.server.locksettings.recoverablekeystore.storage.RecoverySnapshotStorage; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncUtilsTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncUtilsTest.java index fae48c68b8db..f832d3ceef8e 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncUtilsTest.java @@ -22,8 +22,8 @@ import static org.junit.Assert.assertArrayEquals;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.google.common.collect.ImmutableMap; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/PlatformKeyManagerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/PlatformKeyManagerTest.java index 0f0e3f386fec..13436e7f8674 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/PlatformKeyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/PlatformKeyManagerTest.java @@ -32,9 +32,10 @@ import android.app.KeyguardManager;  import android.content.Context;  import android.security.keystore.KeyProperties;  import android.security.keystore.KeyProtection; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.locksettings.recoverablekeystore.storage.RecoverableKeyStoreDb; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyGeneratorTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyGeneratorTest.java index fd8b319b74ca..48afb8b6abcb 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyGeneratorTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyGeneratorTest.java @@ -25,9 +25,10 @@ import android.content.Context;  import android.security.keystore.AndroidKeyStoreSecretKey;  import android.security.keystore.KeyGenParameterSpec;  import android.security.keystore.KeyProperties; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.locksettings.recoverablekeystore.storage.RecoverableKeyStoreDb; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java index 8e86a87915e8..b15863dd3613 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManagerTest.java @@ -23,6 +23,7 @@ import static android.security.keystore.recovery.RecoveryController.ERROR_DOWNGR  import static android.security.keystore.recovery.RecoveryController.ERROR_INVALID_CERTIFICATE;  import static com.google.common.truth.Truth.assertThat; +  import static org.junit.Assert.assertArrayEquals;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.fail; @@ -35,16 +36,14 @@ import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; +import android.Manifest;  import android.app.KeyguardManager;  import android.app.PendingIntent;  import android.content.Context;  import android.content.Intent; -import android.Manifest;  import android.os.Binder;  import android.os.ServiceSpecificException;  import android.os.UserHandle; -import android.security.KeyStore; -import android.security.keystore.AndroidKeyStoreProvider;  import android.security.keystore.AndroidKeyStoreSecretKey;  import android.security.keystore.KeyGenParameterSpec;  import android.security.keystore.KeyProperties; @@ -53,9 +52,10 @@ import android.security.keystore.recovery.KeyDerivationParams;  import android.security.keystore.recovery.RecoveryCertPath;  import android.security.keystore.recovery.TrustedRootCertificates;  import android.security.keystore.recovery.WrappedApplicationKey; -import android.support.test.filters.SmallTest; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.locksettings.recoverablekeystore.storage.ApplicationKeyStorage;  import com.android.server.locksettings.recoverablekeystore.storage.RecoverableKeyStoreDb; @@ -75,19 +75,16 @@ import org.mockito.Spy;  import java.io.File;  import java.nio.charset.StandardCharsets; -import java.security.UnrecoverableKeyException;  import java.security.cert.CertPath;  import java.security.cert.CertificateFactory;  import java.security.cert.X509Certificate;  import java.util.ArrayList; -import java.util.concurrent.Executors;  import java.util.Map;  import java.util.Random; +import java.util.concurrent.Executors; -import javax.crypto.Cipher;  import javax.crypto.KeyGenerator;  import javax.crypto.SecretKey; -import javax.crypto.spec.GCMParameterSpec;  import javax.crypto.spec.SecretKeySpec;  @SmallTest diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorageTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorageTest.java index acc200fa81ad..33038aa18337 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorageTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorageTest.java @@ -8,9 +8,10 @@ import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.content.IntentFilter; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/SecureBoxTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/SecureBoxTest.java index 35ec23b2ee6b..15b070829cdb 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/SecureBoxTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/SecureBoxTest.java @@ -17,11 +17,16 @@  package com.android.server.locksettings.recoverablekeystore;  import static com.google.common.truth.Truth.assertThat; +  import static org.testng.Assert.assertThrows;  import static org.testng.Assert.expectThrows; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; +  import java.math.BigInteger;  import java.nio.charset.StandardCharsets;  import java.security.InvalidKeyException; @@ -31,9 +36,8 @@ import java.security.KeyPairGenerator;  import java.security.PrivateKey;  import java.security.PublicKey;  import java.security.spec.ECPrivateKeySpec; +  import javax.crypto.AEADBadTagException; -import org.junit.Test; -import org.junit.runner.RunWith;  @SmallTest  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelperTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelperTest.java index 67436cc4c853..944d6e0512eb 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelperTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelperTest.java @@ -3,8 +3,9 @@ package com.android.server.locksettings.recoverablekeystore;  import static com.google.common.truth.Truth.assertThat;  import android.security.keystore.recovery.TrustedRootCertificates; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.widget.LockPatternUtils; @@ -13,6 +14,7 @@ import org.junit.runner.RunWith;  import java.util.HashMap;  import java.util.Map; +  import javax.crypto.SecretKey;  @SmallTest diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/WrappedKeyTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/WrappedKeyTest.java index 56122a7d6d4c..b5ee60e7ec24 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/WrappedKeyTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/WrappedKeyTest.java @@ -24,8 +24,9 @@ import static org.junit.Assert.fail;  import android.security.keystore.AndroidKeyStoreSecretKey;  import android.security.keystore.KeyGenParameterSpec;  import android.security.keystore.KeyProperties; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.After;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/CertUtilsTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/CertUtilsTest.java index 9279698c6004..1cbebffb2a1c 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/CertUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/CertUtilsTest.java @@ -18,13 +18,17 @@ package com.android.server.locksettings.recoverablekeystore.certificate;  import static com.google.common.truth.Truth.assertThat; -import static java.nio.charset.StandardCharsets.UTF_8; -  import static org.testng.Assert.assertThrows;  import static org.testng.Assert.expectThrows; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.w3c.dom.Element; + +import static java.nio.charset.StandardCharsets.UTF_8;  import java.io.InputStream;  import java.security.KeyPairGenerator; @@ -39,10 +43,6 @@ import java.util.Base64;  import java.util.Collections;  import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.w3c.dom.Element; -  @SmallTest  @RunWith(AndroidJUnit4.class)  public final class CertUtilsTest { diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/CertXmlTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/CertXmlTest.java index 52269d98da21..bbcc41113f5a 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/CertXmlTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/CertXmlTest.java @@ -21,17 +21,17 @@ import static com.google.common.truth.Truth.assertThat;  import static org.testng.Assert.assertThrows;  import static org.testng.Assert.expectThrows; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; - -import java.security.cert.CertPath; -import java.security.cert.X509Certificate; -import java.util.List; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; +import java.security.cert.CertPath; +import java.security.cert.X509Certificate; +import java.util.List; +  @SmallTest  @RunWith(AndroidJUnit4.class)  public final class CertXmlTest { diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/SigXmlTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/SigXmlTest.java index 4d87006d4fe3..45adb4ba7a26 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/SigXmlTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/SigXmlTest.java @@ -21,8 +21,8 @@ import static com.google.common.truth.Truth.assertThat;  import static org.testng.Assert.assertThrows;  import static org.testng.Assert.expectThrows; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/TestData.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/TestData.java index 5eb416639b5a..c5792adea1ed 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/TestData.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/certificate/TestData.java @@ -17,7 +17,8 @@  package com.android.server.locksettings.recoverablekeystore.certificate;  import android.content.Context; -import android.support.test.InstrumentationRegistry; + +import androidx.test.InstrumentationRegistry;  import com.google.common.io.ByteStreams; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializerTest.java index a23ac0fce6ab..880255d79eb7 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializerTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializerTest.java @@ -22,9 +22,9 @@ import android.security.keystore.recovery.KeyChainProtectionParams;  import android.security.keystore.recovery.KeyChainSnapshot;  import android.security.keystore.recovery.KeyDerivationParams;  import android.security.keystore.recovery.WrappedApplicationKey; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.locksettings.recoverablekeystore.TestData; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelperTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelperTest.java index 9b09dd1ae6ad..7130b4226ef1 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelperTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelperTest.java @@ -18,25 +18,26 @@ package com.android.server.locksettings.recoverablekeystore.storage;  import static com.google.common.truth.Truth.assertThat; -import static java.nio.charset.StandardCharsets.UTF_8; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -  import android.content.ContentValues;  import android.content.Context;  import android.database.sqlite.SQLiteDatabase; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.locksettings.recoverablekeystore.storage.RecoverableKeyStoreDbContract.KeysEntry;  import com.android.server.locksettings.recoverablekeystore.storage.RecoverableKeyStoreDbContract.RecoveryServiceMetadataEntry;  import com.android.server.locksettings.recoverablekeystore.storage.RecoverableKeyStoreDbContract.RootOfTrustEntry;  import com.android.server.locksettings.recoverablekeystore.storage.RecoverableKeyStoreDbContract.UserMetadataEntry; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static java.nio.charset.StandardCharsets.UTF_8; +  @SmallTest  @RunWith(AndroidJUnit4.class)  public class RecoverableKeyStoreDbHelperTest { diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java index 940745e955e4..6a26f8c72e81 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbTest.java @@ -17,25 +17,27 @@  package com.android.server.locksettings.recoverablekeystore.storage;  import static com.google.common.truth.Truth.assertThat; +  import static org.junit.Assert.assertArrayEquals;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -  import android.content.Context;  import android.security.keystore.recovery.RecoveryController; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.locksettings.recoverablekeystore.TestData;  import com.android.server.locksettings.recoverablekeystore.WrappedKey; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +  import java.io.File;  import java.nio.charset.StandardCharsets;  import java.security.KeyPairGenerator; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorageTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorageTest.java index bb0474efee58..c2d1440c553e 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorageTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorageTest.java @@ -22,8 +22,8 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorageTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorageTest.java index ad14c3a8adef..e8614af387b3 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorageTest.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorageTest.java @@ -12,9 +12,10 @@ import android.security.keystore.recovery.KeyChainProtectionParams;  import android.security.keystore.recovery.KeyChainSnapshot;  import android.security.keystore.recovery.KeyDerivationParams;  import android.security.keystore.recovery.WrappedApplicationKey; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.locksettings.recoverablekeystore.TestData; diff --git a/services/tests/servicestests/src/com/android/server/net/ConnOnActivityStartTest.java b/services/tests/servicestests/src/com/android/server/net/ConnOnActivityStartTest.java index 28b54ef84a91..fe7a376d9e8d 100644 --- a/services/tests/servicestests/src/com/android/server/net/ConnOnActivityStartTest.java +++ b/services/tests/servicestests/src/com/android/server/net/ConnOnActivityStartTest.java @@ -20,10 +20,6 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; -import com.android.frameworks.servicestests.R; -import com.android.servicestests.aidl.ICmdReceiverService; -import com.android.servicestests.aidl.INetworkStateObserver; -  import android.content.ComponentName;  import android.content.Context;  import android.content.Intent; @@ -34,13 +30,17 @@ import android.os.Bundle;  import android.os.IBinder;  import android.os.SystemClock;  import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.LargeTest; -import android.support.test.runner.AndroidJUnit4;  import android.support.test.uiautomator.UiDevice;  import android.text.TextUtils;  import android.util.Log; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.LargeTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.servicestests.aidl.ICmdReceiverService; +import com.android.servicestests.aidl.INetworkStateObserver; +  import org.junit.AfterClass;  import org.junit.Assert;  import org.junit.BeforeClass; @@ -64,7 +64,7 @@ import java.util.concurrent.TimeUnit;   * Install: adb install -r \   *     ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk   * Run: adb shell am instrument -e class com.android.server.net.ConnOnActivityStartTest -w \ - *     com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + *     com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @LargeTest  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/net/IpConfigStoreTest.java b/services/tests/servicestests/src/com/android/server/net/IpConfigStoreTest.java index 9f4b75462134..7767a2810ac2 100644 --- a/services/tests/servicestests/src/com/android/server/net/IpConfigStoreTest.java +++ b/services/tests/servicestests/src/com/android/server/net/IpConfigStoreTest.java @@ -27,9 +27,10 @@ import android.net.LinkAddress;  import android.net.NetworkUtils;  import android.net.ProxyInfo;  import android.net.StaticIpConfiguration; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArrayMap; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/net/watchlist/HarmfulDigestsTests.java b/services/tests/servicestests/src/com/android/server/net/watchlist/HarmfulDigestsTests.java index a34f95eed040..be56855d93da 100644 --- a/services/tests/servicestests/src/com/android/server/net/watchlist/HarmfulDigestsTests.java +++ b/services/tests/servicestests/src/com/android/server/net/watchlist/HarmfulDigestsTests.java @@ -19,8 +19,8 @@ package com.android.server.net.watchlist;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.util.HexDump; diff --git a/services/tests/servicestests/src/com/android/server/net/watchlist/NetworkWatchlistServiceTests.java b/services/tests/servicestests/src/com/android/server/net/watchlist/NetworkWatchlistServiceTests.java index a802ff75a19f..9c8a38219a9c 100644 --- a/services/tests/servicestests/src/com/android/server/net/watchlist/NetworkWatchlistServiceTests.java +++ b/services/tests/servicestests/src/com/android/server/net/watchlist/NetworkWatchlistServiceTests.java @@ -17,7 +17,6 @@  package com.android.server.net.watchlist;  import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue;  import static org.junit.Assert.fail; @@ -30,9 +29,10 @@ import android.os.IBinder;  import android.os.Message;  import android.os.Process;  import android.os.RemoteException; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.ServiceThread; diff --git a/services/tests/servicestests/src/com/android/server/net/watchlist/PrivacyUtilsTests.java b/services/tests/servicestests/src/com/android/server/net/watchlist/PrivacyUtilsTests.java index 6f2237f1baef..9d2c40961ce4 100644 --- a/services/tests/servicestests/src/com/android/server/net/watchlist/PrivacyUtilsTests.java +++ b/services/tests/servicestests/src/com/android/server/net/watchlist/PrivacyUtilsTests.java @@ -21,8 +21,9 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue;  import android.privacy.DifferentialPrivacyEncoder; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/net/watchlist/ReportEncoderTests.java b/services/tests/servicestests/src/com/android/server/net/watchlist/ReportEncoderTests.java index cb4f6c5f9351..bf125f8f4c71 100644 --- a/services/tests/servicestests/src/com/android/server/net/watchlist/ReportEncoderTests.java +++ b/services/tests/servicestests/src/com/android/server/net/watchlist/ReportEncoderTests.java @@ -19,9 +19,13 @@ package com.android.server.net.watchlist;  import static org.junit.Assert.assertEquals;  import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.service.nano.NetworkWatchlistAppResultProto; +import com.android.service.nano.NetworkWatchlistReportProto;  import org.junit.After;  import org.junit.Before; @@ -35,9 +39,6 @@ import java.io.IOException;  import java.io.InputStreamReader;  import java.util.HashMap; -import com.android.service.nano.NetworkWatchlistReportProto; -import com.android.service.nano.NetworkWatchlistAppResultProto; -  /**   * runtest frameworks-services -c com.android.server.net.watchlist.ReportEncoderTests   */ diff --git a/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistConfigTests.java b/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistConfigTests.java index 678f0188e485..fa61c59852f3 100644 --- a/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistConfigTests.java +++ b/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistConfigTests.java @@ -18,13 +18,14 @@ package com.android.server.net.watchlist;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue;  import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue;  import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.util.HexDump; @@ -40,8 +41,6 @@ import java.io.FileWriter;  import java.io.IOException;  import java.io.InputStreamReader;  import java.io.PrintWriter; -import java.util.Arrays; -  /**   * runtest frameworks-services -c com.android.server.net.watchlist.WatchlistConfigTests diff --git a/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistLoggingHandlerTests.java b/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistLoggingHandlerTests.java index 8399dac17699..8bbad8d6abde 100644 --- a/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistLoggingHandlerTests.java +++ b/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistLoggingHandlerTests.java @@ -17,11 +17,12 @@  package com.android.server.net.watchlist;  import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.doAnswer; -  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock;  import android.content.Context;  import android.content.ContextWrapper; @@ -32,21 +33,18 @@ import android.content.pm.UserInfo;  import android.os.FileUtils;  import android.os.Looper;  import android.os.UserManager; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.InstrumentationRegistry; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.After;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.mockito.Mock;  import org.mockito.MockitoAnnotations;  import org.mockito.invocation.InvocationOnMock; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.anyString; -  import java.io.File;  import java.util.ArrayList;  import java.util.Arrays; diff --git a/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistSettingsTests.java b/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistSettingsTests.java index 07158afbaaff..03b1c41c7a6b 100644 --- a/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistSettingsTests.java +++ b/services/tests/servicestests/src/com/android/server/net/watchlist/WatchlistSettingsTests.java @@ -20,9 +20,10 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNotEquals;  import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.util.HexDump; diff --git a/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java b/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java index b2eb57267cec..6591d6f67ac8 100644 --- a/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java @@ -22,10 +22,11 @@ import android.content.pm.PackageManager;  import android.content.pm.PackageStats;  import android.os.SystemClock;  import android.os.UserHandle; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.util.Log; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.ArrayUtils;  import org.junit.After; diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java index cdac516c9577..e379cd09f0f8 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerServiceTest.java @@ -18,7 +18,8 @@ package com.android.server.pm;  import android.content.IIntentReceiver;  import android.os.Bundle; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.runner.AndroidJUnit4;  import org.junit.After;  import org.junit.Assert; diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java index 97ff94fdab56..ee41c0bdac82 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java @@ -42,14 +42,15 @@ import android.os.BaseBundle;  import android.os.PersistableBundle;  import android.os.UserHandle;  import android.os.UserManagerInternal; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArrayMap;  import android.util.ArraySet;  import android.util.Log;  import android.util.LongSparseArray; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.os.AtomicFile;  import com.android.server.LocalServices;  import com.android.server.pm.permission.PermissionManagerInternal; diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java index 69c0c0f74b8a..9736e68144ae 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java @@ -15,6 +15,8 @@   */  package com.android.server.pm; +import static org.junit.Assert.*; +  import android.content.pm.ActivityInfo;  import android.content.pm.ApplicationInfo;  import android.content.pm.ConfigurationInfo; @@ -29,9 +31,18 @@ import android.content.pm.Signature;  import android.os.Bundle;  import android.os.Parcel;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.MediumTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import android.util.ArrayMap; +import android.util.ArraySet; + +import androidx.test.filters.MediumTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import libcore.io.IoUtils; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith;  import java.io.File;  import java.lang.reflect.Array; @@ -43,16 +54,6 @@ import java.util.HashSet;  import java.util.List;  import java.util.Set; -import static org.junit.Assert.*; - -import android.util.ArrayMap; -import android.util.ArraySet; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import libcore.io.IoUtils; -  @RunWith(AndroidJUnit4.class)  @MediumTest  public class PackageParserTest { diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java index 2a4ea8ccead3..4a33ca37f767 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageUserStateTest.java @@ -24,10 +24,11 @@ import static org.junit.Assert.assertThat;  import android.content.pm.PackageUserState;  import android.os.PersistableBundle; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArraySet; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java b/services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java index d665094c5a26..41489dc42a6a 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/ParallelPackageParserTest.java @@ -17,9 +17,10 @@  package com.android.server.pm;  import android.content.pm.PackageParser; -import android.support.test.runner.AndroidJUnit4;  import android.util.Log; +import androidx.test.runner.AndroidJUnit4; +  import junit.framework.Assert;  import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java index 7815004c18f9..c42c5962f755 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java @@ -117,7 +117,7 @@ import java.util.function.BiConsumer;   adb install \   -r -g ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   adb shell am instrument -e class com.android.server.pm.ShortcutManagerTest1 \ - -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @SmallTest  public class ShortcutManagerTest1 extends BaseShortcutManagerTest { diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest10.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest10.java index ca1e6afd11ed..ae01b409d322 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest10.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest10.java @@ -37,7 +37,7 @@ import static org.mockito.Mockito.*;   adb install \   -r -g ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   adb shell am instrument -e class com.android.server.pm.ShortcutManagerTest10 \ - -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @SmallTest  public class ShortcutManagerTest10 extends BaseShortcutManagerTest { diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java index fcdadaccd2ac..76d52fd48431 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java @@ -50,8 +50,6 @@ import com.android.server.pm.ShortcutUser.PackageWithUser;  import java.io.File;  import java.io.FileWriter;  import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter;  import java.io.Writer;  import java.util.Locale; @@ -62,7 +60,7 @@ import java.util.Locale;   adb install \   -r -g ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   adb shell am instrument -e class com.android.server.pm.ShortcutManagerTest2 \ - -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @SmallTest  public class ShortcutManagerTest2 extends BaseShortcutManagerTest { diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java index e9a329ca5a04..8a489d209887 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest8.java @@ -56,7 +56,7 @@ import org.mockito.ArgumentCaptor;   adb install \   -r -g ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   adb shell am instrument -e class com.android.server.pm.ShortcutManagerTest8 \ - -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   * TODO for CTS   * - Foreground check. diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest9.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest9.java index 012024f1b822..edb9df585aec 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest9.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest9.java @@ -44,7 +44,7 @@ import org.mockito.ArgumentCaptor;   adb install \   -r -g ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   adb shell am instrument -e class com.android.server.pm.ShortcutManagerTest9 \ - -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   */  @SmallTest  public class ShortcutManagerTest9 extends BaseShortcutManagerTest { diff --git a/services/tests/servicestests/src/com/android/server/pm/SuspendPackagesTest.java b/services/tests/servicestests/src/com/android/server/pm/SuspendPackagesTest.java index c186e48e8794..f115b9cd0fc5 100644 --- a/services/tests/servicestests/src/com/android/server/pm/SuspendPackagesTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/SuspendPackagesTest.java @@ -41,9 +41,6 @@ import android.os.Looper;  import android.os.PersistableBundle;  import android.os.RemoteException;  import android.os.UserHandle; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.LargeTest; -import android.support.test.runner.AndroidJUnit4;  import android.support.test.uiautomator.By;  import android.support.test.uiautomator.UiDevice;  import android.support.test.uiautomator.UiObject2; @@ -52,6 +49,10 @@ import android.util.Log;  import android.view.IWindowManager;  import android.view.WindowManagerGlobal; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.LargeTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.servicestests.apps.suspendtestapp.SuspendTestActivity;  import com.android.servicestests.apps.suspendtestapp.SuspendTestReceiver; diff --git a/services/tests/servicestests/src/com/android/server/pm/UserDataPreparerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserDataPreparerTest.java index bb35beb20a23..c489cf0a138d 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserDataPreparerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserDataPreparerTest.java @@ -16,15 +16,22 @@  package com.android.server.pm; +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isNull; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +  import android.content.Context;  import android.content.pm.UserInfo;  import android.os.FileUtils;  import android.os.storage.StorageManager;  import android.os.storage.VolumeInfo;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; @@ -39,19 +46,13 @@ import java.nio.charset.Charset;  import java.util.Arrays;  import java.util.Collections; -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isNull; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -  /**   * <p>Run with:<pre>   * m FrameworksServicesTests &&   * adb install \   * -r out/target/product/hammerhead/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   * adb shell am instrument -e class com.android.server.pm.UserDataPreparerTest \ - * -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + * -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   * </pre>   */  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java b/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java index 304e0e98790e..d6f7e37fcb39 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java @@ -24,11 +24,12 @@ import android.content.Context;  import android.content.pm.UserInfo;  import android.os.RemoteException;  import android.os.UserManager; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.LargeTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.Log; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.LargeTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceCreateProfileTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceCreateProfileTest.java index c314de4f13eb..8dd896713834 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceCreateProfileTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceCreateProfileTest.java @@ -24,20 +24,21 @@ import android.content.pm.UserInfo;  import android.os.Looper;  import android.os.UserHandle;  import android.os.UserManagerInternal; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.IconDrawableFactory; -import com.android.server.LocalServices; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; -import java.util.List; +import com.android.server.LocalServices;  import org.junit.After;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; +import java.util.List; +  /**   * <p>Run with:<pre>   * runtest -c com.android.server.pm.UserManagerServiceCreateProfileTest frameworks-services diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceIdRecyclingTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceIdRecyclingTest.java index 35967fbaca3a..a9ce6187b9ac 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceIdRecyclingTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceIdRecyclingTest.java @@ -16,12 +16,17 @@  package com.android.server.pm; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +  import android.content.pm.UserInfo;  import android.os.Looper;  import android.os.UserManagerInternal; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.filters.MediumTest; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.LocalServices; @@ -31,17 +36,13 @@ import org.junit.runner.RunWith;  import java.util.LinkedHashSet; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -  /**   * <p>Run with:<pre>   * m FrameworksServicesTests &&   * adb install \   * -r out/target/product/hammerhead/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&   * adb shell am instrument -e class com.android.server.pm.UserManagerServiceIdRecyclingTest \ - * -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner + * -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   * </pre>   */  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java index 092119e7ad71..806c71a7a9b8 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserInfoTest.java @@ -16,16 +16,21 @@  package com.android.server.pm; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +  import android.content.pm.UserInfo;  import android.os.Looper;  import android.os.Parcel; -import android.os.UserManagerInternal;  import android.os.UserHandle; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.filters.MediumTest; +import android.os.UserManagerInternal;  import android.text.TextUtils; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.LocalServices;  import com.android.server.pm.UserManagerService.UserData; @@ -38,10 +43,6 @@ import java.io.ByteArrayOutputStream;  import java.io.DataOutputStream;  import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -  /**   * <p>Run with:<pre>   * runtest -c com.android.server.pm.UserManagerServiceUserInfoTest frameworks-services diff --git a/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java index 882bf32fcb68..2cc5323e56a2 100644 --- a/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java @@ -35,7 +35,7 @@ import android.util.SparseArray;     adb install \       -r out/target/product/hammerhead/data/app/FrameworksServicesTests/FrameworksServicesTests.apk &&     adb shell am instrument -e class com.android.server.pm.UserRestrictionsUtilsTest \ -     -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner +     -w com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner   * </pre>   */  @SmallTest diff --git a/services/tests/servicestests/src/com/android/server/pm/backup/BackupUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/backup/BackupUtilsTest.java index caa1d02b47f0..13612a1f93f7 100644 --- a/services/tests/servicestests/src/com/android/server/pm/backup/BackupUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/backup/BackupUtilsTest.java @@ -17,24 +17,22 @@ package com.android.server.pm.backup;  import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue;  import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse;  import static org.mockito.Mockito.doReturn;  import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when;  import android.content.pm.ApplicationInfo;  import android.content.pm.PackageInfo;  import android.content.pm.PackageManagerInternal;  import android.content.pm.PackageParser; -import android.content.pm.PackageParser.Package;  import android.content.pm.Signature;  import android.content.pm.SigningInfo; -import android.test.MoreAsserts;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import android.test.MoreAsserts; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.backup.BackupUtils; diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexLoggerTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexLoggerTests.java index bf8d4056ee55..792b25aea205 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/DexLoggerTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexLoggerTests.java @@ -16,13 +16,20 @@  package com.android.server.pm.dex; +import static com.android.server.pm.dex.PackageDexUsage.DexUseInfo; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +  import android.content.pm.ApplicationInfo;  import android.content.pm.IPackageManager; -import android.content.pm.PackageInfo; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.os.storage.StorageManager; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.pm.Installer;  import com.android.server.pm.Installer.InstallerException; @@ -40,14 +47,6 @@ import org.mockito.quality.Strictness;  import java.util.Arrays; -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.doThrow; - -import static com.android.server.pm.dex.PackageDexUsage.PackageUseInfo; -import static com.android.server.pm.dex.PackageDexUsage.DexUseInfo; -  @RunWith(AndroidJUnit4.class)  @SmallTest  public class DexLoggerTests { diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java index b30c04309955..2a3ccbd965bc 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexManagerTests.java @@ -16,13 +16,28 @@  package com.android.server.pm.dex; +import static com.android.server.pm.dex.PackageDexUsage.DexUseInfo; +import static com.android.server.pm.dex.PackageDexUsage.PackageUseInfo; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +  import android.content.pm.ApplicationInfo;  import android.content.pm.IPackageManager;  import android.content.pm.PackageInfo;  import android.os.Build;  import android.os.UserHandle; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.pm.Installer; @@ -30,14 +45,6 @@ import dalvik.system.DelegateLastClassLoader;  import dalvik.system.PathClassLoader;  import dalvik.system.VMRuntime; -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -  import org.junit.Before;  import org.junit.Rule;  import org.junit.Test; @@ -47,21 +54,13 @@ import org.mockito.junit.MockitoJUnit;  import org.mockito.junit.MockitoRule;  import org.mockito.quality.Strictness; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import static com.android.server.pm.dex.PackageDexUsage.PackageUseInfo; -import static com.android.server.pm.dex.PackageDexUsage.DexUseInfo; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map;  @RunWith(AndroidJUnit4.class)  @SmallTest diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptOptionsTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptOptionsTests.java index 93064bc4ab92..62589ebb92fe 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptOptionsTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptOptionsTests.java @@ -19,19 +19,19 @@ package com.android.server.pm.dex;  import static com.android.server.pm.PackageManagerServiceCompilerMapping.getCompilerFilterForReason; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; -  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.pm.PackageManagerService;  import com.android.server.pm.PackageManagerServiceCompilerMapping; +import org.junit.Test; +import org.junit.runner.RunWith; +  @RunWith(AndroidJUnit4.class)  @SmallTest  public class DexoptOptionsTests { diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java index aa51ecdca40b..3a55c2290157 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexoptUtilsTest.java @@ -23,11 +23,12 @@ import static org.junit.Assert.assertTrue;  import static org.junit.Assert.fail;  import android.content.pm.ApplicationInfo; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.content.pm.SharedLibraryInfo;  import android.util.SparseArray; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import dalvik.system.DelegateLastClassLoader;  import dalvik.system.DexClassLoader;  import dalvik.system.PathClassLoader; @@ -36,8 +37,8 @@ import org.junit.Test;  import org.junit.runner.RunWith;  import java.io.File; -import java.util.Arrays;  import java.util.ArrayList; +import java.util.Arrays;  import java.util.Collections;  import java.util.List; @@ -332,6 +333,20 @@ public class DexoptUtilsTest {      }      @Test +    public void testSharedLibraryContext() { +        SharedLibraryInfo sharedLibrary = +                createMockSharedLibrary(new String[] {"a.dex", "b.dex"}).get(0); +        String context = DexoptUtils.getClassLoaderContext(sharedLibrary); +        assertEquals("PCL[]", context); + +        SharedLibraryInfo otherSharedLibrary = +                createMockSharedLibrary(new String[] {"c.dex"}).get(0); +        otherSharedLibrary.addDependency(sharedLibrary); +        context = DexoptUtils.getClassLoaderContext(otherSharedLibrary); +        assertEquals("PCL[]{PCL[a.dex:b.dex]}", context); +    } + +    @Test      public void testProcessContextForDexLoad() {          List<String> classLoaders = Arrays.asList(                  DELEGATE_LAST_CLASS_LOADER_NAME, diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java b/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java index 0de0503aa85f..3107813dd9d5 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/PackageDexUsageTests.java @@ -16,12 +16,23 @@  package com.android.server.pm.dex; +import static com.android.server.pm.dex.PackageDexUsage.DexUseInfo; +import static com.android.server.pm.dex.PackageDexUsage.PackageUseInfo; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +  import android.os.Build; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import dalvik.system.VMRuntime; -import java.util.Collections;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; @@ -35,16 +46,6 @@ import java.util.HashSet;  import java.util.Map;  import java.util.Set; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import static com.android.server.pm.dex.PackageDexUsage.PackageUseInfo; -import static com.android.server.pm.dex.PackageDexUsage.DexUseInfo; -  @RunWith(AndroidJUnit4.class)  @SmallTest  public class PackageDexUsageTests { diff --git a/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerInsetsTest.java b/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerInsetsTest.java index 7e18ce78c9d1..cce6ba718400 100644 --- a/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerInsetsTest.java +++ b/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerInsetsTest.java @@ -22,16 +22,15 @@ import static android.view.Surface.ROTATION_270;  import static android.view.Surface.ROTATION_90;  import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.Display;  import android.view.DisplayInfo; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Rule;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerLayoutTest.java b/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerLayoutTest.java index 97a716f6bd99..64ec9addde97 100644 --- a/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerLayoutTest.java +++ b/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerLayoutTest.java @@ -22,7 +22,6 @@ import static android.view.View.SYSTEM_UI_FLAG_FULLSCREEN;  import static android.view.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;  import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;  import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; -import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN;  import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;  import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;  import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; @@ -40,11 +39,12 @@ import static org.junit.Assert.assertThat;  import android.graphics.PixelFormat;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.DisplayCutout;  import android.view.WindowManager; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerTest.java b/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerTest.java index 30665b56c8dc..d92d7e03ef3b 100644 --- a/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerTest.java @@ -19,6 +19,10 @@ package com.android.server.policy;  import static android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;  import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;  import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; +import static android.view.WindowManager.DOCKED_BOTTOM; +import static android.view.WindowManager.DOCKED_LEFT; +import static android.view.WindowManager.DOCKED_RIGHT; +import static android.view.WindowManager.DOCKED_TOP;  import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;  import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;  import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; @@ -28,13 +32,9 @@ import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;  import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;  import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;  import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; -import static android.view.WindowManager.DOCKED_BOTTOM; -import static android.view.WindowManager.DOCKED_LEFT; -import static android.view.WindowManager.DOCKED_RIGHT; -import static android.view.WindowManager.DOCKED_TOP; -import static com.android.server.policy.WindowManagerPolicy.NAV_BAR_LEFT;  import static com.android.server.policy.WindowManagerPolicy.NAV_BAR_BOTTOM; +import static com.android.server.policy.WindowManagerPolicy.NAV_BAR_LEFT;  import static com.android.server.policy.WindowManagerPolicy.NAV_BAR_RIGHT;  import static org.junit.Assert.assertEquals; @@ -44,10 +44,11 @@ import static org.junit.Assert.assertTrue;  import android.graphics.PixelFormat;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.WindowManager; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerTestBase.java b/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerTestBase.java index 1d378020fa4f..140e4ba1c94f 100644 --- a/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerTestBase.java +++ b/services/tests/servicestests/src/com/android/server/policy/PhoneWindowManagerTestBase.java @@ -34,13 +34,11 @@ import android.content.ContextWrapper;  import android.content.pm.PackageManager;  import android.content.res.Resources;  import android.graphics.Matrix; -import android.graphics.Path;  import android.graphics.PixelFormat;  import android.graphics.Rect;  import android.graphics.RectF;  import android.os.IBinder;  import android.os.UserHandle; -import android.support.test.InstrumentationRegistry;  import android.testing.TestableResources;  import android.util.Pair;  import android.view.Display; @@ -53,6 +51,8 @@ import android.view.WindowManagerGlobal;  import android.view.accessibility.AccessibilityManager;  import android.view.accessibility.IAccessibilityManager; +import androidx.test.InstrumentationRegistry; +  import com.android.server.policy.keyguard.KeyguardServiceDelegate;  import com.android.server.wm.DisplayFrames;  import com.android.server.wm.utils.WmDisplayCutout; diff --git a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverStateMachineTest.java b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverStateMachineTest.java index 5b247253fd9c..e8394fe11d2e 100644 --- a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverStateMachineTest.java +++ b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverStateMachineTest.java @@ -24,10 +24,11 @@ import static org.mockito.Mockito.when;  import android.content.ContentResolver;  import android.provider.Settings.Global; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.test.mock.MockContext; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.google.common.base.Objects;  import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySavingStatsTest.java b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySavingStatsTest.java index 9bd4cc34662a..ba61fd2597a4 100644 --- a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySavingStatsTest.java +++ b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySavingStatsTest.java @@ -25,8 +25,9 @@ import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import android.metrics.LogMaker; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.logging.MetricsLogger;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent; diff --git a/services/tests/servicestests/src/com/android/server/power/batterysaver/CpuFrequenciesTest.java b/services/tests/servicestests/src/com/android/server/power/batterysaver/CpuFrequenciesTest.java index f72ec3411461..8371e9c85244 100644 --- a/services/tests/servicestests/src/com/android/server/power/batterysaver/CpuFrequenciesTest.java +++ b/services/tests/servicestests/src/com/android/server/power/batterysaver/CpuFrequenciesTest.java @@ -17,10 +17,11 @@ package com.android.server.power.batterysaver;  import static org.junit.Assert.assertEquals; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArrayMap; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/power/batterysaver/FileUpdaterTest.java b/services/tests/servicestests/src/com/android/server/power/batterysaver/FileUpdaterTest.java index 7324fe6de9d8..89c7dd45e9d3 100644 --- a/services/tests/servicestests/src/com/android/server/power/batterysaver/FileUpdaterTest.java +++ b/services/tests/servicestests/src/com/android/server/power/batterysaver/FileUpdaterTest.java @@ -27,14 +27,14 @@ import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import android.content.Context; -import android.hardware.camera2.impl.GetCommand;  import android.os.Handler;  import android.os.Looper; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArrayMap; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; @@ -48,7 +48,6 @@ import java.util.concurrent.CountDownLatch;  import java.util.concurrent.TimeUnit;  import java.util.concurrent.atomic.AtomicInteger; -  /**   atest $ANDROID_BUILD_TOP/frameworks/base/services/tests/servicestests/src/com/android/server/power/batterysaver/FileUpdaterTest.java   */ diff --git a/services/tests/servicestests/src/com/android/server/timedetector/SimpleTimeZoneDetectorStrategyTest.java b/services/tests/servicestests/src/com/android/server/timedetector/SimpleTimeZoneDetectorStrategyTest.java index 62f1433f7907..9e000770fe42 100644 --- a/services/tests/servicestests/src/com/android/server/timedetector/SimpleTimeZoneDetectorStrategyTest.java +++ b/services/tests/servicestests/src/com/android/server/timedetector/SimpleTimeZoneDetectorStrategyTest.java @@ -28,9 +28,10 @@ import android.content.Intent;  import android.icu.util.Calendar;  import android.icu.util.GregorianCalendar;  import android.icu.util.TimeZone; -import android.support.test.runner.AndroidJUnit4;  import android.util.TimestampedValue; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java index ed74cd7b3e53..45fef764482f 100644 --- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java @@ -31,15 +31,16 @@ import static org.mockito.Mockito.when;  import android.app.timedetector.TimeSignal;  import android.content.Context;  import android.content.pm.PackageManager; -import android.support.test.runner.AndroidJUnit4;  import android.util.TimestampedValue; +import androidx.test.runner.AndroidJUnit4; + +import com.android.server.timedetector.TimeDetectorStrategy.Callback; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import com.android.server.timedetector.TimeDetectorStrategy.Callback; -  import java.io.PrintWriter;  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyTest.java b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyTest.java index 301ded47ee0b..239d413c12d2 100644 --- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyTest.java +++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyTest.java @@ -18,9 +18,10 @@ package com.android.server.timedetector;  import static org.junit.Assert.assertEquals; -import android.support.test.runner.AndroidJUnit4;  import android.util.TimestampedValue; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/timezone/CheckTokenTest.java b/services/tests/servicestests/src/com/android/server/timezone/CheckTokenTest.java index 9603a06aaa66..f7d282b95dff 100644 --- a/services/tests/servicestests/src/com/android/server/timezone/CheckTokenTest.java +++ b/services/tests/servicestests/src/com/android/server/timezone/CheckTokenTest.java @@ -16,16 +16,16 @@  package com.android.server.timezone; -import org.junit.Test; - -import android.support.test.filters.SmallTest; - -import java.io.IOException; -  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.fail; +import androidx.test.filters.SmallTest; + +import org.junit.Test; + +import java.io.IOException; +  @SmallTest  public class CheckTokenTest { diff --git a/services/tests/servicestests/src/com/android/server/timezone/PackageStatusStorageTest.java b/services/tests/servicestests/src/com/android/server/timezone/PackageStatusStorageTest.java index 74013b792f07..090db111ab31 100644 --- a/services/tests/servicestests/src/com/android/server/timezone/PackageStatusStorageTest.java +++ b/services/tests/servicestests/src/com/android/server/timezone/PackageStatusStorageTest.java @@ -16,26 +16,28 @@  package com.android.server.timezone; +import static junit.framework.Assert.assertTrue; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; + +import android.content.Context; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +  import org.junit.After;  import org.junit.Before;  import org.junit.Test; -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -  import java.io.File;  import java.io.IOException;  import java.io.PrintWriter;  import java.io.StringWriter; -import static junit.framework.Assert.assertTrue; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; -  @SmallTest  public class PackageStatusStorageTest {      private static final PackageVersions VALID_PACKAGE_VERSIONS = new PackageVersions(1, 2); diff --git a/services/tests/servicestests/src/com/android/server/timezone/PackageStatusTest.java b/services/tests/servicestests/src/com/android/server/timezone/PackageStatusTest.java index c0ae81e30049..9b45f0542610 100644 --- a/services/tests/servicestests/src/com/android/server/timezone/PackageStatusTest.java +++ b/services/tests/servicestests/src/com/android/server/timezone/PackageStatusTest.java @@ -16,13 +16,13 @@  package com.android.server.timezone; -import org.junit.Test; - -import android.support.test.filters.SmallTest; -  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse; +import androidx.test.filters.SmallTest; + +import org.junit.Test; +  @SmallTest  public class PackageStatusTest { diff --git a/services/tests/servicestests/src/com/android/server/timezone/PackageTrackerTest.java b/services/tests/servicestests/src/com/android/server/timezone/PackageTrackerTest.java index d9f4adfb5e06..1356ea250526 100644 --- a/services/tests/servicestests/src/com/android/server/timezone/PackageTrackerTest.java +++ b/services/tests/servicestests/src/com/android/server/timezone/PackageTrackerTest.java @@ -16,6 +16,25 @@  package com.android.server.timezone; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.hamcrest.MockitoHamcrest.argThat; + +import android.app.timezone.RulesUpdaterContract; +import android.content.Context; +import android.content.Intent; +import android.provider.TimeZoneRulesDataContract; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +  import org.hamcrest.BaseMatcher;  import org.hamcrest.Description;  import org.hamcrest.Matcher; @@ -23,13 +42,6 @@ import org.junit.After;  import org.junit.Before;  import org.junit.Test; -import android.app.timezone.RulesUpdaterContract; -import android.content.Context; -import android.content.Intent; -import android.provider.TimeZoneRulesDataContract; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -  import java.io.File;  import java.io.PrintWriter;  import java.io.StringWriter; @@ -37,17 +49,6 @@ import java.time.Clock;  import java.time.Instant;  import java.time.ZoneId; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.mockito.hamcrest.MockitoHamcrest.argThat; -  /**   * White box interaction / unit testing of the {@link PackageTracker}.   */ diff --git a/services/tests/servicestests/src/com/android/server/timezone/PackageVersionsTest.java b/services/tests/servicestests/src/com/android/server/timezone/PackageVersionsTest.java index a470f8f6c230..9ffc4e97e019 100644 --- a/services/tests/servicestests/src/com/android/server/timezone/PackageVersionsTest.java +++ b/services/tests/servicestests/src/com/android/server/timezone/PackageVersionsTest.java @@ -16,13 +16,13 @@  package com.android.server.timezone; -import org.junit.Test; - -import android.support.test.filters.SmallTest; -  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse; +import androidx.test.filters.SmallTest; + +import org.junit.Test; +  @SmallTest  public class PackageVersionsTest { diff --git a/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java index 1b106dd37163..5c6fe0fc4cad 100644 --- a/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java @@ -16,34 +16,9 @@  package com.android.server.timezone; -import com.android.timezone.distro.DistroVersion; -import com.android.timezone.distro.StagedDistroOperation; -import com.android.timezone.distro.TimeZoneDistro; -import com.android.timezone.distro.installer.TimeZoneDistroInstaller; - -import org.junit.Before; -import org.junit.Test; - -import android.app.timezone.Callback; -import android.app.timezone.DistroRulesVersion; -import android.app.timezone.ICallback; -import android.app.timezone.RulesManager; -import android.app.timezone.RulesState; -import android.os.ParcelFileDescriptor; - -import java.io.File; -import java.io.FileDescriptor; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.concurrent.Executor; -import javax.annotation.Nullable; - -import libcore.io.IoUtils; -import libcore.timezone.TzDataSetVersion; -  import static com.android.server.timezone.RulesManagerService.REQUIRED_QUERY_PERMISSION;  import static com.android.server.timezone.RulesManagerService.REQUIRED_UPDATER_PERMISSION; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotNull; @@ -61,11 +36,43 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;  import static org.mockito.Mockito.verifyZeroInteractions;  import static org.mockito.Mockito.when; +import android.app.timezone.Callback; +import android.app.timezone.DistroRulesVersion; +import android.app.timezone.ICallback; +import android.app.timezone.RulesManager; +import android.app.timezone.RulesState; +import android.os.ParcelFileDescriptor; + +import com.android.timezone.distro.DistroVersion; +import com.android.timezone.distro.StagedDistroOperation; +import com.android.timezone.distro.TimeZoneDistro; +import com.android.timezone.distro.installer.TimeZoneDistroInstaller; + +import libcore.io.IoUtils; +import libcore.timezone.TzDataSetVersion; + +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.concurrent.Executor; + +import javax.annotation.Nullable; +  /**   * White box interaction / unit testing of the {@link RulesManagerService}.   */  public class RulesManagerServiceTest { +    private static final int CURRENT_FORMAT_MAJOR_VERSION = +            TzDataSetVersion.currentFormatMajorVersion(); +    private static final int CURRENT_FORMAT_MINOR_VERSION = +            TzDataSetVersion.currentFormatMinorVersion(); +      private RulesManagerService mRulesManagerService;      private FakeExecutor mFakeExecutor; @@ -116,8 +123,8 @@ public class RulesManagerServiceTest {      }      @Test -    public void getRulesState_systemRulesError() throws Exception { -        configureDeviceCannotReadSystemRulesVersion(); +    public void getRulesState_baseVersionError() throws Exception { +        configureDeviceCannotReadBaseVersion();          assertNull(mRulesManagerService.getRulesState());      } @@ -126,18 +133,18 @@ public class RulesManagerServiceTest {      public void getRulesState_stagedInstall() throws Exception {          configureCallerHasPermission(); -        configureDeviceSystemRulesVersion("2016a"); +        configureDeviceBaseVersion("2016a");          DistroVersion stagedDistroVersion = new DistroVersion( -                TzDataSetVersion.currentFormatMajorVersion(), -                TzDataSetVersion.currentFormatMinorVersion() - 1, +                CURRENT_FORMAT_MAJOR_VERSION, +                CURRENT_FORMAT_MINOR_VERSION - 1,                  "2016c", -                3); +                3 /* revision */);          configureStagedInstall(stagedDistroVersion);          DistroVersion installedDistroVersion = new DistroVersion( -                TzDataSetVersion.currentFormatMajorVersion(), -                TzDataSetVersion.currentFormatMinorVersion() - 1, +                CURRENT_FORMAT_MAJOR_VERSION, +                CURRENT_FORMAT_MINOR_VERSION - 1,                  "2016b",                  4);          configureInstalledDistroVersion(installedDistroVersion); @@ -158,13 +165,13 @@ public class RulesManagerServiceTest {      public void getRulesState_nothingStaged() throws Exception {          configureCallerHasPermission(); -        configureDeviceSystemRulesVersion("2016a"); +        configureDeviceBaseVersion("2016a");          configureNoStagedOperation();          DistroVersion installedDistroVersion = new DistroVersion( -                TzDataSetVersion.currentFormatMajorVersion(), -                TzDataSetVersion.currentFormatMinorVersion() - 1, +                CURRENT_FORMAT_MAJOR_VERSION, +                CURRENT_FORMAT_MINOR_VERSION - 1,                  "2016b",                  4);          configureInstalledDistroVersion(installedDistroVersion); @@ -183,13 +190,13 @@ public class RulesManagerServiceTest {      public void getRulesState_uninstallStaged() throws Exception {          configureCallerHasPermission(); -        configureDeviceSystemRulesVersion("2016a"); +        configureDeviceBaseVersion("2016a");          configureStagedUninstall();          DistroVersion installedDistroVersion = new DistroVersion( -                TzDataSetVersion.currentFormatMajorVersion(), -                TzDataSetVersion.currentFormatMinorVersion() - 1, +                CURRENT_FORMAT_MAJOR_VERSION, +                CURRENT_FORMAT_MINOR_VERSION - 1,                  "2016b",                  4);          configureInstalledDistroVersion(installedDistroVersion); @@ -208,8 +215,8 @@ public class RulesManagerServiceTest {      public void getRulesState_installedRulesError() throws Exception {          configureCallerHasPermission(); -        String systemRulesVersion = "2016a"; -        configureDeviceSystemRulesVersion(systemRulesVersion); +        String baseRulesVersion = "2016a"; +        configureDeviceBaseVersion(baseRulesVersion);          configureStagedUninstall();          configureDeviceCannotReadInstalledDistroVersion(); @@ -226,14 +233,14 @@ public class RulesManagerServiceTest {      public void getRulesState_stagedRulesError() throws Exception {          configureCallerHasPermission(); -        String systemRulesVersion = "2016a"; -        configureDeviceSystemRulesVersion(systemRulesVersion); +        String baseRulesVersion = "2016a"; +        configureDeviceBaseVersion(baseRulesVersion);          configureDeviceCannotReadStagedDistroOperation();          DistroVersion installedDistroVersion = new DistroVersion( -                TzDataSetVersion.currentFormatMajorVersion(), -                TzDataSetVersion.currentFormatMinorVersion() - 1, +                CURRENT_FORMAT_MAJOR_VERSION, +                CURRENT_FORMAT_MINOR_VERSION - 1,                  "2016b",                  4);          configureInstalledDistroVersion(installedDistroVersion); @@ -252,13 +259,13 @@ public class RulesManagerServiceTest {      public void getRulesState_noInstalledRules() throws Exception {          configureCallerHasPermission(); -        String systemRulesVersion = "2016a"; -        configureDeviceSystemRulesVersion(systemRulesVersion); +        String baseRulesVersion = "2016a"; +        configureDeviceBaseVersion(baseRulesVersion);          configureNoStagedOperation();          configureInstalledDistroVersion(null);          RulesState expectedRuleState = new RulesState( -                systemRulesVersion, RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED, +                baseRulesVersion, RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,                  false /* operationInProgress */,                  RulesState.STAGED_OPERATION_NONE, null /* stagedDistroRulesVersion */,                  RulesState.DISTRO_STATUS_NONE, null /* installedDistroRulesVersion */); @@ -269,15 +276,15 @@ public class RulesManagerServiceTest {      public void getRulesState_operationInProgress() throws Exception {          configureCallerHasPermission(); -        String systemRulesVersion = "2016a"; +        String baseRulesVersion = "2016a";          String installedRulesVersion = "2016b";          int revision = 3; -        configureDeviceSystemRulesVersion(systemRulesVersion); +        configureDeviceBaseVersion(baseRulesVersion);          DistroVersion installedDistroVersion = new DistroVersion( -                TzDataSetVersion.currentFormatMajorVersion(), -                TzDataSetVersion.currentFormatMinorVersion() - 1, +                CURRENT_FORMAT_MAJOR_VERSION, +                CURRENT_FORMAT_MINOR_VERSION - 1,                  installedRulesVersion,                  revision);          configureInstalledDistroVersion(installedDistroVersion); @@ -297,7 +304,7 @@ public class RulesManagerServiceTest {          DistroRulesVersion expectedInstalledDistroRulesVersion =                  new DistroRulesVersion(installedRulesVersion, revision);          RulesState expectedRuleState = new RulesState( -                systemRulesVersion, RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED, +                baseRulesVersion, RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,                  true /* operationInProgress */,                  RulesState.STAGED_OPERATION_UNKNOWN, null /* stagedDistroRulesVersion */,                  RulesState.DISTRO_STATUS_INSTALLED, expectedInstalledDistroRulesVersion); @@ -858,11 +865,20 @@ public class RulesManagerServiceTest {                  .thenReturn(true);          // Set up the mocks to return (arbitrary) information about the current device state. -        when(mMockTimeZoneDistroInstaller.getSystemRulesVersion()).thenReturn("2017a"); -        when(mMockTimeZoneDistroInstaller.getInstalledDistroVersion()).thenReturn( -                new DistroVersion(2, 3, "2017b", 4)); +        TzDataSetVersion baseVersion = new TzDataSetVersion( +                CURRENT_FORMAT_MAJOR_VERSION, CURRENT_FORMAT_MINOR_VERSION, "2017a", +                1 /* revision */); +        when(mMockTimeZoneDistroInstaller.readBaseVersion()).thenReturn(baseVersion); +        DistroVersion installedDistroVersion = new DistroVersion( +                CURRENT_FORMAT_MAJOR_VERSION, CURRENT_FORMAT_MINOR_VERSION, "2017b", +                4 /* revision */); +        when(mMockTimeZoneDistroInstaller.getInstalledDistroVersion()) +                .thenReturn(installedDistroVersion); +        DistroVersion stagedDistroVersion = new DistroVersion( +                CURRENT_FORMAT_MAJOR_VERSION, CURRENT_FORMAT_MINOR_VERSION, "2017c", +                7 /* revision */);          when(mMockTimeZoneDistroInstaller.getStagedDistroOperation()).thenReturn( -                StagedDistroOperation.install(new DistroVersion(5, 6, "2017c", 7))); +                StagedDistroOperation.install(stagedDistroVersion));          // Do the dump call.          String dumpedOutput = doDumpCallAndCapture(rulesManagerService, args); @@ -973,8 +989,11 @@ public class RulesManagerServiceTest {          return new CheckToken(1, new PackageVersions(1, 1));      } -    private void configureDeviceSystemRulesVersion(String systemRulesVersion) throws Exception { -        when(mMockTimeZoneDistroInstaller.getSystemRulesVersion()).thenReturn(systemRulesVersion); +    private void configureDeviceBaseVersion(String baseRulesVersion) throws Exception { +        TzDataSetVersion tzDataSetVersion = new TzDataSetVersion( +                CURRENT_FORMAT_MAJOR_VERSION, CURRENT_FORMAT_MINOR_VERSION, baseRulesVersion, +                1 /* revision */); +        when(mMockTimeZoneDistroInstaller.readBaseVersion()).thenReturn(tzDataSetVersion);      }      private void configureInstalledDistroVersion(@Nullable DistroVersion installedDistroVersion) @@ -1002,8 +1021,8 @@ public class RulesManagerServiceTest {                  .thenThrow(new IOException("Simulated failure"));      } -    private void configureDeviceCannotReadSystemRulesVersion() throws Exception { -        when(mMockTimeZoneDistroInstaller.getSystemRulesVersion()) +    private void configureDeviceCannotReadBaseVersion() throws Exception { +        when(mMockTimeZoneDistroInstaller.readBaseVersion())                  .thenThrow(new IOException("Simulated failure"));      } diff --git a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java index 39fc715c7770..b3683def7d42 100644 --- a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java @@ -37,11 +37,9 @@ import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotEquals;  import static org.junit.Assert.assertTrue; -  import static org.junit.Assert.fail;  import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString;  import static org.mockito.Mockito.doReturn;  import static org.mockito.Mockito.mock; @@ -58,12 +56,13 @@ import android.os.Handler;  import android.os.Looper;  import android.os.RemoteException;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArraySet;  import android.view.Display; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.SystemService;  import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java b/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java index 84475bb365b7..047adddd794d 100644 --- a/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/usage/AppTimeLimitControllerTests.java @@ -19,13 +19,13 @@ package com.android.server.usage;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail;  import android.app.PendingIntent;  import android.os.HandlerThread;  import android.os.Looper; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.After;  import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/utils/PriorityDumpTest.java b/services/tests/servicestests/src/com/android/server/utils/PriorityDumpTest.java index da45d81c6a08..4eb2474da740 100644 --- a/services/tests/servicestests/src/com/android/server/utils/PriorityDumpTest.java +++ b/services/tests/servicestests/src/com/android/server/utils/PriorityDumpTest.java @@ -18,14 +18,16 @@ package com.android.server.utils;  import static com.android.server.utils.PriorityDump.dump; -import static org.junit.Assert.assertSame;  import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertSame;  import static org.mockito.Matchers.eq;  import static org.mockito.Matchers.same;  import static org.mockito.Mockito.verify;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; + +import androidx.test.filters.SmallTest; +  import com.android.server.utils.PriorityDump.PriorityDumper;  import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/wallpaper/WallpaperServiceTests.java b/services/tests/servicestests/src/com/android/server/wallpaper/WallpaperServiceTests.java index 9c010a07135d..2dd881712e67 100644 --- a/services/tests/servicestests/src/com/android/server/wallpaper/WallpaperServiceTests.java +++ b/services/tests/servicestests/src/com/android/server/wallpaper/WallpaperServiceTests.java @@ -24,9 +24,10 @@ import android.os.Handler;  import android.os.Message;  import android.os.SystemClock;  import android.service.wallpaper.WallpaperService; -import android.support.test.annotation.UiThreadTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.annotation.UiThreadTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java b/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java index dca09af7b3b7..02c6ae0a0ad9 100644 --- a/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java @@ -19,15 +19,12 @@ package com.android.server.webkit;  import static org.junit.Assert.assertArrayEquals;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue;  import android.content.pm.ApplicationInfo;  import android.content.pm.PackageInfo;  import android.content.pm.Signature;  import android.os.Build;  import android.os.Bundle; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.MediumTest;  import android.util.Base64;  import android.webkit.UserPackage; @@ -35,17 +32,17 @@ import android.webkit.WebViewFactory;  import android.webkit.WebViewProviderInfo;  import android.webkit.WebViewProviderResponse; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Test;  import org.junit.runner.RunWith; -  import org.mockito.ArgumentMatcher; -import org.mockito.Mockito;  import org.mockito.Matchers; +import org.mockito.Mockito; -import java.lang.Integer;  import java.util.concurrent.CountDownLatch; -  /**   * Tests for WebViewUpdateService   runtest --path frameworks/base/services/tests/servicestests/ \ diff --git a/services/tests/servicestests/src/com/android/server/wm/AnimatingAppWindowTokenRegistryTest.java b/services/tests/servicestests/src/com/android/server/wm/AnimatingAppWindowTokenRegistryTest.java index 164c80b2427a..b5fe8b159c47 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AnimatingAppWindowTokenRegistryTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/AnimatingAppWindowTokenRegistryTest.java @@ -18,27 +18,22 @@ package com.android.server.wm;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; -import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; -import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; +  import static junit.framework.Assert.assertFalse;  import static junit.framework.Assert.assertTrue; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.mockito.ArgumentMatchers.any; +  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.verifyZeroInteractions;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; diff --git a/services/tests/servicestests/src/com/android/server/wm/AppTransitionTests.java b/services/tests/servicestests/src/com/android/server/wm/AppTransitionTests.java index be7d781799fa..3053c4197f82 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppTransitionTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppTransitionTests.java @@ -20,13 +20,15 @@ import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;  import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE;  import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY;  import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE; +  import static org.junit.Assert.assertEquals;  import android.content.Context;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Rule; diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java index e0645b1f4bfb..fcd8a39e4d07 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowContainerControllerTests.java @@ -16,26 +16,28 @@  package com.android.server.wm; -import android.support.test.filters.FlakyTest; -import org.junit.Test; - -import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;  import static android.content.res.Configuration.EMPTY;  import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.fail; +import android.platform.test.annotations.Presubmit; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.wm.WindowTestUtils.TestTaskWindowContainerController; +import org.junit.Test; +  /**   * Test class for {@link AppWindowContainerController}.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java index f6599dcaf87e..9dd1006ac1fb 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppWindowTokenTests.java @@ -16,16 +16,6 @@  package com.android.server.wm; -import org.junit.Test; -import org.junit.runner.RunWith; - -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import android.view.Surface; -import android.view.WindowManager; -  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND;  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; @@ -38,10 +28,23 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;  import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;  import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;  import static android.view.WindowManager.TRANSIT_UNSET; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; + +import android.platform.test.annotations.Presubmit; +import android.view.Surface; +import android.view.WindowManager; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; +  /**   * Tests for the {@link AppWindowToken} class.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java index ff631e74e004..e6d81a7a7702 100644 --- a/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java @@ -21,34 +21,30 @@ import static com.android.server.wm.BoundsAnimationController.SCHEDULE_PIP_MODE_  import static com.android.server.wm.BoundsAnimationController.SCHEDULE_PIP_MODE_CHANGED_ON_START;  import static com.android.server.wm.BoundsAnimationController.SchedulePipModeChangedState; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +  import android.animation.ValueAnimator;  import android.content.Context;  import android.graphics.Rect;  import android.os.Handler;  import android.os.Looper;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.annotation.UiThreadTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.InstrumentationRegistry; +import androidx.test.annotation.UiThreadTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.server.wm.BoundsAnimationController.BoundsAnimator;  import com.android.server.wm.WindowManagerInternal.AppTransitionListener;  import org.junit.Test;  import org.junit.runner.RunWith; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import com.android.server.wm.BoundsAnimationController.BoundsAnimator; -  /**   * Test class for {@link BoundsAnimationController} to ensure that it sends the right callbacks   * depending on the various interactions. diff --git a/services/tests/servicestests/src/com/android/server/wm/ConfigurationContainerTests.java b/services/tests/servicestests/src/com/android/server/wm/ConfigurationContainerTests.java index 192e1564ae8d..74370bbe454a 100644 --- a/services/tests/servicestests/src/com/android/server/wm/ConfigurationContainerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/ConfigurationContainerTests.java @@ -17,7 +17,6 @@  package com.android.server.wm;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;  import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; @@ -28,13 +27,16 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;  import static android.content.res.Configuration.EMPTY; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertTrue;  import android.content.res.Configuration;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/DimmerTests.java b/services/tests/servicestests/src/com/android/server/wm/DimmerTests.java index 6769e40dca78..21555e38a7e8 100644 --- a/services/tests/servicestests/src/com/android/server/wm/DimmerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/DimmerTests.java @@ -29,10 +29,11 @@ import static org.mockito.Mockito.verify;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.runner.AndroidJUnit4;  import android.view.SurfaceControl;  import android.view.SurfaceSession; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java index ac196f9c80dc..bfac2306a666 100644 --- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java @@ -28,6 +28,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_  import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;  import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;  import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION; +  import static com.android.server.wm.WindowContainer.POSITION_TOP;  import static org.hamcrest.Matchers.is; @@ -38,25 +39,26 @@ import static org.junit.Assert.assertTrue;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify; -import org.junit.Test; -import org.junit.runner.RunWith; -  import android.annotation.SuppressLint;  import android.content.res.Configuration;  import android.graphics.Rect;  import android.os.SystemClock;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.DisplayMetrics;  import android.util.SparseIntArray;  import android.view.DisplayCutout;  import android.view.MotionEvent;  import android.view.Surface; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.wm.utils.WmDisplayCutout; +import org.junit.Test; +import org.junit.runner.RunWith; +  import java.util.ArrayList;  import java.util.Arrays;  import java.util.Collections; diff --git a/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java index a09656c7dc92..f383fda0970f 100644 --- a/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/DragDropControllerTests.java @@ -19,6 +19,7 @@ package com.android.server.wm;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; +  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertTrue;  import static org.mockito.Mockito.any; @@ -33,21 +34,25 @@ import android.os.Looper;  import android.os.UserHandle;  import android.os.UserManagerInternal;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.InputChannel;  import android.view.SurfaceControl;  import android.view.SurfaceSession;  import android.view.View; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.annotations.GuardedBy;  import com.android.server.LocalServices; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; +  import org.junit.After;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +  /**   * Tests for the {@link DragDropController} class.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/PinnedStackControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/PinnedStackControllerTest.java index 96745fa5956e..7222a999e23c 100644 --- a/services/tests/servicestests/src/com/android/server/wm/PinnedStackControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/PinnedStackControllerTest.java @@ -2,27 +2,28 @@ package com.android.server.wm;  import static android.view.Display.DEFAULT_DISPLAY; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +  import android.os.RemoteException;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.IPinnedStackListener; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -  @SmallTest  @Presubmit  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/servicestests/src/com/android/server/wm/RecentsAnimationControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/RecentsAnimationControllerTest.java index a2af9b80fe36..e7c45d59078c 100644 --- a/services/tests/servicestests/src/com/android/server/wm/RecentsAnimationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/RecentsAnimationControllerTest.java @@ -19,8 +19,10 @@ package com.android.server.wm;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.view.Display.DEFAULT_DISPLAY; +  import static com.android.server.wm.RecentsAnimationController.REORDER_KEEP_IN_PLACE;  import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_ORIGINAL_POSITION; +  import static org.junit.Assert.fail;  import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.Mockito.atLeast; @@ -31,11 +33,14 @@ import static org.mockito.Mockito.when;  import android.os.Binder;  import android.os.IInterface;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.IRecentsAnimationRunner;  import android.view.SurfaceControl; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/RemoteAnimationControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/RemoteAnimationControllerTest.java index 95361f03fe4b..7d19baa9f871 100644 --- a/services/tests/servicestests/src/com/android/server/wm/RemoteAnimationControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/RemoteAnimationControllerTest.java @@ -31,9 +31,6 @@ import android.graphics.Rect;  import android.os.Binder;  import android.os.IInterface;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.IRemoteAnimationFinishedCallback;  import android.view.IRemoteAnimationRunner;  import android.view.RemoteAnimationAdapter; @@ -41,6 +38,9 @@ import android.view.RemoteAnimationTarget;  import android.view.SurfaceControl;  import android.view.SurfaceControl.Transaction; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.testutils.OffsettableClock;  import com.android.server.testutils.TestHandler;  import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback; diff --git a/services/tests/servicestests/src/com/android/server/wm/RootWindowContainerTests.java b/services/tests/servicestests/src/com/android/server/wm/RootWindowContainerTests.java index 204e26cee532..c1db6a6a4def 100644 --- a/services/tests/servicestests/src/com/android/server/wm/RootWindowContainerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/RootWindowContainerTests.java @@ -1,16 +1,16 @@  package com.android.server.wm; -import org.junit.Test; -import org.junit.runner.RunWith; +import static org.junit.Assert.assertTrue;  import android.content.res.Configuration;  import android.graphics.Rect; -  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import static org.junit.Assert.assertTrue; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith;  /**   * Tests for the {@link RootWindowContainer} class. diff --git a/services/tests/servicestests/src/com/android/server/wm/ScreenDecorWindowTests.java b/services/tests/servicestests/src/com/android/server/wm/ScreenDecorWindowTests.java index a2ccee46e0c9..897a48d282df 100644 --- a/services/tests/servicestests/src/com/android/server/wm/ScreenDecorWindowTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/ScreenDecorWindowTests.java @@ -32,6 +32,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;  import static android.view.WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;  import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR;  import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; +  import static org.junit.Assert.assertEquals;  import android.app.Activity; @@ -46,9 +47,6 @@ import android.hardware.display.VirtualDisplay;  import android.media.ImageReader;  import android.os.Handler;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.Pair;  import android.view.Display;  import android.view.DisplayInfo; @@ -57,6 +55,10 @@ import android.view.WindowInsets;  import android.view.WindowManager;  import android.widget.TextView; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.After;  import org.junit.Assert;  import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/wm/StackWindowControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/StackWindowControllerTests.java index ab0a2bd86dd8..9f2645cc98ae 100644 --- a/services/tests/servicestests/src/com/android/server/wm/StackWindowControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/StackWindowControllerTests.java @@ -16,20 +16,20 @@  package com.android.server.wm; -import android.graphics.Rect; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; - -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; +import android.graphics.Rect; +import android.platform.test.annotations.Presubmit; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; +  /**   * Test class for {@link StackWindowController}.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java b/services/tests/servicestests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java index 79e9bb4c769d..4551c3611102 100644 --- a/services/tests/servicestests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/SurfaceAnimationRunnerTest.java @@ -16,7 +16,6 @@  package com.android.server.wm; -import static java.util.concurrent.TimeUnit.SECONDS;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; @@ -34,9 +33,6 @@ import android.graphics.Matrix;  import android.graphics.Point;  import android.os.PowerManagerInternal;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.Choreographer;  import android.view.Choreographer.FrameCallback;  import android.view.SurfaceControl; @@ -44,6 +40,10 @@ import android.view.SurfaceControl.Transaction;  import android.view.animation.Animation;  import android.view.animation.TranslateAnimation; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.wm.LocalAnimationAdapter.AnimationSpec;  import org.junit.Before; @@ -54,6 +54,8 @@ import org.mockito.Mock;  import org.mockito.junit.MockitoJUnit;  import org.mockito.junit.MockitoRule; +import static java.util.concurrent.TimeUnit.SECONDS; +  import java.util.concurrent.CountDownLatch;  /** diff --git a/services/tests/servicestests/src/com/android/server/wm/SurfaceAnimatorTest.java b/services/tests/servicestests/src/com/android/server/wm/SurfaceAnimatorTest.java index 16b84581de39..7b5e8deeeb65 100644 --- a/services/tests/servicestests/src/com/android/server/wm/SurfaceAnimatorTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/SurfaceAnimatorTest.java @@ -28,14 +28,15 @@ import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.verifyZeroInteractions;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.SurfaceControl;  import android.view.SurfaceControl.Builder;  import android.view.SurfaceControl.Transaction;  import android.view.SurfaceSession; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.wm.SurfaceAnimator.Animatable;  import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback; @@ -46,8 +47,6 @@ import org.mockito.ArgumentCaptor;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; -import java.util.ArrayList; -  /**   * Test class for {@link SurfaceAnimatorTest}.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskPositionerTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskPositionerTests.java index 7bf7dd78711c..39bcdaf7b4ed 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskPositionerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskPositionerTests.java @@ -16,26 +16,28 @@  package com.android.server.wm; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; - -import android.graphics.Rect; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import android.util.DisplayMetrics; -import android.util.Log; -import android.view.Display; -  import static com.android.server.wm.TaskPositioner.MIN_ASPECT;  import static com.android.server.wm.WindowManagerService.dipToPixel;  import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP;  import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_WIDTH_IN_DP; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; +import android.graphics.Rect; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Display; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +  /**   * Tests for the {@link TaskPositioner} class.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java index f3ed8b0a5ebb..9af124af10b3 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskPositioningControllerTests.java @@ -17,6 +17,7 @@  package com.android.server.wm;  import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; +  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull; @@ -27,10 +28,12 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.when;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.InputChannel; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotCacheTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotCacheTest.java index 649de4a783fa..c9d800449ff9 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotCacheTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotCacheTest.java @@ -17,12 +17,14 @@  package com.android.server.wm;  import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; +  import static junit.framework.Assert.assertNotNull;  import static junit.framework.Assert.assertNull;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java index 5650050f0420..efce063c8fca 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotControllerTest.java @@ -19,17 +19,19 @@ package com.android.server.wm;  import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;  import static android.view.WindowManager.LayoutParams.FLAG_SECURE;  import static android.view.WindowManager.TRANSIT_UNSET; +  import static com.android.server.wm.TaskSnapshotController.*; +  import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArraySet; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.google.android.collect.Sets; +  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java index 325d42aa6293..600b2e52b083 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java @@ -18,23 +18,24 @@ package com.android.server.wm;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail;  import android.app.ActivityManager.TaskSnapshot;  import android.content.res.Configuration;  import android.graphics.Rect;  import android.os.SystemClock;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.ArraySet; -  import android.view.View; + +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.wm.TaskSnapshotPersister.RemoveObsoleteFilesQueueItem;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java index 8b8604365fa1..6f4f17380e3f 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotPersisterTestBase.java @@ -28,7 +28,8 @@ import android.graphics.GraphicBuffer;  import android.graphics.PixelFormat;  import android.graphics.Rect;  import android.os.UserManager; -import android.support.test.InstrumentationRegistry; + +import androidx.test.InstrumentationRegistry;  import org.junit.After;  import org.junit.Before; diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotSurfaceTest.java b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotSurfaceTest.java index b19373efd1b0..6c08f42835bf 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotSurfaceTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskSnapshotSurfaceTest.java @@ -19,6 +19,7 @@ package com.android.server.wm;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.content.res.Configuration.ORIENTATION_PORTRAIT;  import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; +  import static org.junit.Assert.assertEquals;  import static org.mockito.Matchers.any;  import static org.mockito.Matchers.anyInt; @@ -35,10 +36,11 @@ import android.graphics.GraphicBuffer;  import android.graphics.PixelFormat;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.Surface; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.wm.TaskSnapshotSurface.Window;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java index ca1994f85ccf..9fa5ba42204f 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java @@ -18,20 +18,20 @@ package com.android.server.wm;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; +import android.platform.test.annotations.Presubmit; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.After; +import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.junit.Before; -import org.junit.After; - -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  /**   * Tests for the {@link DisplayContent.TaskStackContainers} container in {@link DisplayContent}. diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java index eaf71f0dc5b3..53a1185b4655 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackTests.java @@ -16,21 +16,19 @@  package com.android.server.wm; -import org.junit.Test; -import org.junit.runner.RunWith; - -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;  import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; + +import android.platform.test.annotations.Presubmit; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith;  /**   * Tests for the {@link TaskStack} class. diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java index 1dd9365825cf..edd76647f4a8 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskWindowContainerControllerTests.java @@ -16,17 +16,19 @@  package com.android.server.wm; -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import org.junit.Test; -import org.junit.runner.RunWith; -  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; +import android.platform.test.annotations.Presubmit; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; +  /**   * Test class for {@link TaskWindowContainerController}.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java index a5c47deb2c06..3ac97027a893 100644 --- a/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java @@ -19,8 +19,9 @@ package com.android.server.wm;  import static junit.framework.Assert.assertTrue;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/wm/WallpaperControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/WallpaperControllerTests.java index 71ead204c9df..882e78924629 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WallpaperControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WallpaperControllerTests.java @@ -11,8 +11,9 @@ import static org.mockito.Mockito.when;  import android.graphics.Bitmap;  import android.os.IBinder;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowAnimationSpecTest.java b/services/tests/servicestests/src/com/android/server/wm/WindowAnimationSpecTest.java index ca520ed76be6..d4c68a810a77 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowAnimationSpecTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowAnimationSpecTest.java @@ -28,12 +28,13 @@ import static org.mockito.Mockito.verify;  import android.graphics.Point;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.SurfaceControl;  import android.view.animation.Animation;  import android.view.animation.ClipRectAnimation; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java index 513c1ecda990..ec5424a27afe 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java @@ -16,17 +16,6 @@  package com.android.server.wm; -import org.junit.Test; - -import android.app.WindowConfiguration; -import android.content.res.Configuration; -import android.graphics.Rect; -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import android.view.DisplayInfo; -  import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; @@ -34,9 +23,21 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.app.WindowConfiguration.WINDOW_CONFIG_APP_BOUNDS;  import static android.app.WindowConfiguration.WINDOW_CONFIG_WINDOWING_MODE;  import static android.content.pm.ActivityInfo.CONFIG_WINDOW_CONFIGURATION; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; + +import android.app.WindowConfiguration; +import android.content.res.Configuration; +import android.graphics.Rect; +import android.platform.test.annotations.Presubmit; +import android.view.DisplayInfo; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test;  /**   * Test class to for {@link android.app.WindowConfiguration}. diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java index 502cb6e27c68..6b1feb87aa42 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowContainerControllerTests.java @@ -16,21 +16,22 @@  package com.android.server.wm; -import android.app.WindowConfiguration; -import android.content.res.Configuration; -import android.support.test.filters.FlakyTest; -import org.junit.Test; - -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -  import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;  import static android.content.res.Configuration.EMPTY; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; +import android.content.res.Configuration; +import android.platform.test.annotations.Presubmit; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +  /**   * Test class for {@link WindowContainerController}.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java index 6c7830e5cf79..ea8c918451c3 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTests.java @@ -16,20 +16,6 @@  package com.android.server.wm; -import android.support.test.filters.FlakyTest; -import android.view.SurfaceControl; -import android.view.SurfaceSession; -import org.junit.Test; -import org.junit.runner.RunWith; - -import android.content.res.Configuration; -import android.graphics.Rect; -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; - -import java.util.Comparator; -  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND;  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;  import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; @@ -44,7 +30,6 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; -  import static org.mockito.Mockito.any;  import static org.mockito.Mockito.anyFloat;  import static org.mockito.Mockito.eq; @@ -53,6 +38,21 @@ import static org.mockito.Mockito.never;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify; +import android.content.res.Configuration; +import android.graphics.Rect; +import android.platform.test.annotations.Presubmit; +import android.view.SurfaceControl; +import android.view.SurfaceSession; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Comparator; +  /**   * Test class for {@link WindowContainer}.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTraversalTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTraversalTests.java index e07639933b7a..ffc86226cd39 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowContainerTraversalTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowContainerTraversalTests.java @@ -20,19 +20,19 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;  import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;  import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; + +import static org.mockito.Matchers.eq;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify; -import static org.mockito.Matchers.eq;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; -import org.mockito.Mock; -  import java.util.function.Consumer;  /** diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java index 5a563320f9cb..7b02c6b4ffa0 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowFrameTests.java @@ -16,29 +16,31 @@  package com.android.server.wm; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import static android.view.DisplayCutout.fromBoundingRect; +import static android.view.WindowManager.LayoutParams.FILL_PARENT; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue;  import android.app.ActivityManager.TaskDescription;  import android.content.res.Configuration;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.DisplayInfo;  import android.view.Gravity;  import android.view.IWindow;  import android.view.WindowManager; -import static android.view.DisplayCutout.fromBoundingRect; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; -import static android.view.WindowManager.LayoutParams.FILL_PARENT; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.wm.utils.WmDisplayCutout; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +  /**   * Tests for the {@link WindowState#computeFrameLw} method and other window frame machinery.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRule.java b/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRule.java index d91079e3bb1b..8321c8b1d427 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRule.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRule.java @@ -33,9 +33,10 @@ import android.content.Context;  import android.hardware.display.DisplayManagerInternal;  import android.os.PowerManagerInternal;  import android.os.PowerSaveState; -import android.support.test.InstrumentationRegistry;  import android.view.InputChannel; +import androidx.test.InstrumentationRegistry; +  import com.android.server.LocalServices;  import com.android.server.input.InputManagerService;  import com.android.server.policy.WindowManagerPolicy; diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRuleTest.java b/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRuleTest.java index 6cf6d7bc96ec..570a853a62ca 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRuleTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowManagerServiceRuleTest.java @@ -20,8 +20,9 @@ import static org.hamcrest.CoreMatchers.notNullValue;  import static org.junit.Assert.assertThat;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Rule;  import org.junit.Test; diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java index 9f113ad3137e..108baab8585b 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java @@ -16,19 +16,6 @@  package com.android.server.wm; -import android.graphics.Rect; -import android.view.SurfaceControl; -import android.view.WindowManager; -import org.junit.Test; -import org.junit.runner.RunWith; - -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; - -import java.util.LinkedList; -  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.hardware.camera2.params.OutputConfiguration.ROTATION_90; @@ -52,7 +39,6 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertThat;  import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any;  import static org.mockito.ArgumentMatchers.anyLong;  import static org.mockito.ArgumentMatchers.anyString;  import static org.mockito.Mockito.mock; @@ -61,6 +47,20 @@ import static org.mockito.Mockito.reset;  import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.verify; +import android.graphics.Rect; +import android.platform.test.annotations.Presubmit; +import android.view.SurfaceControl; +import android.view.WindowManager; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.LinkedList; +  /**   * Tests for the {@link WindowState} class.   * diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowSurfacePlacerTest.java b/services/tests/servicestests/src/com/android/server/wm/WindowSurfacePlacerTest.java index e173b7db2da7..057f04740198 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowSurfacePlacerTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowSurfacePlacerTest.java @@ -20,13 +20,15 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.view.WindowManager.TRANSIT_TASK_CLOSE;  import static android.view.WindowManager.TRANSIT_TASK_OPEN; +  import static junit.framework.Assert.assertEquals;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.WindowManager; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java index 473a287e3d9c..6d1c45b2fc05 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java @@ -16,30 +16,12 @@  package com.android.server.wm; +import static android.app.AppOpsManager.OP_NONE;  import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;  import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;  import static android.view.Display.DEFAULT_DISPLAY; -import static android.view.View.VISIBLE; - -import android.content.res.Configuration; -import android.graphics.Rect; -import android.hardware.display.DisplayManagerGlobal; -import android.testing.DexmakerShareClassLoaderRule; -import android.util.Log; -import android.view.Display; -import android.view.DisplayInfo; -import org.junit.Assert; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.view.IWindow; -import android.view.WindowManager; - -import static android.app.AppOpsManager.OP_NONE;  import static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS; +import static android.view.View.VISIBLE;  import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;  import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;  import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; @@ -52,10 +34,29 @@ import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;  import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;  import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;  import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; +  import static org.mockito.Mockito.mock; +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.Rect; +import android.hardware.display.DisplayManagerGlobal; +import android.testing.DexmakerShareClassLoaderRule; +import android.util.Log; +import android.view.Display; +import android.view.DisplayInfo; +import android.view.IWindow; +import android.view.WindowManager; + +import androidx.test.InstrumentationRegistry; +  import com.android.server.AttributeCache; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +  import java.util.HashSet;  import java.util.LinkedList; diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java index e3b717435052..3732486f4a07 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTokenTests.java @@ -16,23 +16,24 @@  package com.android.server.wm; -import org.junit.Test; -import org.junit.runner.RunWith; - -import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -  import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;  import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;  import static android.view.WindowManager.LayoutParams.TYPE_TOAST; +  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mock; + +import android.platform.test.annotations.Presubmit; + +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith;  /**   * Tests for the {@link WindowToken} class. diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTracingTest.java b/services/tests/servicestests/src/com/android/server/wm/WindowTracingTest.java index 50852548f525..bbc6550d5753 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTracingTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTracingTest.java @@ -29,12 +29,13 @@ import static org.mockito.Mockito.verifyZeroInteractions;  import android.content.Context;  import android.platform.test.annotations.Presubmit; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.filters.FlakyTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.proto.ProtoOutputStream; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.Preconditions;  import com.android.server.wm.WindowManagerTraceProto; diff --git a/services/tests/servicestests/src/com/android/server/wm/ZOrderingTests.java b/services/tests/servicestests/src/com/android/server/wm/ZOrderingTests.java index 547be551c842..8f9fb1b7d5ec 100644 --- a/services/tests/servicestests/src/com/android/server/wm/ZOrderingTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/ZOrderingTests.java @@ -27,19 +27,19 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_  import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;  import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY;  import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; -import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;  import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;  import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL;  import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL;  import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.filters.FlakyTest; -import android.support.test.runner.AndroidJUnit4;  import android.view.SurfaceControl;  import android.view.SurfaceSession; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.After;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java b/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java index 08bcc3d751f2..3364aef25bd0 100644 --- a/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/utils/InsetUtilsTest.java @@ -25,9 +25,9 @@ import static junit.framework.Assert.assertEquals;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import android.util.Pair; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/utils/RotationCacheTest.java b/services/tests/servicestests/src/com/android/server/wm/utils/RotationCacheTest.java index 6bbc7eb56688..5d08920b43d0 100644 --- a/services/tests/servicestests/src/com/android/server/wm/utils/RotationCacheTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/utils/RotationCacheTest.java @@ -24,14 +24,12 @@ import static org.junit.Assert.assertNotNull;  import static org.junit.Assert.assertThat;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.FlakyTest; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.Pair; -import com.android.server.wm.utils.RotationCache.RotationDependentComputation; +import androidx.test.filters.FlakyTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; -import org.hamcrest.Matchers;  import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/src/com/android/server/wm/utils/WmDisplayCutoutTest.java b/services/tests/servicestests/src/com/android/server/wm/utils/WmDisplayCutoutTest.java index f7addf6c77f9..9ce3dca7e096 100644 --- a/services/tests/servicestests/src/com/android/server/wm/utils/WmDisplayCutoutTest.java +++ b/services/tests/servicestests/src/com/android/server/wm/utils/WmDisplayCutoutTest.java @@ -25,11 +25,12 @@ import static org.junit.Assert.assertNotEquals;  import android.graphics.Rect;  import android.platform.test.annotations.Presubmit; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.util.Size;  import android.view.DisplayCutout; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/servicestests/test-apps/SuspendTestApp/Android.bp b/services/tests/servicestests/test-apps/SuspendTestApp/Android.bp index 7bff1ae7d582..ca8d47b013d7 100644 --- a/services/tests/servicestests/test-apps/SuspendTestApp/Android.bp +++ b/services/tests/servicestests/test-apps/SuspendTestApp/Android.bp @@ -18,7 +18,7 @@ android_test_helper_app {      test_suites: ["device-tests"],      static_libs: [ -        "android-support-test", +        "androidx.test.rules",          "ub-uiautomator",      ], diff --git a/services/tests/uiservicestests/Android.bp b/services/tests/uiservicestests/Android.bp index b0222b86e976..23f55727d456 100644 --- a/services/tests/uiservicestests/Android.bp +++ b/services/tests/uiservicestests/Android.bp @@ -17,7 +17,7 @@ android_test {          "services.net",          "services.usage",          "guava", -        "android-support-test", +        "androidx.test.rules", "hamcrest-library",          "mockito-target-inline-minus-junit4",          "platform-test-annotations",          "testables", diff --git a/services/tests/uiservicestests/src/com/android/server/UiServiceTestCase.java b/services/tests/uiservicestests/src/com/android/server/UiServiceTestCase.java index eec852bd77c7..4fca175ea005 100644 --- a/services/tests/uiservicestests/src/com/android/server/UiServiceTestCase.java +++ b/services/tests/uiservicestests/src/com/android/server/UiServiceTestCase.java @@ -18,9 +18,10 @@ import static org.mockito.Mockito.when;  import android.content.pm.PackageManagerInternal;  import android.os.Build; -import android.support.test.InstrumentationRegistry;  import android.testing.TestableContext; +import androidx.test.InstrumentationRegistry; +  import org.junit.Before;  import org.junit.Rule;  import org.mockito.Mock; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/AlertRateLimiterTest.java b/services/tests/uiservicestests/src/com/android/server/notification/AlertRateLimiterTest.java index d4c41e0285bd..dc7f118628b7 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/AlertRateLimiterTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/AlertRateLimiterTest.java @@ -20,9 +20,10 @@ import static com.android.server.notification.AlertRateLimiter.ALLOWED_ALERT_INT  import static junit.framework.Assert.assertFalse;  import static junit.framework.Assert.assertTrue; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase;  import org.junit.Before; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BadgeExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BadgeExtractorTest.java index cfc7430cc8f4..e1f39137e618 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/BadgeExtractorTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/BadgeExtractorTest.java @@ -15,26 +15,26 @@   */  package com.android.server.notification; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -  import static android.app.NotificationManager.IMPORTANCE_HIGH;  import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;  import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE;  import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; + +import static org.mockito.Mockito.when; +  import android.app.ActivityManager;  import android.app.Notification;  import android.app.Notification.Builder;  import android.app.NotificationChannel;  import android.os.UserHandle;  import android.service.notification.StatusBarNotification; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase;  import org.junit.Before; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java index 99d2b87c7c25..7b2684f7333e 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java @@ -59,13 +59,14 @@ import android.os.VibrationEffect;  import android.os.Vibrator;  import android.provider.Settings;  import android.service.notification.StatusBarNotification; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest;  import android.view.accessibility.AccessibilityEvent;  import android.view.accessibility.AccessibilityManager;  import android.view.accessibility.IAccessibilityManager;  import android.view.accessibility.IAccessibilityManagerClient; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.IntPair;  import com.android.server.UiServiceTestCase;  import com.android.server.lights.Light; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/GlobalSortKeyComparatorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/GlobalSortKeyComparatorTest.java index 97f210400141..5041779840b3 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/GlobalSortKeyComparatorTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/GlobalSortKeyComparatorTest.java @@ -16,18 +16,16 @@  package com.android.server.notification;  import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.eq;  import android.app.Notification;  import android.app.NotificationChannel;  import android.app.NotificationManager;  import android.os.UserHandle;  import android.service.notification.StatusBarNotification; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase;  import org.junit.Test; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java index 8d4c5b1df7d2..8c0871832865 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/GroupHelperTest.java @@ -25,21 +25,22 @@ import static org.mockito.Mockito.never;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -  import android.app.Notification;  import android.os.UserHandle;  import android.service.notification.StatusBarNotification; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +  import java.util.ArrayList;  import java.util.LinkedHashSet;  import java.util.List; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ImportanceExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ImportanceExtractorTest.java index 73d5961ee90b..fa7dff0dbd7e 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ImportanceExtractorTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ImportanceExtractorTest.java @@ -15,31 +15,30 @@   */  package com.android.server.notification; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.when;  import android.app.ActivityManager;  import android.app.Notification;  import android.app.Notification.Builder; -import android.app.NotificationManager;  import android.app.NotificationChannel; +import android.app.NotificationManager;  import android.os.UserHandle;  import android.service.notification.StatusBarNotification; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.when; - -import static org.junit.Assert.assertEquals; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.UiServiceTestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +  @SmallTest  @RunWith(AndroidJUnit4.class)  public class ImportanceExtractorTest extends UiServiceTestCase { diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java index 2241047dec0e..ce5dfbaa14e5 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java @@ -22,9 +22,10 @@ import static junit.framework.Assert.assertEquals;  import android.app.NotificationChannel;  import android.os.Parcel; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.FastXmlSerializer;  import com.android.server.UiServiceTestCase; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java index 7ee050174d3c..a3aeebf80853 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java @@ -35,9 +35,10 @@ import android.os.UserHandle;  import android.provider.Settings;  import android.service.notification.StatusBarNotification;  import android.telecom.TelecomManager; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase;  import org.junit.Before; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java index ef9ba78b8263..9314969d5512 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java @@ -40,10 +40,10 @@ import android.service.notification.NotificationListenerService;  import android.service.notification.NotificationListenerService.Ranking;  import android.service.notification.NotificationRankingUpdate;  import android.service.notification.SnoozeCriterion; -import android.service.notification.StatusBarNotification; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase;  import org.junit.Test; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java index e28699113a3d..70e5fd1c1f97 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java @@ -34,8 +34,6 @@ import static org.mockito.ArgumentMatchers.any;  import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.eq;  import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.app.ActivityManager; @@ -57,9 +55,9 @@ import android.os.UserHandle;  import android.provider.Settings;  import android.service.notification.Adjustment;  import android.service.notification.StatusBarNotification; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; -import android.util.Slog; + +import androidx.test.runner.AndroidJUnit4;  import com.android.internal.logging.nano.MetricsProto.MetricsEvent;  import com.android.server.UiServiceTestCase; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java index 0a630f462949..b5d837639643 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationStatsTest.java @@ -23,9 +23,10 @@ import static junit.framework.Assert.assertTrue;  import android.os.Parcel;  import android.service.notification.NotificationStats; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase;  import org.junit.Test; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java index 9db823c0d3f5..901b94893b6d 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationTest.java @@ -22,20 +22,18 @@ import static junit.framework.Assert.assertNull;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.anyInt;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.spy;  import static org.mockito.Mockito.when; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt;  import android.app.ActivityManager;  import android.app.Notification; -import android.app.Person;  import android.app.PendingIntent; +import android.app.Person;  import android.app.RemoteInput;  import android.content.Context;  import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager;  import android.content.res.Resources;  import android.graphics.Bitmap;  import android.graphics.Color; @@ -43,13 +41,14 @@ import android.graphics.Typeface;  import android.graphics.drawable.Icon;  import android.net.Uri;  import android.os.Build; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.text.SpannableStringBuilder;  import android.text.Spanned;  import android.text.style.StyleSpan;  import android.widget.RemoteViews; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase;  import org.junit.Before; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotifyingAppTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotifyingAppTest.java index fbb8c33d14aa..25e10d0740da 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotifyingAppTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotifyingAppTest.java @@ -20,9 +20,10 @@ import static junit.framework.Assert.assertTrue;  import android.os.Parcel;  import android.service.notification.NotifyingApp; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase;  import org.junit.Test; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java index a9e713e5778b..63283ad6766a 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java @@ -33,7 +33,6 @@ import static org.mockito.ArgumentMatchers.any;  import static org.mockito.Matchers.anyInt;  import static org.mockito.Matchers.anyString;  import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.atLeast;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.never;  import static org.mockito.Mockito.reset; @@ -61,13 +60,14 @@ import android.os.UserHandle;  import android.provider.Settings;  import android.provider.Settings.Secure;  import android.service.notification.StatusBarNotification; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest;  import android.testing.TestableContentResolver;  import android.util.ArrayMap;  import android.util.Xml; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import com.android.internal.util.FastXmlSerializer;  import com.android.server.UiServiceTestCase; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RateEstimatorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RateEstimatorTest.java index 5d8d48f158fa..68aa1dc1bf3b 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/RateEstimatorTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/RateEstimatorTest.java @@ -15,17 +15,19 @@   */  package com.android.server.notification; -import android.support.test.runner.AndroidJUnit4; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +  import android.test.suitebuilder.annotation.SmallTest; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.UiServiceTestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +  @SmallTest  @RunWith(AndroidJUnit4.class)  public class RateEstimatorTest extends UiServiceTestCase { diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java index 96ac93536a8a..c0fecaf8ecb3 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleCalendarTest.java @@ -23,14 +23,14 @@ import static org.junit.Assert.assertTrue;  import android.service.notification.ScheduleCalendar;  import android.service.notification.ZenModeConfig; -import android.support.test.filters.FlakyTest; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.filters.FlakyTest; +import androidx.test.runner.AndroidJUnit4; +  import com.android.server.UiServiceTestCase;  import org.junit.Before; -import org.junit.Ignore;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleConditionProviderTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleConditionProviderTest.java index efa70e7204f1..551e1860d9b3 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ScheduleConditionProviderTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ScheduleConditionProviderTest.java @@ -10,11 +10,11 @@ import android.net.Uri;  import android.service.notification.Condition;  import android.service.notification.ScheduleCalendar;  import android.service.notification.ZenModeConfig; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.server.UiServiceTestCase;  import org.junit.Before; diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java index 88c6fcf138cf..6f760fe33d1f 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java @@ -15,12 +15,16 @@   */  package com.android.server.notification; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when;  import android.app.AlarmManager;  import android.app.Notification; @@ -30,23 +34,18 @@ import android.app.PendingIntent;  import android.os.SystemClock;  import android.os.UserHandle;  import android.service.notification.StatusBarNotification; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import androidx.test.runner.AndroidJUnit4;  import com.android.server.UiServiceTestCase; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations;  @SmallTest  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ValidateNotificationPeopleTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ValidateNotificationPeopleTest.java index 025b11a70414..b1ee1209d83e 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ValidateNotificationPeopleTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ValidateNotificationPeopleTest.java @@ -15,23 +15,24 @@   */  package com.android.server.notification; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +  import android.app.Notification;  import android.app.Person;  import android.os.Bundle; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest;  import android.text.SpannableString; -import java.util.ArrayList; -import java.util.Arrays; +import androidx.test.runner.AndroidJUnit4; + +import com.android.server.UiServiceTestCase;  import org.junit.Test;  import org.junit.runner.RunWith; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertEquals; - -import com.android.server.UiServiceTestCase; +import java.util.ArrayList; +import java.util.Arrays;  @SmallTest  @RunWith(AndroidJUnit4.class) diff --git a/services/tests/uiservicestests/src/com/android/server/slice/PackageMatchingCacheTest.java b/services/tests/uiservicestests/src/com/android/server/slice/PackageMatchingCacheTest.java index c6aea882b7ca..f6c854e23494 100644 --- a/services/tests/uiservicestests/src/com/android/server/slice/PackageMatchingCacheTest.java +++ b/services/tests/uiservicestests/src/com/android/server/slice/PackageMatchingCacheTest.java @@ -21,10 +21,11 @@ import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.server.UiServiceTestCase;  import com.android.server.slice.SliceManagerService.PackageMatchingCache; diff --git a/services/tests/uiservicestests/src/com/android/server/slice/PinnedSliceStateTest.java b/services/tests/uiservicestests/src/com/android/server/slice/PinnedSliceStateTest.java index 82e0fbe0e400..f35bb668c038 100644 --- a/services/tests/uiservicestests/src/com/android/server/slice/PinnedSliceStateTest.java +++ b/services/tests/uiservicestests/src/com/android/server/slice/PinnedSliceStateTest.java @@ -26,11 +26,12 @@ import android.os.Handler;  import android.os.IBinder;  import android.os.IBinder.DeathRecipient;  import android.os.RemoteException; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.server.UiServiceTestCase;  import org.junit.Before; diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SliceClientPermissionsTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SliceClientPermissionsTest.java index 1efa4153073a..ff2236d25e28 100644 --- a/services/tests/uiservicestests/src/com/android/server/slice/SliceClientPermissionsTest.java +++ b/services/tests/uiservicestests/src/com/android/server/slice/SliceClientPermissionsTest.java @@ -24,14 +24,15 @@ import static org.mockito.Mockito.verify;  import android.content.ContentResolver;  import android.net.Uri; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.util.Xml.Encoding; +import androidx.test.filters.SmallTest; +  import com.android.server.UiServiceTestCase; -import com.android.server.slice.SlicePermissionManager.PkgUser;  import com.android.server.slice.SliceClientPermissions.SliceAuthority; +import com.android.server.slice.SlicePermissionManager.PkgUser;  import org.junit.Test;  import org.junit.runner.RunWith; diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SliceFullAccessListTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SliceFullAccessListTest.java index bc2815099fdb..d942c5af0422 100644 --- a/services/tests/uiservicestests/src/com/android/server/slice/SliceFullAccessListTest.java +++ b/services/tests/uiservicestests/src/com/android/server/slice/SliceFullAccessListTest.java @@ -19,9 +19,10 @@ import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue;  import android.os.UserHandle; -import android.support.test.filters.SmallTest;  import android.util.Xml.Encoding; +import androidx.test.filters.SmallTest; +  import com.android.server.UiServiceTestCase;  import org.junit.Before; diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java index 43a4e277a582..e4f000877a9a 100644 --- a/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java @@ -33,18 +33,18 @@ import static org.mockito.Mockito.when;  import android.app.AppOpsManager;  import android.app.slice.SliceSpec;  import android.app.usage.UsageStatsManagerInternal; -import android.content.pm.PackageManagerInternal;  import android.net.Uri;  import android.os.Binder;  import android.os.IBinder;  import android.os.Process;  import android.os.RemoteException; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableContext;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.filters.SmallTest; +  import com.android.server.LocalServices;  import com.android.server.UiServiceTestCase; diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java index dc057d564a84..2531adaa6966 100644 --- a/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java +++ b/services/tests/uiservicestests/src/com/android/server/slice/SlicePermissionManagerTest.java @@ -22,12 +22,13 @@ import android.content.ContentResolver;  import android.net.Uri;  import android.net.Uri.Builder;  import android.os.FileUtils; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import android.testing.TestableLooper.RunWithLooper;  import android.util.Xml.Encoding; +import androidx.test.filters.SmallTest; +  import com.android.server.UiServiceTestCase;  import org.junit.Test; diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SliceProviderPermissionsTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SliceProviderPermissionsTest.java index 5775991b8ba6..8e61d210c28f 100644 --- a/services/tests/uiservicestests/src/com/android/server/slice/SliceProviderPermissionsTest.java +++ b/services/tests/uiservicestests/src/com/android/server/slice/SliceProviderPermissionsTest.java @@ -20,11 +20,12 @@ import static org.mockito.Mockito.clearInvocations;  import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.verify; -import android.support.test.filters.SmallTest;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper.RunWithLooper;  import android.util.Xml.Encoding; +import androidx.test.filters.SmallTest; +  import com.android.server.UiServiceTestCase;  import com.android.server.slice.SlicePermissionManager.PkgUser;  import com.android.server.slice.SliceProviderPermissions.SliceAuthority; diff --git a/telecomm/java/android/telecom/CallIdentification.java b/telecomm/java/android/telecom/CallIdentification.java index 87834fd5109d..fffc1239a315 100644 --- a/telecomm/java/android/telecom/CallIdentification.java +++ b/telecomm/java/android/telecom/CallIdentification.java @@ -44,14 +44,14 @@ public final class CallIdentification implements Parcelable {       * A {@link CallScreeningService} uses this class to create new instances of       * {@link CallIdentification} for a screened call.       */ -    public static class Builder { -        private String mName; -        private String mDescription; -        private String mDetails; +    public final static class Builder { +        private CharSequence mName; +        private CharSequence mDescription; +        private CharSequence mDetails;          private Icon mPhoto;          private int mNuisanceConfidence = CallIdentification.CONFIDENCE_UNKNOWN;          private String mPackageName; -        private String mAppName; +        private CharSequence mAppName;          /**           * Default builder constructor. @@ -67,7 +67,7 @@ public final class CallIdentification implements Parcelable {           * @param callIdAppName The app name.           * @hide           */ -        public Builder(String callIdPackageName, String callIdAppName) { +        public Builder(@NonNull String callIdPackageName, @NonNull CharSequence callIdAppName) {              mPackageName = callIdPackageName;              mAppName = callIdAppName;          } @@ -80,7 +80,7 @@ public final class CallIdentification implements Parcelable {           * @param name The name associated with the call, or {@code null} if none is provided.           * @return Builder instance.           */ -        public Builder setName(@Nullable String name) { +        public @NonNull Builder setName(@Nullable CharSequence name) {              mName = name;              return this;          } @@ -97,7 +97,7 @@ public final class CallIdentification implements Parcelable {           * @param description The call description, or {@code null} if none is provided.           * @return Builder instance.           */ -        public Builder setDescription(@Nullable String description) { +        public @NonNull Builder setDescription(@Nullable CharSequence description) {              mDescription = description;              return this;          } @@ -114,7 +114,8 @@ public final class CallIdentification implements Parcelable {           * @param details The call details, or {@code null} if none is provided.           * @return Builder instance.           */ -        public Builder setDetails(@Nullable String details) { + +        public @NonNull Builder setDetails(@Nullable CharSequence details) {              mDetails = details;              return this;          } @@ -127,7 +128,7 @@ public final class CallIdentification implements Parcelable {           * @param photo The photo associated with the call, or {@code null} if none was provided.           * @return Builder instance.           */ -        public Builder setPhoto(@Nullable Icon photo) { +        public @NonNull Builder setPhoto(@Nullable Icon photo) {              mPhoto = photo;              return this;          } @@ -141,7 +142,7 @@ public final class CallIdentification implements Parcelable {           * @param nuisanceConfidence The nuisance confidence.           * @return The builder.           */ -        public Builder setNuisanceConfidence(@NuisanceConfidence int nuisanceConfidence) { +        public @NonNull Builder setNuisanceConfidence(@NuisanceConfidence int nuisanceConfidence) {              mNuisanceConfidence = nuisanceConfidence;              return this;          } @@ -152,7 +153,7 @@ public final class CallIdentification implements Parcelable {           *           * @return {@link CallIdentification} instance.           */ -        public CallIdentification build() { +        public @NonNull CallIdentification build() {              return new CallIdentification(mName, mDescription, mDetails, mPhoto,                      mNuisanceConfidence, mPackageName, mAppName);          } @@ -241,10 +242,10 @@ public final class CallIdentification implements Parcelable {       *                             call identification.       * @hide       */ -    private CallIdentification(@Nullable String name, @Nullable String description, -            @Nullable String details, @Nullable Icon photo, +    private CallIdentification(@Nullable CharSequence name, @Nullable CharSequence description, +            @Nullable CharSequence details, @Nullable Icon photo,              @NuisanceConfidence int nuisanceConfidence, @NonNull String callScreeningPackageName, -            @NonNull String callScreeningAppName) { +            @NonNull CharSequence callScreeningAppName) {          mName = name;          mDescription = description;          mDetails = details; @@ -254,13 +255,13 @@ public final class CallIdentification implements Parcelable {          mCallScreeningPackageName = callScreeningPackageName;      } -    private String mName; -    private String mDescription; -    private String mDetails; +    private CharSequence mName; +    private CharSequence mDescription; +    private CharSequence mDetails;      private Icon mPhoto;      private int mNuisanceConfidence;      private String mCallScreeningPackageName; -    private String mCallScreeningAppName; +    private CharSequence mCallScreeningAppName;      @Override      public int describeContents() { @@ -269,13 +270,13 @@ public final class CallIdentification implements Parcelable {      @Override      public void writeToParcel(Parcel parcel, int i) { -        parcel.writeString(mName); -        parcel.writeString(mDescription); -        parcel.writeString(mDetails); +        parcel.writeCharSequence(mName); +        parcel.writeCharSequence(mDescription); +        parcel.writeCharSequence(mDetails);          parcel.writeParcelable(mPhoto, 0);          parcel.writeInt(mNuisanceConfidence);          parcel.writeString(mCallScreeningPackageName); -        parcel.writeString(mCallScreeningAppName); +        parcel.writeCharSequence(mCallScreeningAppName);      }      /** @@ -286,13 +287,13 @@ public final class CallIdentification implements Parcelable {                  @Override                  public CallIdentification createFromParcel(Parcel source) { -                    String name = source.readString(); -                    String description = source.readString(); -                    String details = source.readString(); +                    CharSequence name = source.readCharSequence(); +                    CharSequence description = source.readCharSequence(); +                    CharSequence details = source.readCharSequence();                      Icon photo = source.readParcelable(ClassLoader.getSystemClassLoader());                      int nuisanceConfidence = source.readInt();                      String callScreeningPackageName = source.readString(); -                    String callScreeningAppName = source.readString(); +                    CharSequence callScreeningAppName = source.readCharSequence();                      return new CallIdentification(name, description, details, photo,                              nuisanceConfidence, callScreeningPackageName, callScreeningAppName);                  } @@ -311,7 +312,7 @@ public final class CallIdentification implements Parcelable {       *       * @return The name associated with the number, or {@code null} if none was provided.       */ -    public final @Nullable String getName() { +    public final @Nullable CharSequence getName() {          return mName;      } @@ -325,7 +326,7 @@ public final class CallIdentification implements Parcelable {       *       * @return The call description, or {@code null} if none was provided.       */ -    public final @Nullable String getDescription() { +    public final @Nullable CharSequence getDescription() {          return mDescription;      } @@ -340,7 +341,7 @@ public final class CallIdentification implements Parcelable {       *       * @return The call details, or {@code null} if none was provided.       */ -    public final @Nullable String getDetails() { +    public final @Nullable CharSequence getDetails() {          return mDetails;      } @@ -363,8 +364,7 @@ public final class CallIdentification implements Parcelable {       *       * @return The nuisance confidence.       */ -    public final @NuisanceConfidence -    int getNuisanceConfidence() { +    public final @NuisanceConfidence int getNuisanceConfidence() {          return mNuisanceConfidence;      } @@ -387,7 +387,7 @@ public final class CallIdentification implements Parcelable {       *       * @return The name of the app.       */ -    public final @NonNull String getCallScreeningAppName() { +    public final @NonNull CharSequence getCallScreeningAppName() {          return mCallScreeningAppName;      } @@ -407,7 +407,7 @@ public final class CallIdentification implements Parcelable {       * @param callScreeningAppName The app name.       * @hide       */ -    public void setCallScreeningAppName(@NonNull String callScreeningAppName) { +    public void setCallScreeningAppName(@NonNull CharSequence callScreeningAppName) {          mCallScreeningAppName = callScreeningAppName;      } diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java index 7d1f8ce75919..6382acf0511d 100644 --- a/telecomm/java/android/telecom/Conference.java +++ b/telecomm/java/android/telecom/Conference.java @@ -19,6 +19,7 @@ package android.telecom;  import android.annotation.NonNull;  import android.annotation.Nullable;  import android.annotation.SystemApi; +import android.annotation.TestApi;  import android.net.Uri;  import android.os.Bundle;  import android.os.SystemClock; @@ -571,6 +572,7 @@ public abstract class Conference extends Conferenceable {       * @return The primary connection.       * @hide       */ +    @TestApi      @SystemApi      public Connection getPrimaryConnection() {          if (mUnmodifiableChildConnections == null || mUnmodifiableChildConnections.isEmpty()) { diff --git a/telecomm/java/android/telecom/ConnectionRequest.java b/telecomm/java/android/telecom/ConnectionRequest.java index b6e6b0ed8270..d69d2cd756dc 100644 --- a/telecomm/java/android/telecom/ConnectionRequest.java +++ b/telecomm/java/android/telecom/ConnectionRequest.java @@ -337,7 +337,31 @@ public final class ConnectionRequest implements Parcelable {                  mAddress == null                          ? Uri.EMPTY                          : Connection.toLogSafePhoneNumber(mAddress.toString()), -                mExtras == null ? "" : mExtras); +                bundleToString(mExtras)); +    } + +    private static String bundleToString(Bundle extras){ +        if (extras == null) { +            return ""; +        } +        StringBuilder sb = new StringBuilder(); +        sb.append("Bundle["); +        for (String key : extras.keySet()) { +            sb.append(key); +            sb.append("="); +            switch (key) { +                case TelecomManager.EXTRA_INCOMING_CALL_ADDRESS: +                case TelecomManager.EXTRA_UNKNOWN_CALL_HANDLE: +                    sb.append(Log.pii(extras.get(key))); +                    break; +                default: +                    sb.append(extras.get(key)); +                    break; +            } +            sb.append(", "); +        } +        sb.append("]"); +        return sb.toString();      }      public static final Creator<ConnectionRequest> CREATOR = new Creator<ConnectionRequest> () { diff --git a/telecomm/java/android/telecom/PhoneAccountSuggestion.java b/telecomm/java/android/telecom/PhoneAccountSuggestion.java index b401bcf0f876..f23f4c9b9e9e 100644 --- a/telecomm/java/android/telecom/PhoneAccountSuggestion.java +++ b/telecomm/java/android/telecom/PhoneAccountSuggestion.java @@ -17,6 +17,7 @@  package android.telecom;  import android.annotation.IntDef; +import android.annotation.NonNull;  import android.annotation.SystemApi;  import android.annotation.TestApi;  import android.os.Parcel; @@ -72,7 +73,7 @@ public final class PhoneAccountSuggestion implements Parcelable {       */      @SystemApi      @TestApi -    public PhoneAccountSuggestion(PhoneAccountHandle handle, @SuggestionReason int reason, +    public PhoneAccountSuggestion(@NonNull PhoneAccountHandle handle, @SuggestionReason int reason,              boolean shouldAutoSelect) {          this.mHandle = handle;          this.mReason = reason; @@ -101,7 +102,7 @@ public final class PhoneAccountSuggestion implements Parcelable {      /**       * @return The {@link PhoneAccountHandle} for this suggestion.       */ -    public PhoneAccountHandle getPhoneAccountHandle() { +    @NonNull public PhoneAccountHandle getPhoneAccountHandle() {          return mHandle;      } diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java index c60eb56005eb..84b223826c45 100644 --- a/telecomm/java/android/telecom/TelecomManager.java +++ b/telecomm/java/android/telecom/TelecomManager.java @@ -17,11 +17,13 @@ package android.telecom;  import android.Manifest;  import android.annotation.IntDef;  import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.RequiresPermission;  import android.annotation.SuppressAutoDoc;  import android.annotation.SuppressLint;  import android.annotation.SystemApi;  import android.annotation.SystemService; +import android.annotation.TestApi;  import android.annotation.UnsupportedAppUsage;  import android.content.ComponentName;  import android.content.Context; @@ -560,6 +562,7 @@ public class TelecomManager {       *       * @hide       */ +    @TestApi      @SystemApi      public static final int TTY_MODE_OFF = 0; @@ -569,6 +572,7 @@ public class TelecomManager {       *       * @hide       */ +    @TestApi      @SystemApi      public static final int TTY_MODE_FULL = 1; @@ -579,6 +583,7 @@ public class TelecomManager {       *       * @hide       */ +    @TestApi      @SystemApi      public static final int TTY_MODE_HCO = 2; @@ -589,6 +594,7 @@ public class TelecomManager {       *       * @hide       */ +    @TestApi      @SystemApi      public static final int TTY_MODE_VCO = 3; @@ -804,10 +810,11 @@ public class TelecomManager {       * <p>       * The default dialer has access to use this method.       * -     * @return The user outgoing phone account selected by the user. +     * @return The user outgoing phone account selected by the user, or {@code null} if there is no +     * user selected outgoing {@link PhoneAccountHandle}.       */      @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) -    public PhoneAccountHandle getUserSelectedOutgoingPhoneAccount() { +    public @Nullable PhoneAccountHandle getUserSelectedOutgoingPhoneAccount() {          try {              if (isServiceConnected()) {                  return getTelecomService().getUserSelectedOutgoingPhoneAccount( @@ -823,12 +830,14 @@ public class TelecomManager {       * Sets the user-chosen default {@link PhoneAccountHandle} for making outgoing phone calls.       *       * @param accountHandle The {@link PhoneAccountHandle} which will be used by default for making -     *                      outgoing voice calls. +     *                      outgoing voice calls, or {@code null} if no default is specified (the +     *                      user will be asked each time a call is placed in this case).       * @hide       */      @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) +    @TestApi      @SystemApi -    public void setUserSelectedOutgoingPhoneAccount(PhoneAccountHandle accountHandle) { +    public void setUserSelectedOutgoingPhoneAccount(@Nullable PhoneAccountHandle accountHandle) {          try {              if (isServiceConnected()) {                  getTelecomService().setUserSelectedOutgoingPhoneAccount(accountHandle); @@ -1195,7 +1204,8 @@ public class TelecomManager {      /**       * Used to set the default dialer package.       * -     * @param packageName to set the default dialer to. +     * @param packageName to set the default dialer to, or {@code null} if the system provided +     *                    dialer should be used instead.       *       * @result {@code true} if the default dialer was successfully changed, {@code false} if       *         the specified package does not correspond to an installed dialer, or is already @@ -1212,7 +1222,7 @@ public class TelecomManager {      @RequiresPermission(allOf = {              android.Manifest.permission.MODIFY_PHONE_STATE,              android.Manifest.permission.WRITE_SECURE_SETTINGS}) -    public boolean setDefaultDialer(String packageName) { +    public boolean setDefaultDialer(@Nullable String packageName) {          try {              if (isServiceConnected()) {                  return getTelecomService().setDefaultDialer(packageName); @@ -1226,9 +1236,10 @@ public class TelecomManager {      /**       * Determines the package name of the system-provided default phone app.       * -     * @return package name for the system dialer package or null if no system dialer is preloaded. +     * @return package name for the system dialer package or {@code null} if no system dialer is +     *         preloaded.       */ -    public String getSystemDialerPackage() { +    public @Nullable String getSystemDialerPackage() {          try {              if (isServiceConnected()) {                  return getTelecomService().getSystemDialerPackage(); @@ -1527,6 +1538,7 @@ public class TelecomManager {       * @hide       */      @SystemApi +    @TestApi      @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)      public @TtyMode int getCurrentTtyMode() {          try { @@ -1975,6 +1987,7 @@ public class TelecomManager {       * @hide       */      @SystemApi +    @TestApi      @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)      public boolean isInEmergencyCall() {          try { diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl index 5030f90afd3e..93eea56f6490 100644 --- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl +++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl @@ -182,6 +182,7 @@ interface ITelecomService {      /**       * @see TelecomServiceImpl#getCallState       */ +    @UnsupportedAppUsage      int getCallState();      /** diff --git a/telephony/java/android/provider/Telephony.java b/telephony/java/android/provider/Telephony.java index 21cc1a2171ff..4939157cd93b 100644 --- a/telephony/java/android/provider/Telephony.java +++ b/telephony/java/android/provider/Telephony.java @@ -17,6 +17,7 @@  package android.provider;  import android.annotation.IntDef; +import android.annotation.NonNull;  import android.annotation.RequiresPermission;  import android.annotation.SdkConstant;  import android.annotation.SdkConstant.SdkConstantType; @@ -1126,8 +1127,8 @@ public final class Telephony {               * Broadcast Action: A debug code has been entered in the dialer. This intent is               * broadcast by the system and OEM telephony apps may need to receive these broadcasts.               * These "secret codes" are used to activate developer menus by dialing certain codes. -             * And they are of the form {@code *#*#<code>#*#*}. The intent will have the data -             * URI: {@code android_secret_code://<code>}. It is possible that a manifest +             * And they are of the form {@code *#*#<code>#*#*}. The intent will have the data +             * URI: {@code android_secret_code://<code>}. It is possible that a manifest               * receiver would be woken up even if it is not currently running.               *               * <p>Requires {@code android.Manifest.permission#CONTROL_INCALL_EXPERIENCE} to @@ -3764,6 +3765,42 @@ public final class Telephony {           */          public static final String CARRIER_ID = "carrier_id"; +        /** +         * The skip 464xlat flag. Flag works as follows. +         * {@link #SKIP_464XLAT_DEFAULT}: the APN will skip only APN is IMS and no internet. +         * {@link #SKIP_464XLAT_DISABLE}: the APN will NOT skip 464xlat +         * {@link #SKIP_464XLAT_ENABLE}: the APN will skip 464xlat +         * <p>Type: INTEGER</p> +         * +         * @hide +         */ +        public static final String SKIP_464XLAT = "skip_464xlat"; + +        /** +         * Possible value for the {@link #SKIP_464XLAT} field. +         * <p>Type: INTEGER</p> +         * +         * @hide +         */ +        public static final int SKIP_464XLAT_DEFAULT = -1; + +        /** +         * Possible value for the {@link #SKIP_464XLAT} field. +         * <p>Type: INTEGER</p> +         * +         * @hide +         */ +        public static final int SKIP_464XLAT_DISABLE = 0; + +        /** +         * Possible value for the {@link #SKIP_464XLAT} field. +         * <p>Type: INTEGER</p> +         * +         * @hide +         */ +        public static final int SKIP_464XLAT_ENABLE = 1; + +          /** @hide */          @IntDef({                  UNEDITED, @@ -3774,6 +3811,16 @@ public final class Telephony {          })          @Retention(RetentionPolicy.SOURCE)          public @interface EditStatus {} + +        /** @hide */ +        @IntDef({ +                SKIP_464XLAT_DEFAULT, +                SKIP_464XLAT_DISABLE, +                SKIP_464XLAT_ENABLE, +        }) +        @Retention(RetentionPolicy.SOURCE) +        public @interface Skip464XlatStatus {} +      }      /** @@ -4277,6 +4324,7 @@ public final class Telephony {           * @param subscriptionId the subscriptionId to receive updates on           * @return the Uri used to observe precise carrier identity changes           */ +        @NonNull          public static Uri getPreciseCarrierIdUriForSubscriptionId(int subscriptionId) {              return Uri.withAppendedPath(Uri.withAppendedPath(CONTENT_URI, "precise"),                      String.valueOf(subscriptionId)); diff --git a/telephony/java/android/telephony/CallAttributes.java b/telephony/java/android/telephony/CallAttributes.java index 0d4f09f98b43..2ff2d91348de 100644 --- a/telephony/java/android/telephony/CallAttributes.java +++ b/telephony/java/android/telephony/CallAttributes.java @@ -16,6 +16,7 @@  package android.telephony; +import android.annotation.NonNull;  import android.annotation.SystemApi;  import android.os.Parcel;  import android.os.Parcelable; @@ -29,15 +30,15 @@ import java.util.Objects;   * @hide   */  @SystemApi -public class CallAttributes implements Parcelable { +public final class CallAttributes implements Parcelable {      private PreciseCallState mPreciseCallState;      @NetworkType      private int mNetworkType; // TelephonyManager.NETWORK_TYPE_* ints      private CallQuality mCallQuality; -    public CallAttributes(PreciseCallState state, @NetworkType int networkType, -            CallQuality callQuality) { +    public CallAttributes(@NonNull PreciseCallState state, @NetworkType int networkType, +            @NonNull CallQuality callQuality) {          this.mPreciseCallState = state;          this.mNetworkType = networkType;          this.mCallQuality = callQuality; @@ -59,6 +60,7 @@ public class CallAttributes implements Parcelable {      /**       * Returns the {@link PreciseCallState} of the call.       */ +    @NonNull      public PreciseCallState getPreciseCallState() {          return mPreciseCallState;      } @@ -96,6 +98,7 @@ public class CallAttributes implements Parcelable {      /**       * Returns the {#link CallQuality} of the call.       */ +    @NonNull      public CallQuality getCallQuality() {          return mCallQuality;      } diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 5c5d8569f3e8..ee69dad9fe51 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -2427,6 +2427,42 @@ public class CarrierConfigManager {      public static final String KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG =              "opportunistic_network_data_switch_hysteresis_time_long"; +   /** +    * An int array containing CDMA enhanced roaming indicator values for Home (non-roaming) network. +    * The default values come from 3GPP2 C.R1001 table 8.1-1. +    * Enhanced Roaming Indicator Number Assignments +    * +    * @hide +    */ +    public static final String KEY_CDMA_ENHANCED_ROAMING_INDICATOR_FOR_HOME_NETWORK_INT_ARRAY = +            "cdma_enhanced_roaming_indicator_for_home_network_int_array"; + +    /** +     * This configuration allow the system UI to display different 5G icon for different 5G status. +     * +     * There are four 5G status: +     * 1. connected_mmwave: device currently connected to 5G cell as the secondary cell and using +     *    millimeter wave. +     * 2. connected: device currently connected to 5G cell as the secondary cell but not using +     *    millimeter wave. +     * 3. not_restricted: device camped on a network that has 5G capability(not necessary to connect +     *    a 5G cell as a secondary cell) and the use of 5G is not restricted. +     * 4. restricted: device camped on a network that has 5G capability(not necessary to connect a +     *    5G cell as a secondary cell) but the use of 5G is restricted. +     * +     * The configured string contains multiple key-value pairs separated by comma. For each pair, +     * the key and value is separated by a colon. The key is corresponded to a 5G status above and +     * the value is the icon name. Use "None" as the icon name if no icon should be shown in a +     * specific 5G status. +     * +     * Here is an example of the configuration: +     * "connected_mmwave:5GPlus,connected:5G,not_restricted:None,restricted:None" +     * +     * @hide +     */ +    public static final String KEY_5G_ICON_CONFIGURATION_STRING = +            "5g_icon_configuration_string"; +      /** The default value for every variable. */      private final static PersistableBundle sDefaults; @@ -2800,9 +2836,15 @@ public class CarrierConfigManager {          /* Default value is 1024 kbps */          sDefaults.putInt(KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_BANDWIDTH_INT, 1024);          /* Default value is 10 seconds */ -        sDefaults.putInt(KEY_OPPORTUNISTIC_NETWORK_ENTRY_OR_EXIT_HYSTERESIS_TIME_LONG, 10000); +        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_ENTRY_OR_EXIT_HYSTERESIS_TIME_LONG, 10000);          /* Default value is 10 seconds. */ -        sDefaults.putInt(KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG, 10000); +        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG, 10000); +        sDefaults.putIntArray(KEY_CDMA_ENHANCED_ROAMING_INDICATOR_FOR_HOME_NETWORK_INT_ARRAY, +                new int[] { +                        1 /* Roaming Indicator Off */ +                }); +        sDefaults.putString(KEY_5G_ICON_CONFIGURATION_STRING, +                "connected_mmwave:None,connected:5G,not_restricted:None,restricted:None");      }      /** diff --git a/telephony/java/android/telephony/CarrierRestrictionRules.java b/telephony/java/android/telephony/CarrierRestrictionRules.java index d47b55ca4372..b627788c2a8c 100644 --- a/telephony/java/android/telephony/CarrierRestrictionRules.java +++ b/telephony/java/android/telephony/CarrierRestrictionRules.java @@ -177,7 +177,8 @@ public final class CarrierRestrictionRules implements Parcelable {       * @return a list of boolean with the same size as input, indicating if each       * {@link CarrierIdentifier} is allowed or not.       */ -    public List<Boolean> isCarrierIdentifiersAllowed(@NonNull List<CarrierIdentifier> carrierIds) { +    public @NonNull List<Boolean> areCarrierIdentifiersAllowed( +            @NonNull List<CarrierIdentifier> carrierIds) {          ArrayList<Boolean> result = new ArrayList<>(carrierIds.size());          // First calculate the result for each slot independently @@ -332,7 +333,7 @@ public final class CarrierRestrictionRules implements Parcelable {      /**       * Builder for a {@link CarrierRestrictionRules}.       */ -    public static class Builder { +    public static final class Builder {          private final CarrierRestrictionRules mRules;          /** {@hide} */ @@ -341,14 +342,14 @@ public final class CarrierRestrictionRules implements Parcelable {          }          /** build command */ -        public CarrierRestrictionRules build() { +        public @NonNull CarrierRestrictionRules build() {              return mRules;          }          /**           * Indicate that all carriers are allowed.           */ -        public Builder setAllCarriersAllowed() { +        public @NonNull Builder setAllCarriersAllowed() {              mRules.mAllowedCarriers.clear();              mRules.mExcludedCarriers.clear();              mRules.mCarrierRestrictionDefault = CARRIER_RESTRICTION_DEFAULT_ALLOWED; @@ -360,7 +361,8 @@ public final class CarrierRestrictionRules implements Parcelable {           *           * @param allowedCarriers list of allowed carriers           */ -        public Builder setAllowedCarriers(List<CarrierIdentifier> allowedCarriers) { +        public @NonNull Builder setAllowedCarriers( +                @NonNull List<CarrierIdentifier> allowedCarriers) {              mRules.mAllowedCarriers = new ArrayList<CarrierIdentifier>(allowedCarriers);              return this;          } @@ -370,7 +372,8 @@ public final class CarrierRestrictionRules implements Parcelable {           *           * @param excludedCarriers list of excluded carriers           */ -        public Builder setExcludedCarriers(List<CarrierIdentifier> excludedCarriers) { +        public @NonNull Builder setExcludedCarriers( +                @NonNull List<CarrierIdentifier> excludedCarriers) {              mRules.mExcludedCarriers = new ArrayList<CarrierIdentifier>(excludedCarriers);              return this;          } @@ -380,7 +383,7 @@ public final class CarrierRestrictionRules implements Parcelable {           *           * @param carrierRestrictionDefault prioritized carrier list           */ -        public Builder setDefaultCarrierRestriction( +        public @NonNull Builder setDefaultCarrierRestriction(                  @CarrierRestrictionDefault int carrierRestrictionDefault) {              mRules.mCarrierRestrictionDefault = carrierRestrictionDefault;              return this; @@ -391,7 +394,7 @@ public final class CarrierRestrictionRules implements Parcelable {           *           * @param multiSimPolicy multi SIM policy           */ -        public Builder setMultiSimPolicy(@MultiSimPolicy int multiSimPolicy) { +        public @NonNull Builder setMultiSimPolicy(@MultiSimPolicy int multiSimPolicy) {              mRules.mMultiSimPolicy = multiSimPolicy;              return this;          } diff --git a/telephony/java/android/telephony/CellIdentityNr.java b/telephony/java/android/telephony/CellIdentityNr.java index be16ddaddb54..b94ca9b3f927 100644 --- a/telephony/java/android/telephony/CellIdentityNr.java +++ b/telephony/java/android/telephony/CellIdentityNr.java @@ -81,7 +81,8 @@ public final class CellIdentityNr extends CellIdentity {      /**       * Get the NR Cell Identity.       * -     * @return The NR Cell Identity in range [0, 68719476735] or Long.MAX_VALUE if unknown. +     * @return The 36-bit NR Cell Identity in range [0, 68719476735] or +     *         {@link CellInfo#UNAVAILABLE_LONG} if unknown.       */      public long getNci() {          return mNci; diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java index 8ce5c54c810e..c7853f184407 100644 --- a/telephony/java/android/telephony/CellInfo.java +++ b/telephony/java/android/telephony/CellInfo.java @@ -40,6 +40,11 @@ public abstract class CellInfo implements Parcelable {      public static final int UNAVAILABLE = Integer.MAX_VALUE;      /** +     * This value indicates that the long field is unreported. +     */ +    public static final long UNAVAILABLE_LONG = Long.MAX_VALUE; + +    /**       * Cell identity type       * @hide       */ diff --git a/telephony/java/android/telephony/CellSignalStrength.java b/telephony/java/android/telephony/CellSignalStrength.java index 7d07a730f78b..aaf6c714b9c9 100644 --- a/telephony/java/android/telephony/CellSignalStrength.java +++ b/telephony/java/android/telephony/CellSignalStrength.java @@ -119,7 +119,7 @@ public abstract class CellSignalStrength {      /** @hide */      protected static final int getAsuFromRssiDbm(int dbm) {          if (dbm == CellInfo.UNAVAILABLE) return 99; -        return (dbm / 2) + 113; +        return (dbm + 113) / 2;      }      // Range for RSCP in ASU (0-96, 255) as defined in TS 27.007 8.69 diff --git a/telephony/java/android/telephony/DataSpecificRegistrationStates.java b/telephony/java/android/telephony/DataSpecificRegistrationStates.java index d6a8065feabe..c3387f3f112d 100644 --- a/telephony/java/android/telephony/DataSpecificRegistrationStates.java +++ b/telephony/java/android/telephony/DataSpecificRegistrationStates.java @@ -1,5 +1,7 @@  package android.telephony; +import android.annotation.NonNull; +import android.annotation.SystemApi;  import android.os.Parcel;  import android.os.Parcelable; @@ -10,14 +12,17 @@ import java.util.Objects;   * Class that stores information specific to data network registration.   * @hide   */ -public class DataSpecificRegistrationStates implements Parcelable{ +@SystemApi +public final class DataSpecificRegistrationStates implements Parcelable{      /** +     * @hide       * The maximum number of simultaneous Data Calls that       * must be established using setupDataCall().       */      public final int maxDataCalls;      /** +     * @hide       * Indicates if the use of dual connectivity with NR is restricted.       * Reference: 3GPP TS 24.301 v15.03 section 9.3.3.12A.       */ @@ -25,7 +30,7 @@ public class DataSpecificRegistrationStates implements Parcelable{      /**       * Indicates if NR is supported by the selected PLMN. -     * +     * @hide       * {@code true} if the bit N is in the PLMN-InfoList-r15 is true and the selected PLMN is       * present in plmn-IdentityList at position N.       * Reference: 3GPP TS 36.331 v15.2.2 section 6.3.1 PLMN-InfoList-r15. @@ -34,6 +39,7 @@ public class DataSpecificRegistrationStates implements Parcelable{      public final boolean isNrAvailable;      /** +     * @hide       * Indicates that if E-UTRA-NR Dual Connectivity (EN-DC) is supported by the primary serving       * cell.       * @@ -47,8 +53,11 @@ public class DataSpecificRegistrationStates implements Parcelable{      /**       * Provides network support info for LTE VoPS and LTE Emergency bearer support       */ -    public final LteVopsSupportInfo lteVopsSupportInfo; +    private final LteVopsSupportInfo lteVopsSupportInfo; +    /** +     * @hide +     */      DataSpecificRegistrationStates(              int maxDataCalls, boolean isDcNrRestricted, boolean isNrAvailable,              boolean isEnDcAvailable, LteVopsSupportInfo lteVops) { @@ -126,4 +135,12 @@ public class DataSpecificRegistrationStates implements Parcelable{                      return new DataSpecificRegistrationStates[size];                  }              }; + +    /** +     * @return LteVopsSupportInfo +     */ +    @NonNull +    public LteVopsSupportInfo getLteVopsSupportInfo() { +        return lteVopsSupportInfo; +    }  } diff --git a/telephony/java/android/telephony/DisconnectCause.java b/telephony/java/android/telephony/DisconnectCause.java index f53cb8224706..6e839ab0ad6b 100644 --- a/telephony/java/android/telephony/DisconnectCause.java +++ b/telephony/java/android/telephony/DisconnectCause.java @@ -26,7 +26,7 @@ import android.annotation.UnsupportedAppUsage;   * @hide   */  @SystemApi -public class DisconnectCause { +public final class DisconnectCause {      /** The disconnect cause is not valid (Not received a disconnect cause) */      public static final int NOT_VALID                      = -1; diff --git a/telephony/java/android/telephony/NetworkRegistrationState.java b/telephony/java/android/telephony/NetworkRegistrationState.java index 6e6d59e62148..4d97f8104c26 100644 --- a/telephony/java/android/telephony/NetworkRegistrationState.java +++ b/telephony/java/android/telephony/NetworkRegistrationState.java @@ -17,11 +17,13 @@  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;  import android.telephony.AccessNetworkConstants.TransportType; +import android.telephony.TelephonyManager.NetworkType;  import java.lang.annotation.Retention;  import java.lang.annotation.RetentionPolicy; @@ -140,6 +142,7 @@ public class NetworkRegistrationState implements Parcelable {      @ServiceState.RoamingType      private int mRoamingType; +    @NetworkType      private int mAccessNetworkTechnology;      @NRStatus @@ -149,6 +152,7 @@ public class NetworkRegistrationState implements Parcelable {      private final boolean mEmergencyOnly; +    @ServiceType      private final int[] mAvailableServices;      @Nullable @@ -167,9 +171,8 @@ public class NetworkRegistrationState implements Parcelable {       * @param regState Network registration state. Must be one of the {@link RegState}. For       * {@link TransportType#WLAN} transport, only {@link #REG_STATE_HOME} and       * {@link #REG_STATE_NOT_REG_NOT_SEARCHING} are valid states. -     * @param accessNetworkTechnology Access network technology. Must be one of TelephonyManager -     * NETWORK_TYPE_XXXX. For {@link TransportType#WLAN} transport, set to -     * {@link TelephonyManager#NETWORK_TYPE_IWLAN}. +     * @param accessNetworkTechnology Access network technology.For {@link TransportType#WLAN} +     * transport, set to {@link TelephonyManager#NETWORK_TYPE_IWLAN}.       * @param rejectCause Reason for denial if the registration state is {@link #REG_STATE_DENIED}.       * Depending on {@code accessNetworkTechnology}, the values are defined in 3GPP TS 24.008       * 10.5.3.6 for UMTS, 3GPP TS 24.301 9.9.3.9 for LTE, and 3GPP2 A.S0001 6.2.2.44 for CDMA. If @@ -182,8 +185,9 @@ public class NetworkRegistrationState implements Parcelable {       * information is not available.       */      public NetworkRegistrationState(@Domain int domain, int transportType, @RegState int regState, -                                    int accessNetworkTechnology, int rejectCause, -                                    boolean emergencyOnly, int[] availableServices, +                                    @NetworkType int accessNetworkTechnology, int rejectCause, +                                    boolean emergencyOnly, +                                    @NonNull @ServiceType int[] availableServices,                                      @Nullable CellIdentity cellIdentity) {          mDomain = domain;          mTransportType = transportType; @@ -230,7 +234,7 @@ public class NetworkRegistrationState implements Parcelable {          updateNrStatus(mDataSpecificStates);      } -    protected NetworkRegistrationState(Parcel source) { +    private NetworkRegistrationState(Parcel source) {          mDomain = source.readInt();          mTransportType = source.readInt();          mRegState = source.readInt(); @@ -285,6 +289,14 @@ public class NetworkRegistrationState implements Parcelable {      }      /** +     * @hide +     * @return {@code true} if in service. +     */ +    public boolean isInService() { +        return mRegState == REG_STATE_HOME || mRegState == REG_STATE_ROAMING; +    } + +    /**       * Set {@link ServiceState.RoamingType roaming type}. This could override       * roaming type based on resource overlay or carrier config.       * @hide @@ -309,25 +321,29 @@ public class NetworkRegistrationState implements Parcelable {      /**       * @return List of available service types.       */ +    @NonNull +    @ServiceType      public int[] getAvailableServices() { return mAvailableServices; }      /** -     * @return The access network technology {@link TelephonyManager.NetworkType}. +     * @return The access network technology {@link NetworkType}.       */ -    public @TelephonyManager.NetworkType int getAccessNetworkTechnology() { +    public @NetworkType int getAccessNetworkTechnology() {          return mAccessNetworkTechnology;      }      /** -     * override the access network technology {@link TelephonyManager.NetworkType} e.g, rat ratchet. +     * override the access network technology {@link NetworkType} e.g, rat ratchet.       * @hide       */ -    public void setAccessNetworkTechnology(@TelephonyManager.NetworkType int tech) { +    public void setAccessNetworkTechnology(@NetworkType int tech) {          mAccessNetworkTechnology = tech;      }      /** -     * @return Network reject cause +     * @return Reason for denial if the registration state is {@link #REG_STATE_DENIED}. +     * Depending on {@code accessNetworkTechnology}, the values are defined in 3GPP TS 24.008 +     * 10.5.3.6 for UMTS, 3GPP TS 24.301 9.9.3.9 for LTE, and 3GPP2 A.S0001 6.2.2.44 for CDMA       */      public int getRejectCause() {          return mRejectCause; @@ -336,6 +352,7 @@ public class NetworkRegistrationState implements Parcelable {      /**       * @return The cell information.       */ +    @Nullable      public CellIdentity getCellIdentity() {          return mCellIdentity;      } @@ -349,7 +366,7 @@ public class NetworkRegistrationState implements Parcelable {      }      /** -     * @hide +     * @return Data registration related info       */      @Nullable      public DataSpecificRegistrationStates getDataSpecificStates() { @@ -539,4 +556,192 @@ public class NetworkRegistrationState implements Parcelable {          p.recycle();          return result;      } + +    /** +     * Provides a convenient way to set the fields of a {@link NetworkRegistrationState} when +     * creating a new instance. +     * +     * <p>The example below shows how you might create a new {@code NetworkRegistrationState}: +     * +     * <pre><code> +     * +     * NetworkRegistrationState nrs = new NetworkRegistrationState.Builder() +     *     .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS) +     *     .setApnName("apn.example.com") +     *     .setEntryName("Example Carrier APN") +     *     .setMmsc(Uri.parse("http://mms.example.com:8002")) +     *     .setMmsProxyAddress(mmsProxy) +     *     .setMmsProxyPort(8799) +     *     .build(); +     * </code></pre> +     */ +    public static class Builder{ +        @Domain +        private int mDomain; + +        private int mTransportType; + +        @RegState +        private int mRegState; + +        @ServiceState.RoamingType +        private int mRoamingType; + +        @NetworkType +        private int mAccessNetworkTechnology; + +        @NRStatus +        private int mNrStatus; + +        private int mRejectCause; + +        private boolean mEmergencyOnly; + +        @ServiceType +        private int[] mAvailableServices; + +        @Nullable +        private CellIdentity mCellIdentity; + +        /** +         * Default constructor for Builder. +         */ +        public Builder() {} + +        /** +         * Set the network domain. +         * +         * @param domain Network domain. +         * +         * @return The same instance of the builder. +         */ +        public @NonNull Builder setDomain(@Domain int domain) { +            mDomain = domain; +            return this; +        } + +        /** +         * Set the transport type. +         * +         * @param transportType Transport type. +         * +         * @return The same instance of the builder. +         */ +        public @NonNull Builder setTransportType(int transportType) { +            mTransportType = transportType; +            return this; +        } + +        /** +         * Set the registration state. +         * +         * @param regState The registration state. +         * +         * @return The same instance of the builder. +         */ +        public @NonNull Builder setRegState(@RegState int regState) { +            mRegState = regState; +            return this; +        } + +        /** +         * Set the roaming type. +         * +         * @param roamingType Roaming type. +         * +         * @return The same instance of the builder. +         */ +        public @NonNull Builder setRoamingType(@ServiceState.RoamingType int roamingType) { +            mRoamingType = roamingType; +            return this; +        } + +        /** +         * Set tne access network technology. +         * +         * @return The same instance of the builder. +         * +         * @param accessNetworkTechnology The access network technology +         */ +        public @NonNull Builder setAccessNetworkTechnology( +                @NetworkType int accessNetworkTechnology) { +            mAccessNetworkTechnology = accessNetworkTechnology; +            return this; +        } + +        /** +         * Set the 5G NR connection status. +         * +         * @param nrStatus 5G NR connection status. +         * +         * @return The same instance of the builder. +         */ +        public @NonNull Builder setNrStatus(@NRStatus int nrStatus) { +            mNrStatus = nrStatus; +            return this; +        } + +        /** +         * Set the network reject cause. +         * +         * @param rejectCause Reason for denial if the registration state is +         * {@link #REG_STATE_DENIED}.Depending on {@code accessNetworkTechnology}, the values are +         * defined in 3GPP TS 24.008 10.5.3.6 for UMTS, 3GPP TS 24.301 9.9.3.9 for LTE, and 3GPP2 +         * A.S0001 6.2.2.44 for CDMA. If the reject cause is not supported or unknown, set it to 0. +         * +         * @return The same instance of the builder. +         */ +        public @NonNull Builder setRejectCause(int rejectCause) { +            mRejectCause = rejectCause; +            return this; +        } + +        /** +         * Set emergency only. +         * +         * @param emergencyOnly True if this network registration is for emergency use only. +         * +         * @return The same instance of the builder. +         */ +        public @NonNull Builder setEmergencyOnly(boolean emergencyOnly) { +            mEmergencyOnly = emergencyOnly; +            return this; +        } + +        /** +         * Set the available services. +         * +         * @param availableServices Available services. +         * +         * @return The same instance of the builder. +         */ +        public @NonNull Builder setAvailableServices( +                @NonNull @ServiceType int[] availableServices) { +            mAvailableServices = availableServices; +            return this; +        } + +        /** +         * Set the cell identity. +         * +         * @param cellIdentity The cell identity. +         * +         * @return The same instance of the builder. +         */ +        public @NonNull Builder setCellIdentity(@Nullable CellIdentity cellIdentity) { +            mCellIdentity = cellIdentity; +            return this; +        } + +        /** +         * Build the NetworkRegistrationState. +         * +         * @return the NetworkRegistrationState object. +         */ +        public @NonNull NetworkRegistrationState build() { +            return new NetworkRegistrationState(mDomain, mTransportType, mRegState, +                    mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, mAvailableServices, +                    mCellIdentity); +        } +    }  } diff --git a/telephony/java/android/telephony/NetworkService.java b/telephony/java/android/telephony/NetworkService.java index 6c45cc4ef3b8..f1240e9fcf34 100644 --- a/telephony/java/android/telephony/NetworkService.java +++ b/telephony/java/android/telephony/NetworkService.java @@ -17,6 +17,7 @@  package android.telephony;  import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.SystemApi;  import android.app.Service;  import android.content.Intent; @@ -26,6 +27,7 @@ import android.os.IBinder;  import android.os.Looper;  import android.os.Message;  import android.os.RemoteException; +import android.telephony.NetworkRegistrationState.Domain;  import android.util.SparseArray;  import com.android.internal.annotations.VisibleForTesting; @@ -81,36 +83,43 @@ public abstract class NetworkService extends Service {       * service is associated with one physical SIM slot.       */      public abstract class NetworkServiceProvider implements AutoCloseable { -        private final int mSlotId; +        private final int mSlotIndex;          private final List<INetworkServiceCallback>                  mNetworkRegistrationStateChangedCallbacks = new ArrayList<>(); -        public NetworkServiceProvider(int slotId) { -            mSlotId = slotId; +        /** +         * Constructor +         * @param slotIndex SIM slot id the data service provider associated with. +         */ +        public NetworkServiceProvider(int slotIndex) { +            mSlotIndex = slotIndex;          }          /** -         * @return SIM slot id the network service associated with. +         * @return SIM slot index the network service associated with.           */ -        public final int getSlotId() { -            return mSlotId; +        public final int getSlotIndex() { +            return mSlotIndex;          }          /**           * API to get network registration state. The result will be passed to the callback. -         * @param domain -         * @param callback -         * @return SIM slot id the network service associated with. +         * @param domain Network domain +         * @param callback The callback for reporting network registration state           */ -        public void getNetworkRegistrationState(int domain, NetworkServiceCallback callback) { +        public void getNetworkRegistrationState(@Domain int domain, +                                                @NonNull NetworkServiceCallback callback) {              callback.onGetNetworkRegistrationStateComplete(                      NetworkServiceCallback.RESULT_ERROR_UNSUPPORTED, null);          } +        /** +         * Notify the system that network registration state is changed. +         */          public final void notifyNetworkRegistrationStateChanged() {              mHandler.obtainMessage(NETWORK_SERVICE_INDICATION_NETWORK_STATE_CHANGED, -                    mSlotId, 0, null).sendToTarget(); +                    mSlotIndex, 0, null).sendToTarget();          }          private void registerForStateChanged(@NonNull INetworkServiceCallback callback) { @@ -152,23 +161,23 @@ public abstract class NetworkService extends Service {          @Override          public void handleMessage(Message message) { -            final int slotId = message.arg1; +            final int slotIndex = message.arg1;              final INetworkServiceCallback callback = (INetworkServiceCallback) message.obj; -            NetworkServiceProvider serviceProvider = mServiceMap.get(slotId); +            NetworkServiceProvider serviceProvider = mServiceMap.get(slotIndex);              switch (message.what) {                  case NETWORK_SERVICE_CREATE_NETWORK_SERVICE_PROVIDER:                      // If the service provider doesn't exist yet, we try to create it.                      if (serviceProvider == null) { -                        mServiceMap.put(slotId, createNetworkServiceProvider(slotId)); +                        mServiceMap.put(slotIndex, onCreateNetworkServiceProvider(slotIndex));                      }                      break;                  case NETWORK_SERVICE_REMOVE_NETWORK_SERVICE_PROVIDER:                      // If the service provider doesn't exist yet, we try to create it.                      if (serviceProvider != null) {                          serviceProvider.close(); -                        mServiceMap.remove(slotId); +                        mServiceMap.remove(slotIndex);                      }                      break;                  case NETWORK_SERVICE_REMOVE_ALL_NETWORK_SERVICE_PROVIDERS: @@ -221,12 +230,12 @@ public abstract class NetworkService extends Service {       * this method to facilitate the creation of {@link NetworkServiceProvider} instances. The system       * will call this method after binding the network service for each active SIM slot id.       * -     * @param slotId SIM slot id the network service associated with. +     * @param slotIndex SIM slot id the network service associated with.       * @return Network service object       */ -    protected abstract NetworkServiceProvider createNetworkServiceProvider(int slotId); +    @Nullable +    public abstract NetworkServiceProvider onCreateNetworkServiceProvider(int slotIndex); -    /** @hide */      @Override      public IBinder onBind(Intent intent) {          if (intent == null || !NETWORK_SERVICE_INTERFACE.equals(intent.getAction())) { @@ -237,7 +246,6 @@ public abstract class NetworkService extends Service {          return mBinder;      } -    /** @hide */      @Override      public boolean onUnbind(Intent intent) {          mHandler.obtainMessage(NETWORK_SERVICE_REMOVE_ALL_NETWORK_SERVICE_PROVIDERS, 0, @@ -250,6 +258,7 @@ public abstract class NetworkService extends Service {      @Override      public void onDestroy() {          mHandlerThread.quit(); +        super.onDestroy();      }      /** @@ -259,35 +268,35 @@ public abstract class NetworkService extends Service {      private class INetworkServiceWrapper extends INetworkService.Stub {          @Override -        public void createNetworkServiceProvider(int slotId) { -            mHandler.obtainMessage(NETWORK_SERVICE_CREATE_NETWORK_SERVICE_PROVIDER, slotId, +        public void createNetworkServiceProvider(int slotIndex) { +            mHandler.obtainMessage(NETWORK_SERVICE_CREATE_NETWORK_SERVICE_PROVIDER, slotIndex,                      0, null).sendToTarget();          }          @Override -        public void removeNetworkServiceProvider(int slotId) { -            mHandler.obtainMessage(NETWORK_SERVICE_REMOVE_NETWORK_SERVICE_PROVIDER, slotId, +        public void removeNetworkServiceProvider(int slotIndex) { +            mHandler.obtainMessage(NETWORK_SERVICE_REMOVE_NETWORK_SERVICE_PROVIDER, slotIndex,                      0, null).sendToTarget();          }          @Override          public void getNetworkRegistrationState( -                int slotId, int domain, INetworkServiceCallback callback) { -            mHandler.obtainMessage(NETWORK_SERVICE_GET_REGISTRATION_STATE, slotId, +                int slotIndex, int domain, INetworkServiceCallback callback) { +            mHandler.obtainMessage(NETWORK_SERVICE_GET_REGISTRATION_STATE, slotIndex,                      domain, callback).sendToTarget();          }          @Override          public void registerForNetworkRegistrationStateChanged( -                int slotId, INetworkServiceCallback callback) { -            mHandler.obtainMessage(NETWORK_SERVICE_REGISTER_FOR_STATE_CHANGE, slotId, +                int slotIndex, INetworkServiceCallback callback) { +            mHandler.obtainMessage(NETWORK_SERVICE_REGISTER_FOR_STATE_CHANGE, slotIndex,                      0, callback).sendToTarget();          }          @Override          public void unregisterForNetworkRegistrationStateChanged( -                int slotId,INetworkServiceCallback callback) { -            mHandler.obtainMessage(NETWORK_SERVICE_UNREGISTER_FOR_STATE_CHANGE, slotId, +                int slotIndex, INetworkServiceCallback callback) { +            mHandler.obtainMessage(NETWORK_SERVICE_UNREGISTER_FOR_STATE_CHANGE, slotIndex,                      0, callback).sendToTarget();          }      } diff --git a/telephony/java/android/telephony/NetworkServiceCallback.java b/telephony/java/android/telephony/NetworkServiceCallback.java index dbad02fd5640..c2fcfb7a0759 100644 --- a/telephony/java/android/telephony/NetworkServiceCallback.java +++ b/telephony/java/android/telephony/NetworkServiceCallback.java @@ -17,6 +17,7 @@  package android.telephony;  import android.annotation.IntDef; +import android.annotation.Nullable;  import android.annotation.SystemApi;  import android.os.RemoteException;  import android.telephony.NetworkService.NetworkServiceProvider; @@ -75,7 +76,8 @@ public class NetworkServiceCallback {       *                {@link NetworkServiceCallback#RESULT_ERROR_UNSUPPORTED}       * @param state The state information to be returned to callback.       */ -    public void onGetNetworkRegistrationStateComplete(int result, NetworkRegistrationState state) { +    public void onGetNetworkRegistrationStateComplete(int result, +                                                      @Nullable NetworkRegistrationState state) {          INetworkServiceCallback callback = mCallback.get();          if (callback != null) {              try { diff --git a/telephony/java/android/telephony/PhoneNumberRange.java b/telephony/java/android/telephony/PhoneNumberRange.java index dba803b2bc19..12df9b5b33fe 100644 --- a/telephony/java/android/telephony/PhoneNumberRange.java +++ b/telephony/java/android/telephony/PhoneNumberRange.java @@ -149,7 +149,7 @@ public final class PhoneNumberRange implements Parcelable {       * @param number A phone number, with or without separators or a country code.       * @return {@code true} if the number matches, {@code false} otherwise.       */ -    public boolean matches(String number) { +    public boolean matches(@NonNull String number) {          // Check the prefix, make sure it matches either with or without the country code.          String normalizedNumber = number.replaceAll("[^0-9]", "");          String prefixWithCountryCode = mCountryCode + mPrefix; diff --git a/telephony/java/android/telephony/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java index 3ce646cb400b..24319a230716 100644 --- a/telephony/java/android/telephony/PhoneStateListener.java +++ b/telephony/java/android/telephony/PhoneStateListener.java @@ -176,26 +176,21 @@ public class PhoneStateListener {      /**       * Listen for {@link PreciseCallState.State} of ringing, background and foreground calls. -     * {@more} -     * Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE -     * READ_PRECISE_PHONE_STATE}       *       * @hide       */ +    @RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))      @SystemApi      public static final int LISTEN_PRECISE_CALL_STATE                       = 0x00000800;      /**       * Listen for {@link PreciseDataConnectionState} on the data connection (cellular).       * -     * {@more} -     * Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE -     * READ_PRECISE_PHONE_STATE} -     *       * @see #onPreciseDataConnectionStateChanged       *       * @hide       */ +    @RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))      @SystemApi      public static final int LISTEN_PRECISE_DATA_CONNECTION_STATE            = 0x00001000; @@ -328,12 +323,10 @@ public class PhoneStateListener {      /**       * Listen for call disconnect causes which contains {@link DisconnectCause} and       * {@link PreciseDisconnectCause}. -     * {@more} -     * Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE -     * READ_PRECISE_PHONE_STATE}       *       * @hide       */ +    @RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))      @SystemApi      public static final int LISTEN_CALL_DISCONNECT_CAUSES                  = 0x02000000; @@ -353,13 +346,10 @@ public class PhoneStateListener {       * Listen for IMS call disconnect causes which contains       * {@link android.telephony.ims.ImsReasonInfo}       * -     * {@more} -     * Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE -     * READ_PRECISE_PHONE_STATE} -     *       * @see #onImsCallDisconnectCauseChanged(ImsReasonInfo)       * @hide       */ +    @RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))      @SystemApi      public static final int LISTEN_IMS_CALL_DISCONNECT_CAUSES              = 0x08000000; @@ -576,8 +566,9 @@ public class PhoneStateListener {       * @param callState {@link PreciseCallState}       * @hide       */ +    @RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))      @SystemApi -    public void onPreciseCallStateChanged(PreciseCallState callState) { +    public void onPreciseCallStateChanged(@NonNull PreciseCallState callState) {          // default implementation empty      } @@ -588,6 +579,7 @@ public class PhoneStateListener {       *       * @hide       */ +    @RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))      @SystemApi      public void onCallDisconnectCauseChanged(int disconnectCause, int preciseDisconnectCause) {          // default implementation empty @@ -599,6 +591,7 @@ public class PhoneStateListener {       *       * @hide       */ +    @RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))      @SystemApi      public void onImsCallDisconnectCauseChanged(@NonNull ImsReasonInfo imsReasonInfo) {          // default implementation empty @@ -610,9 +603,10 @@ public class PhoneStateListener {       *       * @hide       */ +    @RequiresPermission((android.Manifest.permission.READ_PRECISE_PHONE_STATE))      @SystemApi      public void onPreciseDataConnectionStateChanged( -            PreciseDataConnectionState dataConnectionState) { +            @NonNull PreciseDataConnectionState dataConnectionState) {          // default implementation empty      } diff --git a/telephony/java/android/telephony/PreciseDataConnectionState.java b/telephony/java/android/telephony/PreciseDataConnectionState.java index 57a18266259a..d59367821a5d 100644 --- a/telephony/java/android/telephony/PreciseDataConnectionState.java +++ b/telephony/java/android/telephony/PreciseDataConnectionState.java @@ -16,6 +16,8 @@  package android.telephony; +import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.SystemApi;  import android.annotation.UnsupportedAppUsage;  import android.net.LinkProperties; @@ -25,6 +27,7 @@ import android.telephony.data.ApnSetting;  import java.util.Objects; +  /**   * Contains precise data connection state.   * @@ -119,6 +122,7 @@ public final class PreciseDataConnectionState implements Parcelable {      /**       * Returns APN {@link ApnSetting} of this data connection.       */ +    @Nullable      public String getDataConnectionApn() {          return mAPN;      } diff --git a/telephony/java/android/telephony/PreciseDisconnectCause.java b/telephony/java/android/telephony/PreciseDisconnectCause.java index af88748af9e6..54980a29c0a6 100644 --- a/telephony/java/android/telephony/PreciseDisconnectCause.java +++ b/telephony/java/android/telephony/PreciseDisconnectCause.java @@ -23,7 +23,7 @@ import android.annotation.SystemApi;   * @hide   */  @SystemApi -public class PreciseDisconnectCause { +public final class PreciseDisconnectCause {      /** The disconnect cause is not valid (Not received a disconnect cause).*/      public static final int NOT_VALID                                        = -1; diff --git a/telephony/java/android/telephony/RadioAccessFamily.java b/telephony/java/android/telephony/RadioAccessFamily.java index c1786befb096..eb889c6171a0 100644 --- a/telephony/java/android/telephony/RadioAccessFamily.java +++ b/telephony/java/android/telephony/RadioAccessFamily.java @@ -22,6 +22,7 @@ import android.hardware.radio.V1_4.CellInfo.Info;  import android.os.Build;  import android.os.Parcel;  import android.os.Parcelable; +import android.telephony.TelephonyManager.PrefNetworkMode;  import com.android.internal.telephony.RILConstants; @@ -170,7 +171,8 @@ public class RadioAccessFamily implements Parcelable {      };      @UnsupportedAppUsage -    public static int getRafFromNetworkType(int type) { +    @TelephonyManager.NetworkTypeBitMask +    public static int getRafFromNetworkType(@PrefNetworkMode int type) {          switch (type) {              case RILConstants.NETWORK_MODE_WCDMA_PREF:                  return GSM | WCDMA; @@ -279,6 +281,7 @@ public class RadioAccessFamily implements Parcelable {      }      @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) +    @PrefNetworkMode      public static int getNetworkTypeFromRaf(int raf) {          raf = getAdjustedRaf(raf); diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index a1aee6d8217f..611812996b28 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.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.annotation.UnsupportedAppUsage; @@ -436,7 +438,11 @@ public class ServiceState implements Parcelable {      /**       * Construct a ServiceState object from the given parcel. +     * +     * @deprecated The constructor takes parcel should not be public at the beginning. Use +     * {@link #ServiceState()} instead.       */ +    @Deprecated      public ServiceState(Parcel in) {          mVoiceRegState = in.readInt();          mDataRegState = in.readInt(); @@ -1569,6 +1575,17 @@ public class ServiceState implements Parcelable {      /** @hide */      @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)      public @TelephonyManager.NetworkType int getDataNetworkType() { +        final NetworkRegistrationState iwlanRegState = getNetworkRegistrationState( +                NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WLAN); +        if (iwlanRegState != null +                && iwlanRegState.getRegState() == NetworkRegistrationState.REG_STATE_HOME) { +            // If the device is on IWLAN, return IWLAN as the network type. This is to simulate the +            // behavior of legacy mode device. In the future caller should use +            // getNetworkRegistrationState() to retrieve the actual data network type on cellular +            // or on IWLAN. +            return iwlanRegState.getAccessNetworkTechnology(); +        } +          final NetworkRegistrationState regState = getNetworkRegistrationState(                  NetworkRegistrationState.DOMAIN_PS, AccessNetworkConstants.TransportType.WWAN);          if (regState != null) { @@ -1749,6 +1766,7 @@ public class ServiceState implements Parcelable {       * @return List of {@link NetworkRegistrationState}       * @hide       */ +    @NonNull      @SystemApi      public List<NetworkRegistrationState> getNetworkRegistrationStates() {          synchronized (mNetworkRegistrationStates) { @@ -1765,6 +1783,7 @@ public class ServiceState implements Parcelable {       *       * @deprecated Use {@link #getNetworkRegistrationStatesFromTransportType(int)}       */ +    @NonNull      @Deprecated      @SystemApi      public List<NetworkRegistrationState> getNetworkRegistrationStates(int transportType) { @@ -1778,6 +1797,7 @@ public class ServiceState implements Parcelable {       * @return List of {@link NetworkRegistrationState}       * @hide       */ +    @NonNull      @SystemApi      public List<NetworkRegistrationState> getNetworkRegistrationStatesForTransportType(              int transportType) { @@ -1801,6 +1821,7 @@ public class ServiceState implements Parcelable {       * @return List of {@link NetworkRegistrationState}       * @hide       */ +    @NonNull      @SystemApi      public List<NetworkRegistrationState> getNetworkRegistrationStatesForDomain(              @Domain int domain) { @@ -1827,6 +1848,7 @@ public class ServiceState implements Parcelable {       *       * @deprecated Use {@link #getNetworkRegistrationState(int, int)}       */ +    @Nullable      @Deprecated      @SystemApi      public NetworkRegistrationState getNetworkRegistrationStates(@Domain int domain, @@ -1843,6 +1865,7 @@ public class ServiceState implements Parcelable {       * @hide       *       */ +    @Nullable      @SystemApi      public NetworkRegistrationState getNetworkRegistrationState(@Domain int domain,                                                                  int transportType) { diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java index d2ae106b5545..cab23747dd39 100644 --- a/telephony/java/android/telephony/SignalStrength.java +++ b/telephony/java/android/telephony/SignalStrength.java @@ -214,14 +214,53 @@ public class SignalStrength implements Parcelable {       * @see android.telephony#CellSignalStrengthCdma       * @see android.telephony#CellSignalStrengthGsm       */ -    public @NonNull List<CellSignalStrength> getCellSignalStrengths() { -        List<CellSignalStrength> cssList = new ArrayList<>(2); // Usually have 2 or fewer elems -        if (mLte.isValid()) cssList.add(mLte); -        if (mCdma.isValid()) cssList.add(mCdma); -        if (mTdscdma.isValid()) cssList.add(mTdscdma); -        if (mWcdma.isValid()) cssList.add(mWcdma); -        if (mGsm.isValid()) cssList.add(mGsm); -        if (mNr.isValid()) cssList.add(mNr); +    @NonNull public List<CellSignalStrength> getCellSignalStrengths() { +        return getCellSignalStrengths(CellSignalStrength.class); +    } + +    /** +     * Returns a List of CellSignalStrength Components of this SignalStrength Report. +     * +     * Use this API to access underlying +     * {@link android.telephony#CellSignalStrength CellSignalStrength} objects that provide more +     * granular information about the SignalStrength report. Only valid (non-empty) +     * CellSignalStrengths will be returned. The order of any returned elements is not guaranteed, +     * and the list may contain more than one instance of a CellSignalStrength type. +     * +     * @param clazz a class type that extends +     *        {@link android.telephony.CellSignalStrength CellSignalStrength} to filter possible +     *        return values. +     * @return a List of CellSignalStrength or an empty List if there are no valid measurements. +     * +     * @see android.telephony#CellSignalStrength +     * @see android.telephony#CellSignalStrengthNr +     * @see android.telephony#CellSignalStrengthLte +     * @see android.telephony#CellSignalStrengthTdscdma +     * @see android.telephony#CellSignalStrengthWcdma +     * @see android.telephony#CellSignalStrengthCdma +     * @see android.telephony#CellSignalStrengthGsm +     */ +    @NonNull public <T extends CellSignalStrength> List<T> getCellSignalStrengths( +            @NonNull Class<T> clazz) { +        List<T> cssList = new ArrayList<>(2); // Usually have 2 or fewer elems +        if (mLte.isValid() && clazz.isAssignableFrom(CellSignalStrengthLte.class)) { +            cssList.add((T) mLte); +        } +        if (mCdma.isValid() && clazz.isAssignableFrom(CellSignalStrengthCdma.class)) { +            cssList.add((T) mCdma); +        } +        if (mTdscdma.isValid() && clazz.isAssignableFrom(CellSignalStrengthTdscdma.class)) { +            cssList.add((T) mTdscdma); +        } +        if (mWcdma.isValid() && clazz.isAssignableFrom(CellSignalStrengthWcdma.class)) { +            cssList.add((T) mWcdma); +        } +        if (mGsm.isValid() && clazz.isAssignableFrom(CellSignalStrengthGsm.class)) { +            cssList.add((T) mGsm); +        } +        if (mNr.isValid() && clazz.isAssignableFrom(CellSignalStrengthNr.class)) { +            cssList.add((T) mNr); +        }          return cssList;      } diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 52cab556d11c..635e4fe92090 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -149,6 +149,7 @@ public class SubscriptionManager {       * {@link Uri#withAppendedPath(Uri, String)}.       * @hide       */ +    @NonNull      @SystemApi      public static final Uri WFC_ENABLED_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "wfc"); @@ -167,6 +168,7 @@ public class SubscriptionManager {       * {@link Uri#withAppendedPath(Uri, String)}.       * @hide       */ +    @NonNull      @SystemApi      public static final Uri ADVANCED_CALLING_ENABLED_CONTENT_URI = Uri.withAppendedPath(              CONTENT_URI, "advanced_calling"); @@ -184,6 +186,7 @@ public class SubscriptionManager {       * {@link Uri#withAppendedPath(Uri, String)}.       * @hide       */ +    @NonNull      @SystemApi      public static final Uri WFC_MODE_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "wfc_mode"); @@ -200,6 +203,7 @@ public class SubscriptionManager {       * {@link Uri#withAppendedPath(Uri, String)}.       * @hide       */ +    @NonNull      @SystemApi      public static final Uri WFC_ROAMING_MODE_CONTENT_URI = Uri.withAppendedPath(              CONTENT_URI, "wfc_roaming_mode"); @@ -218,6 +222,7 @@ public class SubscriptionManager {       * {@link Uri#withAppendedPath(Uri, String)}.       * @hide       */ +    @NonNull      @SystemApi      public static final Uri VT_ENABLED_CONTENT_URI = Uri.withAppendedPath(              CONTENT_URI, "vt_enabled"); @@ -235,6 +240,7 @@ public class SubscriptionManager {       * {@link Uri#withAppendedPath(Uri, String)}.       * @hide       */ +    @NonNull      @SystemApi      public static final Uri WFC_ROAMING_ENABLED_CONTENT_URI = Uri.withAppendedPath(              CONTENT_URI, "wfc_roaming_enabled"); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 80671e91c484..3db7218663c1 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -1344,17 +1344,32 @@ public class TelephonyManager {       */      public static final String EXTRA_RECOVERY_ACTION = "recoveryAction"; -    /** -     * The max value for the timeout passed in {@link #requestNumberVerification}. -     * @hide -     */ -    @SystemApi -    public static final long MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS = 60000; +    private static final long MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS = 60000;      /**       * Intent sent when an error occurs that debug tools should log and possibly take further       * action such as capturing vendor-specific logs.       * +     * A privileged application that reads these events should take appropriate vendor-specific +     * action to record the event and collect further information to assist in analysis, debugging, +     * and resolution of any associated issue. +     * +     * <p>This event should not be used for generic logging or diagnostic monitoring purposes and +     * should generally be sent at a low rate. Instead, this mechanism should be used for the +     * framework to notify a debugging application that an event (such as a bug) has occured +     * within the framework if that event should trigger the collection and preservation of other +     * more detailed device state for debugging. +     * +     * <p>At most one application can receive these events and should register a receiver in +     * in the application manifest. For performance reasons, if no application to receive these +     * events is detected at boot, then these events will not be sent. +     * +     * <p>Each event will include an {@link EXTRA_DEBUG_EVENT_ID} that will uniquely identify the +     * event that has occurred. Each event will be sent to the diagnostic monitor only once per +     * boot cycle (as another optimization). +     * +     * @see #EXTRA_DEBUG_EVENT_ID +     * @see #EXTRA_DEBUG_EVENT_DESCRIPTION       * @hide       */      @SystemApi @@ -1362,21 +1377,23 @@ public class TelephonyManager {      public static final String ACTION_DEBUG_EVENT = "android.telephony.action.DEBUG_EVENT";      /** -     * An arbitrary ParcelUuid which should be consistent for each occurrence of the same event. +     * An arbitrary ParcelUuid which should be consistent for each occurrence of a DebugEvent.       * -     * This field must be included in all events. +     * This field must be included in all {@link ACTION_DEBUG_EVENT} events.       * +     * @see #ACTION_DEBUG_EVENT       * @hide       */      @SystemApi      public static final String EXTRA_DEBUG_EVENT_ID = "android.telephony.extra.DEBUG_EVENT_ID";      /** -     * A freeform string description of the event. +     * A freeform string description of the DebugEvent.       * -     * This field is optional for all events and as a guideline should not exceed 80 characters -     * and should be as short as possible to convey the essence of the event. +     * This field is optional for all {@link ACTION_DEBUG_EVENT}s, as a guideline should not +     * exceed 80 characters, and should be as short as possible to convey the essence of the event.       * +     * @see #ACTION_DEBUG_EVENT       * @hide       */      @SystemApi @@ -1522,6 +1539,7 @@ public class TelephonyManager {       * Returns the Type Allocation Code from the IMEI. Return null if Type Allocation Code is not       * available.       */ +    @Nullable      public String getTypeAllocationCode() {          return getTypeAllocationCode(getSlotIndex());      } @@ -1532,6 +1550,7 @@ public class TelephonyManager {       *       * @param slotIndex of which Type Allocation Code is returned       */ +    @Nullable      public String getTypeAllocationCode(int slotIndex) {          ITelephony telephony = getITelephony();          if (telephony == null) return null; @@ -1584,6 +1603,7 @@ public class TelephonyManager {       * Returns the Manufacturer Code from the MEID. Return null if Manufacturer Code is not       * available.       */ +    @Nullable      public String getManufacturerCode() {          return getManufacturerCode(getSlotIndex());      } @@ -1594,6 +1614,7 @@ public class TelephonyManager {       *       * @param slotIndex of which Type Allocation Code is returned       */ +    @Nullable      public String getManufacturerCode(int slotIndex) {          ITelephony telephony = getITelephony();          if (telephony == null) return null; @@ -1970,6 +1991,15 @@ public class TelephonyManager {          return cmdline;      } +    /** +     * @return The max value for the timeout passed in {@link #requestNumberVerification}. +     * @hide +     */ +    @SystemApi +    public static long getMaxNumberVerificationTimeoutMillis() { +        return MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS; +    } +      /** Kernel command line */      private static final String sKernelCmdLine = getProcCmdLine(); @@ -2736,8 +2766,8 @@ public class TelephonyManager {       * (see {@link #hasCarrierPrivileges}).       * <p>       * These "secret codes" are used to activate developer menus by dialing certain codes. -     * And they are of the form {@code *#*#<code>#*#*}. The intent will have the data -     * URI: {@code android_secret_code://<code>}. It is possible that a manifest +     * And they are of the form {@code *#*#<code>#*#*}. The intent will have the data +     * URI: {@code android_secret_code://<code>}. It is possible that a manifest       * receiver would be woken up even if it is not currently running.       * <p>       * It is supposed to replace {@link android.provider.Telephony.Sms.Intents#SECRET_CODE_ACTION} @@ -3181,6 +3211,7 @@ public class TelephonyManager {       * the caller does not have adequate permissions for that card.       */      @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) +    @NonNull      public List<UiccCardInfo> getUiccCardsInfo() {          try {              ITelephony telephony = getITelephony(); @@ -4448,6 +4479,7 @@ public class TelephonyManager {       * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE}       * @hide       */ +    @Nullable      @SystemApi      @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)      public String getIsimDomain() { @@ -5696,8 +5728,8 @@ public class TelephonyManager {       *       * @hide       * @param range The range of phone numbers the caller expects a phone call from. -     * @param timeoutMillis The amount of time to wait for such a call, or -     *                      {@link #MAX_NUMBER_VERIFICATION_TIMEOUT_MILLIS}, whichever is lesser. +     * @param timeoutMillis The amount of time to wait for such a call, or the value of +     *                      {@link #getMaxNumberVerificationTimeoutMillis()}, whichever is lesser.       * @param executor The {@link Executor} that callbacks should be executed on.       * @param callback The callback to use for delivering results.       */ @@ -5953,6 +5985,7 @@ public class TelephonyManager {       * @return IMS Service Table or null if not present or not loaded       * @hide       */ +    @Nullable      @SystemApi      @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)      public String getIsimIst() { @@ -6804,12 +6837,12 @@ public class TelephonyManager {       * app has carrier privileges (see {@link #hasCarrierPrivileges}).       *       * @param subId the id of the subscription to set the preferred network type for. -     * @param networkType the preferred network type, defined in RILConstants.java. +     * @param networkType the preferred network type       * @return true on success; false on any failure.       * @hide       */      @UnsupportedAppUsage -    public boolean setPreferredNetworkType(int subId, int networkType) { +    public boolean setPreferredNetworkType(int subId, @PrefNetworkMode int networkType) {          try {              ITelephony telephony = getITelephony();              if (telephony != null) { @@ -6879,14 +6912,12 @@ public class TelephonyManager {      }      /** -     * Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning -     * SystemProperty to decide whether DUN APN is required for -     * tethering. +     * Check whether DUN APN is required for tethering.       * -     * @return 0: Not required. 1: required. 2: Not set. +     * @return {@code true} if DUN APN is required for tethering.       * @hide       */ -    public int getTetherApnRequired() { +    public boolean getTetherApnRequired() {          try {              ITelephony telephony = getITelephony();              if (telephony != null) @@ -6896,7 +6927,7 @@ public class TelephonyManager {          } catch (NullPointerException ex) {              Rlog.e(TAG, "hasMatchedTetherApnSetting NPE", ex);          } -        return 2; +        return false;      } @@ -8640,24 +8671,26 @@ public class TelephonyManager {      /** -     * Returns a well-formed IETF BCP 47 language tag representing the locale from the SIM, e.g, -     * en-US. Returns {@code null} if no locale could be derived from subscriptions. +     * Returns a locale based on the country and language from the SIM. Returns {@code null} if +     * no locale could be derived from subscriptions.       *       * <p>Requires Permission:       * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE}       *       * @see Locale#toLanguageTag() -     * @see Locale#forLanguageTag(String)       *       * @hide       */      @SystemApi      @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) -    @Nullable public String getSimLocale() { +    @Nullable public Locale getSimLocale() {          try {              final ITelephony telephony = getITelephony();              if (telephony != null) { -                return telephony.getSimLocaleForSubscriber(getSubId()); +                String languageTag = telephony.getSimLocaleForSubscriber(getSubId()); +                if (!TextUtils.isEmpty(languageTag)) { +                    return Locale.forLanguageTag(languageTag); +                }              }          } catch (RemoteException ex) {          } @@ -9021,6 +9054,7 @@ public class TelephonyManager {       * @return Application ID for specified app type or {@code null} if no uicc or error.       * @hide       */ +    @Nullable      @SystemApi      @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)      public String getAidForAppType(@UiccAppType int appType) { @@ -10219,24 +10253,25 @@ public class TelephonyManager {      /**       * Returns if the usage of multiple SIM cards at the same time to register on the network -     * (e.g. Dual Standby or Dual Active) is restricted. +     * (e.g. Dual Standby or Dual Active) is supported by the device and by the carrier.       * -     * @return true if usage of multiple SIMs is restricted, false otherwise. +     * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} +     * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).       * -     * @hide +     * @return true if usage of multiple SIMs is supported, false otherwise.       */ -    @SystemApi -    @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) -    public boolean isMultisimCarrierRestricted() { +    @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges +    @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) +    public boolean isMultisimSupported() {          try {              ITelephony service = getITelephony();              if (service != null) { -                return service.isMultisimCarrierRestricted(); +                return service.isMultisimSupported(getOpPackageName());              }          } catch (RemoteException e) { -            Log.e(TAG, "isMultisimCarrierRestricted RemoteException", e); +            Log.e(TAG, "isMultisimSupported RemoteException", e);          } -        return true; +        return false;      }      /** @@ -10265,18 +10300,16 @@ public class TelephonyManager {       * <p>Requires Permission:       * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} or that the       * calling app has carrier privileges (see {@link #hasCarrierPrivileges}). +     * +     * Note: with only carrier privileges, it is not allowed to switch from multi-sim +     * to single-sim +     *       * @param numOfSims number of live SIMs we want to switch to       * @throws android.os.RemoteException       */      @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges      @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)      public void switchMultiSimConfig(int numOfSims) { -        //only proceed if multi-sim is not restricted -        if (isMultisimCarrierRestricted()) { -            Rlog.e(TAG, "switchMultiSimConfig not possible. It is restricted."); -            return; -        } -          try {              ITelephony telephony = getITelephony();              if (telephony != null) { diff --git a/telephony/java/android/telephony/UiccCardInfo.java b/telephony/java/android/telephony/UiccCardInfo.java index 19f357a14687..d95a4992f808 100644 --- a/telephony/java/android/telephony/UiccCardInfo.java +++ b/telephony/java/android/telephony/UiccCardInfo.java @@ -15,6 +15,8 @@   */  package android.telephony; +import android.annotation.NonNull; +import android.annotation.Nullable;  import android.os.Parcel;  import android.os.Parcelable; @@ -30,6 +32,7 @@ public final class UiccCardInfo implements Parcelable {      private final String mEid;      private final String mIccId;      private final int mSlotIndex; +    private final boolean mIsRemovable;      public static final Creator<UiccCardInfo> CREATOR = new Creator<UiccCardInfo>() {          @Override @@ -49,6 +52,7 @@ public final class UiccCardInfo implements Parcelable {          mEid = in.readString();          mIccId = in.readString();          mSlotIndex = in.readInt(); +        mIsRemovable = in.readByte() != 0;      }      @Override @@ -58,6 +62,7 @@ public final class UiccCardInfo implements Parcelable {          dest.writeString(mEid);          dest.writeString(mIccId);          dest.writeInt(mSlotIndex); +        dest.writeByte((byte) (mIsRemovable ? 1 : 0));      }      @Override @@ -65,16 +70,21 @@ public final class UiccCardInfo implements Parcelable {          return 0;      } -    public UiccCardInfo(boolean isEuicc, int cardId, String eid, String iccId, int slotIndex) { +    /** +     * @hide +     */ +    public UiccCardInfo(boolean isEuicc, int cardId, String eid, String iccId, int slotIndex, +            boolean isRemovable) {          this.mIsEuicc = isEuicc;          this.mCardId = cardId;          this.mEid = eid;          this.mIccId = iccId;          this.mSlotIndex = slotIndex; +        this.mIsRemovable = isRemovable;      }      /** -     * Return whether the UiccCardInfo is an eUICC. +     * Return whether the UICC is an eUICC.       * @return true if the UICC is an eUICC.       */      public boolean isEuicc() { @@ -96,6 +106,7 @@ public final class UiccCardInfo implements Parcelable {       * Note that this field may be omitted if the caller does not have the correct permissions       * (see {@link TelephonyManager#getUiccCardsInfo()}).       */ +    @Nullable      public String getEid() {          if (!mIsEuicc) {              return null; @@ -109,6 +120,7 @@ public final class UiccCardInfo implements Parcelable {       * Note that this field may be omitted if the caller does not have the correct permissions       * (see {@link TelephonyManager#getUiccCardsInfo()}).       */ +    @Nullable      public String getIccId() {          return mIccId;      } @@ -121,13 +133,24 @@ public final class UiccCardInfo implements Parcelable {      }      /** -     * Returns a copy of the UiccCardinfo with the clears the EID and ICCID set to null. These -     * values are generally private and require carrier privileges to view. +     * Returns a copy of the UiccCardinfo with the EID and ICCID set to null. These values are +     * generally private and require carrier privileges to view.       *       * @hide       */ +    @NonNull      public UiccCardInfo getUnprivileged() { -        return new UiccCardInfo(mIsEuicc, mCardId, null, null, mSlotIndex); +        return new UiccCardInfo(mIsEuicc, mCardId, null, null, mSlotIndex, mIsRemovable); +    } + +    /** +     * Return whether the UICC or eUICC is removable. +     * <p> +     * UICCs are generally removable, but eUICCs may be removable or built in to the device. +     * @return true if the UICC or eUICC is removable +     */ +    public boolean isRemovable() { +        return mIsRemovable;      }      @Override @@ -144,12 +167,13 @@ public final class UiccCardInfo implements Parcelable {                  && (mCardId == that.mCardId)                  && (Objects.equals(mEid, that.mEid))                  && (Objects.equals(mIccId, that.mIccId)) -                && (mSlotIndex == that.mSlotIndex)); +                && (mSlotIndex == that.mSlotIndex) +                && (mIsRemovable == that.mIsRemovable));      }      @Override      public int hashCode() { -        return Objects.hash(mIsEuicc, mCardId, mEid, mIccId, mSlotIndex); +        return Objects.hash(mIsEuicc, mCardId, mEid, mIccId, mSlotIndex, mIsRemovable);      }      @Override @@ -164,6 +188,8 @@ public final class UiccCardInfo implements Parcelable {                  + mIccId                  + ", mSlotIndex="                  + mSlotIndex +                + ", mIsRemovable=" +                + mIsRemovable                  + ")";      }  } diff --git a/telephony/java/android/telephony/UiccSlotInfo.java b/telephony/java/android/telephony/UiccSlotInfo.java index a39992b17f8e..93a7da04c56e 100644 --- a/telephony/java/android/telephony/UiccSlotInfo.java +++ b/telephony/java/android/telephony/UiccSlotInfo.java @@ -15,15 +15,15 @@   */  package android.telephony; +import android.annotation.IntDef;  import android.annotation.SystemApi;  import android.os.Parcel;  import android.os.Parcelable; +  import java.lang.annotation.Retention;  import java.lang.annotation.RetentionPolicy;  import java.util.Objects; -import android.annotation.IntDef; -  /**   * Class for the information of a UICC slot.   * @hide @@ -61,6 +61,7 @@ public class UiccSlotInfo implements Parcelable {      private final @CardStateInfo int mCardStateInfo;      private final int mLogicalSlotIdx;      private final boolean mIsExtendedApduSupported; +    private final boolean mIsRemovable;      public static final Creator<UiccSlotInfo> CREATOR = new Creator<UiccSlotInfo>() {          @Override @@ -81,6 +82,7 @@ public class UiccSlotInfo implements Parcelable {          mCardStateInfo = in.readInt();          mLogicalSlotIdx = in.readInt();          mIsExtendedApduSupported = in.readByte() != 0; +        mIsRemovable = in.readByte() != 0;      }      @Override @@ -91,6 +93,7 @@ public class UiccSlotInfo implements Parcelable {          dest.writeInt(mCardStateInfo);          dest.writeInt(mLogicalSlotIdx);          dest.writeByte((byte) (mIsExtendedApduSupported ? 1 : 0)); +        dest.writeByte((byte) (mIsRemovable ? 1 : 0));      }      @Override @@ -98,6 +101,11 @@ public class UiccSlotInfo implements Parcelable {          return 0;      } +    /** +     * Construct a UiccSlotInfo. +     * @deprecated apps should not be constructing UiccSlotInfo objects +     */ +    @Deprecated      public UiccSlotInfo(boolean isActive, boolean isEuicc, String cardId,              @CardStateInfo int cardStateInfo, int logicalSlotIdx, boolean isExtendedApduSupported) {          this.mIsActive = isActive; @@ -106,6 +114,22 @@ public class UiccSlotInfo implements Parcelable {          this.mCardStateInfo = cardStateInfo;          this.mLogicalSlotIdx = logicalSlotIdx;          this.mIsExtendedApduSupported = isExtendedApduSupported; +        this.mIsRemovable = false; +    } + +    /** +     * @hide +     */ +    public UiccSlotInfo(boolean isActive, boolean isEuicc, String cardId, +            @CardStateInfo int cardStateInfo, int logicalSlotIdx, boolean isExtendedApduSupported, +            boolean isRemovable) { +        this.mIsActive = isActive; +        this.mIsEuicc = isEuicc; +        this.mCardId = cardId; +        this.mCardStateInfo = cardStateInfo; +        this.mLogicalSlotIdx = logicalSlotIdx; +        this.mIsExtendedApduSupported = isExtendedApduSupported; +        this.mIsRemovable = isRemovable;      }      public boolean getIsActive() { @@ -136,6 +160,16 @@ public class UiccSlotInfo implements Parcelable {          return mIsExtendedApduSupported;      } +   /** +     * Return whether the UICC slot is for a removable UICC. +     * <p> +     * UICCs are generally removable, but eUICCs may be removable or built in to the device. +     * @return true if the slot is for removable UICCs +     */ +    public boolean isRemovable() { +        return mIsRemovable; +    } +      @Override      public boolean equals(Object obj) {          if (this == obj) { @@ -151,7 +185,8 @@ public class UiccSlotInfo implements Parcelable {                  && (Objects.equals(mCardId, that.mCardId))                  && (mCardStateInfo == that.mCardStateInfo)                  && (mLogicalSlotIdx == that.mLogicalSlotIdx) -                && (mIsExtendedApduSupported == that.mIsExtendedApduSupported); +                && (mIsExtendedApduSupported == that.mIsExtendedApduSupported) +                && (mIsRemovable == that.mIsRemovable);      }      @Override @@ -163,6 +198,7 @@ public class UiccSlotInfo implements Parcelable {          result = 31 * result + mCardStateInfo;          result = 31 * result + mLogicalSlotIdx;          result = 31 * result + (mIsExtendedApduSupported ? 1 : 0); +        result = 31 * result + (mIsRemovable ? 1 : 0);          return result;      } @@ -180,6 +216,8 @@ public class UiccSlotInfo implements Parcelable {                  + mLogicalSlotIdx                  + ", mIsExtendedApduSupported="                  + mIsExtendedApduSupported +                + ", mIsRemovable=" +                + mIsRemovable                  + ")";      }  } diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java index 0e695309fce2..c802e633b76c 100644 --- a/telephony/java/android/telephony/data/ApnSetting.java +++ b/telephony/java/android/telephony/data/ApnSetting.java @@ -19,7 +19,7 @@ import android.annotation.IntDef;  import android.annotation.NonNull;  import android.content.ContentValues;  import android.database.Cursor; -import android.hardware.radio.V1_0.ApnTypes; +import android.hardware.radio.V1_4.ApnTypes;  import android.net.Uri;  import android.os.Parcel;  import android.os.Parcelable; @@ -61,6 +61,7 @@ public class ApnSetting implements Parcelable {      private static final String V4_FORMAT_REGEX = "^\\[ApnSettingV4\\]\\s*";      private static final String V5_FORMAT_REGEX = "^\\[ApnSettingV5\\]\\s*";      private static final String V6_FORMAT_REGEX = "^\\[ApnSettingV6\\]\\s*"; +    private static final String V7_FORMAT_REGEX = "^\\[ApnSettingV7\\]\\s*";      /**       * Default value for mtu if it's not set. Moved from PhoneConstants. @@ -79,7 +80,7 @@ public class ApnSetting implements Parcelable {       * APN type for all APNs.       * @hide       */ -    public static final int TYPE_ALL = ApnTypes.ALL; +    public static final int TYPE_ALL = ApnTypes.ALL | ApnTypes.MCX;      /** APN type for default data traffic. */      public static final int TYPE_DEFAULT = ApnTypes.DEFAULT | ApnTypes.HIPRI;      /** APN type for MMS traffic. */ @@ -103,6 +104,8 @@ public class ApnSetting implements Parcelable {       * for access to carrier services in an emergency call situation.       */      public static final int TYPE_EMERGENCY = ApnTypes.EMERGENCY; +    /** APN type for MCX (Mission Critical Service) where X can be PTT/Video/Data */ +    public static final int TYPE_MCX = ApnTypes.MCX;      /** @hide */      @IntDef(flag = true, prefix = { "TYPE_" }, value = { @@ -115,7 +118,8 @@ public class ApnSetting implements Parcelable {          TYPE_IMS,          TYPE_CBS,          TYPE_IA, -        TYPE_EMERGENCY +        TYPE_EMERGENCY, +        TYPE_MCX      })      @Retention(RetentionPolicy.SOURCE)      public @interface ApnType {} @@ -206,6 +210,7 @@ public class ApnSetting implements Parcelable {          APN_TYPE_STRING_MAP.put("cbs", TYPE_CBS);          APN_TYPE_STRING_MAP.put("ia", TYPE_IA);          APN_TYPE_STRING_MAP.put("emergency", TYPE_EMERGENCY); +        APN_TYPE_STRING_MAP.put("mcx", TYPE_MCX);          APN_TYPE_INT_MAP = new ArrayMap<Integer, String>();          APN_TYPE_INT_MAP.put(TYPE_DEFAULT, "default");          APN_TYPE_INT_MAP.put(TYPE_MMS, "mms"); @@ -217,6 +222,7 @@ public class ApnSetting implements Parcelable {          APN_TYPE_INT_MAP.put(TYPE_CBS, "cbs");          APN_TYPE_INT_MAP.put(TYPE_IA, "ia");          APN_TYPE_INT_MAP.put(TYPE_EMERGENCY, "emergency"); +        APN_TYPE_INT_MAP.put(TYPE_MCX, "mcx");          PROTOCOL_STRING_MAP = new ArrayMap<String, Integer>();          PROTOCOL_STRING_MAP.put("IP", PROTOCOL_IP); @@ -281,6 +287,8 @@ public class ApnSetting implements Parcelable {      private boolean mPermanentFailed = false;      private final int mCarrierId; +    private final int mSkip464Xlat; +      /**       * Returns the MTU size of the mobile interface to which the APN connected.       * @@ -618,6 +626,17 @@ public class ApnSetting implements Parcelable {          return mCarrierId;      } +    /** +     * Returns the skip464xlat flag for this APN. +     * +     * @return SKIP_464XLAT_DEFAULT, SKIP_464XLAT_DISABLE or SKIP_464XLAT_ENABLE +     * @hide +     */ +    @Carriers.Skip464XlatStatus +    public int getSkip464Xlat() { +        return mSkip464Xlat; +    } +      private ApnSetting(Builder builder) {          this.mEntryName = builder.mEntryName;          this.mApnName = builder.mApnName; @@ -646,6 +665,7 @@ public class ApnSetting implements Parcelable {          this.mMvnoMatchData = builder.mMvnoMatchData;          this.mApnSetId = builder.mApnSetId;          this.mCarrierId = builder.mCarrierId; +        this.mSkip464Xlat = builder.mSkip464Xlat;      }      /** @@ -657,7 +677,7 @@ public class ApnSetting implements Parcelable {              int authType, int mApnTypeBitmask, int protocol, int roamingProtocol,              boolean carrierEnabled, int networkTypeBitmask, int profileId,              boolean modemCognitive, int maxConns, int waitTime, int maxConnsTime, int mtu, -            int mvnoType, String mvnoMatchData, int apnSetId, int carrierId) { +            int mvnoType, String mvnoMatchData, int apnSetId, int carrierId, int skip464xlat) {          return new Builder()              .setId(id)              .setOperatorNumeric(operatorNumeric) @@ -686,6 +706,7 @@ public class ApnSetting implements Parcelable {              .setMvnoMatchData(mvnoMatchData)              .setApnSetId(apnSetId)              .setCarrierId(carrierId) +            .setSkip464Xlat(skip464xlat)              .buildWithoutCheck();      } @@ -703,7 +724,8 @@ public class ApnSetting implements Parcelable {              mmsc, mmsProxyAddress, mmsProxyPort, user, password, authType, mApnTypeBitmask,              protocol, roamingProtocol, carrierEnabled, networkTypeBitmask, profileId,              modemCognitive, maxConns, waitTime, maxConnsTime, mtu, mvnoType, mvnoMatchData, -            Carriers.NO_APN_SET_ID, TelephonyManager.UNKNOWN_CARRIER_ID); +            Carriers.NO_APN_SET_ID, TelephonyManager.UNKNOWN_CARRIER_ID, +            Carriers.SKIP_464XLAT_DEFAULT);      }      /** @@ -762,7 +784,8 @@ public class ApnSetting implements Parcelable {              cursor.getString(cursor.getColumnIndexOrThrow(                  Telephony.Carriers.MVNO_MATCH_DATA)),              cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.APN_SET_ID)), -            cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.CARRIER_ID))); +            cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.CARRIER_ID)), +            cursor.getInt(cursor.getColumnIndexOrThrow(Carriers.SKIP_464XLAT)));      }      /** @@ -775,7 +798,7 @@ public class ApnSetting implements Parcelable {              apn.mProtocol, apn.mRoamingProtocol, apn.mCarrierEnabled, apn.mNetworkTypeBitmask,              apn.mProfileId, apn.mPersistent, apn.mMaxConns, apn.mWaitTime,              apn.mMaxConnsTime, apn.mMtu, apn.mMvnoType, apn.mMvnoMatchData, apn.mApnSetId, -            apn.mCarrierId); +            apn.mCarrierId, apn.mSkip464Xlat);      }      /** @@ -824,6 +847,13 @@ public class ApnSetting implements Parcelable {       *   <profileId>, <modemCognitive>, <maxConns>, <waitTime>, <maxConnsTime>, <mtu>,       *   <mvnoType>, <mvnoMatchData>, <networkTypeBitmask>, <apnSetId>, <carrierId>       * +     * v7 format: +     *   [ApnSettingV7] <carrier>, <apn>, <proxy>, <port>, <user>, <password>, <server>, +     *   <mmsc>, <mmsproxy>, <mmsport>, <mcc>, <mnc>, <authtype>, +     *   <type>[| <type>...], <protocol>, <roaming_protocol>, <carrierEnabled>, <bearerBitmask>, +     *   <profileId>, <modemCognitive>, <maxConns>, <waitTime>, <maxConnsTime>, <mtu>, +     *   <mvnoType>, <mvnoMatchData>, <networkTypeBitmask>, <apnSetId>, <carrierId>, <skip464xlat> +     *       * Note that the strings generated by {@link #toString()} do not contain the username       * and password and thus cannot be read by this method.       * @@ -836,7 +866,10 @@ public class ApnSetting implements Parcelable {          int version;          // matches() operates on the whole string, so append .* to the regex. -        if (data.matches(V6_FORMAT_REGEX + ".*")) { +        if (data.matches(V7_FORMAT_REGEX + ".*")) { +            version = 7; +            data = data.replaceFirst(V7_FORMAT_REGEX, ""); +        } else if (data.matches(V6_FORMAT_REGEX + ".*")) {              version = 6;              data = data.replaceFirst(V6_FORMAT_REGEX, "");          } else if (data.matches(V5_FORMAT_REGEX + ".*")) { @@ -882,6 +915,7 @@ public class ApnSetting implements Parcelable {          String mvnoMatchData = "";          int apnSetId = Carriers.NO_APN_SET_ID;          int carrierId = TelephonyManager.UNKNOWN_CARRIER_ID; +        int skip464xlat = Carriers.SKIP_464XLAT_DEFAULT;          if (version == 1) {              typeArray = new String[a.length - 13];              System.arraycopy(a, 13, typeArray, 0, a.length - 13); @@ -928,6 +962,12 @@ public class ApnSetting implements Parcelable {              if (a.length > 28) {                  carrierId = Integer.parseInt(a[28]);              } +            if (a.length > 29) { +                try { +                    skip464xlat = Integer.parseInt(a[29]); +                } catch (NumberFormatException e) { +                } +            }          }          // If both bearerBitmask and networkTypeBitmask were specified, bearerBitmask would be @@ -943,7 +983,7 @@ public class ApnSetting implements Parcelable {              getProtocolIntFromString(protocol), getProtocolIntFromString(roamingProtocol),              carrierEnabled, networkTypeBitmask, profileId, modemCognitive, maxConns, waitTime,              maxConnsTime, mtu, getMvnoTypeIntFromString(mvnoType), mvnoMatchData, apnSetId, -            carrierId); +            carrierId, skip464xlat);      }      /** @@ -979,7 +1019,7 @@ public class ApnSetting implements Parcelable {       */      public String toString() {          StringBuilder sb = new StringBuilder(); -        sb.append("[ApnSettingV6] ") +        sb.append("[ApnSettingV7] ")                  .append(mEntryName)                  .append(", ").append(mId)                  .append(", ").append(mOperatorNumeric) @@ -1007,6 +1047,7 @@ public class ApnSetting implements Parcelable {          sb.append(", ").append(mNetworkTypeBitmask);          sb.append(", ").append(mApnSetId);          sb.append(", ").append(mCarrierId); +        sb.append(", ").append(mSkip464Xlat);          return sb.toString();      } @@ -1100,7 +1141,8 @@ public class ApnSetting implements Parcelable {              && Objects.equals(mMvnoMatchData, other.mMvnoMatchData)              && Objects.equals(mNetworkTypeBitmask, other.mNetworkTypeBitmask)              && Objects.equals(mApnSetId, other.mApnSetId) -            && Objects.equals(mCarrierId, other.mCarrierId); +            && Objects.equals(mCarrierId, other.mCarrierId) +            && Objects.equals(mSkip464Xlat, other.mSkip464Xlat);      }      /** @@ -1146,7 +1188,8 @@ public class ApnSetting implements Parcelable {              && Objects.equals(mMvnoType, other.mMvnoType)              && Objects.equals(mMvnoMatchData, other.mMvnoMatchData)              && Objects.equals(mApnSetId, other.mApnSetId) -            && Objects.equals(mCarrierId, other.mCarrierId); +            && Objects.equals(mCarrierId, other.mCarrierId) +            && Objects.equals(mSkip464Xlat, other.mSkip464Xlat);      }      /** @@ -1174,7 +1217,8 @@ public class ApnSetting implements Parcelable {              && xorEqualsInt(this.mMmsProxyPort, other.mMmsProxyPort))              && Objects.equals(this.mNetworkTypeBitmask, other.mNetworkTypeBitmask)              && Objects.equals(mApnSetId, other.mApnSetId) -            && Objects.equals(mCarrierId, other.mCarrierId); +            && Objects.equals(mCarrierId, other.mCarrierId) +            && Objects.equals(mSkip464Xlat, other.mSkip464Xlat);      }      // Equal or one is null. @@ -1221,6 +1265,7 @@ public class ApnSetting implements Parcelable {          apnValue.put(Telephony.Carriers.MVNO_TYPE, getMvnoTypeStringFromInt(mMvnoType));          apnValue.put(Telephony.Carriers.NETWORK_TYPE_BITMASK, mNetworkTypeBitmask);          apnValue.put(Telephony.Carriers.CARRIER_ID, mCarrierId); +        apnValue.put(Telephony.Carriers.SKIP_464XLAT, mSkip464Xlat);          return apnValue;      } @@ -1380,6 +1425,7 @@ public class ApnSetting implements Parcelable {          dest.writeInt(mNetworkTypeBitmask);          dest.writeInt(mApnSetId);          dest.writeInt(mCarrierId); +        dest.writeInt(mSkip464Xlat);      }      private static ApnSetting readFromParcel(Parcel in) { @@ -1403,11 +1449,12 @@ public class ApnSetting implements Parcelable {          final int networkTypeBitmask = in.readInt();          final int apnSetId = in.readInt();          final int carrierId = in.readInt(); +        final int skip464xlat = in.readInt();          return makeApnSetting(id, operatorNumeric, entryName, apnName, -            proxy, port, mmsc, mmsProxy, mmsPort, user, password, authType, apnTypesBitmask, -            protocol, roamingProtocol, carrierEnabled, networkTypeBitmask, 0, false, -            0, 0, 0, 0, mvnoType, null, apnSetId, carrierId); +                proxy, port, mmsc, mmsProxy, mmsPort, user, password, authType, apnTypesBitmask, +                protocol, roamingProtocol, carrierEnabled, networkTypeBitmask, 0, false, +                0, 0, 0, 0, mvnoType, null, apnSetId, carrierId, skip464xlat);      }      public static final Parcelable.Creator<ApnSetting> CREATOR = @@ -1484,6 +1531,7 @@ public class ApnSetting implements Parcelable {          private String mMvnoMatchData;          private int mApnSetId;          private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID; +        private int mSkip464Xlat = Carriers.SKIP_464XLAT_DEFAULT;          /**           * Default constructor for Builder. @@ -1826,6 +1874,17 @@ public class ApnSetting implements Parcelable {          }          /** +         * Sets skip464xlat flag for this APN. +         * +         * @param skip464xlat skip464xlat for this APN +         * @hide +         */ +        public Builder setSkip464Xlat(@Carriers.Skip464XlatStatus int skip464xlat) { +            this.mSkip464Xlat = skip464xlat; +            return this; +        } + +        /**           * Builds {@link ApnSetting} from this builder.           *           * @return {@code null} if {@link #setApnName(String)} or {@link #setEntryName(String)} @@ -1833,7 +1892,7 @@ public class ApnSetting implements Parcelable {           * {@link ApnSetting} built from this builder otherwise.           */          public ApnSetting build() { -            if ((mApnTypeBitmask & ApnTypes.ALL) == 0 || TextUtils.isEmpty(mApnName) +            if ((mApnTypeBitmask & TYPE_ALL) == 0 || TextUtils.isEmpty(mApnName)                  || TextUtils.isEmpty(mEntryName)) {                  return null;              } diff --git a/telephony/java/android/telephony/data/DataCallResponse.java b/telephony/java/android/telephony/data/DataCallResponse.java index 3d2fe5fec14a..6d74deda1ac4 100644 --- a/telephony/java/android/telephony/data/DataCallResponse.java +++ b/telephony/java/android/telephony/data/DataCallResponse.java @@ -25,6 +25,8 @@ import android.os.Parcel;  import android.os.Parcelable;  import android.telephony.data.ApnSetting.ProtocolType; +import com.android.internal.annotations.VisibleForTesting; +  import java.net.InetAddress;  import java.util.ArrayList;  import java.util.List; @@ -90,6 +92,8 @@ public final class DataCallResponse implements Parcelable {          mMtu = mtu;      } +    /** @hide */ +    @VisibleForTesting      public DataCallResponse(Parcel source) {          mStatus = source.readInt();          mSuggestedRetryTime = source.readInt(); diff --git a/telephony/java/android/telephony/data/DataService.java b/telephony/java/android/telephony/data/DataService.java index 79572b9706a9..59d1e1e7115a 100644 --- a/telephony/java/android/telephony/data/DataService.java +++ b/telephony/java/android/telephony/data/DataService.java @@ -116,23 +116,23 @@ public abstract class DataService extends Service {       */      public abstract class DataServiceProvider implements AutoCloseable { -        private final int mSlotId; +        private final int mSlotIndex;          private final List<IDataServiceCallback> mDataCallListChangedCallbacks = new ArrayList<>();          /**           * Constructor -         * @param slotId SIM slot id the data service provider associated with. +         * @param slotIndex SIM slot index the data service provider associated with.           */ -        public DataServiceProvider(int slotId) { -            mSlotId = slotId; +        public DataServiceProvider(int slotIndex) { +            mSlotIndex = slotIndex;          }          /** -         * @return SIM slot id the data service provider associated with. +         * @return SIM slot index the data service provider associated with.           */ -        public final int getSlotId() { -            return mSlotId; +        public final int getSlotIndex() { +            return mSlotIndex;          }          /** @@ -152,8 +152,9 @@ public abstract class DataService extends Service {           * @param callback The result callback for this request. Null if the client does not care           *        about the result.           */ -        public void setupDataCall(int accessNetworkType, DataProfile dataProfile, boolean isRoaming, -                                  boolean allowRoaming, @SetupDataReason int reason, +        public void setupDataCall(int accessNetworkType, @NonNull DataProfile dataProfile, +                                  boolean isRoaming, boolean allowRoaming, +                                  @SetupDataReason int reason,                                    @Nullable LinkProperties linkProperties,                                    @Nullable DataServiceCallback callback) {              // The default implementation is to return unsupported. @@ -192,7 +193,7 @@ public abstract class DataService extends Service {           * @param callback The result callback for this request. Null if the client does not care           *        about the result.           */ -        public void setInitialAttachApn(DataProfile dataProfile, boolean isRoaming, +        public void setInitialAttachApn(@NonNull DataProfile dataProfile, boolean isRoaming,                                          @Nullable DataServiceCallback callback) {              // The default implementation is to return unsupported.              if (callback != null) { @@ -211,7 +212,7 @@ public abstract class DataService extends Service {           * @param callback The result callback for this request. Null if the client does not care           *        about the result.           */ -        public void setDataProfile(List<DataProfile> dps, boolean isRoaming, +        public void setDataProfile(@NonNull List<DataProfile> dps, boolean isRoaming,                                     @Nullable DataServiceCallback callback) {              // The default implementation is to return unsupported.              if (callback != null) { @@ -250,9 +251,9 @@ public abstract class DataService extends Service {          public final void notifyDataCallListChanged(List<DataCallResponse> dataCallList) {              synchronized (mDataCallListChangedCallbacks) {                  for (IDataServiceCallback callback : mDataCallListChangedCallbacks) { -                    mHandler.obtainMessage(DATA_SERVICE_INDICATION_DATA_CALL_LIST_CHANGED, mSlotId, -                            0, new DataCallListChangedIndication(dataCallList, callback)) -                            .sendToTarget(); +                    mHandler.obtainMessage(DATA_SERVICE_INDICATION_DATA_CALL_LIST_CHANGED, +                            mSlotIndex, 0, new DataCallListChangedIndication(dataCallList, +                                    callback)).sendToTarget();                  }              }          } @@ -341,20 +342,20 @@ public abstract class DataService extends Service {          @Override          public void handleMessage(Message message) {              IDataServiceCallback callback; -            final int slotId = message.arg1; -            DataServiceProvider serviceProvider = mServiceMap.get(slotId); +            final int slotIndex = message.arg1; +            DataServiceProvider serviceProvider = mServiceMap.get(slotIndex);              switch (message.what) {                  case DATA_SERVICE_CREATE_DATA_SERVICE_PROVIDER: -                    serviceProvider = createDataServiceProvider(message.arg1); +                    serviceProvider = onCreateDataServiceProvider(message.arg1);                      if (serviceProvider != null) { -                        mServiceMap.put(slotId, serviceProvider); +                        mServiceMap.put(slotIndex, serviceProvider);                      }                      break;                  case DATA_SERVICE_REMOVE_DATA_SERVICE_PROVIDER:                      if (serviceProvider != null) {                          serviceProvider.close(); -                        mServiceMap.remove(slotId); +                        mServiceMap.remove(slotIndex);                      }                      break;                  case DATA_SERVICE_REMOVE_ALL_DATA_SERVICE_PROVIDERS: @@ -453,12 +454,12 @@ public abstract class DataService extends Service {       * this method to facilitate the creation of {@link DataServiceProvider} instances. The system       * will call this method after binding the data service for each active SIM slot id.       * -     * @param slotId SIM slot id the data service associated with. +     * @param slotIndex SIM slot id the data service associated with.       * @return Data service object       */ -    public abstract DataServiceProvider createDataServiceProvider(int slotId); +    @Nullable +    public abstract DataServiceProvider onCreateDataServiceProvider(int slotIndex); -    /** @hide */      @Override      public IBinder onBind(Intent intent) {          if (intent == null || !DATA_SERVICE_INTERFACE.equals(intent.getAction())) { @@ -468,17 +469,16 @@ public abstract class DataService extends Service {          return mBinder;      } -    /** @hide */      @Override      public boolean onUnbind(Intent intent) {          mHandler.obtainMessage(DATA_SERVICE_REMOVE_ALL_DATA_SERVICE_PROVIDERS).sendToTarget();          return false;      } -    /** @hide */      @Override      public void onDestroy() {          mHandlerThread.quit(); +        super.onDestroy();      }      /** @@ -486,78 +486,78 @@ public abstract class DataService extends Service {       */      private class IDataServiceWrapper extends IDataService.Stub {          @Override -        public void createDataServiceProvider(int slotId) { -            mHandler.obtainMessage(DATA_SERVICE_CREATE_DATA_SERVICE_PROVIDER, slotId, 0) +        public void createDataServiceProvider(int slotIndex) { +            mHandler.obtainMessage(DATA_SERVICE_CREATE_DATA_SERVICE_PROVIDER, slotIndex, 0)                      .sendToTarget();          }          @Override -        public void removeDataServiceProvider(int slotId) { -            mHandler.obtainMessage(DATA_SERVICE_REMOVE_DATA_SERVICE_PROVIDER, slotId, 0) +        public void removeDataServiceProvider(int slotIndex) { +            mHandler.obtainMessage(DATA_SERVICE_REMOVE_DATA_SERVICE_PROVIDER, slotIndex, 0)                      .sendToTarget();          }          @Override -        public void setupDataCall(int slotId, int accessNetworkType, DataProfile dataProfile, +        public void setupDataCall(int slotIndex, int accessNetworkType, DataProfile dataProfile,                                    boolean isRoaming, boolean allowRoaming, int reason,                                    LinkProperties linkProperties, IDataServiceCallback callback) { -            mHandler.obtainMessage(DATA_SERVICE_REQUEST_SETUP_DATA_CALL, slotId, 0, +            mHandler.obtainMessage(DATA_SERVICE_REQUEST_SETUP_DATA_CALL, slotIndex, 0,                      new SetupDataCallRequest(accessNetworkType, dataProfile, isRoaming,                              allowRoaming, reason, linkProperties, callback))                      .sendToTarget();          }          @Override -        public void deactivateDataCall(int slotId, int cid, int reason, +        public void deactivateDataCall(int slotIndex, int cid, int reason,                                         IDataServiceCallback callback) { -            mHandler.obtainMessage(DATA_SERVICE_REQUEST_DEACTIVATE_DATA_CALL, slotId, 0, +            mHandler.obtainMessage(DATA_SERVICE_REQUEST_DEACTIVATE_DATA_CALL, slotIndex, 0,                      new DeactivateDataCallRequest(cid, reason, callback))                      .sendToTarget();          }          @Override -        public void setInitialAttachApn(int slotId, DataProfile dataProfile, boolean isRoaming, +        public void setInitialAttachApn(int slotIndex, DataProfile dataProfile, boolean isRoaming,                                          IDataServiceCallback callback) { -            mHandler.obtainMessage(DATA_SERVICE_REQUEST_SET_INITIAL_ATTACH_APN, slotId, 0, +            mHandler.obtainMessage(DATA_SERVICE_REQUEST_SET_INITIAL_ATTACH_APN, slotIndex, 0,                      new SetInitialAttachApnRequest(dataProfile, isRoaming, callback))                      .sendToTarget();          }          @Override -        public void setDataProfile(int slotId, List<DataProfile> dps, boolean isRoaming, +        public void setDataProfile(int slotIndex, List<DataProfile> dps, boolean isRoaming,                                     IDataServiceCallback callback) { -            mHandler.obtainMessage(DATA_SERVICE_REQUEST_SET_DATA_PROFILE, slotId, 0, +            mHandler.obtainMessage(DATA_SERVICE_REQUEST_SET_DATA_PROFILE, slotIndex, 0,                      new SetDataProfileRequest(dps, isRoaming, callback)).sendToTarget();          }          @Override -        public void getDataCallList(int slotId, IDataServiceCallback callback) { +        public void getDataCallList(int slotIndex, IDataServiceCallback callback) {              if (callback == null) {                  loge("getDataCallList: callback is null");                  return;              } -            mHandler.obtainMessage(DATA_SERVICE_REQUEST_GET_DATA_CALL_LIST, slotId, 0, +            mHandler.obtainMessage(DATA_SERVICE_REQUEST_GET_DATA_CALL_LIST, slotIndex, 0,                      callback).sendToTarget();          }          @Override -        public void registerForDataCallListChanged(int slotId, IDataServiceCallback callback) { +        public void registerForDataCallListChanged(int slotIndex, IDataServiceCallback callback) {              if (callback == null) {                  loge("registerForDataCallListChanged: callback is null");                  return;              } -            mHandler.obtainMessage(DATA_SERVICE_REQUEST_REGISTER_DATA_CALL_LIST_CHANGED, slotId, +            mHandler.obtainMessage(DATA_SERVICE_REQUEST_REGISTER_DATA_CALL_LIST_CHANGED, slotIndex,                      0, callback).sendToTarget();          }          @Override -        public void unregisterForDataCallListChanged(int slotId, IDataServiceCallback callback) { +        public void unregisterForDataCallListChanged(int slotIndex, IDataServiceCallback callback) {              if (callback == null) {                  loge("unregisterForDataCallListChanged: callback is null");                  return;              } -            mHandler.obtainMessage(DATA_SERVICE_REQUEST_UNREGISTER_DATA_CALL_LIST_CHANGED, slotId, -                    0, callback).sendToTarget(); +            mHandler.obtainMessage(DATA_SERVICE_REQUEST_UNREGISTER_DATA_CALL_LIST_CHANGED, +                    slotIndex, 0, callback).sendToTarget();          }      } diff --git a/telephony/java/android/telephony/data/DataServiceCallback.java b/telephony/java/android/telephony/data/DataServiceCallback.java index bef11425b470..2d0cfe80366c 100644 --- a/telephony/java/android/telephony/data/DataServiceCallback.java +++ b/telephony/java/android/telephony/data/DataServiceCallback.java @@ -17,6 +17,8 @@  package android.telephony.data;  import android.annotation.IntDef; +import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.SystemApi;  import android.net.LinkProperties;  import android.os.RemoteException; @@ -74,7 +76,8 @@ public class DataServiceCallback {       * @param result The result code. Must be one of the {@link ResultCode}.       * @param response Setup data call response.       */ -    public void onSetupDataCallComplete(@ResultCode int result, DataCallResponse response) { +    public void onSetupDataCallComplete(@ResultCode int result, +                                        @Nullable DataCallResponse response) {          IDataServiceCallback callback = mCallback.get();          if (callback != null) {              try { @@ -141,10 +144,11 @@ public class DataServiceCallback {       * DataServiceCallback)}.       *       * @param result The result code. Must be one of the {@link ResultCode}. -     * @param dataCallList List of the current active data connection. +     * @param dataCallList List of the current active data connection. If no data call is presented, +     * set it to an empty list.       */      public void onGetDataCallListComplete(@ResultCode int result, -                                          List<DataCallResponse> dataCallList) { +                                          @NonNull List<DataCallResponse> dataCallList) {          IDataServiceCallback callback = mCallback.get();          if (callback != null) {              try { @@ -156,11 +160,12 @@ public class DataServiceCallback {      }      /** -     * Called to indicate that data connection list changed. +     * Called to indicate that data connection list changed. If no data call is presented, set it to +     * an empty list.       *       * @param dataCallList List of the current active data connection.       */ -    public void onDataCallListChanged(List<DataCallResponse> dataCallList) { +    public void onDataCallListChanged(@NonNull List<DataCallResponse> dataCallList) {          IDataServiceCallback callback = mCallback.get();          if (callback != null) {              try { diff --git a/telephony/java/android/telephony/data/QualifiedNetworksService.java b/telephony/java/android/telephony/data/QualifiedNetworksService.java index 45b4849990c2..c38f2788ca92 100644 --- a/telephony/java/android/telephony/data/QualifiedNetworksService.java +++ b/telephony/java/android/telephony/data/QualifiedNetworksService.java @@ -16,6 +16,8 @@  package android.telephony.data; +import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.SystemApi;  import android.app.Service;  import android.content.Intent; @@ -132,7 +134,7 @@ public abstract class QualifiedNetworksService extends Service {           * for data setup.           */          public final void updateQualifiedNetworkTypes(@ApnType int apnTypes, -                                                      int[] qualifiedNetworkTypes) { +                                                      @Nullable int[] qualifiedNetworkTypes) {              mHandler.obtainMessage(QNS_UPDATE_QUALIFIED_NETWORKS, mSlotIndex, apnTypes,                      qualifiedNetworkTypes).sendToTarget();          } @@ -233,6 +235,7 @@ public abstract class QualifiedNetworksService extends Service {       * @param slotIndex SIM slot index the qualified networks service associated with.       * @return Qualified networks service instance       */ +    @NonNull      public abstract NetworkAvailabilityUpdater createNetworkAvailabilityUpdater(int slotIndex);      /** @hide */ diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java index 828e3e93b7a4..b8a07e4ed777 100644 --- a/telephony/java/android/telephony/euicc/EuiccManager.java +++ b/telephony/java/android/telephony/euicc/EuiccManager.java @@ -17,6 +17,7 @@ package android.telephony.euicc;  import android.Manifest;  import android.annotation.IntDef; +import android.annotation.NonNull;  import android.annotation.Nullable;  import android.annotation.RequiresPermission;  import android.annotation.SdkConstant; @@ -116,6 +117,66 @@ public class EuiccManager {              "android.telephony.euicc.action.RESOLVE_ERROR";      /** +     * Intent action sent by system apps (such as the Settings app) to the Telephony framework to +     * enable or disable a subscription. Must be accompanied with {@link #EXTRA_SUBSCRIPTION_ID} and +     * {@link #EXTRA_ENABLE_SUBSCRIPTION}. +     * +     * <p>Unlike {@link #switchToSubscription(int, PendingIntent)}, using this action allows the +     * underlying eUICC service (i.e. the LPA app) to control the UI experience during this +     * operation. The action is received by the Telephony framework, which in turn selects and +     * launches an appropriate LPA activity to present UI to the user. For example, the activity may +     * show a confirmation dialog, a progress dialog, or an error dialog when necessary. +     * +     * <p>The launched activity will immediately finish with +     * {@link android.app.Activity#RESULT_CANCELED} if {@link #isEnabled} is false. +     * +     * @hide +     */ +    @SystemApi +    public static final String ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED = +            "android.telephony.euicc.action.TOGGLE_SUBSCRIPTION_PRIVILEGED"; + +    /** +     * Intent action sent by system apps (such as the Settings app) to the Telephony framework to +     * delete a subscription. Must be accompanied with {@link #EXTRA_SUBSCRIPTION_ID}. +     * +     * <p>Unlike {@link #deleteSubscription(int, PendingIntent)}, using this action allows the +     * underlying eUICC service (i.e. the LPA app) to control the UI experience during this +     * operation. The action is received by the Telephony framework, which in turn selects and +     * launches an appropriate LPA activity to present UI to the user. For example, the activity may +     * show a confirmation dialog, a progress dialog, or an error dialog when necessary. +     * +     * <p>The launched activity will immediately finish with +     * {@link android.app.Activity#RESULT_CANCELED} if {@link #isEnabled} is false. +     * +     * @hide +     */ +    @SystemApi +    public static final String ACTION_DELETE_SUBSCRIPTION_PRIVILEGED = +            "android.telephony.euicc.action.DELETE_SUBSCRIPTION_PRIVILEGED"; + +    /** +     * Intent action sent by system apps (such as the Settings app) to the Telephony framework to +     * rename a subscription. Must be accompanied with {@link #EXTRA_SUBSCRIPTION_ID} and +     * {@link #EXTRA_SUBSCRIPTION_NICKNAME}. +     * +     * <p>Unlike {@link #updateSubscriptionNickname(int, String, PendingIntent)}, using this action +     * allows the the underlying eUICC service (i.e. the LPA app) to control the UI experience +     * during this operation. The action is received by the Telephony framework, which in turn +     * selects and launches an appropriate LPA activity to present UI to the user. For example, the +     * activity may show a confirmation dialog, a progress dialog, or an error dialog when +     * necessary. +     * +     * <p>The launched activity will immediately finish with +     * {@link android.app.Activity#RESULT_CANCELED} if {@link #isEnabled} is false. +     * +     * @hide +     */ +    @SystemApi +    public static final String ACTION_RENAME_SUBSCRIPTION_PRIVILEGED = +            "android.telephony.euicc.action.RENAME_SUBSCRIPTION_PRIVILEGED"; + +    /**       * Result code for an operation indicating that the operation succeeded.       */      public static final int EMBEDDED_SUBSCRIPTION_RESULT_OK = 0; @@ -195,6 +256,37 @@ public class EuiccManager {              "android.telephony.euicc.extra.FORCE_PROVISION";      /** +     * Key for an extra set on privileged actions {@link #ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED}, +     * {@link #ACTION_DELETE_SUBSCRIPTION_PRIVILEGED}, and +     * {@link #ACTION_RENAME_SUBSCRIPTION_PRIVILEGED} providing the ID of the targeted subscription. +     * +     * @hide +     */ +    @SystemApi +    public static final String EXTRA_SUBSCRIPTION_ID = +            "android.telephony.euicc.extra.SUBSCRIPTION_ID"; + +    /** +     * Key for an extra set on {@link #ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED} providing a boolean +     * value of whether to enable or disable the targeted subscription. +     * +     * @hide +     */ +    @SystemApi +    public static final String EXTRA_ENABLE_SUBSCRIPTION = +            "android.telephony.euicc.extra.ENABLE_SUBSCRIPTION"; + +    /** +     * Key for an extra set on {@link #ACTION_RENAME_SUBSCRIPTION_PRIVILEGED} providing a new +     * nickname for the targeted subscription. +     * +     * @hide +     */ +    @SystemApi +    public static final String EXTRA_SUBSCRIPTION_NICKNAME = +            "android.telephony.euicc.extra.SUBSCRIPTION_NICKNAME"; + +    /**       * Optional meta-data attribute for a carrier app providing an icon to use to represent the       * carrier. If not provided, the app's launcher icon will be used as a fallback.       */ @@ -274,6 +366,7 @@ public class EuiccManager {       *       * @return an EuiccManager that uses the given card ID for all calls.       */ +    @NonNull      public EuiccManager createForCardId(int cardId) {          return new EuiccManager(mContext, cardId);      } diff --git a/telephony/java/android/telephony/ims/ImsCallSessionListener.java b/telephony/java/android/telephony/ims/ImsCallSessionListener.java index 337375ac51c3..a09844d6c0e2 100644 --- a/telephony/java/android/telephony/ims/ImsCallSessionListener.java +++ b/telephony/java/android/telephony/ims/ImsCallSessionListener.java @@ -16,6 +16,7 @@  package android.telephony.ims; +import android.annotation.NonNull;  import android.annotation.SystemApi;  import android.os.RemoteException;  import android.telephony.CallQuality; @@ -606,7 +607,7 @@ public class ImsCallSessionListener {       *       * @param profile updated ImsStreamMediaProfile       */ -    public void callSessionRttAudioIndicatorChanged(ImsStreamMediaProfile profile) { +    public void callSessionRttAudioIndicatorChanged(@NonNull ImsStreamMediaProfile profile) {          try {              mListener.callSessionRttAudioIndicatorChanged(profile);          } catch (RemoteException e) { @@ -619,7 +620,7 @@ public class ImsCallSessionListener {       *       * @param callQuality The new call quality       */ -    public void callQualityChanged(CallQuality callQuality) { +    public void callQualityChanged(@NonNull CallQuality callQuality) {          try {              mListener.callQualityChanged(callQuality);          } catch (RemoteException e) { diff --git a/telephony/java/android/telephony/ims/ImsConferenceState.java b/telephony/java/android/telephony/ims/ImsConferenceState.java index 66d2f8d929d3..8af8cffcd878 100644 --- a/telephony/java/android/telephony/ims/ImsConferenceState.java +++ b/telephony/java/android/telephony/ims/ImsConferenceState.java @@ -16,17 +16,18 @@  package android.telephony.ims; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map.Entry; -import java.util.Set; -  import android.annotation.SystemApi;  import android.os.Bundle;  import android.os.Parcel;  import android.os.Parcelable;  import android.telecom.Call;  import android.telecom.Connection; +import android.telecom.Log; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.Set;  /**   * Provides the conference information (defined in RFC 4575) for IMS conference call. @@ -189,7 +190,7 @@ public final class ImsConferenceState implements Parcelable {                  sb.append("<");                  while (iterator.hasNext()) {                      Entry<String, Bundle> entry = iterator.next(); -                    sb.append(entry.getKey()); +                    sb.append(Log.pii(entry.getKey()));                      sb.append(": ");                      Bundle participantData = entry.getValue(); @@ -197,7 +198,7 @@ public final class ImsConferenceState implements Parcelable {                          sb.append(key);                          sb.append("=");                          if (ENDPOINT.equals(key) || USER.equals(key)) { -                            sb.append(android.telecom.Log.pii(participantData.get(key))); +                            sb.append(Log.pii(participantData.get(key)));                          } else {                              sb.append(participantData.get(key));                          } diff --git a/telephony/java/android/telephony/ims/ImsMmTelManager.java b/telephony/java/android/telephony/ims/ImsMmTelManager.java index eb99d5dcaaeb..bb85be16eb3a 100644 --- a/telephony/java/android/telephony/ims/ImsMmTelManager.java +++ b/telephony/java/android/telephony/ims/ImsMmTelManager.java @@ -139,7 +139,7 @@ public class ImsMmTelManager {                  if (mLocalCallback == null) return;                  Binder.withCleanCallingIdentity(() -> -                        mExecutor.execute(() -> mLocalCallback.onDeregistered(info))); +                        mExecutor.execute(() -> mLocalCallback.onUnregistered(info)));              }              @Override @@ -199,7 +199,7 @@ public class ImsMmTelManager {           *           * @param info the {@link ImsReasonInfo} associated with why registration was disconnected.           */ -        public void onDeregistered(ImsReasonInfo info) { +        public void onUnregistered(ImsReasonInfo info) {          }          /** @@ -485,7 +485,7 @@ public class ImsMmTelManager {       * @see android.telephony.CarrierConfigManager#KEY_HIDE_ENHANCED_4G_LTE_BOOL       * @see android.telephony.CarrierConfigManager#KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL       * @see android.telephony.CarrierConfigManager#KEY_CARRIER_VOLTE_AVAILABLE_BOOL -     * @see #setAdvancedCallingSetting(boolean) +     * @see #setAdvancedCallingSettingEnabled(boolean)       * @return true if the user's setting for advanced calling is enabled, false otherwise.       */      @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @@ -519,9 +519,9 @@ public class ImsMmTelManager {       * @see #isAdvancedCallingSettingEnabled()       */      @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) -    public void setAdvancedCallingSetting(boolean isEnabled) { +    public void setAdvancedCallingSettingEnabled(boolean isEnabled) {          try { -            getITelephony().setAdvancedCallingSetting(mSubId, isEnabled); +            getITelephony().setAdvancedCallingSettingEnabled(mSubId, isEnabled);              return;          } catch (RemoteException e) {              throw e.rethrowAsRuntimeException(); @@ -589,7 +589,7 @@ public class ImsMmTelManager {      /**       * The user's setting for whether or not they have enabled the "Video Calling" setting.       * @return true if the user’s “Video Calling” setting is currently enabled. -     * @see #setVtSetting(boolean) +     * @see #setVtSettingEnabled(boolean)       */      @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)      public boolean isVtSettingEnabled() { @@ -605,9 +605,9 @@ public class ImsMmTelManager {       * @see #isVtSettingEnabled()       */      @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) -    public void setVtSetting(boolean isEnabled) { +    public void setVtSettingEnabled(boolean isEnabled) {          try { -            getITelephony().setVtSetting(mSubId, isEnabled); +            getITelephony().setVtSettingEnabled(mSubId, isEnabled);              return;          } catch (RemoteException e) {              throw e.rethrowAsRuntimeException(); @@ -616,7 +616,7 @@ public class ImsMmTelManager {      /**       * @return true if the user's setting for Voice over WiFi is enabled and false if it is not. -     * @see #setVoWiFiSetting(boolean) +     * @see #setVoWiFiSettingEnabled(boolean)       */      @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)      public boolean isVoWiFiSettingEnabled() { @@ -633,9 +633,9 @@ public class ImsMmTelManager {       * @see #isVoWiFiSettingEnabled()       */      @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) -    public void setVoWiFiSetting(boolean isEnabled) { +    public void setVoWiFiSettingEnabled(boolean isEnabled) {          try { -            getITelephony().setVoWiFiSetting(mSubId, isEnabled); +            getITelephony().setVoWiFiSettingEnabled(mSubId, isEnabled);              return;          } catch (RemoteException e) {              throw e.rethrowAsRuntimeException(); @@ -645,7 +645,7 @@ public class ImsMmTelManager {      /**       * @return true if the user's setting for Voice over WiFi while roaming is enabled, false       * if disabled. -     * @see #setVoWiFiRoamingSetting(boolean) +     * @see #setVoWiFiRoamingSettingEnabled(boolean)       */      @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)      public boolean isVoWiFiRoamingSettingEnabled() { @@ -663,9 +663,9 @@ public class ImsMmTelManager {       * @see #isVoWiFiRoamingSettingEnabled()       */      @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) -    public void setVoWiFiRoamingSetting(boolean isEnabled) { +    public void setVoWiFiRoamingSettingEnabled(boolean isEnabled) {          try { -            getITelephony().setVoWiFiRoamingSetting(mSubId, isEnabled); +            getITelephony().setVoWiFiRoamingSettingEnabled(mSubId, isEnabled);              return;          } catch (RemoteException e) {              throw e.rethrowAsRuntimeException(); @@ -682,7 +682,7 @@ public class ImsMmTelManager {       * - {@link #WIFI_MODE_WIFI_ONLY}       * - {@link #WIFI_MODE_CELLULAR_PREFERRED}       * - {@link #WIFI_MODE_WIFI_PREFERRED} -     * @see #setVoWiFiSetting(boolean) +     * @see #setVoWiFiSettingEnabled(boolean)       */      @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)      public void setVoWiFiNonPersistent(boolean isCapable, int mode) { @@ -700,7 +700,7 @@ public class ImsMmTelManager {       * - {@link #WIFI_MODE_WIFI_ONLY}       * - {@link #WIFI_MODE_CELLULAR_PREFERRED}       * - {@link #WIFI_MODE_WIFI_PREFERRED} -     * @see #setVoWiFiSetting(boolean) +     * @see #setVoWiFiSettingEnabled(boolean)       */      @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)      public @WiFiCallingMode int getVoWiFiModeSetting() { @@ -739,7 +739,7 @@ public class ImsMmTelManager {       *     - {@link #WIFI_MODE_WIFI_ONLY}       *     - {@link #WIFI_MODE_CELLULAR_PREFERRED}       *     - {@link #WIFI_MODE_WIFI_PREFERRED} -     * @see #setVoWiFiRoamingSetting(boolean) +     * @see #setVoWiFiRoamingSettingEnabled(boolean)       */      @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)      public @WiFiCallingMode int getVoWiFiRoamingModeSetting() { diff --git a/telephony/java/android/telephony/ims/ImsSsData.java b/telephony/java/android/telephony/ims/ImsSsData.java index 3a82517955ce..86832bb13f7e 100644 --- a/telephony/java/android/telephony/ims/ImsSsData.java +++ b/telephony/java/android/telephony/ims/ImsSsData.java @@ -17,6 +17,7 @@ package android.telephony.ims;  import android.annotation.IntDef;  import android.annotation.NonNull; +import android.annotation.Nullable;  import android.annotation.SystemApi;  import android.os.Parcel;  import android.os.Parcelable; @@ -24,6 +25,9 @@ import android.telephony.Rlog;  import java.lang.annotation.Retention;  import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List;  /**   * Provides STK Call Control Supplementary Service information. @@ -260,13 +264,13 @@ public final class ImsSsData implements Parcelable {      public final int result;      private int[] mSsInfo; -    private ImsCallForwardInfo[] mCfInfo; -    private ImsSsInfo[] mImsSsInfo; +    private List<ImsCallForwardInfo> mCfInfo; +    private List<ImsSsInfo> mImsSsInfo;      /**       * Builder for optional ImsSsData parameters.       */ -    public static class Builder { +    public static final class Builder {          private ImsSsData mImsSsData;          /** @@ -301,7 +305,7 @@ public final class ImsSsData implements Parcelable {           * Set the array of {@link ImsSsInfo}s that are associated with this supplementary service           * data.           */ -        public @NonNull Builder setSuppServiceInfo(@NonNull ImsSsInfo[] imsSsInfos) { +        public @NonNull Builder setSuppServiceInfo(@NonNull List<ImsSsInfo> imsSsInfos) {              mImsSsData.mImsSsInfo = imsSsInfos;              return this;          } @@ -311,7 +315,7 @@ public final class ImsSsData implements Parcelable {           * service data.           */          public @NonNull Builder setCallForwardingInfo( -                @NonNull ImsCallForwardInfo[] imsCallForwardInfos) { +                @NonNull List<ImsCallForwardInfo> imsCallForwardInfos) {              mImsSsData.mCfInfo = imsCallForwardInfos;              return this;          } @@ -360,8 +364,8 @@ public final class ImsSsData implements Parcelable {          serviceClass = in.readInt();          result = in.readInt();          mSsInfo = in.createIntArray(); -        mCfInfo = (ImsCallForwardInfo[])in.readParcelableArray(this.getClass().getClassLoader()); -        mImsSsInfo = (ImsSsInfo[])in.readParcelableArray(this.getClass().getClassLoader()); +        mCfInfo = in.readParcelableList(new ArrayList<>(), this.getClass().getClassLoader()); +        mImsSsInfo = in.readParcelableList(new ArrayList<>(), this.getClass().getClassLoader());      }      public static final Creator<ImsSsData> CREATOR = new Creator<ImsSsData>() { @@ -384,8 +388,8 @@ public final class ImsSsData implements Parcelable {          out.writeInt(getServiceClass());          out.writeInt(getResult());          out.writeIntArray(mSsInfo); -        out.writeParcelableArray(mCfInfo, 0); -        out.writeParcelableArray(mImsSsInfo, 0); +        out.writeParcelableList(mCfInfo, 0); +        out.writeParcelableList(mImsSsInfo, 0);      }      @Override @@ -500,12 +504,12 @@ public final class ImsSsData implements Parcelable {      /** @hide */      public void setImsSpecificSuppServiceInfo(ImsSsInfo[] imsSsInfo) { -        mImsSsInfo = imsSsInfo; +        mImsSsInfo = Arrays.asList(imsSsInfo);      }      /** @hide */      public void setCallForwardingInfo(ImsCallForwardInfo[] cfInfo) { -        mCfInfo = cfInfo; +        mCfInfo = Arrays.asList(cfInfo);      }      /** @@ -524,7 +528,7 @@ public final class ImsSsData implements Parcelable {          int[] result = new int[2]; -        if (mImsSsInfo == null || mImsSsInfo.length == 0) { +        if (mImsSsInfo == null || mImsSsInfo.size() == 0) {              Rlog.e(TAG, "getSuppServiceInfoCompat: Could not parse mImsSsInfo, returning empty "                      + "int[]");              return result; @@ -535,26 +539,26 @@ public final class ImsSsData implements Parcelable {          if (isTypeClir()) {              // Assume there will only be one ImsSsInfo.              // contains {"n","m"} parameters -            result[0] = mImsSsInfo[0].getClirOutgoingState(); -            result[1] = mImsSsInfo[0].getClirInterrogationStatus(); +            result[0] = mImsSsInfo.get(0).getClirOutgoingState(); +            result[1] = mImsSsInfo.get(0).getClirInterrogationStatus();              return result;          }          // COLR 7.31          if (isTypeColr()) { -            result[0] = mImsSsInfo[0].getProvisionStatus(); +            result[0] = mImsSsInfo.get(0).getProvisionStatus();          }          // Facility Lock CLCK 7.4 (for call barring), CLIP 7.6, COLP 7.8, as well as any          // other result, just return the status for the "n" parameter and provisioning status for          // "m" as the default. -        result[0] = mImsSsInfo[0].getStatus(); -        result[1] = mImsSsInfo[0].getProvisionStatus(); +        result[0] = mImsSsInfo.get(0).getStatus(); +        result[1] = mImsSsInfo.get(0).getProvisionStatus();          return result;      }      /**       * @return an array of {@link ImsSsInfo}s associated with this supplementary service data.       */ -    public @NonNull ImsSsInfo[] getSuppServiceInfo() { +    public @NonNull List<ImsSsInfo> getSuppServiceInfo() {          return mImsSsInfo;      } @@ -562,7 +566,7 @@ public final class ImsSsData implements Parcelable {       * @return an array of {@link ImsCallForwardInfo}s associated with this supplementary service       * data.       **/ -    public ImsCallForwardInfo[] getCallForwardInfo() { +    public @Nullable List<ImsCallForwardInfo> getCallForwardInfo() {          return mCfInfo;      } diff --git a/telephony/java/android/telephony/ims/ImsSsInfo.java b/telephony/java/android/telephony/ims/ImsSsInfo.java index 031f9e10175b..fba390c26242 100644 --- a/telephony/java/android/telephony/ims/ImsSsInfo.java +++ b/telephony/java/android/telephony/ims/ImsSsInfo.java @@ -173,7 +173,7 @@ public final class ImsSsInfo implements Parcelable {      /**       * Builds {@link ImsSsInfo} instances, which may include optional parameters.       */ -    public static class Builder { +    public static final class Builder {          private final ImsSsInfo mImsSsInfo; @@ -304,7 +304,7 @@ public final class ImsSsInfo implements Parcelable {      /**       * @return The Incoming Communication Barring (ICB) number.       */ -    public String getIncomingCommunicationBarringNumber() { +    public @Nullable String getIncomingCommunicationBarringNumber() {          return mIcbNum;      } diff --git a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java index 837ef54a2f24..d11a0de24fb5 100644 --- a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java +++ b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java @@ -99,7 +99,7 @@ public final class ImsStreamMediaProfile implements Parcelable {      public int mRttMode;      // RTT Audio Speech Indicator      /** @hide */ -    public boolean mHasRttAudioSpeech = false; +    public boolean mIsReceivingRttAudio = false;      /** @hide */      public ImsStreamMediaProfile(Parcel in) { @@ -201,7 +201,7 @@ public final class ImsStreamMediaProfile implements Parcelable {                  ", videoQuality=" + mVideoQuality +                  ", videoDirection=" + mVideoDirection +                  ", rttMode=" + mRttMode + -                ", hasRttAudioSpeech=" + mHasRttAudioSpeech + " }"; +                ", hasRttAudioSpeech=" + mIsReceivingRttAudio + " }";      }      @Override @@ -216,7 +216,7 @@ public final class ImsStreamMediaProfile implements Parcelable {          out.writeInt(mVideoQuality);          out.writeInt(mVideoDirection);          out.writeInt(mRttMode); -        out.writeBoolean(mHasRttAudioSpeech); +        out.writeBoolean(mIsReceivingRttAudio);      }      private void readFromParcel(Parcel in) { @@ -225,7 +225,7 @@ public final class ImsStreamMediaProfile implements Parcelable {          mVideoQuality = in.readInt();          mVideoDirection = in.readInt();          mRttMode = in.readInt(); -        mHasRttAudioSpeech = in.readBoolean(); +        mIsReceivingRttAudio = in.readBoolean();      }      public static final Creator<ImsStreamMediaProfile> CREATOR = @@ -256,8 +256,12 @@ public final class ImsStreamMediaProfile implements Parcelable {          mRttMode = rttMode;      } -    public void setRttAudioSpeech(boolean audioOn) { -        mHasRttAudioSpeech = audioOn; +    /** +     * Sets whether the remote party is transmitting audio over the RTT call. +     * @param audioOn true if audio is being received, false otherwise. +     */ +    public void setReceivingRttAudio(boolean audioOn) { +        mIsReceivingRttAudio = audioOn;      }      public int getAudioQuality() { @@ -280,7 +284,10 @@ public final class ImsStreamMediaProfile implements Parcelable {          return mRttMode;      } -    public boolean getRttAudioSpeech() { -        return mHasRttAudioSpeech; +    /** +     * @return true if remote party is transmitting audio, false otherwise. +     */ +    public boolean isReceivingRttAudio() { +        return mIsReceivingRttAudio;      }  } diff --git a/telephony/java/android/telephony/ims/Rcs1To1Thread.java b/telephony/java/android/telephony/ims/Rcs1To1Thread.java index d4a78ffb77db..0bb1b4379679 100644 --- a/telephony/java/android/telephony/ims/Rcs1To1Thread.java +++ b/telephony/java/android/telephony/ims/Rcs1To1Thread.java @@ -22,6 +22,8 @@ import android.annotation.WorkerThread;   * Rcs1To1Thread represents a single RCS conversation thread with a total of two   * {@link RcsParticipant}s. Please see Section 5 (1-to-1 Messaging) - GSMA RCC.71 (RCS Universal   * Profile Service Definition Document) + * + * @hide   */  public class Rcs1To1Thread extends RcsThread {      private int mThreadId; diff --git a/telephony/java/android/telephony/ims/RcsEvent.java b/telephony/java/android/telephony/ims/RcsEvent.java index a547c5c00141..994b27ab7405 100644 --- a/telephony/java/android/telephony/ims/RcsEvent.java +++ b/telephony/java/android/telephony/ims/RcsEvent.java @@ -17,6 +17,8 @@ package android.telephony.ims;  /**   * The base class for events that can happen on {@link RcsParticipant}s and {@link RcsThread}s. + * + * @hide   */  public abstract class RcsEvent {      private final long mTimestamp; diff --git a/telephony/java/android/telephony/ims/RcsEventQueryParams.java b/telephony/java/android/telephony/ims/RcsEventQueryParams.java index 9dbfe4393213..5f8fa8003751 100644 --- a/telephony/java/android/telephony/ims/RcsEventQueryParams.java +++ b/telephony/java/android/telephony/ims/RcsEventQueryParams.java @@ -37,6 +37,8 @@ import java.security.InvalidParameterException;   * The parameters to pass into   * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParams)} in order to select a   * subset of {@link RcsEvent}s present in the message store. + * + * @hide   */  public final class RcsEventQueryParams implements Parcelable {      /** diff --git a/telephony/java/android/telephony/ims/RcsEventQueryResult.java b/telephony/java/android/telephony/ims/RcsEventQueryResult.java index 92bda813f93e..d6347e3ec693 100644 --- a/telephony/java/android/telephony/ims/RcsEventQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsEventQueryResult.java @@ -22,6 +22,8 @@ import java.util.List;   * The result of a {@link RcsMessageStore#getRcsEvents(RcsEventQueryParams)}   * call. This class allows getting the token for querying the next batch of events in order to   * prevent handling large amounts of data at once. + * + * @hide   */  public class RcsEventQueryResult {      private RcsQueryContinuationToken mContinuationToken; diff --git a/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java b/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java index 14af8ea63a67..4742ba2730b6 100644 --- a/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java +++ b/telephony/java/android/telephony/ims/RcsFileTransferCreationParams.java @@ -24,6 +24,8 @@ import android.os.Parcelable;   * Pass an instance of this class to   * {@link RcsMessage#insertFileTransfer(RcsFileTransferCreationParams)} create an   * {@link RcsFileTransferPart} and save it into storage. + * + * @hide   */  public final class RcsFileTransferCreationParams implements Parcelable {      private String mRcsFileTransferSessionId; diff --git a/telephony/java/android/telephony/ims/RcsFileTransferPart.java b/telephony/java/android/telephony/ims/RcsFileTransferPart.java index 9531c2e2f981..3816cd413722 100644 --- a/telephony/java/android/telephony/ims/RcsFileTransferPart.java +++ b/telephony/java/android/telephony/ims/RcsFileTransferPart.java @@ -26,6 +26,8 @@ import java.lang.annotation.RetentionPolicy;  /**   * A part of a composite {@link RcsMessage} that holds a file transfer. Please see Section 7   * (File Transfer) - GSMA RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide   */  public class RcsFileTransferPart {      /** diff --git a/telephony/java/android/telephony/ims/RcsGroupThread.java b/telephony/java/android/telephony/ims/RcsGroupThread.java index 6e17bc2a685f..8cd633ba1edf 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThread.java +++ b/telephony/java/android/telephony/ims/RcsGroupThread.java @@ -29,6 +29,8 @@ import java.util.Set;   * RcsGroupThread represents a single RCS conversation thread where {@link RcsParticipant}s can join   * or leave. Please see Section 6 (Group Chat) - GSMA RCC.71 (RCS Universal Profile Service   * Definition Document) + * + * @hide   */  public class RcsGroupThread extends RcsThread {      /** diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java index 99086aaef676..4a6b963a143a 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java @@ -19,6 +19,8 @@ import android.annotation.NonNull;  /**   * An event that happened on an {@link RcsGroupThread}. + * + * @hide   */  public abstract class RcsGroupThreadEvent extends RcsEvent {      private final int mRcsGroupThreadId; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java index cbd762d3032b..3c6c74fac8e2 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java @@ -22,6 +22,8 @@ import android.net.Uri;  /**   * An event that indicates an {@link RcsGroupThread}'s icon was changed. Please see R6-2-5 - GSMA   * RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide   */  public final class RcsGroupThreadIconChangedEvent extends RcsGroupThreadEvent {      private final Uri mNewIcon; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java index a2a4fab4f3d2..54032536601e 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java @@ -21,6 +21,8 @@ import android.annotation.Nullable;  /**   * An event that indicates an {@link RcsGroupThread}'s name was changed. Please see R6-2-5 - GSMA   * RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide   */  public final class RcsGroupThreadNameChangedEvent extends RcsGroupThreadEvent {      private final String mNewName; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java index 183cd9a81431..48be479a1ac6 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java @@ -20,6 +20,8 @@ import android.annotation.NonNull;  /**   * An event that indicates an RCS participant has joined an {@link RcsThread}. Please see US6-3 -   * GSMA RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide   */  public final class RcsGroupThreadParticipantJoinedEvent extends RcsGroupThreadEvent {      private final RcsParticipant mJoinedParticipantId; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java index c12549b5acbf..b724a3f2159f 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java @@ -20,6 +20,8 @@ import android.annotation.NonNull;  /**   * An event that indicates an RCS participant has left an {@link RcsThread}. Please see US6-23 -   * GSMA RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide   */  public final class RcsGroupThreadParticipantLeftEvent extends RcsGroupThreadEvent {      private RcsParticipant mLeavingParticipant; diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessage.java b/telephony/java/android/telephony/ims/RcsIncomingMessage.java index 61911abd00c5..06e2a41accee 100644 --- a/telephony/java/android/telephony/ims/RcsIncomingMessage.java +++ b/telephony/java/android/telephony/ims/RcsIncomingMessage.java @@ -19,6 +19,8 @@ import android.annotation.WorkerThread;  /**   * This is a single instance of a message received over RCS. + * + * @hide   */  public class RcsIncomingMessage extends RcsMessage {      /** diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java index 61dedbc1578a..58dc1bc70424 100644 --- a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java +++ b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParams.java @@ -24,6 +24,8 @@ import android.os.Parcelable;   * {@link RcsIncomingMessageCreationParams} is a collection of parameters that should be passed   * into {@link RcsThread#addIncomingMessage(RcsIncomingMessageCreationParams)} to generate an   * {@link RcsIncomingMessage} on that {@link RcsThread} + * + * @hide   */  public final class RcsIncomingMessageCreationParams extends RcsMessageCreationParams implements          Parcelable { diff --git a/telephony/java/android/telephony/ims/RcsManager.java b/telephony/java/android/telephony/ims/RcsManager.java index 22e4b2249c36..63dc1ac568bf 100644 --- a/telephony/java/android/telephony/ims/RcsManager.java +++ b/telephony/java/android/telephony/ims/RcsManager.java @@ -20,6 +20,8 @@ import android.content.Context;  /**   * The manager class for RCS related utilities. + * + * @hide   */  @SystemService(Context.TELEPHONY_RCS_SERVICE)  public class RcsManager { diff --git a/telephony/java/android/telephony/ims/RcsMessage.java b/telephony/java/android/telephony/ims/RcsMessage.java index 32274131a5ad..b0d0d5a6a9bb 100644 --- a/telephony/java/android/telephony/ims/RcsMessage.java +++ b/telephony/java/android/telephony/ims/RcsMessage.java @@ -27,6 +27,8 @@ import java.util.Set;  /**   * This is a single instance of a message sent or received over RCS. + * + * @hide   */  public abstract class RcsMessage {      /** diff --git a/telephony/java/android/telephony/ims/RcsMessageCreationParams.java b/telephony/java/android/telephony/ims/RcsMessageCreationParams.java index c46c605d861d..f0eea88ac8a9 100644 --- a/telephony/java/android/telephony/ims/RcsMessageCreationParams.java +++ b/telephony/java/android/telephony/ims/RcsMessageCreationParams.java @@ -27,6 +27,8 @@ import android.os.Parcel;   * {@link RcsThread#addIncomingMessage(RcsIncomingMessageCreationParams)} and   * {@link RcsThread#addOutgoingMessage(RcsOutgoingMessageCreationParams)} to create and persist   * {@link RcsMessage}s on an {@link RcsThread} + * + * @hide   */  public class RcsMessageCreationParams {      // The globally unique id of the RcsMessage to be created. diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryParams.java b/telephony/java/android/telephony/ims/RcsMessageQueryParams.java index 535a597f5e1e..6491ac9fad5f 100644 --- a/telephony/java/android/telephony/ims/RcsMessageQueryParams.java +++ b/telephony/java/android/telephony/ims/RcsMessageQueryParams.java @@ -31,6 +31,8 @@ import java.security.InvalidParameterException;   * The parameters to pass into   * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParams)} in order to select a   * subset of {@link RcsMessage}s present in the message store. + * + * @hide   */  public final class RcsMessageQueryParams implements Parcelable {      /** diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java index 3514b48e80a1..e4020c185fa3 100644 --- a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java @@ -32,6 +32,8 @@ import java.util.List;   * The result of a {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParams)}   * call. This class allows getting the token for querying the next batch of messages in order to   * prevent handling large amounts of data at once. + * + * @hide   */  public final class RcsMessageQueryResult implements Parcelable {      // The token to continue the query to get the next batch of results diff --git a/telephony/java/android/telephony/ims/RcsMessageSnippet.java b/telephony/java/android/telephony/ims/RcsMessageSnippet.java index b0b930c56e91..9064251f5021 100644 --- a/telephony/java/android/telephony/ims/RcsMessageSnippet.java +++ b/telephony/java/android/telephony/ims/RcsMessageSnippet.java @@ -23,6 +23,8 @@ import android.telephony.ims.RcsMessage.RcsMessageStatus;  /**   * An immutable summary of the latest {@link RcsMessage} on an {@link RcsThread} + * + * @hide   */  public final class RcsMessageSnippet implements Parcelable {      private final String mText; diff --git a/telephony/java/android/telephony/ims/RcsMessageStore.java b/telephony/java/android/telephony/ims/RcsMessageStore.java index 31f2983dcf93..311165232158 100644 --- a/telephony/java/android/telephony/ims/RcsMessageStore.java +++ b/telephony/java/android/telephony/ims/RcsMessageStore.java @@ -26,6 +26,8 @@ import java.util.List;  /**   * RcsMessageStore is the application interface to RcsProvider and provides access methods to   * RCS related database tables. + * + * @hide   */  public class RcsMessageStore {      /** diff --git a/telephony/java/android/telephony/ims/RcsMessageStoreException.java b/telephony/java/android/telephony/ims/RcsMessageStoreException.java index f25bb173be37..3b3fcf21dd7a 100644 --- a/telephony/java/android/telephony/ims/RcsMessageStoreException.java +++ b/telephony/java/android/telephony/ims/RcsMessageStoreException.java @@ -19,6 +19,8 @@ package android.telephony.ims;  /**   * An exception that happened on {@link RcsMessageStore} or one of the derived storage classes in   * {@link android.telephony.ims} + * + * @hide   */  public class RcsMessageStoreException extends Exception { diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessage.java b/telephony/java/android/telephony/ims/RcsOutgoingMessage.java index 06fb83268afb..1b4bfe576ac6 100644 --- a/telephony/java/android/telephony/ims/RcsOutgoingMessage.java +++ b/telephony/java/android/telephony/ims/RcsOutgoingMessage.java @@ -23,6 +23,8 @@ import java.util.List;  /**   * This is a single instance of a message sent over RCS. + * + * @hide   */  public class RcsOutgoingMessage extends RcsMessage {      RcsOutgoingMessage(int id) { diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java b/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java index 979634a069df..81e3244d57e8 100644 --- a/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java +++ b/telephony/java/android/telephony/ims/RcsOutgoingMessageCreationParams.java @@ -23,6 +23,8 @@ import android.os.Parcelable;   * {@link RcsOutgoingMessageCreationParams} is a collection of parameters that should be passed   * into {@link RcsThread#addOutgoingMessage(RcsOutgoingMessageCreationParams)} to generate an   * {@link RcsOutgoingMessage} on that {@link RcsThread} + * + * @hide   */  public final class RcsOutgoingMessageCreationParams extends RcsMessageCreationParams          implements Parcelable { diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java b/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java index 1c87b13f0dfb..2db49c6d0dce 100644 --- a/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java +++ b/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java @@ -21,6 +21,8 @@ import android.annotation.WorkerThread;  /**   * This class holds the delivery information of an {@link RcsOutgoingMessage} for each   * {@link RcsParticipant} that the message was intended for. + * + * @hide   */  public class RcsOutgoingMessageDelivery {      // The participant that this delivery is intended for diff --git a/telephony/java/android/telephony/ims/RcsParticipant.java b/telephony/java/android/telephony/ims/RcsParticipant.java index 7ba5d8e65f76..bcf134a71ea3 100644 --- a/telephony/java/android/telephony/ims/RcsParticipant.java +++ b/telephony/java/android/telephony/ims/RcsParticipant.java @@ -20,6 +20,8 @@ import android.annotation.WorkerThread;  /**   * RcsParticipant is an RCS capable contact that can participate in {@link RcsThread}s. + * + * @hide   */  public class RcsParticipant {      // The row ID of this participant in the database diff --git a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java index cc2613f9e684..61801f3fbf2c 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java +++ b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java @@ -21,6 +21,8 @@ import android.annotation.Nullable;  /**   * An event that indicates an {@link RcsParticipant}'s alias was changed. Please see US18-2 - GSMA   * RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide   */  public final class RcsParticipantAliasChangedEvent extends RcsEvent {      // The participant that changed their alias diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java b/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java index d24d079d7038..ada9b8ae9d1a 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java +++ b/telephony/java/android/telephony/ims/RcsParticipantQueryParams.java @@ -30,6 +30,8 @@ import java.security.InvalidParameterException;   * The parameters to pass into   * {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParams)} in order to select a   * subset of {@link RcsThread}s present in the message store. + * + * @hide   */  public final class RcsParticipantQueryParams implements Parcelable {      /** diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java index 505f1a55d1f0..92e2fa78526a 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java @@ -28,6 +28,8 @@ import java.util.List;   * The result of a {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParams)}   * call. This class allows getting the token for querying the next batch of participants in order to   * prevent handling large amounts of data at once. + * + * @hide   */  public final class RcsParticipantQueryResult implements Parcelable {      // A token for the caller to continue their query for the next batch of results diff --git a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java index 08643de51d40..970c11078772 100644 --- a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java +++ b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java @@ -31,6 +31,8 @@ import java.lang.annotation.RetentionPolicy;   * @see RcsMessageQueryResult#getContinuationToken()   * @see RcsParticipantQueryResult#getContinuationToken()   * @see RcsThreadQueryResult#getContinuationToken() + * + * @hide   */  public final class RcsQueryContinuationToken implements Parcelable {      /** diff --git a/telephony/java/android/telephony/ims/RcsThread.java b/telephony/java/android/telephony/ims/RcsThread.java index e015dd3e9c0a..cf1dc76fedfb 100644 --- a/telephony/java/android/telephony/ims/RcsThread.java +++ b/telephony/java/android/telephony/ims/RcsThread.java @@ -27,6 +27,8 @@ import com.android.internal.annotations.VisibleForTesting;  /**   * RcsThread represents a single RCS conversation thread. It holds messages that were sent and   * received and events that occurred on that thread. + * + * @hide   */  public abstract class RcsThread {      /** diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryParams.java b/telephony/java/android/telephony/ims/RcsThreadQueryParams.java index 05a5a3917691..81eee4081ace 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryParams.java +++ b/telephony/java/android/telephony/ims/RcsThreadQueryParams.java @@ -35,6 +35,8 @@ import java.util.Set;  /**   * The parameters to pass into {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParams)} in   * order to select a subset of {@link RcsThread}s present in the message store. + * + * @hide   */  public final class RcsThreadQueryParams implements Parcelable {      /** diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java index 1cac61d1aa64..9f2fba5caab4 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java @@ -32,6 +32,8 @@ import java.util.List;   * The result of a {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParams)}   * call. This class allows getting the token for querying the next batch of threads in order to   * prevent handling large amounts of data at once. + * + * @hide   */  public final class RcsThreadQueryResult implements Parcelable {      // A token for the caller to continue their query for the next batch of results diff --git a/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl b/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl index c90ffc7726e4..c140127237d4 100755 --- a/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl +++ b/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl @@ -26,13 +26,17 @@ import android.telephony.mbms.StreamingServiceInfo;   */  interface IMbmsStreamingService  { +    @UnsupportedAppUsage      int initialize(IMbmsStreamingSessionCallback callback, int subId); +    @UnsupportedAppUsage      int requestUpdateStreamingServices(int subId, in List<String> serviceClasses); +    @UnsupportedAppUsage      int startStreaming(int subId, String serviceId,              IStreamingServiceCallback callback); +    @UnsupportedAppUsage      Uri getPlaybackUri(int subId, String serviceId);      void stopStreaming(int subId, String serviceId); diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java index e86a47d5bfa1..1335b52673d2 100644 --- a/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java +++ b/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java @@ -16,6 +16,7 @@  package android.telephony.mbms.vendor; +import android.annotation.NonNull;  import android.annotation.SystemApi;  import android.annotation.TestApi;  import android.app.Service; @@ -187,7 +188,7 @@ public class MbmsGroupCallServiceBase extends Service {       *       * May throw an {@link IllegalArgumentException} or a {@link SecurityException}, which       * will be intercepted and passed to the app as -     * {@link MbmsErrors.InitializationErrors#ERROR_UNABLE_TO_INITIALIZE} +     * {@link MbmsErrors.InitializationErrtrors#ERROR_UNABLE_TO_INITIALIZE}       *       * May return any value from {@link MbmsErrors.InitializationErrors}       * or {@link MbmsErrors#SUCCESS}. Non-successful error codes will be passed to the app via @@ -196,7 +197,7 @@ public class MbmsGroupCallServiceBase extends Service {       * @param callback The callback to use to communicate with the app.       * @param subscriptionId The subscription ID to use.       */ -    public int initialize(MbmsGroupCallSessionCallback callback, int subscriptionId) +    public int initialize(@NonNull MbmsGroupCallSessionCallback callback, int subscriptionId)              throws RemoteException {          throw new UnsupportedOperationException("Not implemented");      } @@ -215,8 +216,8 @@ public class MbmsGroupCallServiceBase extends Service {       * @param callback The callback object on which the app wishes to receive updates.       * @return Any error in {@link MbmsErrors.GeneralErrors}       */ -    public int startGroupCall(int subscriptionId, long tmgi, List<Integer> saiList, -            List<Integer> frequencyList, GroupCallCallback callback) { +    public int startGroupCall(int subscriptionId, long tmgi, @NonNull List<Integer> saiList, +            @NonNull List<Integer> frequencyList, @NonNull GroupCallCallback callback) {          throw new UnsupportedOperationException("Not implemented");      } @@ -241,8 +242,8 @@ public class MbmsGroupCallServiceBase extends Service {       * @param saiList New list of SAIs that the call is available on.       * @param frequencyList New list of frequencies that the call is available on.       */ -    public void updateGroupCall(int subscriptionId, long tmgi, List<Integer> saiList, -            List<Integer> frequencyList) { +    public void updateGroupCall(int subscriptionId, long tmgi, @NonNull List<Integer> saiList, +            @NonNull List<Integer> frequencyList) {          throw new UnsupportedOperationException("Not implemented");      } diff --git a/telephony/java/com/android/ims/ImsConfigListener.aidl b/telephony/java/com/android/ims/ImsConfigListener.aidl index 64a501552550..4f229df252a6 100644 --- a/telephony/java/com/android/ims/ImsConfigListener.aidl +++ b/telephony/java/com/android/ims/ImsConfigListener.aidl @@ -47,6 +47,7 @@ oneway interface ImsConfigListener {       *       * @return void.       */ +    @UnsupportedAppUsage      void onSetFeatureResponse(int feature, int network, int value, int status);      /** diff --git a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl index 579369f4b549..b33a9f1ad23b 100644 --- a/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsCallSessionListener.aidl @@ -34,33 +34,47 @@ oneway interface IImsCallSessionListener {      /**       * Notifies the result of the basic session operation (setup / terminate).       */ +    @UnsupportedAppUsage      void callSessionProgressing(in IImsCallSession session, in ImsStreamMediaProfile profile); +    @UnsupportedAppUsage      void callSessionStarted(in IImsCallSession session, in ImsCallProfile profile); +    @UnsupportedAppUsage      void callSessionStartFailed(in IImsCallSession session, in ImsReasonInfo reasonInfo); +    @UnsupportedAppUsage      void callSessionTerminated(in IImsCallSession session, in ImsReasonInfo reasonInfo);      /**       * Notifies the result of the call hold/resume operation.       */ +    @UnsupportedAppUsage      void callSessionHeld(in IImsCallSession session, in ImsCallProfile profile); +    @UnsupportedAppUsage      void callSessionHoldFailed(in IImsCallSession session, in ImsReasonInfo reasonInfo); +    @UnsupportedAppUsage      void callSessionHoldReceived(in IImsCallSession session, in ImsCallProfile profile); +    @UnsupportedAppUsage      void callSessionResumed(in IImsCallSession session, in ImsCallProfile profile); +    @UnsupportedAppUsage      void callSessionResumeFailed(in IImsCallSession session, in ImsReasonInfo reasonInfo); +    @UnsupportedAppUsage      void callSessionResumeReceived(in IImsCallSession session, in ImsCallProfile profile);      /**       * Notifies the result of call merge operation.       */ +    @UnsupportedAppUsage      void callSessionMergeStarted(in IImsCallSession session,              in IImsCallSession newSession, in ImsCallProfile profile); +    @UnsupportedAppUsage      void callSessionMergeComplete(in IImsCallSession session); +    @UnsupportedAppUsage      void callSessionMergeFailed(in IImsCallSession session,              in ImsReasonInfo reasonInfo);      /**       * Notifies the result of call upgrade / downgrade or any other call updates.       */ +    @UnsupportedAppUsage      void callSessionUpdated(in IImsCallSession session,              in ImsCallProfile profile);      void callSessionUpdateFailed(in IImsCallSession session, @@ -81,7 +95,9 @@ oneway interface IImsCallSessionListener {      /**       * Notifies the result of the participant invitation / removal to/from the conference session.       */ +    @UnsupportedAppUsage      void callSessionInviteParticipantsRequestDelivered(in IImsCallSession session); +    @UnsupportedAppUsage      void callSessionInviteParticipantsRequestFailed(in IImsCallSession session,              in ImsReasonInfo reasonInfo);      void callSessionRemoveParticipantsRequestDelivered(in IImsCallSession session); @@ -91,6 +107,7 @@ oneway interface IImsCallSessionListener {      /**       * Notifies the changes of the conference info. in the conference session.       */ +    @UnsupportedAppUsage      void callSessionConferenceStateUpdated(in IImsCallSession session,              in ImsConferenceState state); @@ -103,8 +120,10 @@ oneway interface IImsCallSessionListener {      /**       * Notifies of handover information for this call       */ +    @UnsupportedAppUsage      void callSessionHandover(in IImsCallSession session,              in int srcAccessTech, in int targetAccessTech, in ImsReasonInfo reasonInfo); +    @UnsupportedAppUsage      void callSessionHandoverFailed(in IImsCallSession session,              in int srcAccessTech, in int targetAccessTech, in ImsReasonInfo reasonInfo);      void callSessionMayHandover(in IImsCallSession session, @@ -118,6 +137,7 @@ oneway interface IImsCallSessionListener {       * - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}       * - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}       */ +    @UnsupportedAppUsage      void callSessionTtyModeReceived(in IImsCallSession session, in int mode);      /** @@ -126,11 +146,13 @@ oneway interface IImsCallSessionListener {       * @param session The call session.       * @param isMultiParty {@code true} if the session became multiparty, {@code false} otherwise.       */ +    @UnsupportedAppUsage      void callSessionMultipartyStateChanged(in IImsCallSession session, in boolean isMultiParty);      /**       * Notifies the supplementary service information for the current session.       */ +    @UnsupportedAppUsage      void callSessionSuppServiceReceived(in IImsCallSession session,           in ImsSuppServiceNotification suppSrvNotification); diff --git a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl index 2212109c8a67..a7a62a625478 100644 --- a/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsRegistrationListener.aidl @@ -32,6 +32,7 @@ oneway interface IImsRegistrationListener {       *       * @deprecated see {@link registrationConnectedWithRadioTech}       */ +    @UnsupportedAppUsage      void registrationConnected();      /** @@ -47,6 +48,7 @@ oneway interface IImsRegistrationListener {       * @param imsRadioTech the radio access technology. Valid values are {@code       * RIL_RADIO_TECHNOLOGY_*} defined in {@link ServiceState}.       */ +    @UnsupportedAppUsage      void registrationConnectedWithRadioTech(int imsRadioTech);      /** @@ -55,12 +57,14 @@ oneway interface IImsRegistrationListener {       * @param imsRadioTech the radio access technology. Valid values are {@code       * RIL_RADIO_TECHNOLOGY_*} defined in {@link ServiceState}.       */ +    @UnsupportedAppUsage      void registrationProgressingWithRadioTech(int imsRadioTech);      /**       * Notifies the application when the device is disconnected from the IMS network.       */ +    @UnsupportedAppUsage      void registrationDisconnected(in ImsReasonInfo imsReasonInfo);      /** @@ -94,6 +98,7 @@ oneway interface IImsRegistrationListener {       * @param enabledFeatures features enabled as defined in com.android.ims.ImsConfig#FeatureConstants.       * @param disabledFeatures features disabled as defined in com.android.ims.ImsConfig#FeatureConstants.       */ +    @UnsupportedAppUsage      void registrationFeatureCapabilityChanged(int serviceClass,              in int[] enabledFeatures, in int[] disabledFeatures); @@ -101,11 +106,13 @@ oneway interface IImsRegistrationListener {       * Updates the application with the waiting voice message count.       * @param count The number of waiting voice messages.       */ +    @UnsupportedAppUsage      void voiceMessageCountUpdate(int count);      /**       * Notifies the application when the list of URIs associated with IMS client is updated.       */ +    @UnsupportedAppUsage      void registrationAssociatedUriChanged(in Uri[] uris);      /** @@ -116,5 +123,6 @@ oneway interface IImsRegistrationListener {       *         attempted.       * @param imsReasonInfo Reason for the failure.       */ +    @UnsupportedAppUsage      void registrationChangeFailed(in int targetAccessTech, in ImsReasonInfo imsReasonInfo);  } diff --git a/telephony/java/com/android/ims/internal/IImsUtListener.aidl b/telephony/java/com/android/ims/internal/IImsUtListener.aidl index a603cd34dfcd..fcb9fb1f8773 100644 --- a/telephony/java/com/android/ims/internal/IImsUtListener.aidl +++ b/telephony/java/com/android/ims/internal/IImsUtListener.aidl @@ -31,30 +31,37 @@ oneway interface IImsUtListener {      /**       * Notifies the result of the supplementary service configuration udpate.       */ +    @UnsupportedAppUsage      void utConfigurationUpdated(in IImsUt ut, int id); +    @UnsupportedAppUsage      void utConfigurationUpdateFailed(in IImsUt ut, int id, in ImsReasonInfo error);      /**       * Notifies the result of the supplementary service configuration query.       */ +    @UnsupportedAppUsage      void utConfigurationQueried(in IImsUt ut, int id, in Bundle ssInfo); +    @UnsupportedAppUsage      void utConfigurationQueryFailed(in IImsUt ut, int id, in ImsReasonInfo error);      /**       * Notifies the status of the call barring supplementary service.       */ +    @UnsupportedAppUsage      void utConfigurationCallBarringQueried(in IImsUt ut,              int id, in ImsSsInfo[] cbInfo);      /**       * Notifies the status of the call forwarding supplementary service.       */ +    @UnsupportedAppUsage      void utConfigurationCallForwardQueried(in IImsUt ut,              int id, in ImsCallForwardInfo[] cfInfo);      /**       * Notifies the status of the call waiting supplementary service.       */ +    @UnsupportedAppUsage      void utConfigurationCallWaitingQueried(in IImsUt ut,              int id, in ImsSsInfo[] cwInfo); diff --git a/telephony/java/com/android/ims/internal/IImsVideoCallCallback.aidl b/telephony/java/com/android/ims/internal/IImsVideoCallCallback.aidl index 9499c9f5dde9..cf8d63794546 100644 --- a/telephony/java/com/android/ims/internal/IImsVideoCallCallback.aidl +++ b/telephony/java/com/android/ims/internal/IImsVideoCallCallback.aidl @@ -31,18 +31,25 @@ import android.telecom.VideoProfile;   * {@hide}   */  oneway interface IImsVideoCallCallback { +    @UnsupportedAppUsage      void receiveSessionModifyRequest(in VideoProfile videoProfile); +    @UnsupportedAppUsage      void receiveSessionModifyResponse(int status, in VideoProfile requestedProfile,          in VideoProfile responseProfile); +    @UnsupportedAppUsage      void handleCallSessionEvent(int event); +    @UnsupportedAppUsage      void changePeerDimensions(int width, int height); +    @UnsupportedAppUsage      void changeCallDataUsage(long dataUsage); +    @UnsupportedAppUsage      void changeCameraCapabilities(in VideoProfile.CameraCapabilities cameraCapabilities); +    @UnsupportedAppUsage      void changeVideoQuality(int videoQuality);  } diff --git a/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl b/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl index 0da27e163df1..4d20bd675628 100644 --- a/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl +++ b/telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl @@ -41,6 +41,7 @@ import com.android.ims.internal.IImsVideoCallCallback;   * @hide   */  oneway interface IImsVideoCallProvider { +    @UnsupportedAppUsage      void setCallback(IImsVideoCallCallback callback);      void setCamera(String cameraId, int uid); diff --git a/telephony/java/com/android/ims/internal/uce/options/IOptionsListener.aidl b/telephony/java/com/android/ims/internal/uce/options/IOptionsListener.aidl index 8cb1153c48bb..c69d5a94f760 100644 --- a/telephony/java/com/android/ims/internal/uce/options/IOptionsListener.aidl +++ b/telephony/java/com/android/ims/internal/uce/options/IOptionsListener.aidl @@ -29,6 +29,7 @@ interface IOptionsListener       * @param version, version information of the service.       * @hide       */ +    @UnsupportedAppUsage      void getVersionCb(in String version );      /** @@ -37,6 +38,7 @@ interface IOptionsListener       * @param statusCode, UCE_SUCCESS as service availability.       * @hide       */ +    @UnsupportedAppUsage      void serviceAvailable(in StatusCode statusCode);      /** @@ -45,6 +47,7 @@ interface IOptionsListener       * @param statusCode, UCE_SUCCESS as service unavailability.       * @hide       */ +    @UnsupportedAppUsage      void serviceUnavailable(in StatusCode statusCode);      /** @@ -55,6 +58,7 @@ interface IOptionsListener       * @param capInfo, capabilities of the remote entity received.       * @hide       */ +    @UnsupportedAppUsage      void sipResponseReceived( String uri,                                  in OptionsSipResponse sipResponse, in OptionsCapInfo capInfo); @@ -63,6 +67,7 @@ interface IOptionsListener       * @param cmdStatus, command status of the request placed.       * @hide       */ +    @UnsupportedAppUsage      void cmdStatus(in OptionsCmdStatus cmdStatus);      /** @@ -73,6 +78,7 @@ interface IOptionsListener       * @param tID, transation of the request received from network.       * @hide       */ +    @UnsupportedAppUsage      void incomingOptions( String uri, in OptionsCapInfo capInfo,                                              in int tID);  } diff --git a/telephony/java/com/android/ims/internal/uce/options/IOptionsService.aidl b/telephony/java/com/android/ims/internal/uce/options/IOptionsService.aidl index 839bb5574d33..2e49082988c3 100644 --- a/telephony/java/com/android/ims/internal/uce/options/IOptionsService.aidl +++ b/telephony/java/com/android/ims/internal/uce/options/IOptionsService.aidl @@ -33,6 +33,7 @@ interface IOptionsService       * @return StatusCode, status of the request placed.       * @hide       */ +    @UnsupportedAppUsage      StatusCode getVersion(int optionsServiceHandle);      /** @@ -44,6 +45,7 @@ interface IOptionsService       * The service will fill UceLong.mUceLong with optionsServiceListenerHdl       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode addListener(int optionsServiceHandle, IOptionsListener optionsListener,                             inout UceLong optionsServiceListenerHdl); @@ -54,6 +56,7 @@ interface IOptionsService       * @param optionsServiceListenerHdl provided in createOptionsService() or Addlistener().       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode removeListener(int optionsServiceHandle, in UceLong optionsServiceListenerHdl);      /** @@ -66,6 +69,7 @@ interface IOptionsService       *                  with original request.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode setMyInfo(int optionsServiceHandle , in CapInfo capInfo, int reqUserData); @@ -78,6 +82,7 @@ interface IOptionsService       *                  with original request.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode getMyInfo(int optionsServiceHandle , int reqUserdata);      /** @@ -90,6 +95,7 @@ interface IOptionsService       *                  with original request.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode getContactCap(int optionsServiceHandle , String remoteURI, int reqUserData); @@ -103,6 +109,7 @@ interface IOptionsService       *                  with original request.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode getContactListCap(int optionsServiceHandle, in String[] remoteURIList,                                   int reqUserData); @@ -119,6 +126,7 @@ interface IOptionsService       * @param bContactInBL, true if the contact is blacklisted, else false.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode responseIncomingOptions(int optionsServiceHandle,  int tId, int sipResponseCode,                                         String reasonPhrase, in OptionsCapInfo capInfo,                                         in boolean bContactInBL); diff --git a/telephony/java/com/android/ims/internal/uce/presence/IPresenceListener.aidl b/telephony/java/com/android/ims/internal/uce/presence/IPresenceListener.aidl index 2ae424f4af8e..65e7fc9756bb 100644 --- a/telephony/java/com/android/ims/internal/uce/presence/IPresenceListener.aidl +++ b/telephony/java/com/android/ims/internal/uce/presence/IPresenceListener.aidl @@ -36,6 +36,7 @@ interface IPresenceListener       * Gets the version of the presence listener implementation.       * @param version, version information.       */ +    @UnsupportedAppUsage      void getVersionCb(in String version );      /** @@ -43,6 +44,7 @@ interface IPresenceListener       * availability.       * @param statusCode, UCE_SUCCESS as service availability.       */ +    @UnsupportedAppUsage      void serviceAvailable(in StatusCode statusCode);      /** @@ -50,6 +52,7 @@ interface IPresenceListener       * unavailability.       * @param statusCode, UCE_SUCCESS as service unAvailability.       */ +    @UnsupportedAppUsage      void serviceUnAvailable(in StatusCode statusCode);      /** @@ -57,12 +60,14 @@ interface IPresenceListener       * publish request.       * @param publishTrigger, Publish trigger for the network being supported.       */ +    @UnsupportedAppUsage      void publishTriggering(in PresPublishTriggerType publishTrigger);      /**       * Callback function to be invoked to inform the client of the status of an asynchronous call.       * @param cmdStatus, command status of the request placed.       */ +    @UnsupportedAppUsage      void cmdStatus( in PresCmdStatus cmdStatus);      /** @@ -70,6 +75,7 @@ interface IPresenceListener       * such as PUBLISH or SUBSCRIBE, has been received.       * @param sipResponse, network response received for the request placed.       */ +    @UnsupportedAppUsage      void sipResponseReceived(in PresSipResponse sipResponse);      /** @@ -78,6 +84,7 @@ interface IPresenceListener       * @param presentityURI, URI of the remote entity the request was placed.       * @param tupleInfo, array of capability information remote entity supports.       */ +    @UnsupportedAppUsage      void capInfoReceived(in String presentityURI,                           in PresTupleInfo [] tupleInfo); @@ -87,6 +94,7 @@ interface IPresenceListener       * @param rlmiInfo, resource infomation received from network.       * @param resInfo, array of capabilities received from network for the list of  remore URI.       */ +    @UnsupportedAppUsage      void listCapInfoReceived(in PresRlmiInfo rlmiInfo,                               in PresResInfo [] resInfo); @@ -94,6 +102,7 @@ interface IPresenceListener       * Callback function to be invoked to inform the client when Unpublish message       * is sent to network.       */ +    @UnsupportedAppUsage      void unpublishMessageSent();  }
\ No newline at end of file diff --git a/telephony/java/com/android/ims/internal/uce/presence/IPresenceService.aidl b/telephony/java/com/android/ims/internal/uce/presence/IPresenceService.aidl index fdea6d35c195..26a3e83efcfa 100644 --- a/telephony/java/com/android/ims/internal/uce/presence/IPresenceService.aidl +++ b/telephony/java/com/android/ims/internal/uce/presence/IPresenceService.aidl @@ -33,6 +33,7 @@ interface IPresenceService       * @param presenceServiceHdl returned in createPresenceService().       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode getVersion(int presenceServiceHdl);      /** @@ -45,6 +46,7 @@ interface IPresenceService       *       * @return StatusCode, status of the request placed       */ +    @UnsupportedAppUsage      StatusCode addListener(int presenceServiceHdl, IPresenceListener presenceServiceListener,                             inout UceLong presenceServiceListenerHdl); @@ -54,6 +56,7 @@ interface IPresenceService       * @param presenceServiceListenerHdl provided in createPresenceService() or Addlistener().       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode removeListener(int presenceServiceHdl, in UceLong presenceServiceListenerHdl);      /** @@ -69,6 +72,7 @@ interface IPresenceService       *                  with original request.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode reenableService(int presenceServiceHdl, int userData);      /** @@ -81,6 +85,7 @@ interface IPresenceService       *                  with original request.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode publishMyCap(int presenceServiceHdl, in PresCapInfo myCapInfo , int userData);      /** @@ -94,6 +99,7 @@ interface IPresenceService       *                  with original request.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode getContactCap(int presenceServiceHdl , String remoteUri, int userData);      /** @@ -107,6 +113,7 @@ interface IPresenceService       *                  with original request.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode getContactListCap(int presenceServiceHdl, in String[] remoteUriList, int userData);      /** @@ -122,6 +129,7 @@ interface IPresenceService       *                  with original request.       * @return StatusCode, status of the request placed.       */ +    @UnsupportedAppUsage      StatusCode  setNewFeatureTag(int presenceServiceHdl, String featureTag,                                   in PresServiceInfo serviceInfo, int userData); diff --git a/telephony/java/com/android/ims/internal/uce/uceservice/IUceListener.aidl b/telephony/java/com/android/ims/internal/uce/uceservice/IUceListener.aidl index 13707a16a0c1..41abf7d1a1f0 100644 --- a/telephony/java/com/android/ims/internal/uce/uceservice/IUceListener.aidl +++ b/telephony/java/com/android/ims/internal/uce/uceservice/IUceListener.aidl @@ -25,5 +25,6 @@ interface IUceListener       * @param serviceStatusValue defined in ImsUceManager       * @hide       */ +    @UnsupportedAppUsage      void setStatus(int serviceStatusValue);  } diff --git a/telephony/java/com/android/ims/internal/uce/uceservice/IUceService.aidl b/telephony/java/com/android/ims/internal/uce/uceservice/IUceService.aidl index 1fb8513d410a..ec45371689cf 100644 --- a/telephony/java/com/android/ims/internal/uce/uceservice/IUceService.aidl +++ b/telephony/java/com/android/ims/internal/uce/uceservice/IUceService.aidl @@ -38,6 +38,7 @@ interface IUceService       * Service status is returned in setStatus callback in IUceListener.       * @hide       */ +    @UnsupportedAppUsage      boolean startService(IUceListener uceListener);      /** @@ -45,6 +46,7 @@ interface IUceService       * @return boolean true if the service stop request is processed successfully, FALSE otherwise.       * @hide       */ +    @UnsupportedAppUsage      boolean stopService(); @@ -54,6 +56,7 @@ interface IUceService       * @return boolean true if service started else false.       * @hide       */ +    @UnsupportedAppUsage      boolean isServiceStarted();      /** @@ -71,6 +74,7 @@ interface IUceService       *       * @deprecated This is replaced with new API createOptionsServiceForSubscription()       */ +    @UnsupportedAppUsage      int createOptionsService(IOptionsListener optionsListener,                               inout UceLong optionsServiceListenerHdl);      /** @@ -97,6 +101,7 @@ interface IUceService       *        in IOptionsListener       * @hide       */ +    @UnsupportedAppUsage      void destroyOptionsService(int optionsServiceHandle);      /** @@ -114,6 +119,7 @@ interface IUceService       *       * @deprecated This is replaced with new API createPresenceServiceForSubscription()       */ +    @UnsupportedAppUsage      int createPresenceService(IPresenceListener presenceServiceListener,                                inout UceLong presenceServiceListenerHdl);      /** @@ -141,6 +147,7 @@ interface IUceService       *       * @hide       */ +    @UnsupportedAppUsage      void destroyPresenceService(int presenceServiceHdl); @@ -152,6 +159,7 @@ interface IUceService       *       * @hide       */ +    @UnsupportedAppUsage      boolean getServiceStatus();      /** @@ -163,6 +171,7 @@ interface IUceService       *       * @deprecated use API getPresenceServiceForSubscription()       */ +    @UnsupportedAppUsage      IPresenceService getPresenceService();      /** @@ -185,6 +194,7 @@ interface IUceService       *       * @hide       */ +    @UnsupportedAppUsage      IOptionsService getOptionsService();      /** diff --git a/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl b/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl index 5cd67d977ad5..8e50a8f9d7d5 100644 --- a/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl +++ b/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl @@ -23,6 +23,7 @@ import android.os.PersistableBundle;   */  interface ICarrierConfigLoader { +    @UnsupportedAppUsage      PersistableBundle getConfigForSubId(int subId, String callingPackage);      void overrideConfig(int subId, in PersistableBundle overrides); diff --git a/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl b/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl index 93964f3d30a6..ec16696ffa0a 100644 --- a/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl +++ b/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl @@ -60,6 +60,7 @@ interface IPhoneSubInfo {      /**       * Retrieves the unique sbuscriber ID, e.g., IMSI for GSM phones.       */ +    @UnsupportedAppUsage      String getSubscriberId(String callingPackage);      /** @@ -75,6 +76,7 @@ interface IPhoneSubInfo {      /**       * Retrieves the serial number of the ICC, if applicable.       */ +    @UnsupportedAppUsage      String getIccSerialNumber(String callingPackage);      /** diff --git a/telephony/java/com/android/internal/telephony/ISub.aidl b/telephony/java/com/android/internal/telephony/ISub.aidl index 6ce9de4ca677..7b92ec07c8eb 100755 --- a/telephony/java/com/android/internal/telephony/ISub.aidl +++ b/telephony/java/com/android/internal/telephony/ISub.aidl @@ -246,6 +246,7 @@ interface ISub {      int[] getSubId(int slotIndex); +    @UnsupportedAppUsage      int getDefaultSubId();      int clearSubInfo(); @@ -256,8 +257,10 @@ interface ISub {       * Get the default data subscription       * @return Id of the data subscription       */ +    @UnsupportedAppUsage      int getDefaultDataSubId(); +    @UnsupportedAppUsage      void setDefaultDataSubId(int subId);      int getDefaultVoiceSubId(); @@ -270,6 +273,7 @@ interface ISub {      void clearDefaultsForInactiveSubIds(); +    @UnsupportedAppUsage      int[] getActiveSubIdList();      int setSubscriptionProperty(int subId, String propKey, String propValue); diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 0f4fda46c774..6366b9171144 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -76,6 +76,7 @@ interface ITelephony {       * @param number the number to be dialed. If null, this       * would display the Dialer screen with no number pre-filled.       */ +    @UnsupportedAppUsage      void dial(String number);      /** @@ -83,6 +84,7 @@ interface ITelephony {       * @param callingPackage The package making the call.       * @param number the number to be called.       */ +    @UnsupportedAppUsage      void call(String callingPackage, String number);      /** @@ -98,6 +100,7 @@ interface ITelephony {       * @param callingPackage the name of the package making the call.       * @return returns true if the radio is on.       */ +    @UnsupportedAppUsage      boolean isRadioOnForSubscriber(int subId, String callingPackage);      /** @@ -105,6 +108,7 @@ interface ITelephony {       * @param pin The pin to check.       * @return whether the operation was a success.       */ +    @UnsupportedAppUsage      boolean supplyPin(String pin);      /** @@ -182,6 +186,7 @@ interface ITelephony {       * @param dialString the MMI command to be executed.       * @return true if MMI command is executed.       */ +    @UnsupportedAppUsage      boolean handlePinMmi(String dialString); @@ -202,11 +207,13 @@ interface ITelephony {       * @param subId user preferred subId.       * @return true if MMI command is executed.       */ +    @UnsupportedAppUsage      boolean handlePinMmiForSubscriber(int subId, String dialString);      /**       * Toggles the radio on or off.       */ +    @UnsupportedAppUsage      void toggleRadioOnOff();      /** @@ -218,6 +225,7 @@ interface ITelephony {      /**       * Set the radio to on or off       */ +    @UnsupportedAppUsage      boolean setRadio(boolean turnOn);      /** @@ -234,6 +242,7 @@ interface ITelephony {      /**       * Request to update location information in service state       */ +    @UnsupportedAppUsage      void updateServiceLocation();      /** @@ -245,6 +254,7 @@ interface ITelephony {      /**       * Enable location update notifications.       */ +    @UnsupportedAppUsage      void enableLocationUpdates();      /** @@ -256,6 +266,7 @@ interface ITelephony {      /**       * Disable location update notifications.       */ +    @UnsupportedAppUsage      void disableLocationUpdates();      /** @@ -267,11 +278,13 @@ interface ITelephony {      /**       * Allow mobile data connections.       */ +    @UnsupportedAppUsage      boolean enableDataConnectivity();      /**       * Disallow mobile data connections.       */ +    @UnsupportedAppUsage      boolean disableDataConnectivity();      /** @@ -293,6 +306,7 @@ interface ITelephony {       */      List<NeighboringCellInfo> getNeighboringCellInfo(String callingPkg); +     @UnsupportedAppUsage       int getCallState();      /** @@ -300,7 +314,9 @@ interface ITelephony {       */       int getCallStateForSlot(int slotIndex); +     @UnsupportedAppUsage       int getDataActivity(); +     @UnsupportedAppUsage       int getDataState();      /** @@ -308,6 +324,7 @@ interface ITelephony {       * Returns TelephonyManager.PHONE_TYPE_CDMA if RILConstants.CDMA_PHONE       * and TelephonyManager.PHONE_TYPE_GSM if RILConstants.GSM_PHONE       */ +    @UnsupportedAppUsage      int getActivePhoneType();      /** @@ -444,6 +461,7 @@ interface ITelephony {       * Returns the network type for data transmission       * Legacy call, permission-free       */ +    @UnsupportedAppUsage      int getNetworkType();      /** @@ -477,6 +495,7 @@ interface ITelephony {      /**       * Return true if an ICC card is present       */ +    @UnsupportedAppUsage      boolean hasIccCard();      /** @@ -557,6 +576,7 @@ interface ITelephony {       *            successful iccOpenLogicalChannel.       * @return true if the channel was closed successfully.       */ +    @UnsupportedAppUsage      boolean iccCloseLogicalChannel(int subId, int channel);      /** @@ -577,6 +597,7 @@ interface ITelephony {       * @return The APDU response from the ICC card with the status appended at       *            the end.       */ +    @UnsupportedAppUsage      String iccTransmitApduLogicalChannel(int subId, int channel, int cla, int instruction,              int p1, int p2, int p3, String data); @@ -700,13 +721,12 @@ interface ITelephony {      int getPreferredNetworkType(int subId);      /** -     * Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning -     * SystemProperty to decide whether DUN APN is required for -     * tethering. +     * Check whether DUN APN is required for tethering.       * -     * @return 0: Not required. 1: required. 2: Not set. +     * @return {@code true} if DUN APN is required for tethering. +     * @hide       */ -    int getTetherApnRequired(); +    boolean getTetherApnRequired();      /**      * Enables framework IMS and triggers IMS Registration. @@ -829,6 +849,7 @@ interface ITelephony {       *       * @return true on enabled       */ +    @UnsupportedAppUsage      boolean getDataEnabled(int subId);      /** @@ -1671,7 +1692,7 @@ interface ITelephony {      /**       * Modify the user's setting for whether or not 4G LTE is enabled.       */ -    void setAdvancedCallingSetting(int subId, boolean isEnabled); +    void setAdvancedCallingSettingEnabled(int subId, boolean isEnabled);      /**       * return true if the user's setting for VT is enabled for the subscription. @@ -1681,7 +1702,7 @@ interface ITelephony {      /**       * Modify the user's setting for whether or not VT is available for the subscrption specified.       */ -    void setVtSetting(int subId, boolean isEnabled); +    void setVtSettingEnabled(int subId, boolean isEnabled);      /**       * return true if the user's setting for whether or not Voice over WiFi is currently enabled. @@ -1691,7 +1712,7 @@ interface ITelephony {      /**       * sets the user's setting for Voice over WiFi enabled state.       */ -    void setVoWiFiSetting(int subId, boolean isEnabled); +    void setVoWiFiSettingEnabled(int subId, boolean isEnabled);      /**       * return true if the user's setting for Voice over WiFi while roaming is enabled. @@ -1702,7 +1723,7 @@ interface ITelephony {       * Sets the user's preference for whether or not Voice over WiFi is enabled for the current       * subscription while roaming.       */ -    void setVoWiFiRoamingSetting(int subId, boolean isEnabled); +    void setVoWiFiRoamingSettingEnabled(int subId, boolean isEnabled);      /**       * Set the Voice over WiFi enabled state, but do not persist the setting. @@ -1826,10 +1847,12 @@ interface ITelephony {      void setMultisimCarrierRestriction(boolean isMultisimCarrierRestricted);      /** -     * Returns if the usage of multiple SIM cards at the same time is restricted. -     * @hide +     * Returns if the usage of multiple SIM cards at the same time is supported. +     * +     * @param callingPackage The package making the call. +     * @return true if multisim is supported, false otherwise.       */ -    boolean isMultisimCarrierRestricted(); +    boolean isMultisimSupported(String callingPackage);      /**       * Switch configs to enable multi-sim or switch back to single-sim diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl index e9eba324acb0..fd85281dd34f 100644 --- a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl @@ -38,9 +38,11 @@ interface ITelephonyRegistry {              IOnSubscriptionsChangedListener callback);      void removeOnSubscriptionsChangedListener(String pkg,              IOnSubscriptionsChangedListener callback); +    @UnsupportedAppUsage      void listen(String pkg, IPhoneStateListener callback, int events, boolean notifyNow);      void listenForSubscriber(in int subId, String pkg, IPhoneStateListener callback, int events,              boolean notifyNow); +    @UnsupportedAppUsage      void notifyCallState(int state, String incomingNumber);      void notifyCallStateForPhoneId(in int phoneId, in int subId, int state, String incomingNumber);      void notifyServiceStateForPhoneId(in int phoneId, in int subId, in ServiceState state); @@ -57,11 +59,13 @@ interface ITelephonyRegistry {      void notifyDataConnectionForSubscriber(int subId, int state, boolean isDataConnectivityPossible,              String apn, String apnType, in LinkProperties linkProperties,              in NetworkCapabilities networkCapabilities, int networkType, boolean roaming); +    @UnsupportedAppUsage      void notifyDataConnectionFailed(String apnType);      void notifyDataConnectionFailedForSubscriber(int subId, String apnType);      void notifyCellLocation(in Bundle cellLocation);      void notifyCellLocationForSubscriber(in int subId, in Bundle cellLocation);      void notifyOtaspChanged(in int otaspMode); +    @UnsupportedAppUsage      void notifyCellInfo(in List<CellInfo> cellInfo);      void notifyPhysicalChannelConfiguration(in List<PhysicalChannelConfig> configs);      void notifyPhysicalChannelConfigurationForSubscriber(in int subId, @@ -84,6 +88,6 @@ interface ITelephonyRegistry {      void notifyPreferredDataSubIdChanged(int preferredSubId);      void notifyRadioPowerStateChanged(in int state);      void notifyEmergencyNumberList(); -    void notifyCallQualityChanged(in CallQuality callQuality, int phoneId); +    void notifyCallQualityChanged(in CallQuality callQuality, int phoneId, int callNetworkType);      void notifyImsDisconnectCause(int subId, in ImsReasonInfo imsReasonInfo);  } diff --git a/telephony/java/com/android/internal/telephony/IWapPushManager.aidl b/telephony/java/com/android/internal/telephony/IWapPushManager.aidl index d5ecb940c8d1..1c3df65336f8 100644 --- a/telephony/java/com/android/internal/telephony/IWapPushManager.aidl +++ b/telephony/java/com/android/internal/telephony/IWapPushManager.aidl @@ -30,6 +30,7 @@ interface IWapPushManager {       * Returns true if inserting the information is successfull. Inserting the duplicated       * record in the application ID table is not allowed. Use update/delete method.       */ +    @UnsupportedAppUsage      boolean addPackage(String x_app_id, String content_type,              String package_name, String class_name,              int app_type, boolean need_signature, boolean further_processing); @@ -38,6 +39,7 @@ interface IWapPushManager {       * Updates receiver application that is last added.       * Returns true if updating the information is successfull.       */ +    @UnsupportedAppUsage      boolean updatePackage(String x_app_id, String content_type,              String package_name, String class_name,              int app_type, boolean need_signature, boolean further_processing); @@ -46,6 +48,7 @@ interface IWapPushManager {       * Delites receiver application information.       * Returns true if deleting is successfull.       */ +    @UnsupportedAppUsage      boolean deletePackage(String x_app_id, String content_type,                              String package_name, String class_name);  } diff --git a/telephony/java/com/android/internal/telephony/PhoneConstants.java b/telephony/java/com/android/internal/telephony/PhoneConstants.java index e87d28c6f9e9..d5061a32ba6d 100644 --- a/telephony/java/com/android/internal/telephony/PhoneConstants.java +++ b/telephony/java/com/android/internal/telephony/PhoneConstants.java @@ -141,6 +141,8 @@ public class PhoneConstants {      /** APN type for Emergency PDN. This is not an IA apn, but is used       * for access to carrier services in an emergency call situation. */      public static final String APN_TYPE_EMERGENCY = "emergency"; +    /** APN type for Mission Critical Services */ +    public static final String APN_TYPE_MCX = "mcx";      /** Array of all APN types */      public static final String[] APN_TYPES = {APN_TYPE_DEFAULT,              APN_TYPE_MMS, @@ -151,7 +153,8 @@ public class PhoneConstants {              APN_TYPE_IMS,              APN_TYPE_CBS,              APN_TYPE_IA, -            APN_TYPE_EMERGENCY +            APN_TYPE_EMERGENCY, +            APN_TYPE_MCX      };      public static final int RIL_CARD_MAX_APPS    = 8; diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java index 77b797956cf5..5205973669ac 100644 --- a/telephony/java/com/android/internal/telephony/RILConstants.java +++ b/telephony/java/com/android/internal/telephony/RILConstants.java @@ -470,6 +470,7 @@ public interface RILConstants {      int RIL_REQUEST_START_KEEPALIVE = 144;      int RIL_REQUEST_STOP_KEEPALIVE = 145;      int RIL_REQUEST_ENABLE_MODEM = 146; +    int RIL_REQUEST_GET_MODEM_STATUS = 147;      /* The following requests are not defined in RIL.h */      int RIL_REQUEST_HAL_NON_RIL_BASE = 200; diff --git a/telephony/java/com/android/internal/telephony/TelephonyProperties.java b/telephony/java/com/android/internal/telephony/TelephonyProperties.java index 603c4c2870d7..030c3f495d0f 100644 --- a/telephony/java/com/android/internal/telephony/TelephonyProperties.java +++ b/telephony/java/com/android/internal/telephony/TelephonyProperties.java @@ -188,18 +188,17 @@ public interface TelephonyProperties       */      static final String PROPERTY_IGNORE_NITZ = "telephony.test.ignore.nitz"; -     /** +    /**       * Property to set multi sim feature.       * Type:  String(dsds, dsda)       */      static final String PROPERTY_MULTI_SIM_CONFIG = "persist.radio.multisim.config"; -     /** +    /**       * Property to indicate if reboot is required when changing modems configurations       * Type:  String(true, false) default is false; most devices don't need reboot       */ -    String PROPERTY_REBOOT_REQUIRED_ON_MODEM_CHANGE = -             "persist.radio.reboot_on_modem_change"; +    String PROPERTY_REBOOT_REQUIRED_ON_MODEM_CHANGE = "persist.radio.reboot_on_modem_change";      /**       * Property to store default subscription. diff --git a/test-base/Android.bp b/test-base/Android.bp index 157609cec09c..8aa0aaf363dd 100644 --- a/test-base/Android.bp +++ b/test-base/Android.bp @@ -44,7 +44,7 @@ java_sdk_library {  // ==========================================  // This is only intended for inclusion in the android.test.runner-minus-junit,  // robolectric_android-all-stub and repackaged.android.test.* libraries. -// Must not be used elewhere. +// Must not be used elsewhere.  java_library_static {      name: "android.test.base_static",      installable: false, @@ -61,19 +61,6 @@ java_library_static {      sdk_version: "current",  } -// Build the legacy-test library -// ============================= -// This contains the junit.framework and android.test classes that were in -// Android API level 25 excluding those from android.test.runner. -// Also contains the com.android.internal.util.Predicate[s] classes. -java_library { -    name: "legacy-test", -    installable: true, - -    sdk_version: "current", -    static_libs: ["android.test.base_static"], -} -  // Build the repackaged.android.test.base library  // ==============================================  // This contains repackaged versions of the classes from @@ -93,8 +80,8 @@ java_library_static {  // ===============================================  // This contains the android.test classes from android.test.base plus  // the com.android.internal.util.Predicate[s] classes. This is only -// intended for inclusion in the android.test.legacy and -// legacy-android-test static libraries and must not be used elsewhere. +// intended for inclusion in android.test.legacy and must not be used +// elsewhere.  java_library_static {      name: "android.test.base-minus-junit", diff --git a/test-base/hiddenapi/Android.bp b/test-base/hiddenapi/Android.bp new file mode 100644 index 000000000000..c4e0fab4a1a8 --- /dev/null +++ b/test-base/hiddenapi/Android.bp @@ -0,0 +1,29 @@ +// +// Copyright (C) 2019 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//      http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// Provided solely to contribute information about which hidden parts of the android.test.base +// library are used by apps. The source files are stubs of the actual files in ../src which use the +// UnsupportedAppUsage annotation to tag those methods that are accessible via the hiddenapi. +// Relies on the convention that modules with name <x>-hiddenapi provide hiddenapi information for +// module <x> that is on the bootclasspath. +java_library { +    name: "android.test.base-hiddenapi", +    compile_dex: true, + +    srcs: ["src/**/*.java"], + +    libs: ["android.test.base"], +} diff --git a/test-base/hiddenapi/src/android/test/AndroidTestCase.java b/test-base/hiddenapi/src/android/test/AndroidTestCase.java new file mode 100644 index 000000000000..2b9beb160110 --- /dev/null +++ b/test-base/hiddenapi/src/android/test/AndroidTestCase.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.test; + +import android.annotation.UnsupportedAppUsage; +import android.content.Context; + +import junit.framework.TestCase; + +/** + * @deprecated Stub only + */ +@SuppressWarnings({ "unchecked", "deprecation", "all" }) +@Deprecated +public class AndroidTestCase extends TestCase { + +    /** +     * Stub only +     */ +    @UnsupportedAppUsage +    public void setTestContext(Context context) { +        throw new RuntimeException("Stub!"); +    } + +    /** +     * Stub only +     */ +    @UnsupportedAppUsage +    public Context getTestContext() { +        throw new RuntimeException("Stub!"); +    } +} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl b/test-base/hiddenapi/src/android/test/InstrumentationTestCase.java index 62a8c4866f07..139cd18a176c 100644 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl +++ b/test-base/hiddenapi/src/android/test/InstrumentationTestCase.java @@ -1,5 +1,5 @@  /* - * Copyright (C) 2013 The Android Open Source Project + * Copyright (C) 2019 The Android Open Source Project   *   * Licensed under the Apache License, Version 2.0 (the "License");   * you may not use this file except in compliance with the License. @@ -14,10 +14,26 @@   * limitations under the License.   */ -package com.android.testing.alarmservice; +package android.test; -interface Alarm { -    int prepare(); -    int setAlarmAndWait(long timeoutMills); -    int done(); -}
\ No newline at end of file +import android.annotation.UnsupportedAppUsage; + +import junit.framework.TestCase; + +import java.lang.reflect.Method; + +/** + * @deprecated Stub only + */ +@SuppressWarnings({ "unchecked", "deprecation", "all" }) +@Deprecated +public class InstrumentationTestCase extends TestCase { + +    /** +     * Stub only +     */ +    @UnsupportedAppUsage +    private void runMethod(Method runMethod, int tolerance) throws Throwable { +        throw new RuntimeException("Stub!"); +    } +} diff --git a/test-base/hiddenapi/src/junit/framework/TestCase.java b/test-base/hiddenapi/src/junit/framework/TestCase.java new file mode 100644 index 000000000000..5a5486108a7a --- /dev/null +++ b/test-base/hiddenapi/src/junit/framework/TestCase.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package junit.framework; + +import android.annotation.UnsupportedAppUsage; + +/** + * Stub only + */ +@SuppressWarnings({ "unchecked", "deprecation", "all" }) +public abstract class TestCase extends Assert implements Test { + +    /** +     * the name of the test case +     */ +    @UnsupportedAppUsage +    private String fName; + +    /** +     * Stub only +     */ +    public int countTestCases() { +        throw new RuntimeException("Stub!"); +    } + +    /** +     * Stub only +     */ +    public void run(TestResult result) { +        throw new RuntimeException("Stub!"); +    } +} diff --git a/test-base/hiddenapi/src/junit/framework/TestSuite.java b/test-base/hiddenapi/src/junit/framework/TestSuite.java new file mode 100644 index 000000000000..368c661dbfa4 --- /dev/null +++ b/test-base/hiddenapi/src/junit/framework/TestSuite.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package junit.framework; + +import android.annotation.UnsupportedAppUsage; + +import java.lang.reflect.Method; + +/** + * Stub only + */ +@SuppressWarnings({ "unchecked", "deprecation", "all" }) +public class TestSuite implements Test { + +    /** +     * Stub only +     */ +    @UnsupportedAppUsage +    private boolean isPublicTestMethod(Method m) { +        throw new RuntimeException("Stub!"); +    } + +    /** +     * Stub only +     */ +    @UnsupportedAppUsage +    private boolean isTestMethod(Method m) { +        throw new RuntimeException("Stub!"); +    } + +    /** +     * Stub only +     */ +    public int countTestCases() { +        throw new RuntimeException("Stub!"); +    } + +    /** +     * Stub only +     */ +    public void run(TestResult result) { +        throw new RuntimeException("Stub!"); +    } +} diff --git a/test-legacy/Android.bp b/test-legacy/Android.bp deleted file mode 100644 index a69f422b3bdb..000000000000 --- a/test-legacy/Android.bp +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright (C) 2018 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//      http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// Build the legacy-android-test library -// ===================================== -// This contains the android.test classes that were in Android API level 25, -// including those from android.test.runner. -// Also contains the com.android.internal.util.Predicate[s] classes. -java_library_static { -    name: "legacy-android-test", - -    static_libs: [ -        "android.test.base-minus-junit", -        "android.test.runner-minus-junit", -        "android.test.mock_static", -    ], - -    no_framework_libs: true, -    libs: [ -        "framework", -        "junit", -    ], -} diff --git a/test-legacy/Android.mk b/test-legacy/Android.mk index da47de0a3d35..af26c5b80717 100644 --- a/test-legacy/Android.mk +++ b/test-legacy/Android.mk @@ -24,35 +24,16 @@ ifeq (,$(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK)))  # Built against the SDK so that it can be statically included in APKs  # without breaking link type checks.  # -# This builds directly from the source rather than simply statically -# including the android.test.base-minus-junit and -# android.test.runner-minus-junit libraries because the latter library -# cannot itself be built against the SDK. That is because it uses on -# an internal method (setTestContext) on the AndroidTestCase class. -# That class is provided by both the android.test.base-minus-junit and -# the current SDK and as the latter is first on the classpath its -# version is used. Unfortunately, it does not provide the internal -# method and so compilation fails. -# -# Building from source avoids that because the compiler will use the -# source version of AndroidTestCase instead of the one from the current -# SDK. -# -# The use of the internal method does not prevent this from being -# statically included because the class that provides the method is -# also included in this library.  include $(CLEAR_VARS)  LOCAL_MODULE := android.test.legacy -LOCAL_SRC_FILES := \ -    $(call all-java-files-under, ../test-base/src/android) \ -    $(call all-java-files-under, ../test-base/src/com) \ -    $(call all-java-files-under, ../test-runner/src/android) \ -  LOCAL_SDK_VERSION := current  LOCAL_JAVA_LIBRARIES := junit android.test.mock.stubs +LOCAL_STATIC_JAVA_LIBRARIES := \ +    android.test.base-minus-junit \ +    android.test.runner-minus-junit \  include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/test-mock/Android.bp b/test-mock/Android.bp index 43b765d8b783..e1d6e01d6d06 100644 --- a/test-mock/Android.bp +++ b/test-mock/Android.bp @@ -30,19 +30,3 @@ java_sdk_library {      srcs_lib_whitelist_pkgs: ["android"],      compile_dex: true,  } - -// Build the android.test.mock_static library -// ========================================== -// This is only intended for inclusion in the legacy-android-test. -// Must not be used elewhere. -java_library_static { -    name: "android.test.mock_static", - -    java_version: "1.8", -    srcs: ["src/**/*.java"], - -    no_framework_libs: true, -    libs: [ -        "framework", -    ], -} diff --git a/test-mock/api/test-current.txt b/test-mock/api/test-current.txt index 14cb9e3a8f71..9768c622f19d 100644 --- a/test-mock/api/test-current.txt +++ b/test-mock/api/test-current.txt @@ -10,7 +10,9 @@ package android.test.mock {      method public String getPermissionControllerPackageName();      method @NonNull public String getServicesSystemSharedLibraryPackageName();      method @NonNull public String getSharedSystemSharedLibraryPackageName(); +    method public void grantRuntimePermission(String, String, android.os.UserHandle);      method public boolean isPermissionReviewModeEnabled(); +    method public void revokeRuntimePermission(String, String, android.os.UserHandle);    }  } diff --git a/test-runner/Android.bp b/test-runner/Android.bp index db5053eeb903..35212020be7b 100644 --- a/test-runner/Android.bp +++ b/test-runner/Android.bp @@ -45,7 +45,7 @@ java_sdk_library {  // Build the android.test.runner-minus-junit library  // ================================================= -// This is only intended for inclusion in the legacy-android-test static +// This is only intended for inclusion in the android.test.legacy static  // library and must not be used elsewhere.  java_library {      name: "android.test.runner-minus-junit", diff --git a/tests/HwAccelerationTest/Android.bp b/tests/HwAccelerationTest/Android.bp new file mode 100644 index 000000000000..abcd73b115af --- /dev/null +++ b/tests/HwAccelerationTest/Android.bp @@ -0,0 +1,21 @@ +// +// Copyright (C) 2010 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//      http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { +    name: "HwAccelerationTest", +    srcs: ["**/*.java"], +    platform_apis: true, +} diff --git a/tests/HwAccelerationTest/Android.mk b/tests/HwAccelerationTest/Android.mk deleted file mode 100644 index 11ea954c62c7..000000000000 --- a/tests/HwAccelerationTest/Android.mk +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright (C) 2010 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := HwAccelerationTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/JankBench/Android.bp b/tests/JankBench/Android.bp new file mode 100644 index 000000000000..4ca33154e927 --- /dev/null +++ b/tests/JankBench/Android.bp @@ -0,0 +1,21 @@ +android_test { +    name: "JankBench", +    manifest: "app/src/main/AndroidManifest.xml", +    sdk_version: "current", +    // omit gradle 'build' dir +    srcs: ["app/src/main/java/**/*.java"], +    // use appcompat/support lib from the tree, so improvements/ +    // regressions are reflected in test data +    resource_dirs: ["app/src/main/res"], +    static_libs: [ +        "android-support-design", +        "android-support-v4", +        "android-support-v7-appcompat", +        "android-support-v7-cardview", +        "android-support-v7-recyclerview", +        "android-support-v17-leanback", +        "apache-commons-math", +        "junit", +    ], +    test_suites: ["device-tests"], +} diff --git a/tests/JankBench/Android.mk b/tests/JankBench/Android.mk deleted file mode 100644 index 291ba78758b4..000000000000 --- a/tests/JankBench/Android.mk +++ /dev/null @@ -1,38 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml - -LOCAL_SDK_VERSION := current - -LOCAL_USE_AAPT2 := true - -# omit gradle 'build' dir -LOCAL_SRC_FILES := $(call all-java-files-under,app/src/main/java) - -# use appcompat/support lib from the tree, so improvements/ -# regressions are reflected in test data -LOCAL_RESOURCE_DIR := \ -    $(LOCAL_PATH)/app/src/main/res \ - - -LOCAL_STATIC_ANDROID_LIBRARIES := \ -    $(ANDROID_SUPPORT_DESIGN_TARGETS) \ -    android-support-v4 \ -    android-support-v7-appcompat \ -    android-support-v7-cardview \ -    android-support-v7-recyclerview \ -    android-support-v17-leanback \ - -LOCAL_STATIC_JAVA_LIBRARIES := \ -    apache-commons-math \ -    junit - - -LOCAL_PACKAGE_NAME := JankBench - -LOCAL_COMPATIBILITY_SUITE := device-tests - -include $(BUILD_PACKAGE) diff --git a/tests/JankBench/app/src/main/jni/Android.bp.converted b/tests/JankBench/app/src/main/jni/Android.bp.converted new file mode 100644 index 000000000000..9fecf1599fd9 --- /dev/null +++ b/tests/JankBench/app/src/main/jni/Android.bp.converted @@ -0,0 +1,27 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//      http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_library_shared { +    name: "libnativebench", +    cflags: [ +        "-Wno-unused-parameter", +        "-Wno-unused-variable", +    ], +    srcs: [ +        "Bench.cpp", +        "WorkerPool.cpp", +        "test.cpp", +    ], +    host_ldlibs: ["-llog"], +} diff --git a/tests/JankBench/app/src/main/jni/Android.mk b/tests/JankBench/app/src/main/jni/Android.mk deleted file mode 100644 index 8ba874de0e8a..000000000000 --- a/tests/JankBench/app/src/main/jni/Android.mk +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) -LOCAL_SDK_VERSION := 26 - -include $(CLEAR_VARS) - -LOCAL_CFLAGS = -Wno-unused-parameter - -LOCAL_MODULE:= libnativebench - -LOCAL_SRC_FILES := \ -	Bench.cpp \ -	WorkerPool.cpp \ -	test.cpp - -LOCAL_LDLIBS := -llog - -include $(BUILD_SHARED_LIBRARY) diff --git a/tests/UiBench/Android.bp b/tests/UiBench/Android.bp new file mode 100644 index 000000000000..af17b97f2ea7 --- /dev/null +++ b/tests/UiBench/Android.bp @@ -0,0 +1,19 @@ +android_test { +    name: "UiBench", +    sdk_version: "current", +    min_sdk_version: "21", +    // omit gradle 'build' dir +    srcs: ["src/**/*.java"], +    // use appcompat/support lib from the tree, so improvements/ +    // regressions are reflected in test data +    resource_dirs: ["res"], +    static_libs: [ +        "android-support-design", +        "android-support-v4", +        "android-support-v7-appcompat", +        "android-support-v7-cardview", +        "android-support-v7-recyclerview", +        "android-support-v17-leanback", +    ], +    test_suites: ["device-tests"], +} diff --git a/tests/UiBench/Android.mk b/tests/UiBench/Android.mk deleted file mode 100644 index c8e6c2091d8f..000000000000 --- a/tests/UiBench/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests -LOCAL_SDK_VERSION := current -LOCAL_MIN_SDK_VERSION := 21 - -# omit gradle 'build' dir -LOCAL_SRC_FILES := $(call all-java-files-under,src) - -# use appcompat/support lib from the tree, so improvements/ -# regressions are reflected in test data -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_USE_AAPT2 := true - -LOCAL_STATIC_ANDROID_LIBRARIES := \ -    $(ANDROID_SUPPORT_DESIGN_TARGETS) \ -    android-support-v4 \ -    android-support-v7-appcompat \ -    android-support-v7-cardview \ -    android-support-v7-recyclerview \ -    android-support-v17-leanback - -LOCAL_PACKAGE_NAME := UiBench - -LOCAL_COMPATIBILITY_SUITE := device-tests - -include $(BUILD_PACKAGE) diff --git a/tests/UsageStatsTest/Android.bp b/tests/UsageStatsTest/Android.bp new file mode 100644 index 000000000000..4995effa1ce9 --- /dev/null +++ b/tests/UsageStatsTest/Android.bp @@ -0,0 +1,8 @@ +android_test { +    name: "UsageStatsTest", +    // Only compile source java files in this apk. +    srcs: ["src/**/*.java"], +    static_libs: ["android-support-v4"], +    certificate: "platform", +    platform_apis: true, +} diff --git a/tests/UsageStatsTest/Android.mk b/tests/UsageStatsTest/Android.mk deleted file mode 100644 index 6735c7c8f787..000000000000 --- a/tests/UsageStatsTest/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 - -LOCAL_CERTIFICATE := platform - -LOCAL_PACKAGE_NAME := UsageStatsTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) diff --git a/tests/libs-permissions/Android.bp b/tests/libs-permissions/Android.bp new file mode 100644 index 000000000000..16e927a0cbca --- /dev/null +++ b/tests/libs-permissions/Android.bp @@ -0,0 +1,14 @@ +java_library { +    name: "com.android.test.libs.product", +    installable: true, +    product_specific: true, +    srcs: ["product/java/**/*.java"], +    required: ["com.android.test.libs.product.xml"], +} + +prebuilt_etc { +    name: "com.android.test.libs.product.xml", +    src: "product/com.android.test.libs.product.xml", +    sub_dir: "permissions", +    product_specific: true, +} diff --git a/tests/libs-permissions/Android.mk b/tests/libs-permissions/Android.mk deleted file mode 100644 index eb3862390338..000000000000 --- a/tests/libs-permissions/Android.mk +++ /dev/null @@ -1,15 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_MODULE := com.android.test.libs.product -LOCAL_PRODUCT_MODULE := true -LOCAL_SRC_FILES := $(call all-java-files-under, product/java) -LOCAL_REQUIRED_MODULES := com.android.test.libs.product.xml -include $(BUILD_JAVA_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := com.android.test.libs.product.xml -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/permissions -LOCAL_SRC_FILES:= product/com.android.test.libs.product.xml -include $(BUILD_PREBUILT) diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index d1a06925a902..c25ad5f7bbd5 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -17,10 +17,10 @@  package com.android.server;  import static android.net.ConnectivityManager.CONNECTIVITY_ACTION; +import static android.net.ConnectivityManager.NETID_UNSET;  import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;  import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC;  import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; -import static android.net.ConnectivityManager.NETID_UNSET;  import static android.net.ConnectivityManager.TYPE_ETHERNET;  import static android.net.ConnectivityManager.TYPE_MOBILE;  import static android.net.ConnectivityManager.TYPE_MOBILE_FOTA; @@ -125,6 +125,7 @@ import android.net.NetworkParcelable;  import android.net.NetworkRequest;  import android.net.NetworkSpecifier;  import android.net.NetworkStackClient; +import android.net.NetworkState;  import android.net.NetworkUtils;  import android.net.ProxyInfo;  import android.net.RouteInfo; @@ -156,6 +157,7 @@ import android.util.ArraySet;  import android.util.Log;  import com.android.internal.net.VpnConfig; +import com.android.internal.net.VpnInfo;  import com.android.internal.util.ArrayUtils;  import com.android.internal.util.WakeupMessage;  import com.android.internal.util.test.BroadcastInterceptingContext; @@ -907,11 +909,19 @@ public class ConnectivityServiceTest {              return mConnected;  // Similar trickery          } -        public void connect() { +        private void connect(boolean isAlwaysMetered) {              mNetworkCapabilities.set(mMockNetworkAgent.getNetworkCapabilities());              mConnected = true;              mConfig = new VpnConfig(); -            mConfig.isMetered = false; +            mConfig.isMetered = isAlwaysMetered; +        } + +        public void connectAsAlwaysMetered() { +            connect(true /* isAlwaysMetered */); +        } + +        public void connect() { +            connect(false /* isAlwaysMetered */);          }          @Override @@ -1798,6 +1808,12 @@ public class ConnectivityServiceTest {                      fn.test((NetworkCapabilities) cbi.arg));          } +        void expectLinkPropertiesLike(Predicate<LinkProperties> fn, MockNetworkAgent agent) { +            CallbackInfo cbi = expectCallback(CallbackState.LINK_PROPERTIES, agent); +            assertTrue("Received LinkProperties don't match expectations : " + cbi.arg, +                    fn.test((LinkProperties) cbi.arg)); +        } +          void expectBlockedStatusCallback(boolean expectBlocked, MockNetworkAgent agent) {              CallbackInfo cbi = expectCallback(CallbackState.BLOCKED_STATUS, agent);              boolean actualBlocked = (boolean) cbi.arg; @@ -4267,48 +4283,91 @@ public class ConnectivityServiceTest {          mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);          mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); -        Network[] onlyCell = new Network[]{mCellNetworkAgent.getNetwork()}; -        Network[] onlyWifi = new Network[]{mWiFiNetworkAgent.getNetwork()}; +        Network[] onlyCell = new Network[] {mCellNetworkAgent.getNetwork()}; +        Network[] onlyWifi = new Network[] {mWiFiNetworkAgent.getNetwork()}; + +        LinkProperties cellLp = new LinkProperties(); +        cellLp.setInterfaceName(MOBILE_IFNAME); +        LinkProperties wifiLp = new LinkProperties(); +        wifiLp.setInterfaceName(WIFI_IFNAME);          // Simple connection should have updated ifaces          mCellNetworkAgent.connect(false); +        mCellNetworkAgent.sendLinkProperties(cellLp);          waitForIdle(); -        verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell); +        verify(mStatsService, atLeastOnce()) +                .forceUpdateIfaces( +                        eq(onlyCell), +                        eq(new VpnInfo[0]), +                        any(NetworkState[].class), +                        eq(MOBILE_IFNAME));          reset(mStatsService);          // Default network switch should update ifaces.          mWiFiNetworkAgent.connect(false); +        mWiFiNetworkAgent.sendLinkProperties(wifiLp);          waitForIdle(); -        verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyWifi); +        assertEquals(wifiLp, mService.getActiveLinkProperties()); +        verify(mStatsService, atLeastOnce()) +                .forceUpdateIfaces( +                        eq(onlyWifi), +                        eq(new VpnInfo[0]), +                        any(NetworkState[].class), +                        eq(WIFI_IFNAME));          reset(mStatsService);          // Disconnect should update ifaces.          mWiFiNetworkAgent.disconnect();          waitForIdle(); -        verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell); +        verify(mStatsService, atLeastOnce()) +                .forceUpdateIfaces( +                        eq(onlyCell), +                        eq(new VpnInfo[0]), +                        any(NetworkState[].class), +                        eq(MOBILE_IFNAME));          reset(mStatsService);          // Metered change should update ifaces          mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);          waitForIdle(); -        verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell); +        verify(mStatsService, atLeastOnce()) +                .forceUpdateIfaces( +                        eq(onlyCell), +                        eq(new VpnInfo[0]), +                        any(NetworkState[].class), +                        eq(MOBILE_IFNAME));          reset(mStatsService);          mCellNetworkAgent.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);          waitForIdle(); -        verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell); +        verify(mStatsService, atLeastOnce()) +                .forceUpdateIfaces( +                        eq(onlyCell), +                        eq(new VpnInfo[0]), +                        any(NetworkState[].class), +                        eq(MOBILE_IFNAME));          reset(mStatsService);          // Captive portal change shouldn't update ifaces          mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);          waitForIdle(); -        verify(mStatsService, never()).forceUpdateIfaces(onlyCell); +        verify(mStatsService, never()) +                .forceUpdateIfaces( +                        eq(onlyCell), +                        eq(new VpnInfo[0]), +                        any(NetworkState[].class), +                        eq(MOBILE_IFNAME));          reset(mStatsService);          // Roaming change should update ifaces          mCellNetworkAgent.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING);          waitForIdle(); -        verify(mStatsService, atLeastOnce()).forceUpdateIfaces(onlyCell); +        verify(mStatsService, atLeastOnce()) +                .forceUpdateIfaces( +                        eq(onlyCell), +                        eq(new VpnInfo[0]), +                        any(NetworkState[].class), +                        eq(MOBILE_IFNAME));          reset(mStatsService);      } @@ -4964,6 +5023,202 @@ public class ConnectivityServiceTest {      }      @Test +    public void testIsActiveNetworkMeteredOverWifi() { +        // Returns true by default when no network is available. +        assertTrue(mCm.isActiveNetworkMetered()); +        mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); +        mWiFiNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED); +        mWiFiNetworkAgent.connect(true); +        waitForIdle(); + +        assertFalse(mCm.isActiveNetworkMetered()); +    } + +    @Test +    public void testIsActiveNetworkMeteredOverCell() { +        // Returns true by default when no network is available. +        assertTrue(mCm.isActiveNetworkMetered()); +        mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR); +        mCellNetworkAgent.removeCapability(NET_CAPABILITY_NOT_METERED); +        mCellNetworkAgent.connect(true); +        waitForIdle(); + +        assertTrue(mCm.isActiveNetworkMetered()); +    } + +    @Test +    public void testIsActiveNetworkMeteredOverVpnTrackingPlatformDefault() { +        // Returns true by default when no network is available. +        assertTrue(mCm.isActiveNetworkMetered()); +        mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR); +        mCellNetworkAgent.removeCapability(NET_CAPABILITY_NOT_METERED); +        mCellNetworkAgent.connect(true); +        waitForIdle(); +        assertTrue(mCm.isActiveNetworkMetered()); + +        // Connect VPN network. By default it is using current default network (Cell). +        MockNetworkAgent vpnNetworkAgent = new MockNetworkAgent(TRANSPORT_VPN); +        final ArraySet<UidRange> ranges = new ArraySet<>(); +        final int uid = Process.myUid(); +        ranges.add(new UidRange(uid, uid)); +        mMockVpn.setNetworkAgent(vpnNetworkAgent); +        mMockVpn.setUids(ranges); +        vpnNetworkAgent.connect(true); +        mMockVpn.connect(); +        waitForIdle(); +        // Ensure VPN is now the active network. +        assertEquals(vpnNetworkAgent.getNetwork(), mCm.getActiveNetwork()); + +        // Expect VPN to be metered. +        assertTrue(mCm.isActiveNetworkMetered()); + +        // Connect WiFi. +        mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); +        mWiFiNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED); +        mWiFiNetworkAgent.connect(true); +        waitForIdle(); +        // VPN should still be the active network. +        assertEquals(vpnNetworkAgent.getNetwork(), mCm.getActiveNetwork()); + +        // Expect VPN to be unmetered as it should now be using WiFi (new default). +        assertFalse(mCm.isActiveNetworkMetered()); + +        // Disconnecting Cell should not affect VPN's meteredness. +        mCellNetworkAgent.disconnect(); +        waitForIdle(); + +        assertFalse(mCm.isActiveNetworkMetered()); + +        // Disconnect WiFi; Now there is no platform default network. +        mWiFiNetworkAgent.disconnect(); +        waitForIdle(); + +        // VPN without any underlying networks is treated as metered. +        assertTrue(mCm.isActiveNetworkMetered()); + +        vpnNetworkAgent.disconnect(); +        mMockVpn.disconnect(); +    } + +   @Test +   public void testIsActiveNetworkMeteredOverVpnSpecifyingUnderlyingNetworks() { +        // Returns true by default when no network is available. +        assertTrue(mCm.isActiveNetworkMetered()); +        mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR); +        mCellNetworkAgent.removeCapability(NET_CAPABILITY_NOT_METERED); +        mCellNetworkAgent.connect(true); +        waitForIdle(); +        assertTrue(mCm.isActiveNetworkMetered()); + +        mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); +        mWiFiNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED); +        mWiFiNetworkAgent.connect(true); +        waitForIdle(); +        assertFalse(mCm.isActiveNetworkMetered()); + +        // Connect VPN network. +        MockNetworkAgent vpnNetworkAgent = new MockNetworkAgent(TRANSPORT_VPN); +        final ArraySet<UidRange> ranges = new ArraySet<>(); +        final int uid = Process.myUid(); +        ranges.add(new UidRange(uid, uid)); +        mMockVpn.setNetworkAgent(vpnNetworkAgent); +        mMockVpn.setUids(ranges); +        vpnNetworkAgent.connect(true); +        mMockVpn.connect(); +        waitForIdle(); +        // Ensure VPN is now the active network. +        assertEquals(vpnNetworkAgent.getNetwork(), mCm.getActiveNetwork()); +        // VPN is using Cell +        mService.setUnderlyingNetworksForVpn( +                new Network[] { mCellNetworkAgent.getNetwork() }); +        waitForIdle(); + +        // Expect VPN to be metered. +        assertTrue(mCm.isActiveNetworkMetered()); + +        // VPN is now using WiFi +        mService.setUnderlyingNetworksForVpn( +                new Network[] { mWiFiNetworkAgent.getNetwork() }); +        waitForIdle(); + +        // Expect VPN to be unmetered +        assertFalse(mCm.isActiveNetworkMetered()); + +        // VPN is using Cell | WiFi. +        mService.setUnderlyingNetworksForVpn( +                new Network[] { mCellNetworkAgent.getNetwork(), mWiFiNetworkAgent.getNetwork() }); +        waitForIdle(); + +        // Expect VPN to be metered. +        assertTrue(mCm.isActiveNetworkMetered()); + +        // VPN is using WiFi | Cell. +        mService.setUnderlyingNetworksForVpn( +                new Network[] { mWiFiNetworkAgent.getNetwork(), mCellNetworkAgent.getNetwork() }); +        waitForIdle(); + +        // Order should not matter and VPN should still be metered. +        assertTrue(mCm.isActiveNetworkMetered()); + +        // VPN is not using any underlying networks. +        mService.setUnderlyingNetworksForVpn(new Network[0]); +        waitForIdle(); + +        // VPN without underlying networks is treated as metered. +        assertTrue(mCm.isActiveNetworkMetered()); + +        vpnNetworkAgent.disconnect(); +        mMockVpn.disconnect(); +    } + +    @Test +    public void testIsActiveNetworkMeteredOverAlwaysMeteredVpn() { +        // Returns true by default when no network is available. +        assertTrue(mCm.isActiveNetworkMetered()); +        mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI); +        mWiFiNetworkAgent.addCapability(NET_CAPABILITY_NOT_METERED); +        mWiFiNetworkAgent.connect(true); +        waitForIdle(); +        assertFalse(mCm.isActiveNetworkMetered()); + +        // Connect VPN network. +        MockNetworkAgent vpnNetworkAgent = new MockNetworkAgent(TRANSPORT_VPN); +        final ArraySet<UidRange> ranges = new ArraySet<>(); +        final int uid = Process.myUid(); +        ranges.add(new UidRange(uid, uid)); +        mMockVpn.setNetworkAgent(vpnNetworkAgent); +        mMockVpn.setUids(ranges); +        vpnNetworkAgent.connect(true); +        mMockVpn.connectAsAlwaysMetered(); +        waitForIdle(); +        assertEquals(vpnNetworkAgent.getNetwork(), mCm.getActiveNetwork()); + +        // VPN is tracking current platform default (WiFi). +        mService.setUnderlyingNetworksForVpn(null); +        waitForIdle(); + +        // Despite VPN using WiFi (which is unmetered), VPN itself is marked as always metered. +        assertTrue(mCm.isActiveNetworkMetered()); + +        // VPN explicitly declares WiFi as its underlying network. +        mService.setUnderlyingNetworksForVpn( +                new Network[] { mWiFiNetworkAgent.getNetwork() }); +        waitForIdle(); + +        // Doesn't really matter whether VPN declares its underlying networks explicitly. +        assertTrue(mCm.isActiveNetworkMetered()); + +        // With WiFi lost, VPN is basically without any underlying networks. And in that case it is +        // anyways suppose to be metered. +        mWiFiNetworkAgent.disconnect(); +        waitForIdle(); + +        assertTrue(mCm.isActiveNetworkMetered()); + +        vpnNetworkAgent.disconnect(); +    } + +    @Test      public void testNetworkBlockedStatus() {          final TestNetworkCallback cellNetworkCallback = new TestNetworkCallback();          final NetworkRequest cellRequest = new NetworkRequest.Builder() @@ -5087,6 +5342,9 @@ public class ConnectivityServiceTest {      public void testStackedLinkProperties() throws UnknownHostException, RemoteException {          final LinkAddress myIpv4 = new LinkAddress("1.2.3.4/24");          final LinkAddress myIpv6 = new LinkAddress("2001:db8:1::1/64"); +        final String kNat64PrefixString = "2001:db8:64:64:64:64::"; +        final IpPrefix kNat64Prefix = new IpPrefix(InetAddress.getByName(kNat64PrefixString), 96); +          final NetworkRequest networkRequest = new NetworkRequest.Builder()                  .addTransportType(TRANSPORT_CELLULAR)                  .addCapability(NET_CAPABILITY_INTERNET) @@ -5094,8 +5352,9 @@ public class ConnectivityServiceTest {          final TestNetworkCallback networkCallback = new TestNetworkCallback();          mCm.registerNetworkCallback(networkRequest, networkCallback); -        // Prepare ipv6 only link properties and connect. +        // Prepare ipv6 only link properties.          mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR); +        final int cellNetId = mCellNetworkAgent.getNetwork().netId;          final LinkProperties cellLp = new LinkProperties();          cellLp.setInterfaceName(MOBILE_IFNAME);          cellLp.addLinkAddress(myIpv6); @@ -5105,15 +5364,44 @@ public class ConnectivityServiceTest {          when(mNetworkManagementService.getInterfaceConfig(CLAT_PREFIX + MOBILE_IFNAME))                  .thenReturn(getClatInterfaceConfig(myIpv4)); -        // Connect with ipv6 link properties, then expect clat setup ipv4 and update link -        // properties properly. +        // Connect with ipv6 link properties. Expect prefix discovery to be started.          mCellNetworkAgent.sendLinkProperties(cellLp);          mCellNetworkAgent.connect(true);          networkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent); -        verify(mMockNetd, times(1)).clatdStart(MOBILE_IFNAME); -        Nat464Xlat clat = mService.getNat464Xlat(mCellNetworkAgent); +        verify(mMockNetd, times(1)).resolverStartPrefix64Discovery(cellNetId); + +        // Switching default network updates TCP buffer sizes. +        verifyTcpBufferSizeChange(ConnectivityService.DEFAULT_TCP_BUFFER_SIZES); -        // Clat iface up, expect stack link updated. +        // Add an IPv4 address. Expect prefix discovery to be stopped. Netd doesn't tell us that +        // the NAT64 prefix was removed because one was never discovered. +        cellLp.addLinkAddress(myIpv4); +        mCellNetworkAgent.sendLinkProperties(cellLp); +        networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent); +        verify(mMockNetd, times(1)).resolverStopPrefix64Discovery(cellNetId); + +        verifyNoMoreInteractions(mMockNetd); +        reset(mMockNetd); + +        // Remove IPv4 address. Expect prefix discovery to be started again. +        cellLp.removeLinkAddress(myIpv4); +        cellLp.removeRoute(new RouteInfo(myIpv4, null, MOBILE_IFNAME)); +        mCellNetworkAgent.sendLinkProperties(cellLp); +        networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent); +        verify(mMockNetd, times(1)).resolverStartPrefix64Discovery(cellNetId); + +        // When NAT64 prefix discovery succeeds, LinkProperties are updated and clatd is started. +        Nat464Xlat clat = mService.getNat464Xlat(mCellNetworkAgent); +        assertNull(mCm.getLinkProperties(mCellNetworkAgent.getNetwork()).getNat64Prefix()); +        mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */, +                kNat64PrefixString, 96); +        LinkProperties lpBeforeClat = (LinkProperties) networkCallback.expectCallback( +                CallbackState.LINK_PROPERTIES, mCellNetworkAgent).arg; +        assertEquals(0, lpBeforeClat.getStackedLinks().size()); +        assertEquals(kNat64Prefix, lpBeforeClat.getNat64Prefix()); +        verify(mMockNetd, times(1)).clatdStart(MOBILE_IFNAME, kNat64Prefix.toString()); + +        // Clat iface comes up. Expect stacked link to be added.          clat.interfaceLinkStateChanged(CLAT_PREFIX + MOBILE_IFNAME, true);          networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);          List<LinkProperties> stackedLps = mCm.getLinkProperties(mCellNetworkAgent.getNetwork()) @@ -5130,20 +5418,66 @@ public class ConnectivityServiceTest {          assertNotEquals(stackedLpsAfterChange, Collections.EMPTY_LIST);          assertEquals(makeClatLinkProperties(myIpv4), stackedLpsAfterChange.get(0)); -        // Add ipv4 address, expect stacked linkproperties be cleaned up +        // Add ipv4 address, expect that clatd and prefix discovery are stopped and stacked +        // linkproperties are cleaned up.          cellLp.addLinkAddress(myIpv4);          cellLp.addRoute(new RouteInfo(myIpv4, null, MOBILE_IFNAME));          mCellNetworkAgent.sendLinkProperties(cellLp);          networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);          verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME); +        verify(mMockNetd, times(1)).resolverStopPrefix64Discovery(cellNetId); -        // Clat iface removed, expect linkproperties revert to original one -        clat.interfaceRemoved(CLAT_PREFIX + MOBILE_IFNAME); +        // As soon as stop is called, the linkproperties lose the stacked interface.          networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);          LinkProperties actualLpAfterIpv4 = mCm.getLinkProperties(mCellNetworkAgent.getNetwork()); -        assertEquals(cellLp, actualLpAfterIpv4); +        LinkProperties expected = new LinkProperties(cellLp); +        expected.setNat64Prefix(kNat64Prefix); +        assertEquals(expected, actualLpAfterIpv4); +        assertEquals(0, actualLpAfterIpv4.getStackedLinks().size()); -        // Clean up +        // The interface removed callback happens but has no effect after stop is called. +        clat.interfaceRemoved(CLAT_PREFIX + MOBILE_IFNAME); +        networkCallback.assertNoCallback(); + +        verifyNoMoreInteractions(mMockNetd); +        reset(mMockNetd); + +        // Stopping prefix discovery causes netd to tell us that the NAT64 prefix is gone. +        mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, false /* added */, +                kNat64PrefixString, 96); +        networkCallback.expectLinkPropertiesLike((lp) -> lp.getNat64Prefix() == null, +                mCellNetworkAgent); + +        // Remove IPv4 address and expect prefix discovery and clatd to be started again. +        cellLp.removeLinkAddress(myIpv4); +        cellLp.removeRoute(new RouteInfo(myIpv4, null, MOBILE_IFNAME)); +        cellLp.removeDnsServer(InetAddress.getByName("8.8.8.8")); +        mCellNetworkAgent.sendLinkProperties(cellLp); +        networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent); +        verify(mMockNetd, times(1)).resolverStartPrefix64Discovery(cellNetId); +        mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */, +                kNat64PrefixString, 96); +        networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent); +        verify(mMockNetd, times(1)).clatdStart(MOBILE_IFNAME, kNat64Prefix.toString()); + + +        // Clat iface comes up. Expect stacked link to be added. +        clat.interfaceLinkStateChanged(CLAT_PREFIX + MOBILE_IFNAME, true); +        networkCallback.expectLinkPropertiesLike( +                (lp) -> lp.getStackedLinks().size() == 1 && lp.getNat64Prefix() != null, +                mCellNetworkAgent); + +        // NAT64 prefix is removed. Expect that clat is stopped. +        mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, false /* added */, +                kNat64PrefixString, 96); +        networkCallback.expectLinkPropertiesLike( +                (lp) -> lp.getStackedLinks().size() == 0 && lp.getNat64Prefix() == null, +                mCellNetworkAgent); +        verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME); +        networkCallback.expectLinkPropertiesLike((lp) -> lp.getStackedLinks().size() == 0, +                mCellNetworkAgent); + +        // Clean up.          mCellNetworkAgent.disconnect();          networkCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent);          networkCallback.assertNoCallback(); @@ -5224,30 +5558,34 @@ public class ConnectivityServiceTest {          mCm.unregisterNetworkCallback(networkCallback);      } -    private static final String TEST_TCP_BUFFER_SIZES = "1,2,3,4,5,6"; - -    private void verifyTcpBufferSizeChange(String tcpBufferSizes) throws Exception { +    private void verifyTcpBufferSizeChange(String tcpBufferSizes) {          String[] values = tcpBufferSizes.split(",");          String rmemValues = String.join(" ", values[0], values[1], values[2]);          String wmemValues = String.join(" ", values[3], values[4], values[5]);          waitForIdle(); -        verify(mMockNetd, atLeastOnce()).setTcpRWmemorySize(rmemValues, wmemValues); +        try { +            verify(mMockNetd, atLeastOnce()).setTcpRWmemorySize(rmemValues, wmemValues); +        } catch (RemoteException e) { +            fail("mMockNetd should never throw RemoteException"); +        }          reset(mMockNetd);      }      @Test -    public void testTcpBufferReset() throws Exception { +    public void testTcpBufferReset() { +        final String testTcpBufferSizes = "1,2,3,4,5,6"; +          mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);          reset(mMockNetd); -        // Simple connection should have updated tcp buffer size. +        // Switching default network updates TCP buffer sizes.          mCellNetworkAgent.connect(false);          verifyTcpBufferSizeChange(ConnectivityService.DEFAULT_TCP_BUFFER_SIZES);          // Change link Properties should have updated tcp buffer size.          LinkProperties lp = new LinkProperties(); -        lp.setTcpBufferSizes(TEST_TCP_BUFFER_SIZES); +        lp.setTcpBufferSizes(testTcpBufferSizes);          mCellNetworkAgent.sendLinkProperties(lp); -        verifyTcpBufferSizeChange(TEST_TCP_BUFFER_SIZES); +        verifyTcpBufferSizeChange(testTcpBufferSizes);      }      @Test diff --git a/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java b/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java index 07b1d057c882..37c0df80f3e3 100644 --- a/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java +++ b/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java @@ -16,9 +16,11 @@  package com.android.server.connectivity; +import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse;  import static org.junit.Assert.assertTrue;  import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.inOrder;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.verifyNoMoreInteractions; @@ -27,6 +29,7 @@ import static org.mockito.Mockito.when;  import android.net.ConnectivityManager;  import android.net.INetd;  import android.net.InterfaceConfiguration; +import android.net.IpPrefix;  import android.net.LinkAddress;  import android.net.LinkProperties;  import android.net.NetworkInfo; @@ -43,6 +46,7 @@ import org.junit.Before;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.ArgumentCaptor; +import org.mockito.InOrder;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; @@ -53,6 +57,8 @@ public class Nat464XlatTest {      static final String BASE_IFACE = "test0";      static final String STACKED_IFACE = "v4-test0";      static final LinkAddress ADDR = new LinkAddress("192.0.2.5/29"); +    static final String NAT64_PREFIX = "64:ff9b::/96"; +    static final int NETID = 42;      @Mock ConnectivityService mConnectivity;      @Mock NetworkMisc mMisc; @@ -65,7 +71,11 @@ public class Nat464XlatTest {      Handler mHandler;      Nat464Xlat makeNat464Xlat() { -        return new Nat464Xlat(mNai, mNetd, mNms); +        return new Nat464Xlat(mNai, mNetd, mNms) { +            @Override protected int getNetId() { +                return NETID; +            } +        };      }      @Before @@ -87,6 +97,24 @@ public class Nat464XlatTest {          when(mConfig.getLinkAddress()).thenReturn(ADDR);      } +    private void assertRequiresClat(boolean expected, NetworkAgentInfo nai) { +        String msg = String.format("requiresClat expected %b for type=%d state=%s skip=%b " +                + "nat64Prefix=%s addresses=%s", expected, nai.networkInfo.getType(), +                nai.networkInfo.getDetailedState(), +                mMisc.skip464xlat, nai.linkProperties.getNat64Prefix(), +                nai.linkProperties.getLinkAddresses()); +        assertEquals(msg, expected, Nat464Xlat.requiresClat(nai)); +    } + +    private void assertShouldStartClat(boolean expected, NetworkAgentInfo nai) { +        String msg = String.format("shouldStartClat expected %b for type=%d state=%s skip=%b " +                + "nat64Prefix=%s addresses=%s", expected, nai.networkInfo.getType(), +                nai.networkInfo.getDetailedState(), +                mMisc.skip464xlat, nai.linkProperties.getNat64Prefix(), +                nai.linkProperties.getLinkAddresses()); +        assertEquals(msg, expected, Nat464Xlat.shouldStartClat(nai)); +    } +      @Test      public void testRequiresClat() throws Exception {          final int[] supportedTypes = { @@ -102,20 +130,45 @@ public class Nat464XlatTest {              NetworkInfo.DetailedState.SUSPENDED,          }; +        LinkProperties oldLp = new LinkProperties(mNai.linkProperties);          for (int type : supportedTypes) {              mNai.networkInfo.setType(type);              for (NetworkInfo.DetailedState state : supportedDetailedStates) {                  mNai.networkInfo.setDetailedState(state, "reason", "extraInfo"); -                String msg = String.format("requiresClat expected for type=%d state=%s", -                        type, state); + +                mNai.linkProperties.setNat64Prefix(new IpPrefix("2001:db8:0:64::/96")); +                assertRequiresClat(false, mNai); +                assertShouldStartClat(false, mNai); + +                mNai.linkProperties.addLinkAddress(new LinkAddress("fc00::1/64")); +                assertRequiresClat(false, mNai); +                assertShouldStartClat(false, mNai); + +                mNai.linkProperties.addLinkAddress(new LinkAddress("2001:db8::1/64")); +                assertRequiresClat(true, mNai); +                assertShouldStartClat(true, mNai);                  mMisc.skip464xlat = true; -                String errorMsg = msg + String.format(" skip464xlat=%b", mMisc.skip464xlat); -                assertFalse(errorMsg, Nat464Xlat.requiresClat(mNai)); +                assertRequiresClat(false, mNai); +                assertShouldStartClat(false, mNai);                  mMisc.skip464xlat = false; -                errorMsg = msg + String.format(" skip464xlat=%b", mMisc.skip464xlat); -                assertTrue(errorMsg, Nat464Xlat.requiresClat(mNai)); +                assertRequiresClat(true, mNai); +                assertShouldStartClat(true, mNai); + +                mNai.linkProperties.addLinkAddress(new LinkAddress("192.0.2.2/24")); +                assertRequiresClat(false, mNai); +                assertShouldStartClat(false, mNai); + +                mNai.linkProperties.removeLinkAddress(new LinkAddress("192.0.2.2/24")); +                assertRequiresClat(true, mNai); +                assertShouldStartClat(true, mNai); + +                mNai.linkProperties.setNat64Prefix(null); +                assertRequiresClat(true, mNai); +                assertShouldStartClat(false, mNai); + +                mNai.linkProperties = new LinkProperties(oldLp);              }          }      } @@ -125,11 +178,13 @@ public class Nat464XlatTest {          Nat464Xlat nat = makeNat464Xlat();          ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class); -        // ConnectivityService starts clat. +        nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX)); + +        // Start clat.          nat.start();          verify(mNms).registerObserver(eq(nat)); -        verify(mNetd).clatdStart(eq(BASE_IFACE)); +        verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));          // Stacked interface up notification arrives.          nat.interfaceLinkStateChanged(STACKED_IFACE, true); @@ -141,22 +196,109 @@ public class Nat464XlatTest {          assertTrue(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));          assertRunning(nat); -        // ConnectivityService stops clat (Network disconnects, IPv4 addr appears, ...). +        // Stop clat (Network disconnects, IPv4 addr appears, ...).          nat.stop();          verify(mNetd).clatdStop(eq(BASE_IFACE)); +        verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture()); +        verify(mNms).unregisterObserver(eq(nat)); +        assertTrue(c.getValue().getStackedLinks().isEmpty()); +        assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE)); +        verify(mNetd).resolverStopPrefix64Discovery(eq(NETID)); +        assertIdle(nat); -        // Stacked interface removed notification arrives. +        // Stacked interface removed notification arrives and is ignored.          nat.interfaceRemoved(STACKED_IFACE);          mLooper.dispatchNext(); -        verify(mNms).unregisterObserver(eq(nat)); -        verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture()); +        verifyNoMoreInteractions(mNetd, mNms, mConnectivity); +    } + +    private void checkStartStopStart(boolean interfaceRemovedFirst) throws Exception { +        Nat464Xlat nat = makeNat464Xlat(); +        ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class); +        InOrder inOrder = inOrder(mNetd, mConnectivity); + +        nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX)); + +        nat.start(); + +        inOrder.verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); + +        // Stacked interface up notification arrives. +        nat.interfaceLinkStateChanged(STACKED_IFACE, true); +        mLooper.dispatchNext(); + +        inOrder.verify(mConnectivity).handleUpdateLinkProperties(eq(mNai), c.capture()); +        assertFalse(c.getValue().getStackedLinks().isEmpty()); +        assertTrue(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE)); +        assertRunning(nat); + +        // ConnectivityService stops clat (Network disconnects, IPv4 addr appears, ...). +        nat.stop(); + +        inOrder.verify(mNetd).clatdStop(eq(BASE_IFACE)); + +        inOrder.verify(mConnectivity, times(1)).handleUpdateLinkProperties(eq(mNai), c.capture());          assertTrue(c.getValue().getStackedLinks().isEmpty());          assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));          assertIdle(nat); -        verifyNoMoreInteractions(mNetd, mNms, mConnectivity); +        if (interfaceRemovedFirst) { +            // Stacked interface removed notification arrives and is ignored. +            nat.interfaceRemoved(STACKED_IFACE); +            mLooper.dispatchNext(); +            nat.interfaceLinkStateChanged(STACKED_IFACE, false); +            mLooper.dispatchNext(); +        } + +        assertTrue(c.getValue().getStackedLinks().isEmpty()); +        assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE)); +        assertIdle(nat); +        inOrder.verifyNoMoreInteractions(); + +        nat.start(); + +        inOrder.verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); + +        if (!interfaceRemovedFirst) { +            // Stacked interface removed notification arrives and is ignored. +            nat.interfaceRemoved(STACKED_IFACE); +            mLooper.dispatchNext(); +            nat.interfaceLinkStateChanged(STACKED_IFACE, false); +            mLooper.dispatchNext(); +        } + +        // Stacked interface up notification arrives. +        nat.interfaceLinkStateChanged(STACKED_IFACE, true); +        mLooper.dispatchNext(); + +        inOrder.verify(mConnectivity).handleUpdateLinkProperties(eq(mNai), c.capture()); +        assertFalse(c.getValue().getStackedLinks().isEmpty()); +        assertTrue(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE)); +        assertRunning(nat); + +        // ConnectivityService stops clat again. +        nat.stop(); + +        inOrder.verify(mNetd).clatdStop(eq(BASE_IFACE)); + +        inOrder.verify(mConnectivity, times(1)).handleUpdateLinkProperties(eq(mNai), c.capture()); +        assertTrue(c.getValue().getStackedLinks().isEmpty()); +        assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE)); +        assertIdle(nat); + +        inOrder.verifyNoMoreInteractions(); +    } + +    @Test +    public void testStartStopStart() throws Exception { +        checkStartStopStart(true); +    } + +    @Test +    public void testStartStopStartBeforeInterfaceRemoved() throws Exception { +        checkStartStopStart(false);      }      @Test @@ -164,11 +306,12 @@ public class Nat464XlatTest {          Nat464Xlat nat = makeNat464Xlat();          ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class); -        // ConnectivityService starts clat. +        nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX)); +          nat.start();          verify(mNms).registerObserver(eq(nat)); -        verify(mNetd).clatdStart(eq(BASE_IFACE)); +        verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));          // Stacked interface up notification arrives.          nat.interfaceLinkStateChanged(STACKED_IFACE, true); @@ -184,9 +327,10 @@ public class Nat464XlatTest {          nat.interfaceRemoved(STACKED_IFACE);          mLooper.dispatchNext(); -        verify(mNms).unregisterObserver(eq(nat));          verify(mNetd).clatdStop(eq(BASE_IFACE));          verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture()); +        verify(mNms).unregisterObserver(eq(nat)); +        verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));          assertTrue(c.getValue().getStackedLinks().isEmpty());          assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));          assertIdle(nat); @@ -201,24 +345,25 @@ public class Nat464XlatTest {      public void testStopBeforeClatdStarts() throws Exception {          Nat464Xlat nat = makeNat464Xlat(); -        // ConnectivityService starts clat. +        nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX)); +          nat.start();          verify(mNms).registerObserver(eq(nat)); -        verify(mNetd).clatdStart(eq(BASE_IFACE)); +        verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));          // ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)          nat.stop(); -        verify(mNms).unregisterObserver(eq(nat));          verify(mNetd).clatdStop(eq(BASE_IFACE)); +        verify(mNms).unregisterObserver(eq(nat)); +        verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));          assertIdle(nat);          // In-flight interface up notification arrives: no-op          nat.interfaceLinkStateChanged(STACKED_IFACE, true);          mLooper.dispatchNext(); -          // Interface removed notification arrives after stopClatd() takes effect: no-op.          nat.interfaceRemoved(STACKED_IFACE);          mLooper.dispatchNext(); @@ -232,17 +377,19 @@ public class Nat464XlatTest {      public void testStopAndClatdNeverStarts() throws Exception {          Nat464Xlat nat = makeNat464Xlat(); -        // ConnectivityService starts clat. +        nat.setNat64Prefix(new IpPrefix(NAT64_PREFIX)); +          nat.start();          verify(mNms).registerObserver(eq(nat)); -        verify(mNetd).clatdStart(eq(BASE_IFACE)); +        verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));          // ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)          nat.stop(); -        verify(mNms).unregisterObserver(eq(nat));          verify(mNetd).clatdStop(eq(BASE_IFACE)); +        verify(mNms).unregisterObserver(eq(nat)); +        verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));          assertIdle(nat);          verifyNoMoreInteractions(mNetd, mNms, mConnectivity); diff --git a/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java b/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java index 01b904d8f088..f8cfd8f3aed8 100644 --- a/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java +++ b/tests/net/java/com/android/server/connectivity/tethering/TetheringConfigurationTest.java @@ -24,9 +24,7 @@ import static android.net.ConnectivityManager.TYPE_WIFI;  import static android.provider.Settings.Global.TETHER_ENABLE_LEGACY_DHCP_SERVER;  import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; -import static com.android.server.connectivity.tethering.TetheringConfiguration.DUN_NOT_REQUIRED; -import static com.android.server.connectivity.tethering.TetheringConfiguration.DUN_REQUIRED; -import static com.android.server.connectivity.tethering.TetheringConfiguration.DUN_UNSPECIFIED; +import static com.android.internal.R.array.config_tether_upstream_types;  import static org.junit.Assert.assertEquals;  import static org.junit.Assert.assertFalse; @@ -52,6 +50,7 @@ import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; +import java.util.Arrays;  import java.util.Iterator;  @RunWith(AndroidJUnit4.class) @@ -112,74 +111,103 @@ public class TetheringConfigurationTest {                  .thenReturn(new String[]{ "test_wlan\\d" });          when(mResources.getStringArray(com.android.internal.R.array.config_tether_bluetooth_regexs))                  .thenReturn(new String[0]); -        when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types)) -                .thenReturn(new int[0]); +        when(mResources.getIntArray(config_tether_upstream_types)).thenReturn(new int[0]);          when(mResources.getStringArray(                  com.android.internal.R.array.config_mobile_hotspot_provision_app))                  .thenReturn(new String[0]);          mContentResolver = new MockContentResolver();          mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); +        mHasTelephonyManager = true;          mMockContext = new MockContext(mContext);      } -    @Test -    public void testDunFromTelephonyManagerMeansDun() { -        when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types)) -                .thenReturn(new int[]{TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI}); -        mHasTelephonyManager = true; -        when(mTelephonyManager.getTetherApnRequired()).thenReturn(DUN_REQUIRED); - -        final TetheringConfiguration cfg = new TetheringConfiguration( -                mMockContext, mLog, INVALID_SUBSCRIPTION_ID); -        assertTrue(cfg.isDunRequired); -        assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN)); -        assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE)); -        assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI)); -        // Just to prove we haven't clobbered Wi-Fi: -        assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_WIFI)); +    private TetheringConfiguration getTetheringConfiguration(int[] legacyTetherUpstreamTypes) { +        when(mResources.getIntArray(config_tether_upstream_types)).thenReturn( +                legacyTetherUpstreamTypes); +        return new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);      }      @Test -    public void testDunNotRequiredFromTelephonyManagerMeansNoDun() { -        when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types)) -                .thenReturn(new int[]{TYPE_MOBILE_DUN, TYPE_WIFI}); -        mHasTelephonyManager = true; -        when(mTelephonyManager.getTetherApnRequired()).thenReturn(DUN_NOT_REQUIRED); - -        final TetheringConfiguration cfg = new TetheringConfiguration( -                mMockContext, mLog, INVALID_SUBSCRIPTION_ID); +    public void testNoTelephonyManagerMeansNoDun() { +        mHasTelephonyManager = false; +        final TetheringConfiguration cfg = getTetheringConfiguration( +                new int[]{TYPE_MOBILE_DUN, TYPE_WIFI});          assertFalse(cfg.isDunRequired);          assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN)); -        assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE)); -        assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI));          // Just to prove we haven't clobbered Wi-Fi:          assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_WIFI));      }      @Test -    public void testDunFromUpstreamConfigMeansDun() { -        when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types)) -                .thenReturn(new int[]{TYPE_MOBILE_DUN, TYPE_WIFI}); -        mHasTelephonyManager = false; -        when(mTelephonyManager.getTetherApnRequired()).thenReturn(DUN_UNSPECIFIED); +    public void testDunFromTelephonyManagerMeansDun() { +        when(mTelephonyManager.getTetherApnRequired()).thenReturn(true); + +        final TetheringConfiguration cfgWifi = getTetheringConfiguration(new int[]{TYPE_WIFI}); +        final TetheringConfiguration cfgMobileWifiHipri = getTetheringConfiguration( +                new int[]{TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI}); +        final TetheringConfiguration cfgWifiDun = getTetheringConfiguration( +                new int[]{TYPE_WIFI, TYPE_MOBILE_DUN}); +        final TetheringConfiguration cfgMobileWifiHipriDun = getTetheringConfiguration( +                new int[]{TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI, TYPE_MOBILE_DUN}); + +        for (TetheringConfiguration cfg : Arrays.asList(cfgWifi, cfgMobileWifiHipri, +                cfgWifiDun, cfgMobileWifiHipriDun)) { +            String msg = "config=" + cfg.toString(); +            assertTrue(msg, cfg.isDunRequired); +            assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN)); +            assertFalse(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE)); +            assertFalse(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI)); +            // Just to prove we haven't clobbered Wi-Fi: +            assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_WIFI)); +        } +    } + +    @Test +    public void testDunNotRequiredFromTelephonyManagerMeansNoDun() { +        when(mTelephonyManager.getTetherApnRequired()).thenReturn(false); + +        final TetheringConfiguration cfgWifi = getTetheringConfiguration(new int[]{TYPE_WIFI}); +        final TetheringConfiguration cfgMobileWifiHipri = getTetheringConfiguration( +                new int[]{TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI}); +        final TetheringConfiguration cfgWifiDun = getTetheringConfiguration( +                new int[]{TYPE_WIFI, TYPE_MOBILE_DUN}); +        final TetheringConfiguration cfgWifiMobile = getTetheringConfiguration( +                new int[]{TYPE_WIFI, TYPE_MOBILE}); +        final TetheringConfiguration cfgWifiHipri = getTetheringConfiguration( +                new int[]{TYPE_WIFI, TYPE_MOBILE_HIPRI}); +        final TetheringConfiguration cfgMobileWifiHipriDun = getTetheringConfiguration( +                new int[]{TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI, TYPE_MOBILE_DUN}); + +        String msg; +        // TYPE_MOBILE_DUN should not be present in all of the combinations. +        // TYPE_WIFI should not be affected. +        for (TetheringConfiguration cfg : Arrays.asList(cfgWifi, cfgMobileWifiHipri, cfgWifiDun, +                cfgWifiMobile, cfgWifiHipri, cfgMobileWifiHipriDun)) { +            msg = "config=" + cfg.toString(); +            assertFalse(msg, cfg.isDunRequired); +            assertFalse(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN)); +            assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_WIFI)); +        } + +        for (TetheringConfiguration cfg : Arrays.asList(cfgWifi, cfgMobileWifiHipri, cfgWifiDun, +                cfgMobileWifiHipriDun)) { +            msg = "config=" + cfg.toString(); +            assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE)); +            assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI)); +        } +        msg = "config=" + cfgWifiMobile.toString(); +        assertTrue(msg, cfgWifiMobile.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE)); +        assertFalse(msg, cfgWifiMobile.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI)); +        msg = "config=" + cfgWifiHipri.toString(); +        assertFalse(msg, cfgWifiHipri.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE)); +        assertTrue(msg, cfgWifiHipri.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI)); -        final TetheringConfiguration cfg = new TetheringConfiguration( -                mMockContext, mLog, INVALID_SUBSCRIPTION_ID); -        assertTrue(cfg.isDunRequired); -        assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN)); -        // Just to prove we haven't clobbered Wi-Fi: -        assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_WIFI)); -        // Check that we have not added new cellular interface types -        assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE)); -        assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI));      }      @Test      public void testNoDefinedUpstreamTypesAddsEthernet() { -        when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types)) -                .thenReturn(new int[]{}); -        mHasTelephonyManager = false; -        when(mTelephonyManager.getTetherApnRequired()).thenReturn(DUN_UNSPECIFIED); +        when(mResources.getIntArray(config_tether_upstream_types)).thenReturn(new int[]{}); +        when(mTelephonyManager.getTetherApnRequired()).thenReturn(false);          final TetheringConfiguration cfg = new TetheringConfiguration(                  mMockContext, mLog, INVALID_SUBSCRIPTION_ID); @@ -187,8 +215,10 @@ public class TetheringConfigurationTest {          assertTrue(upstreamIterator.hasNext());          assertEquals(TYPE_ETHERNET, upstreamIterator.next().intValue());          // The following is because the code always adds some kind of mobile -        // upstream, be it DUN or, in this case where we use DUN_UNSPECIFIED, -        // both vanilla and hipri mobile types. +        // upstream, be it DUN or, in this case where DUN is NOT required, +        // make sure there is at least one of MOBILE or HIPRI. With the empty +        // list of the configuration in this test, it will always add both +        // MOBILE and HIPRI, in that order.          assertTrue(upstreamIterator.hasNext());          assertEquals(TYPE_MOBILE, upstreamIterator.next().intValue());          assertTrue(upstreamIterator.hasNext()); @@ -198,10 +228,9 @@ public class TetheringConfigurationTest {      @Test      public void testDefinedUpstreamTypesSansEthernetAddsEthernet() { -        when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types)) -                .thenReturn(new int[]{TYPE_WIFI, TYPE_MOBILE_HIPRI}); -        mHasTelephonyManager = false; -        when(mTelephonyManager.getTetherApnRequired()).thenReturn(DUN_UNSPECIFIED); +        when(mResources.getIntArray(config_tether_upstream_types)).thenReturn( +                new int[]{TYPE_WIFI, TYPE_MOBILE_HIPRI}); +        when(mTelephonyManager.getTetherApnRequired()).thenReturn(false);          final TetheringConfiguration cfg = new TetheringConfiguration(                  mMockContext, mLog, INVALID_SUBSCRIPTION_ID); @@ -217,10 +246,9 @@ public class TetheringConfigurationTest {      @Test      public void testDefinedUpstreamTypesWithEthernetDoesNotAddEthernet() { -        when(mResources.getIntArray(com.android.internal.R.array.config_tether_upstream_types)) +        when(mResources.getIntArray(config_tether_upstream_types))                  .thenReturn(new int[]{TYPE_WIFI, TYPE_ETHERNET, TYPE_MOBILE_HIPRI}); -        mHasTelephonyManager = false; -        when(mTelephonyManager.getTetherApnRequired()).thenReturn(DUN_UNSPECIFIED); +        when(mTelephonyManager.getTetherApnRequired()).thenReturn(false);          final TetheringConfiguration cfg = new TetheringConfiguration(                  mMockContext, mLog, INVALID_SUBSCRIPTION_ID); @@ -276,9 +304,7 @@ public class TetheringConfigurationTest {          when(mResourcesForSubId.getStringArray(                  com.android.internal.R.array.config_tether_bluetooth_regexs))                  .thenReturn(new String[0]); -        when(mResourcesForSubId.getIntArray( -                com.android.internal.R.array.config_tether_upstream_types)) -                .thenReturn(new int[0]); +        when(mResourcesForSubId.getIntArray(config_tether_upstream_types)).thenReturn(new int[0]);          when(mResourcesForSubId.getStringArray(                  com.android.internal.R.array.config_mobile_hotspot_provision_app))                  .thenReturn(PROVISIONING_APP_NAME); diff --git a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java index f89f303a1345..d91d3eb10f87 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java @@ -70,7 +70,6 @@ import android.app.usage.NetworkStatsManager;  import android.content.Context;  import android.content.Intent;  import android.net.DataUsageRequest; -import android.net.IConnectivityManager;  import android.net.INetworkManagementEventObserver;  import android.net.INetworkStatsSession;  import android.net.LinkProperties; @@ -163,7 +162,6 @@ public class NetworkStatsServiceTest {      private @Mock INetworkManagementService mNetManager;      private @Mock NetworkStatsSettings mSettings; -    private @Mock IConnectivityManager mConnManager;      private @Mock IBinder mBinder;      private @Mock AlarmManager mAlarmManager;      private HandlerThread mHandlerThread; @@ -205,7 +203,6 @@ public class NetworkStatsServiceTest {          Handler.Callback callback = new NetworkStatsService.HandlerCallback(mService);          mHandler = new Handler(mHandlerThread.getLooper(), callback);          mService.setHandler(mHandler, callback); -        mService.bindConnectivityManager(mConnManager);          mElapsedRealtime = 0L; @@ -234,7 +231,6 @@ public class NetworkStatsServiceTest {          mNetManager = null;          mSettings = null; -        mConnManager = null;          mSession.close();          mService = null; @@ -245,12 +241,12 @@ public class NetworkStatsServiceTest {          // pretend that wifi network comes online; service should ask about full          // network state, and poll any existing interfaces before updating.          expectDefaultSettings(); -        expectNetworkState(buildWifiState()); +        NetworkState[] states = new NetworkState[] {buildWifiState()};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          // verify service has empty history for wifi          assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0); @@ -289,12 +285,12 @@ public class NetworkStatsServiceTest {          // pretend that wifi network comes online; service should ask about full          // network state, and poll any existing interfaces before updating.          expectDefaultSettings(); -        expectNetworkState(buildWifiState()); +        NetworkState[] states = new NetworkState[] {buildWifiState()};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          // verify service has empty history for wifi          assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0); @@ -363,12 +359,12 @@ public class NetworkStatsServiceTest {          // pretend that wifi network comes online; service should ask about full          // network state, and poll any existing interfaces before updating.          expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS); -        expectNetworkState(buildWifiState()); +        NetworkState[] states = new NetworkState[] {buildWifiState()};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          // modify some number on wifi, and trigger poll event @@ -405,12 +401,12 @@ public class NetworkStatsServiceTest {      public void testUidStatsAcrossNetworks() throws Exception {          // pretend first mobile network comes online          expectDefaultSettings(); -        expectNetworkState(buildMobile3gState(IMSI_1)); +        NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_MOBILE); +        mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));          // create some traffic on first network @@ -437,7 +433,7 @@ public class NetworkStatsServiceTest {          // disappearing, to verify we don't count backwards.          incrementCurrentTime(HOUR_IN_MILLIS);          expectDefaultSettings(); -        expectNetworkState(buildMobile3gState(IMSI_2)); +        states = new NetworkState[] {buildMobile3gState(IMSI_2)};          expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)                  .addIfaceValues(TEST_IFACE, 2048L, 16L, 512L, 4L));          expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3) @@ -446,7 +442,7 @@ public class NetworkStatsServiceTest {                  .addValues(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L));          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_MOBILE); +        mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));          forcePollAndWaitForIdle(); @@ -481,12 +477,12 @@ public class NetworkStatsServiceTest {      public void testUidRemovedIsMoved() throws Exception {          // pretend that network comes online          expectDefaultSettings(); -        expectNetworkState(buildWifiState()); +        NetworkState[] states = new NetworkState[] {buildWifiState()};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          // create some traffic @@ -540,12 +536,12 @@ public class NetworkStatsServiceTest {      public void testUid3g4gCombinedByTemplate() throws Exception {          // pretend that network comes online          expectDefaultSettings(); -        expectNetworkState(buildMobile3gState(IMSI_1)); +        NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_MOBILE); +        mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));          // create some traffic @@ -566,14 +562,14 @@ public class NetworkStatsServiceTest {          // now switch over to 4g network          incrementCurrentTime(HOUR_IN_MILLIS);          expectDefaultSettings(); -        expectNetworkState(buildMobile4gState(TEST_IFACE2)); +        states = new NetworkState[] {buildMobile4gState(TEST_IFACE2)};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)                  .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L)                  .addValues(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L));          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_MOBILE); +        mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));          forcePollAndWaitForIdle(); @@ -598,12 +594,12 @@ public class NetworkStatsServiceTest {      public void testSummaryForAllUid() throws Exception {          // pretend that network comes online          expectDefaultSettings(); -        expectNetworkState(buildWifiState()); +        NetworkState[] states = new NetworkState[] {buildWifiState()};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          // create some traffic for two apps @@ -657,12 +653,12 @@ public class NetworkStatsServiceTest {      public void testDetailedUidStats() throws Exception {          // pretend that network comes online          expectDefaultSettings(); -        expectNetworkState(buildWifiState()); +        NetworkState[] states = new NetworkState[] {buildWifiState()};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          NetworkStats.Entry entry1 = new NetworkStats.Entry(                  TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 50L, 5L, 50L, 5L, 0L); @@ -700,13 +696,13 @@ public class NetworkStatsServiceTest {          stackedProp.setInterfaceName(stackedIface);          final NetworkState wifiState = buildWifiState();          wifiState.linkProperties.addStackedLink(stackedProp); -        expectNetworkState(wifiState); +        NetworkState[] states = new NetworkState[] {wifiState};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          NetworkStats.Entry uidStats = new NetworkStats.Entry(                  TEST_IFACE, UID_BLUE, SET_DEFAULT, 0xF00D, 1024L, 8L, 512L, 4L, 0L); @@ -745,12 +741,12 @@ public class NetworkStatsServiceTest {      public void testForegroundBackground() throws Exception {          // pretend that network comes online          expectDefaultSettings(); -        expectNetworkState(buildWifiState()); +        NetworkState[] states = new NetworkState[] {buildWifiState()};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          // create some initial traffic @@ -803,12 +799,12 @@ public class NetworkStatsServiceTest {      public void testMetered() throws Exception {          // pretend that network comes online          expectDefaultSettings(); -        expectNetworkState(buildWifiState(true /* isMetered */)); +        NetworkState[] states = new NetworkState[] {buildWifiState(true /* isMetered */)};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          // create some initial traffic @@ -843,12 +839,13 @@ public class NetworkStatsServiceTest {      public void testRoaming() throws Exception {          // pretend that network comes online          expectDefaultSettings(); -        expectNetworkState(buildMobile3gState(IMSI_1, true /* isRoaming */)); +        NetworkState[] states = +            new NetworkState[] {buildMobile3gState(IMSI_1, true /* isRoaming */)};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_MOBILE); +        mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));          // Create some traffic @@ -882,12 +879,12 @@ public class NetworkStatsServiceTest {      public void testTethering() throws Exception {          // pretend first mobile network comes online          expectDefaultSettings(); -        expectNetworkState(buildMobile3gState(IMSI_1)); +        NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_MOBILE); +        mService.forceUpdateIfaces(NETWORKS_MOBILE, new VpnInfo[0], states, getActiveIface(states));          // create some tethering traffic @@ -925,12 +922,12 @@ public class NetworkStatsServiceTest {          // pretend that wifi network comes online; service should ask about full          // network state, and poll any existing interfaces before updating.          expectDefaultSettings(); -        expectNetworkState(buildWifiState()); +        NetworkState[] states = new NetworkState[] {buildWifiState()};          expectNetworkStatsSummary(buildEmptyStats());          expectNetworkStatsUidDetail(buildEmptyStats());          expectBandwidthControlCheck(); -        mService.forceUpdateIfaces(NETWORKS_WIFI); +        mService.forceUpdateIfaces(NETWORKS_WIFI, new VpnInfo[0], states, getActiveIface(states));          // verify service has empty history for wifi          assertNetworkTotal(sTemplateWifi, 0L, 0L, 0L, 0L, 0); @@ -1077,11 +1074,11 @@ public class NetworkStatsServiceTest {          expectBandwidthControlCheck();      } -    private void expectNetworkState(NetworkState... state) throws Exception { -        when(mConnManager.getAllNetworkState()).thenReturn(state); - -        final LinkProperties linkProp = state.length > 0 ? state[0].linkProperties : null; -        when(mConnManager.getActiveLinkProperties()).thenReturn(linkProp); +    private String getActiveIface(NetworkState... states) throws Exception { +        if (states == null || states.length == 0 || states[0].linkProperties == null) { +            return null; +        } +        return states[0].linkProperties.getInterfaceName();      }      private void expectNetworkStatsSummary(NetworkStats summary) throws Exception { @@ -1090,8 +1087,6 @@ public class NetworkStatsServiceTest {      private void expectNetworkStatsSummary(NetworkStats summary, NetworkStats tetherStats)              throws Exception { -        when(mConnManager.getAllVpnInfo()).thenReturn(new VpnInfo[0]); -          expectNetworkStatsTethering(STATS_PER_IFACE, tetherStats);          expectNetworkStatsSummaryDev(summary.clone());          expectNetworkStatsSummaryXt(summary.clone()); diff --git a/tests/privapp-permissions/Android.bp b/tests/privapp-permissions/Android.bp new file mode 100644 index 000000000000..066d4f94e896 --- /dev/null +++ b/tests/privapp-permissions/Android.bp @@ -0,0 +1,45 @@ +android_app { +    name: "PrivAppPermissionTest", +    sdk_version: "current", +    privileged: true, +    manifest: "system/AndroidManifest.xml", +    required: ["privapp-permissions-test.xml"], +} + +prebuilt_etc { +    name: "privapp-permissions-test.xml", +    src: "system/privapp-permissions-test.xml", +    sub_dir: "permissions", +} + +android_app { +    name: "VendorPrivAppPermissionTest", +    sdk_version: "current", +    privileged: true, +    manifest: "vendor/AndroidManifest.xml", +    vendor: true, +    required: ["vendorprivapp-permissions-test.xml"], +} + +prebuilt_etc { +    name: "vendorprivapp-permissions-test.xml", +    src: "vendor/privapp-permissions-test.xml", +    sub_dir: "permissions", +    proprietary: true, +} + +android_app { +    name: "ProductPrivAppPermissionTest", +    sdk_version: "current", +    privileged: true, +    manifest: "product/AndroidManifest.xml", +    product_specific: true, +    required: ["productprivapp-permissions-test.xml"], +} + +prebuilt_etc { +    name: "productprivapp-permissions-test.xml", +    src: "product/privapp-permissions-test.xml", +    sub_dir: "permissions", +    product_specific: true, +} diff --git a/tests/privapp-permissions/Android.mk b/tests/privapp-permissions/Android.mk deleted file mode 100644 index 9795188559c4..000000000000 --- a/tests/privapp-permissions/Android.mk +++ /dev/null @@ -1,48 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_PACKAGE_NAME := PrivAppPermissionTest -LOCAL_SDK_VERSION := current -LOCAL_PRIVILEGED_MODULE := true -LOCAL_MANIFEST_FILE := system/AndroidManifest.xml -LOCAL_REQUIRED_MODULES := privapp-permissions-test.xml -include $(BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_MODULE := privapp-permissions-test.xml -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions -LOCAL_SRC_FILES:= system/privapp-permissions-test.xml -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_PACKAGE_NAME := VendorPrivAppPermissionTest -LOCAL_SDK_VERSION := current -LOCAL_PRIVILEGED_MODULE := true -LOCAL_MANIFEST_FILE := vendor/AndroidManifest.xml -LOCAL_VENDOR_MODULE := true -LOCAL_REQUIRED_MODULES := vendorprivapp-permissions-test.xml -include $(BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_MODULE := vendorprivapp-permissions-test.xml -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/permissions -LOCAL_SRC_FILES:= vendor/privapp-permissions-test.xml -include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_PACKAGE_NAME := ProductPrivAppPermissionTest -LOCAL_SDK_VERSION := current -LOCAL_PRIVILEGED_MODULE := true -LOCAL_MANIFEST_FILE := product/AndroidManifest.xml -LOCAL_PRODUCT_MODULE := true -LOCAL_REQUIRED_MODULES := productprivapp-permissions-test.xml -include $(BUILD_PACKAGE) - -include $(CLEAR_VARS) -LOCAL_MODULE := productprivapp-permissions-test.xml -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/permissions -LOCAL_SRC_FILES:= product/privapp-permissions-test.xml -include $(BUILD_PREBUILT) diff --git a/tests/testables/Android.bp b/tests/testables/Android.bp index f07f09da3f03..0bad7a46abb4 100644 --- a/tests/testables/Android.bp +++ b/tests/testables/Android.bp @@ -25,7 +25,7 @@ java_library {      libs: [          "android.test.runner",          "android.test.mock", -        "android-support-test", +        "androidx.test.rules",          "mockito-target-inline-minus-junit4",      ], diff --git a/tests/testables/src/android/testing/AndroidTestingRunner.java b/tests/testables/src/android/testing/AndroidTestingRunner.java index cf5d4cf2f828..037522042d23 100644 --- a/tests/testables/src/android/testing/AndroidTestingRunner.java +++ b/tests/testables/src/android/testing/AndroidTestingRunner.java @@ -14,13 +14,13 @@  package android.testing; -import android.support.test.internal.runner.junit4.statement.RunAfters; -import android.support.test.internal.runner.junit4.statement.RunBefores; -import android.support.test.internal.runner.junit4.statement.UiThreadStatement; -  import android.testing.TestableLooper.LooperFrameworkMethod;  import android.testing.TestableLooper.RunWithLooper; +import androidx.test.internal.runner.junit4.statement.RunAfters; +import androidx.test.internal.runner.junit4.statement.RunBefores; +import androidx.test.internal.runner.junit4.statement.UiThreadStatement; +  import org.junit.After;  import org.junit.Before;  import org.junit.Test; diff --git a/tests/testables/src/android/testing/BaseFragmentTest.java b/tests/testables/src/android/testing/BaseFragmentTest.java index 5fa065a9135a..c76b93cbb577 100644 --- a/tests/testables/src/android/testing/BaseFragmentTest.java +++ b/tests/testables/src/android/testing/BaseFragmentTest.java @@ -24,13 +24,14 @@ import android.app.FragmentManagerNonConfig;  import android.graphics.PixelFormat;  import android.os.Handler;  import android.os.Parcelable; -import android.support.test.InstrumentationRegistry;  import android.view.LayoutInflater;  import android.view.View;  import android.view.WindowManager;  import android.view.WindowManager.LayoutParams;  import android.widget.FrameLayout; +import androidx.test.InstrumentationRegistry; +  import org.junit.After;  import org.junit.Before;  import org.junit.Rule; diff --git a/tests/testables/src/android/testing/TestableInstrumentation.java b/tests/testables/src/android/testing/TestableInstrumentation.java index 3207b486b329..f5862064aa6b 100644 --- a/tests/testables/src/android/testing/TestableInstrumentation.java +++ b/tests/testables/src/android/testing/TestableInstrumentation.java @@ -19,9 +19,10 @@ import android.os.Handler;  import android.os.Looper;  import android.os.Message;  import android.os.TestLooperManager; -import android.support.test.runner.AndroidJUnitRunner;  import android.util.Log; +import androidx.test.runner.AndroidJUnitRunner; +  import java.util.ArrayList;  /** diff --git a/tests/testables/src/android/testing/TestableLooper.java b/tests/testables/src/android/testing/TestableLooper.java index f8d223ab91b6..cec8b4b49f25 100644 --- a/tests/testables/src/android/testing/TestableLooper.java +++ b/tests/testables/src/android/testing/TestableLooper.java @@ -20,9 +20,10 @@ import android.os.Looper;  import android.os.Message;  import android.os.MessageQueue;  import android.os.TestLooperManager; -import android.support.test.InstrumentationRegistry;  import android.util.ArrayMap; +import androidx.test.InstrumentationRegistry; +  import org.junit.runners.model.FrameworkMethod;  import java.lang.annotation.ElementType; diff --git a/tests/testables/src/android/testing/ViewUtils.java b/tests/testables/src/android/testing/ViewUtils.java index 1c6016e16f39..80c2e8ddd907 100644 --- a/tests/testables/src/android/testing/ViewUtils.java +++ b/tests/testables/src/android/testing/ViewUtils.java @@ -16,7 +16,6 @@ package android.testing;  import android.content.pm.ApplicationInfo;  import android.graphics.PixelFormat; -import android.support.test.InstrumentationRegistry;  import android.view.View;  import android.view.WindowManager;  import android.view.WindowManager.LayoutParams; diff --git a/tests/testables/tests/Android.mk b/tests/testables/tests/Android.mk index 79469e3aa032..16fbb18b0eca 100644 --- a/tests/testables/tests/Android.mk +++ b/tests/testables/tests/Android.mk @@ -27,7 +27,7 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src) \  LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res  LOCAL_STATIC_JAVA_LIBRARIES := \ -    android-support-test \ +    androidx.test.rules hamcrest-library \      mockito-target-inline-minus-junit4 \  	testables diff --git a/tests/testables/tests/AndroidManifest.xml b/tests/testables/tests/AndroidManifest.xml index 61f0be613afe..2bfb04fdb765 100644 --- a/tests/testables/tests/AndroidManifest.xml +++ b/tests/testables/tests/AndroidManifest.xml @@ -25,7 +25,7 @@          <uses-library android:name="android.test.runner" />      </application> -    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner" +    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"          android:targetPackage="com.android.testables"          android:label="Tests for Testables">      </instrumentation> diff --git a/tests/testables/tests/src/android/testing/DexmakerShareClassLoaderRuleTest.java b/tests/testables/tests/src/android/testing/DexmakerShareClassLoaderRuleTest.java index 2528d090f0ca..13addb195b30 100644 --- a/tests/testables/tests/src/android/testing/DexmakerShareClassLoaderRuleTest.java +++ b/tests/testables/tests/src/android/testing/DexmakerShareClassLoaderRuleTest.java @@ -22,8 +22,8 @@ import static org.hamcrest.Matchers.is;  import static org.junit.Assert.assertThat;  import static org.junit.Assert.fail; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4;  import org.junit.Before;  import org.junit.Test; diff --git a/tests/testables/tests/src/android/testing/TestableContentResolverTest.java b/tests/testables/tests/src/android/testing/TestableContentResolverTest.java index 71afda0748c4..f531369cd423 100644 --- a/tests/testables/tests/src/android/testing/TestableContentResolverTest.java +++ b/tests/testables/tests/src/android/testing/TestableContentResolverTest.java @@ -2,8 +2,9 @@ package android.testing;  import android.content.ContentProvider;  import android.content.IContentProvider; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest;  import org.junit.Assert;  import org.junit.Before; diff --git a/tests/testables/tests/src/android/testing/TestablePermissionsTest.java b/tests/testables/tests/src/android/testing/TestablePermissionsTest.java index c56146e19a40..4626de7576e2 100644 --- a/tests/testables/tests/src/android/testing/TestablePermissionsTest.java +++ b/tests/testables/tests/src/android/testing/TestablePermissionsTest.java @@ -20,11 +20,10 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;  import static org.junit.Assert.assertEquals;  import android.Manifest.permission; -import android.content.pm.PackageManager;  import android.net.Uri; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.testing.TestableLooper.RunWithLooper; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest;  import org.junit.Rule;  import org.junit.Test; diff --git a/tests/testables/tests/src/android/testing/TestableResourcesTest.java b/tests/testables/tests/src/android/testing/TestableResourcesTest.java index dc7cf9554ba5..dd4325c59aa2 100644 --- a/tests/testables/tests/src/android/testing/TestableResourcesTest.java +++ b/tests/testables/tests/src/android/testing/TestableResourcesTest.java @@ -21,9 +21,10 @@ import static org.junit.Assert.assertNull;  import static org.junit.Assert.fail;  import android.content.res.Resources; -import android.support.test.InstrumentationRegistry;  import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.InstrumentationRegistry; +  import com.android.testables.R;  import org.junit.Rule; diff --git a/tests/testables/tests/src/android/testing/TestableSettingsProviderTest.java b/tests/testables/tests/src/android/testing/TestableSettingsProviderTest.java index ac61debd8dc9..0333d514343d 100644 --- a/tests/testables/tests/src/android/testing/TestableSettingsProviderTest.java +++ b/tests/testables/tests/src/android/testing/TestableSettingsProviderTest.java @@ -14,20 +14,22 @@  package android.testing; +import static org.junit.Assert.*; +  import android.content.ContentResolver;  import android.provider.Settings;  import android.provider.Settings.Global;  import android.provider.Settings.Secure; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4;  import android.test.suitebuilder.annotation.SmallTest; + +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; +  import org.junit.Before;  import org.junit.Rule;  import org.junit.Test;  import org.junit.runner.RunWith; -import static org.junit.Assert.*; -  @SmallTest  @RunWith(AndroidJUnit4.class)  public class TestableSettingsProviderTest { diff --git a/tests/utils/SleepUtils/AlarmService/Android.mk b/tests/utils/SleepUtils/AlarmService/Android.mk deleted file mode 100644 index 9022f03b7cf2..000000000000 --- a/tests/utils/SleepUtils/AlarmService/Android.mk +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (C) 2013 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_SRC_FILES += \ -    src/com/android/testing/alarmservice/Alarm.aidl -LOCAL_PACKAGE_NAME := SleepUtilsAlarmService -LOCAL_SDK_VERSION := 7 -include $(BUILD_PACKAGE) diff --git a/tests/utils/SleepUtils/AlarmService/AndroidManifest.xml b/tests/utils/SleepUtils/AlarmService/AndroidManifest.xml deleted file mode 100644 index 1b6de39c91da..000000000000 --- a/tests/utils/SleepUtils/AlarmService/AndroidManifest.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2013 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. --> - -<manifest xmlns:android="http://schemas.android.com/apk/res/android" -    package="com.android.testing.alarmservice" > - -    <uses-sdk android:minSdkVersion="7" /> -    <uses-permission android:name="android.permission.WAKE_LOCK" /> - -    <application android:label="Sleep Utils Alarm Service"> -        <service android:name=".AlarmService" -            android:label="Sleep Utils Alarm Service" -            android:exported="true" -            android:enabled="true"> -            <intent-filter> -                <action android:name="com.android.testing.ALARM_SERVICE" /> -            </intent-filter> -        </service> -        <receiver android:name=".WakeUpCall"> -            <intent-filter> -                <action android:name="com.android.testing.alarmservice.WAKEUP" /> -            </intent-filter> -        </receiver> -    </application> -</manifest> diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java deleted file mode 100644 index 122d55deb3e5..000000000000 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.alarmservice; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.os.RemoteException; -import android.os.SystemClock; -import android.util.Log; - -import com.android.testing.alarmservice.Alarm.Stub; - -public class AlarmImpl extends Stub { - -    private static final String LOG_TAG = AlarmImpl.class.getSimpleName(); - -    private Context mContext; - -    public AlarmImpl(Context context) { -        super(); -        mContext = context; -    } - -    @Override -    public int prepare() throws RemoteException { -        WakeUpController.getController().getWakeLock().acquire(); -        Log.d(LOG_TAG, "AlarmService prepared, wake lock acquired"); -        return 0; -    } - -    @Override -    public int setAlarmAndWait(long timeoutMills) throws RemoteException { -        // calculate when device should be waken up -        long atTime = SystemClock.elapsedRealtime() + timeoutMills; -        AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); -        Intent wakupIntent = new Intent(WakeUpCall.WAKEUP_CALL); -        PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, wakupIntent, 0); -        // set alarm, which will be delivered in form of the wakeupIntent -        am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, atTime, pi); -        Log.d(LOG_TAG, String.format("Alarm set: %d, giving up wake lock", atTime)); -        Object lock = WakeUpController.getController().getWakeSync(); -        // release wakelock and wait for the lock to be poked from the broadcast receiver -        WakeUpController.getController().getWakeLock().release(); -        // does not really matter if device enters suspend before we start waiting on lock -        synchronized (lock) { -            try { -                lock.wait(); -            } catch (InterruptedException e) { -            } -        } -        Log.d(LOG_TAG, String.format("Alarm triggered, done waiting")); -        return 0; -    } - -    @Override -    public int done() throws RemoteException { -        WakeUpController.getController().getWakeLock().release(); -        return 0; -    } - -} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java deleted file mode 100644 index 576a1cfcfbaf..000000000000 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/AlarmService.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.alarmservice; - -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.IBinder; - -public class AlarmService extends Service { - -    private AlarmImpl mAlarmImpl = null; -    static Context sContext; - -    @Override -    public void onCreate() { -        super.onCreate(); -        sContext = this; -    } - -    @Override -    public IBinder onBind(Intent intent) { -        return getAlarmImpl(); -    } - -    private AlarmImpl getAlarmImpl() { -        if (mAlarmImpl == null) { -            mAlarmImpl = new AlarmImpl(this); -        } -        return mAlarmImpl; -    } - -    @Override -    public void onDestroy() { -        sContext = null; -        super.onDestroy(); -    } -} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java deleted file mode 100644 index f4bb4dba4cda..000000000000 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpCall.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.alarmservice; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -/** - * The receiver for the alarm we set - * - */ -public class WakeUpCall extends BroadcastReceiver { - -    public static final String WAKEUP_CALL = "com.android.testing.alarmservice.WAKEUP"; - -    @Override -    public void onReceive(Context context, Intent intent) { -        // we acquire wakelock without release because user is supposed to manually release it -        WakeUpController.getController().getWakeLock().acquire(); -        Object lock = WakeUpController.getController().getWakeSync(); -        synchronized (lock) { -            // poke the lock so the service side can be woken from waiting on the lock -            lock.notifyAll(); -        } -    } - -} diff --git a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java b/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java deleted file mode 100644 index 478371f61f36..000000000000 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/WakeUpController.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.alarmservice; - -import android.content.Context; -import android.os.PowerManager; -import android.os.PowerManager.WakeLock; -import android.util.Log; - -/** - * A singleton used for controlling and sharing of states/wakelocks - * - */ -public class WakeUpController { - -    private static final String LOG_TAG = WakeUpController.class.getName(); -    private static WakeUpController mController = null; -    private WakeLock mWakeLock = null; -    private Object mWakeSync = new Object(); - -    private WakeUpController() { -        Log.i(LOG_TAG, "Created instance: 0x" + Integer.toHexString(this.hashCode())); -    } - -    public static synchronized WakeUpController getController() { -        if (mController == null) { -            mController = new WakeUpController(); -        } -        return mController; -    } - -    public WakeLock getWakeLock() { -        if (mWakeLock == null) { -            PowerManager pm = -                    (PowerManager) AlarmService.sContext.getSystemService(Context.POWER_SERVICE); -            mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "testing-alarmservice"); -            Log.i(LOG_TAG, "Create wakelock: 0x" + Integer.toHexString(mWakeLock.hashCode())); -        } -        return mWakeLock; -    } - -    public Object getWakeSync() { -        return mWakeSync; -    } -} diff --git a/tests/utils/SleepUtils/Android.mk b/tests/utils/SleepUtils/Android.mk deleted file mode 100644 index 0e65e2255c5b..000000000000 --- a/tests/utils/SleepUtils/Android.mk +++ /dev/null @@ -1,2 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(call all-makefiles-under, $(LOCAL_PATH)) diff --git a/tests/utils/SleepUtils/README b/tests/utils/SleepUtils/README deleted file mode 100644 index bfe07da4a389..000000000000 --- a/tests/utils/SleepUtils/README +++ /dev/null @@ -1,23 +0,0 @@ -This folder contains utils to properly perform timed suspend and wakeup. - -AlarmService - a service that client can bind to and perform: -1) holding wakelock (singleton to this service) -2) setting alarm for a specified period and releasing the wakelock; service -   call will block until alarm has been triggered and the wakelock is held -3) releasing the wakelock - -SleepHelper - a self instrumentation meant as a convenient way to trigger -the service functions from command line. Corresponding to service function -above, supported operations are: -1) holding wakelock -am instrument -w -e command prepare \ -  com.android.testing.sleephelper/.SetAlarm - -2) setting alarm and wait til triggered -am instrument -w -e command set_wait \ -  -e param <time in ms> com.android.testing.sleephelper/.SetAlarm -Note: for the function to work properly, "-w" parameter is required - -3) releasing wakelock -am instrument -w -e command done \ -  com.android.testing.sleephelper/.SetAlarm diff --git a/tests/utils/SleepUtils/SleepHelper/Android.mk b/tests/utils/SleepUtils/SleepHelper/Android.mk deleted file mode 100644 index f8267fd530ed..000000000000 --- a/tests/utils/SleepUtils/SleepHelper/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# -# Copyright (C) 2013 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_SRC_FILES += \ -    ../AlarmService/src/com/android/testing/alarmservice/Alarm.aidl -LOCAL_SDK_VERSION := 7 -LOCAL_PACKAGE_NAME := SleepUtilsSleepHelper - -include $(BUILD_PACKAGE) diff --git a/tests/utils/SleepUtils/SleepHelper/AndroidManifest.xml b/tests/utils/SleepUtils/SleepHelper/AndroidManifest.xml deleted file mode 100644 index 0f1d49185169..000000000000 --- a/tests/utils/SleepUtils/SleepHelper/AndroidManifest.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2013 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. --> - -<manifest xmlns:android="http://schemas.android.com/apk/res/android" -    package="com.android.testing.sleephelper"> - -    <uses-sdk android:minSdkVersion="7" /> -    <instrumentation android:label="Sleep Helper" -                     android:name="com.android.testing.sleephelper.SetAlarm" -                     android:targetPackage="com.android.testing.sleephelper" /> - -    <application android:label="Sleep Utils Sleep Helper"> -        <uses-library android:name="android.test.runner" /> -    </application> -</manifest> diff --git a/tests/utils/SleepUtils/SleepHelper/src/com/android/testing/sleephelper/SetAlarm.java b/tests/utils/SleepUtils/SleepHelper/src/com/android/testing/sleephelper/SetAlarm.java deleted file mode 100644 index b558741da908..000000000000 --- a/tests/utils/SleepUtils/SleepHelper/src/com/android/testing/sleephelper/SetAlarm.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.testing.sleephelper; - -import android.app.Activity; -import android.app.Instrumentation; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.ServiceConnection; -import android.os.Bundle; -import android.os.Debug; -import android.os.IBinder; -import android.os.RemoteException; -import android.util.Log; - -import com.android.testing.alarmservice.Alarm; - -public class SetAlarm extends Instrumentation { - -    private static final String COMMAND = "command"; -    private static final String PARAM = "param"; -    private static final String CMD_PREPARE = "prepare"; -    private static final String CMD_SET = "set_wait"; -    private static final String CMD_DONE = "done"; -    private static final String SERVICE_ACTION = "com.android.testing.ALARM_SERVICE"; -    private static final String SERVICE_PKG = "com.android.testing.alarmservice"; -    private static final String LOG_TAG = SetAlarm.class.getSimpleName(); - -    private Alarm mAlarmService = null; -    private Bundle mArgs = null; -    private String mCommand = null; -    private Intent mServceIntent = new Intent(SERVICE_ACTION).setPackage(SERVICE_PKG); - -    private ServiceConnection mConn = new ServiceConnection() { -        @Override -        public void onServiceDisconnected(ComponentName name) { -            Log.d(LOG_TAG, "Service disconnected."); -            mAlarmService = null; -            errorFinish("service disconnected"); -        } - -        @Override -        public void onServiceConnected(ComponentName name, IBinder service) { -            Log.d(LOG_TAG, "Service connected."); -            mAlarmService = Alarm.Stub.asInterface(service); -            handleCommands(); -        } -    }; - - -    private void handleCommands() { -        if (CMD_PREPARE.equals(mCommand)) { -            callPrepare(); -        } else if (CMD_SET.equals(mCommand)) { -            String paramString = mArgs.getString(PARAM); -            if (paramString == null) { -                errorFinish("argument expected for alarm time"); -            } -            long timeout = -1; -            try { -                timeout = Long.parseLong(paramString); -            } catch (NumberFormatException nfe) { -                errorFinish("a number argument is expected"); -            } -            callSetAndWait(timeout); -        } else if (CMD_DONE.equals(mCommand)) { -            callDone(); -        } else { -            errorFinish("Unrecognized command: " + mCommand); -        } -        finish(Activity.RESULT_OK, new Bundle()); -    } - -    @Override -    public void onCreate(Bundle arguments) { -        super.onCreate(arguments); -        mCommand = arguments.getString(COMMAND); -        if ("true".equals(arguments.getString("debug"))) { -            Debug.waitForDebugger(); -        } -        if (mCommand == null) { -            errorFinish("No command specified"); -        } -        mArgs = arguments; -        connectToAlarmService(); -    } - -    private void errorFinish(String msg) { -        Bundle ret = new Bundle(); -        ret.putString("error", msg); -        finish(Activity.RESULT_CANCELED, ret); -    } - -    private void connectToAlarmService() { -        // start the service with an intent, this ensures the service keeps running after unbind -        ComponentName cn = getContext().startService(mServceIntent); -        if (cn == null) { -            errorFinish("failed to start service"); -        } -        if (!getContext().bindService(mServceIntent, mConn, Context.BIND_AUTO_CREATE)) { -            errorFinish("failed to bind service"); -        } -    } - -    private void callPrepare() { -        try { -            mAlarmService.prepare(); -        } catch (RemoteException e) { -            errorFinish("RemoteExeption in prepare()"); -        } finally { -            getContext().unbindService(mConn); -        } -    } - -    private void callDone() { -        try { -            mAlarmService.done(); -        } catch (RemoteException e) { -            errorFinish("RemoteExeption in prepare()"); -        } finally { -            getContext().unbindService(mConn); -        } -        // explicitly stop the service (started in prepare()) so that the service is now free -        // to be reclaimed -        getContext().stopService(mServceIntent); -    } - -    private void callSetAndWait(long timeoutMills) { -        try { -            mAlarmService.setAlarmAndWait(timeoutMills); -        } catch (RemoteException e) { -            errorFinish("RemoteExeption in setAlarmAndWait()"); -        } finally { -            getContext().unbindService(mConn); -        } -    } -} diff --git a/tests/utils/SleepUtils/WakeLoopService/Android.mk b/tests/utils/SleepUtils/WakeLoopService/Android.mk deleted file mode 100644 index a8a944b215d2..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/Android.mk +++ /dev/null @@ -1,24 +0,0 @@ -# -# Copyright (C) 2014 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -#      http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_PACKAGE_NAME := WakeupLoopService -LOCAL_SDK_VERSION := 7 -include $(BUILD_PACKAGE) diff --git a/tests/utils/SleepUtils/WakeLoopService/AndroidManifest.xml b/tests/utils/SleepUtils/WakeLoopService/AndroidManifest.xml deleted file mode 100644 index a7028c4f671e..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/AndroidManifest.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2014 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. --> - -<manifest xmlns:android="http://schemas.android.com/apk/res/android" -    package="android.test.wakeuploop" > - -    <uses-sdk android:minSdkVersion="7" /> -    <uses-permission android:name="android.permission.WAKE_LOCK" /> -    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - -    <application android:label="Auto Wakeup Loop"> -        <service android:name=".WakeLoopService" -            android:label="Wakup Loop Service" -            android:exported="true" -            android:enabled="true"> -            <intent-filter> -                <action android:name="android.test.wakeuploop.WAKEUP_SERVICE" /> -            </intent-filter> -        </service> -        <receiver android:name=".WakeUpCall"> -            <intent-filter> -                <action android:name="android.test.wakeuploop.WAKEUP" /> -            </intent-filter> -        </receiver> -    </application> -</manifest> diff --git a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/FileUtil.java b/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/FileUtil.java deleted file mode 100644 index c8b075b4a90f..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/FileUtil.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.test.wakeuploop; - -import android.util.Log; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; - -public class FileUtil { - -    private static FileUtil sInst = null; -    private static DateFormat sDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - -    private FileUtil() {}; - -    public static FileUtil get() { -        if (sInst == null) { -            sInst = new FileUtil(); -        } -        return sInst; -    } - -    public void writeDateToFile(File file) { -        try { -            FileOutputStream fos = new FileOutputStream(file); -            fos.write(sDateFormat.format(new Date()).getBytes()); -            fos.write('\n'); -            fos.flush(); -            fos.close(); -        } catch (IOException ioe) { -            Log.e("FileUtil", "exception writing date to file", ioe); -        } -    } -} diff --git a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeLoopService.java b/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeLoopService.java deleted file mode 100644 index 4f557b8786f4..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeLoopService.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.test.wakeuploop; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.Environment; -import android.os.Handler; -import android.os.IBinder; -import android.os.Message; -import android.os.Messenger; -import android.os.SystemClock; -import android.util.Log; - -import java.io.File; - -public class WakeLoopService extends Service { - -    private static final String LOG_TAG = WakeLoopService.class.getSimpleName(); -    static final String WAKEUP_INTERNAL = "WAKEUP_INTERVAL"; -    static final String MAX_LOOP = "MAX_LOOP"; -    static final String STOP_CALLBACK = "STOP_CALLBACK"; -    static final String THIS_LOOP = "THIS_LOOP"; -    static final int MSG_STOP_SERVICE = 0xd1ed1e; - -    private final Handler mHandler = new Handler() { -        public void handleMessage(Message msg) { -            if (msg.what == MSG_STOP_SERVICE) { -                stopSelf(); -            } else { -                super.handleMessage(msg); -            } -        }; -    }; - -    @Override -    public IBinder onBind(Intent intent) { -        // no binding, just start via intent -        return null; -    } - -    @Override -    public int onStartCommand(Intent intent, int flags, int startId) { -        // get wakeup interval from intent -        long wakeupInterval = intent.getLongExtra(WAKEUP_INTERNAL, 0); -        long maxLoop = intent.getLongExtra(MAX_LOOP, 0); - -        if (wakeupInterval == 0) { -            // stop and error -            Log.e(LOG_TAG, "No wakeup interval specified, not starting the service"); -            stopSelf(); -            return START_NOT_STICKY; -        } -        FileUtil.get().writeDateToFile(new File(Environment.getExternalStorageDirectory(), -                "wakeup-loop-start.txt")); -        Log.d(LOG_TAG, String.format("WakeLoop: STARTED interval = %d, total loop = %d", -                wakeupInterval, maxLoop)); -        // calculate when device should be waken up -        long atTime = SystemClock.elapsedRealtime() + wakeupInterval; -        AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE); -        Intent wakupIntent = new Intent(WakeUpCall.WAKEUP_CALL) -            .putExtra(WAKEUP_INTERNAL, wakeupInterval) -            .putExtra(MAX_LOOP, maxLoop) -            .putExtra(THIS_LOOP, 0L) -            .putExtra(STOP_CALLBACK, new Messenger(mHandler)); -        PendingIntent pi = PendingIntent.getBroadcast(this, 0, wakupIntent, -                PendingIntent.FLAG_UPDATE_CURRENT); -        // set alarm, which will be delivered in form of the wakeupIntent -        am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, atTime, pi); -        return START_NOT_STICKY; -    } - -    @Override -    public void onDestroy() { -        Log.d(LOG_TAG, "WakeLoop: STOPPED"); -        // cancel alarms first -        Intent intent = new Intent(WakeUpCall.WAKEUP_CALL) -            .putExtra(WakeUpCall.CANCEL, "true"); -        sendBroadcast(intent); -    } -} diff --git a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeUpCall.java b/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeUpCall.java deleted file mode 100644 index 8347bbf0c1c7..000000000000 --- a/tests/utils/SleepUtils/WakeLoopService/src/android/test/wakeuploop/WakeUpCall.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.test.wakeuploop; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Environment; -import android.os.Message; -import android.os.Messenger; -import android.os.PowerManager; -import android.os.PowerManager.WakeLock; -import android.os.RemoteException; -import android.os.SystemClock; -import android.util.Log; - -import java.io.File; - -/** - * The receiver for the alarm we set - * - */ -public class WakeUpCall extends BroadcastReceiver { -    private static final String LOG_TAG = WakeUpCall.class.getSimpleName(); -    static final String WAKEUP_CALL = "android.test.wakeuploop.WAKEUP"; -    static final String CANCEL = "CANCEL"; - -    @Override -    public void onReceive(Context context, Intent intent) { -        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); -        boolean cancel = intent.hasExtra(CANCEL); -        if (!cancel) { -            long maxLoop = intent.getLongExtra(WakeLoopService.MAX_LOOP, 0); -            long wakeupInterval = intent.getLongExtra(WakeLoopService.WAKEUP_INTERNAL, 0); -            long thisLoop = intent.getLongExtra(WakeLoopService.THIS_LOOP, -1); -            Log.d(LOG_TAG, String.format("incoming: interval = %d, max loop = %d, this loop = %d", -                    wakeupInterval, maxLoop, thisLoop)); -            if (thisLoop == -1) { -                Log.e(LOG_TAG, "no valid loop count received, trying to stop service"); -                stopService(intent); -                return; -            } -            if (wakeupInterval == 0) { -                Log.e(LOG_TAG, "no valid wakeup interval received, trying to stop service"); -                stopService(intent); -                return; -            } -            thisLoop++; -            Log.d(LOG_TAG, String.format("WakeLoop - iteration %d of %d", thisLoop, maxLoop)); -            if (thisLoop == maxLoop) { -                // when maxLoop is 0, we loop forever, so not checking that case -                // here -                Log.d(LOG_TAG, "reached max loop count, stopping service"); -                stopService(intent); -                return; -            } -            screenOn(context); -            FileUtil.get().writeDateToFile( -                    new File(Environment.getExternalStorageDirectory(), "wakeup-loop.txt")); -            // calculate when device should be waken up -            long atTime = SystemClock.elapsedRealtime() + wakeupInterval; -            intent.putExtra(WakeLoopService.THIS_LOOP, thisLoop); -            PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, -                    PendingIntent.FLAG_UPDATE_CURRENT); -            // set alarm, which will be delivered in form of the wakeupIntent -            am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, atTime, pi); -        } else { -            // cancel alarms -            Log.d(LOG_TAG, "cancelling future alarms on request"); -            am.cancel(PendingIntent.getBroadcast(context, 0, intent, 0)); -        } -    } - -    private void stopService(Intent i) { -        Messenger msgr = i.getParcelableExtra(WakeLoopService.STOP_CALLBACK); -        if (msgr == null) { -            Log.e(LOG_TAG, "no stop service callback found, cannot stop"); -        } else { -            Message msg = new Message(); -            msg.what = WakeLoopService.MSG_STOP_SERVICE; -            try { -                msgr.send(msg); -            } catch (RemoteException e) { -                Log.e(LOG_TAG, "ignored remoted exception while attempting to stop service", e); -            } -        } -    } - -    private void screenOn(Context context) { -        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); -        @SuppressWarnings("deprecation") -        WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | -                PowerManager.ACQUIRE_CAUSES_WAKEUP, LOG_TAG); -        wl.acquire(500); -    } -} diff --git a/tools/apilint/apilint.py b/tools/apilint/apilint.py index 59e89f515e82..f967c2fa6bcb 100644 --- a/tools/apilint/apilint.py +++ b/tools/apilint/apilint.py @@ -79,6 +79,7 @@ class Field():                  self.value = raw[3].strip(';"')              else:                  self.value = None +            self.annotations = []          self.ident = "-".join((self.typ, self.name, self.value or "")) @@ -88,6 +89,18 @@ class Field():      def __repr__(self):          return self.raw + +class Argument(object): + +    __slots__ = ["type", "annotations", "name", "default"] + +    def __init__(self, type): +        self.type = type +        self.annotations = [] +        self.name = None +        self.default = None + +  class Method():      def __init__(self, clazz, line, raw, blame, sig_format = 1):          self.clazz = clazz @@ -118,21 +131,24 @@ class Method():              self.name = raw[1]              # parse args -            self.args = [] +            self.detailed_args = []              for arg in re.split(",\s*", raw_args):                  arg = re.split("\s", arg)                  # ignore annotations for now                  arg = [ a for a in arg if not a.startswith("@") ]                  if len(arg[0]) > 0: -                    self.args.append(arg[0]) +                    self.detailed_args.append(Argument(arg[0]))              # parse throws              self.throws = []              for throw in re.split(",\s*", raw_throws):                  self.throws.append(throw) + +            self.annotations = []          else:              raise ValueError("Unknown signature format: " + sig_format) +        self.args = map(lambda a: a.type, self.detailed_args)          self.ident = "-".join((self.typ, self.name, "-".join(self.args)))      def sig_matches(self, typ, name, args): @@ -154,6 +170,7 @@ class Class():          self.ctors = []          self.fields = []          self.methods = [] +        self.annotations = []          if sig_format == 2:              V2LineParser(raw).parse_into_class(self) @@ -180,8 +197,10 @@ class Class():              if "implements" in raw:                  self.implements = raw[raw.index("implements")+1] +                self.implements_all = [self.implements]              else:                  self.implements = None +                self.implements_all = []          else:              raise ValueError("Unknown signature format: " + sig_format) @@ -208,13 +227,14 @@ class Class():  class Package(): +    NAME = re.compile("package(?: .*)? ([A-Za-z0-9.]+)") +      def __init__(self, line, raw, blame):          self.line = line          self.raw = raw.strip(" {;")          self.blame = blame -        raw = raw.split() -        self.name = raw[raw.index("package")+1] +        self.name = Package.NAME.match(raw).group(1)          self.name_path = self.name.split(".")      def __repr__(self): @@ -311,10 +331,10 @@ class V2LineParser(object):          method.split = []          kind = self.parse_one_of("ctor", "method")          method.split.append(kind) -        annotations = self.parse_annotations() +        method.annotations = self.parse_annotations()          method.split.extend(self.parse_modifiers())          self.parse_matching_paren("<", ">") -        if "@Deprecated" in annotations: +        if "@Deprecated" in method.annotations:              method.split.append("deprecated")          if kind == "ctor":              method.typ = "ctor" @@ -324,7 +344,7 @@ class V2LineParser(object):          method.name = self.parse_name()          method.split.append(method.name)          self.parse_token("(") -        method.args = self.parse_args() +        method.detailed_args = self.parse_args()          self.parse_token(")")          method.throws = self.parse_throws()          if "@interface" in method.clazz.split: @@ -334,8 +354,8 @@ class V2LineParser(object):      def parse_into_class(self, clazz):          clazz.split = [] -        annotations = self.parse_annotations() -        if "@Deprecated" in annotations: +        clazz.annotations = self.parse_annotations() +        if "@Deprecated" in clazz.annotations:              clazz.split.append("deprecated")          clazz.split.extend(self.parse_modifiers())          kind = self.parse_one_of("class", "interface", "@interface", "enum") @@ -347,20 +367,20 @@ class V2LineParser(object):          self.parse_matching_paren("<", ">")          extends = self.parse_extends()          clazz.extends = extends[0] if extends else None -        implements = self.parse_implements() -        clazz.implements = implements[0] if implements else None +        clazz.implements_all = self.parse_implements()          # The checks assume that interfaces are always found in implements, which isn't true for          # subinterfaces. -        if not implements and "interface" in clazz.split: -            clazz.implements = clazz.extends +        if not clazz.implements_all and "interface" in clazz.split: +            clazz.implements_all = [clazz.extends] +        clazz.implements = clazz.implements_all[0] if clazz.implements_all else None          self.parse_token("{")          self.parse_eof()      def parse_into_field(self, field):          kind = self.parse_one_of(*V2LineParser.FIELD_KINDS)          field.split = [kind] -        annotations = self.parse_annotations() -        if "@Deprecated" in annotations: +        field.annotations = self.parse_annotations() +        if "@Deprecated" in field.annotations:              field.split.append("deprecated")          field.split.extend(self.parse_modifiers())          field.typ = self.parse_type() @@ -487,15 +507,16 @@ class V2LineParser(object):      def parse_arg(self):          self.parse_if("vararg")  # kotlin vararg -        self.parse_annotations() -        type = self.parse_arg_type() +        annotations = self.parse_annotations() +        arg = Argument(self.parse_arg_type()) +        arg.annotations = annotations          l = self.lookahead()          if l != "," and l != ")":              if self.lookahead() != '=': -                self.parse_token()  # kotlin argument name +                arg.name = self.parse_token()  # kotlin argument name              if self.parse_if('='): # kotlin default value -                self.parse_expression() -        return type +                arg.default = self.parse_expression() +        return arg      def parse_expression(self):          while not self.lookahead() in [')', ',', ';']: @@ -592,7 +613,7 @@ def _parse_stream_to_generator(f):      blame = None      sig_format = 1 -    re_blame = re.compile("^([a-z0-9]{7,}) \(<([^>]+)>.+?\) (.+?)$") +    re_blame = re.compile(r"^(\^?[a-z0-9]{7,}) \(<([^>]+)>.+?\) (.+?)$")      field_prefixes = map(lambda kind: "    %s" % (kind,), V2LineParser.FIELD_KINDS)      def startsWithFieldPrefix(raw): @@ -607,11 +628,13 @@ def _parse_stream_to_generator(f):          match = re_blame.match(raw)          if match is not None:              blame = match.groups()[0:2] +            if blame[0].startswith("^"):  # Outside of blame range +              blame = None              raw = match.groups()[2]          else:              blame = None -        if line == 1 and raw.startswith("// Signature format: "): +        if line == 1 and V2Tokenizer.SIGNATURE_PREFIX in raw:              sig_format_string = raw[len(V2Tokenizer.SIGNATURE_PREFIX):]              if sig_format_string in ["2.0", "3.0"]:                  sig_format = 2 @@ -741,6 +764,14 @@ def notice(clazz):      noticed[clazz.fullname] = hash(clazz) +verifiers = {} + +def verifier(f): +    verifiers[f.__name__] = f +    return f + + +@verifier  def verify_constants(clazz):      """All static final constants must be FOO_NAME style."""      if re.match("android\.R\.[a-z]+", clazz.fullname): return @@ -758,13 +789,13 @@ def verify_constants(clazz):              if f.typ in req and f.value is None:                  error(clazz, f, None, "All constants must be defined at compile time") - +@verifier  def verify_enums(clazz):      """Enums are bad, mmkay?"""      if clazz.extends == "java.lang.Enum" or "enum" in clazz.split:          error(clazz, None, "F5", "Enums are not allowed") - +@verifier  def verify_class_names(clazz):      """Try catching malformed class names like myMtp or MTPUser."""      if clazz.fullname.startswith("android.opengl"): return @@ -779,6 +810,7 @@ def verify_class_names(clazz):          error(clazz, None, None, "Don't expose your implementation details") +@verifier  def verify_method_names(clazz):      """Try catching malformed method names, like Foo() or getMTU()."""      if clazz.fullname.startswith("android.opengl"): return @@ -792,9 +824,9 @@ def verify_method_names(clazz):              error(clazz, m, "S1", "Method name must start with lowercase char") +@verifier  def verify_callbacks(clazz):      """Verify Callback classes. -    All callback classes must be abstract.      All methods must follow onFoo() naming style."""      if clazz.fullname == "android.speech.tts.SynthesisCallback": return @@ -804,14 +836,12 @@ def verify_callbacks(clazz):          warn(clazz, None, "L1", "Class should be named FooCallback")      if clazz.name.endswith("Callback"): -        if "interface" in clazz.split: -            error(clazz, None, "CL3", "Callbacks must be abstract class to enable extension in future API levels") -          for m in clazz.methods:              if not re.match("on[A-Z][a-z]*", m.name):                  error(clazz, m, "L1", "Callback method names must be onFoo() style") +@verifier  def verify_listeners(clazz):      """Verify Listener classes.      All Listener classes must be interface. @@ -833,6 +863,7 @@ def verify_listeners(clazz):                  error(clazz, m, "L1", "Single listener method name must match class name") +@verifier  def verify_actions(clazz):      """Verify intent actions.      All action names must be named ACTION_FOO. @@ -864,6 +895,7 @@ def verify_actions(clazz):                          error(clazz, f, "C4", "Inconsistent action value; expected '%s'" % (expected)) +@verifier  def verify_extras(clazz):      """Verify intent extras.      All extra names must be named EXTRA_FOO. @@ -894,6 +926,7 @@ def verify_extras(clazz):                          error(clazz, f, "C4", "Inconsistent extra value; expected '%s'" % (expected)) +@verifier  def verify_equals(clazz):      """Verify that equals() and hashCode() must be overridden together."""      eq = False @@ -906,6 +939,7 @@ def verify_equals(clazz):          error(clazz, None, "M8", "Must override both equals and hashCode; missing one") +@verifier  def verify_parcelable(clazz):      """Verify that Parcelable objects aren't hiding required bits."""      if clazz.implements == "android.os.Parcelable": @@ -924,6 +958,7 @@ def verify_parcelable(clazz):                  error(clazz, c, "FW3", "Parcelable inflation is exposed through CREATOR, not raw constructors") +@verifier  def verify_protected(clazz):      """Verify that no protected methods or fields are allowed."""      for m in clazz.methods: @@ -935,6 +970,7 @@ def verify_protected(clazz):              error(clazz, f, "M7", "Protected fields not allowed; must be public") +@verifier  def verify_fields(clazz):      """Verify that all exposed fields are final.      Exposed fields must follow myName style. @@ -980,6 +1016,7 @@ def verify_fields(clazz):                  error(clazz, f, "C2", "Constants must be marked static final") +@verifier  def verify_register(clazz):      """Verify parity of registration methods.      Callback objects use register/unregister methods. @@ -1013,6 +1050,7 @@ def verify_register(clazz):                  error(clazz, m, "L3", "Listener methods should be named add/remove") +@verifier  def verify_sync(clazz):      """Verify synchronized methods aren't exposed."""      for m in clazz.methods: @@ -1020,6 +1058,7 @@ def verify_sync(clazz):              error(clazz, m, "M5", "Internal locks must not be exposed") +@verifier  def verify_intent_builder(clazz):      """Verify that Intent builders are createFooIntent() style."""      if clazz.name == "Intent": return @@ -1032,6 +1071,7 @@ def verify_intent_builder(clazz):                  warn(clazz, m, "FW1", "Methods creating an Intent should be named createFooIntent()") +@verifier  def verify_helper_classes(clazz):      """Verify that helper classes are named consistently with what they extend.      All developer extendable methods should be named onFoo().""" @@ -1080,6 +1120,7 @@ def verify_helper_classes(clazz):                      warn(clazz, m, None, "If implemented by developer, should be named onFoo(); otherwise consider marking final") +@verifier  def verify_builder(clazz):      """Verify builder classes.      Methods should return the builder to enable chaining.""" @@ -1108,13 +1149,18 @@ def verify_builder(clazz):      if not has_build:          warn(clazz, None, None, "Missing build() method") +    if "final" not in clazz.split: +        error(clazz, None, None, "Builder should be final") + +@verifier  def verify_aidl(clazz):      """Catch people exposing raw AIDL."""      if clazz.extends == "android.os.Binder" or clazz.implements == "android.os.IInterface":          error(clazz, None, None, "Raw AIDL interfaces must not be exposed") +@verifier  def verify_internal(clazz):      """Catch people exposing internal classes."""      if clazz.pkg.name.startswith("com.android"): @@ -1149,6 +1195,7 @@ LAYERING_PACKAGE_RANKING = layering_build_ranking([      "android.util"  ]) +@verifier  def verify_layering(clazz):      """Catch package layering violations.      For example, something in android.os depending on android.app.""" @@ -1183,6 +1230,7 @@ def verify_layering(clazz):                  warn(clazz, m, "FW6", "Method argument type violates package layering") +@verifier  def verify_boolean(clazz):      """Verifies that boolean accessors are named correctly.      For example, hasFoo() and setHasFoo().""" @@ -1223,9 +1271,11 @@ def verify_boolean(clazz):                  error_if_exists(sets, m.name, expected, "has" + target) +@verifier  def verify_collections(clazz):      """Verifies that collection types are interfaces."""      if clazz.fullname == "android.os.Bundle": return +    if clazz.fullname == "android.os.Parcel": return      bad = ["java.util.Vector", "java.util.LinkedList", "java.util.ArrayList", "java.util.Stack",             "java.util.HashMap", "java.util.HashSet", "android.util.ArraySet", "android.util.ArrayMap"] @@ -1237,6 +1287,23 @@ def verify_collections(clazz):                  error(clazz, m, "CL2", "Argument is concrete collection; must be higher-level interface") +@verifier +def verify_uris(clazz): +    bad = ["java.net.URL", "java.net.URI", "android.net.URL"] + +    for f in clazz.fields: +        if f.typ in bad: +            error(clazz, f, None, "Field must be android.net.Uri instead of " + f.typ) + +    for m in clazz.methods + clazz.ctors: +        if m.typ in bad: +            error(clazz, m, None, "Must return android.net.Uri instead of " + m.typ) +        for arg in m.args: +            if arg in bad: +                error(clazz, m, None, "Argument must take android.net.Uri instead of " + arg) + + +@verifier  def verify_flags(clazz):      """Verifies that flags are non-overlapping."""      known = collections.defaultdict(int) @@ -1253,6 +1320,7 @@ def verify_flags(clazz):              known[scope] |= val +@verifier  def verify_exception(clazz):      """Verifies that methods don't throw generic exceptions."""      for m in clazz.methods: @@ -1261,17 +1329,19 @@ def verify_exception(clazz):                  error(clazz, m, "S1", "Methods must not throw generic exceptions")              if t in ["android.os.RemoteException"]: -                if clazz.name == "android.content.ContentProviderClient": continue -                if clazz.name == "android.os.Binder": continue -                if clazz.name == "android.os.IBinder": continue +                if clazz.fullname == "android.content.ContentProviderClient": continue +                if clazz.fullname == "android.os.Binder": continue +                if clazz.fullname == "android.os.IBinder": continue                  error(clazz, m, "FW9", "Methods calling into system server should rethrow RemoteException as RuntimeException")              if len(m.args) == 0 and t in ["java.lang.IllegalArgumentException", "java.lang.NullPointerException"]:                  warn(clazz, m, "S1", "Methods taking no arguments should throw IllegalStateException") +  GOOGLE_IGNORECASE = re.compile("google", re.IGNORECASE) +# Not marked as @verifier, because it is only conditionally applied.  def verify_google(clazz):      """Verifies that APIs never reference Google.""" @@ -1284,6 +1354,7 @@ def verify_google(clazz):                  error(clazz, t, None, "Must never reference Google") +@verifier  def verify_bitset(clazz):      """Verifies that we avoid using heavy BitSet.""" @@ -1299,6 +1370,7 @@ def verify_bitset(clazz):                  error(clazz, m, None, "Argument type must not be heavy BitSet") +@verifier  def verify_manager(clazz):      """Verifies that FooManager is only obtained from Context.""" @@ -1312,6 +1384,7 @@ def verify_manager(clazz):              error(clazz, m, None, "Managers must always be obtained from Context") +@verifier  def verify_boxed(clazz):      """Verifies that methods avoid boxed primitives.""" @@ -1334,6 +1407,7 @@ def verify_boxed(clazz):                  error(clazz, m, "M11", "Must avoid boxed primitives") +@verifier  def verify_static_utils(clazz):      """Verifies that helper classes can't be constructed."""      if clazz.fullname.startswith("android.opengl"): return @@ -1353,6 +1427,7 @@ def verify_static_utils(clazz):          error(clazz, None, None, "Fully-static utility classes must not have constructor") +# @verifier  # Disabled for now  def verify_overload_args(clazz):      """Verifies that method overloads add new arguments at the end."""      if clazz.fullname.startswith("android.opengl"): return @@ -1393,6 +1468,7 @@ def verify_overload_args(clazz):                  error(clazz, m, "M2", "Expected consistent argument ordering between overloads: %s..." % (", ".join(locked_sig))) +@verifier  def verify_callback_handlers(clazz):      """Verifies that methods adding listener/callback have overload      for specifying delivery thread.""" @@ -1444,6 +1520,7 @@ def verify_callback_handlers(clazz):              warn(clazz, f, "L1", "Registration methods should have overload that accepts delivery Executor") +@verifier  def verify_context_first(clazz):      """Verifies that methods accepting a Context keep it the first argument."""      examine = clazz.ctors + clazz.methods @@ -1456,6 +1533,7 @@ def verify_context_first(clazz):                  error(clazz, m, "M3", "ContentResolver is distinct, so it must be the first argument") +@verifier  def verify_listener_last(clazz):      """Verifies that methods accepting a Listener or Callback keep them as last arguments."""      examine = clazz.ctors + clazz.methods @@ -1469,6 +1547,7 @@ def verify_listener_last(clazz):                  warn(clazz, m, "M3", "Listeners should always be at end of argument list") +@verifier  def verify_resource_names(clazz):      """Verifies that resource names have consistent case."""      if not re.match("android\.R\.[a-z]+", clazz.fullname): return @@ -1500,6 +1579,7 @@ def verify_resource_names(clazz):              error(clazz, f, "C7", "Expected resource name in this class to be FooBar_Baz style") +@verifier  def verify_files(clazz):      """Verifies that methods accepting File also accept streams.""" @@ -1521,6 +1601,7 @@ def verify_files(clazz):              warn(clazz, m, "M10", "Methods accepting File should also accept FileDescriptor or streams") +@verifier  def verify_manager_list(clazz):      """Verifies that managers return List<? extends Parcelable> instead of arrays.""" @@ -1531,6 +1612,7 @@ def verify_manager_list(clazz):              warn(clazz, m, None, "Methods should return List<? extends Parcelable> instead of Parcelable[] to support ParceledListSlice under the hood") +@verifier  def verify_abstract_inner(clazz):      """Verifies that abstract inner classes are static.""" @@ -1539,6 +1621,7 @@ def verify_abstract_inner(clazz):              warn(clazz, None, None, "Abstract inner classes should be static to improve testability") +@verifier  def verify_runtime_exceptions(clazz):      """Verifies that runtime exceptions aren't listed in throws.""" @@ -1583,6 +1666,7 @@ def verify_runtime_exceptions(clazz):                  error(clazz, m, None, "Methods must not mention RuntimeException subclasses in throws clauses") +@verifier  def verify_error(clazz):      """Verifies that we always use Exception instead of Error."""      if not clazz.extends: return @@ -1592,6 +1676,7 @@ def verify_error(clazz):          error(clazz, None, None, "Exceptions must be named FooException") +@verifier  def verify_units(clazz):      """Verifies that we use consistent naming for units.""" @@ -1628,10 +1713,11 @@ def verify_units(clazz):              error(clazz, m, None, "Percentage must use ints") +@verifier  def verify_closable(clazz):      """Verifies that classes are AutoClosable.""" -    if clazz.implements == "java.lang.AutoCloseable": return -    if clazz.implements == "java.io.Closeable": return +    if "java.lang.AutoCloseable" in clazz.implements_all: return +    if "java.io.Closeable" in clazz.implements_all: return      for m in clazz.methods:          if len(m.args) > 0: continue @@ -1640,6 +1726,7 @@ def verify_closable(clazz):              return +@verifier  def verify_member_name_not_kotlin_keyword(clazz):      """Prevent method names which are keywords in Kotlin.""" @@ -1665,6 +1752,7 @@ def verify_member_name_not_kotlin_keyword(clazz):              error(clazz, f, None, "Field name must not be a Kotlin keyword") +@verifier  def verify_method_name_not_kotlin_operator(clazz):      """Warn about method names which become operators in Kotlin.""" @@ -1714,6 +1802,7 @@ def verify_method_name_not_kotlin_operator(clazz):              unique_binary_op(m, m.name[:-6])  # Remove 'Assign' suffix +@verifier  def verify_collections_over_arrays(clazz):      """Warn that [] should be Collections.""" @@ -1729,6 +1818,7 @@ def verify_collections_over_arrays(clazz):                  warn(clazz, m, None, "Method argument should be Collection<> (or subclass) instead of raw array") +@verifier  def verify_user_handle(clazz):      """Methods taking UserHandle should be ForUser or AsUser."""      if clazz.name.endswith("Listener") or clazz.name.endswith("Callback") or clazz.name.endswith("Callbacks"): return @@ -1753,6 +1843,7 @@ def verify_user_handle(clazz):                   "or 'queryFooForUser'") +@verifier  def verify_params(clazz):      """Parameter classes should be 'Params'."""      if clazz.name.endswith("Params"): return @@ -1768,6 +1859,7 @@ def verify_params(clazz):              error(clazz, None, None, "Classes holding a set of parameters should be called 'FooParams'") +@verifier  def verify_services(clazz):      """Service name should be FOO_BAR_SERVICE = 'foo_bar'."""      if clazz.fullname != "android.content.Context": return @@ -1781,6 +1873,7 @@ def verify_services(clazz):                  error(clazz, f, "C4", "Inconsistent service value; expected '%s'" % (expected)) +@verifier  def verify_tense(clazz):      """Verify tenses of method names."""      if clazz.fullname.startswith("android.opengl"): return @@ -1790,6 +1883,7 @@ def verify_tense(clazz):              warn(clazz, m, None, "Unexpected tense; probably meant 'enabled'") +@verifier  def verify_icu(clazz):      """Verifies that richer ICU replacements are used."""      better = { @@ -1821,6 +1915,7 @@ def verify_icu(clazz):                  warn(clazz, m, None, "Type %s should be replaced with richer ICU type %s" % (arg, better[arg])) +@verifier  def verify_clone(clazz):      """Verify that clone() isn't implemented; see EJ page 61."""      for m in clazz.methods: @@ -1828,8 +1923,12 @@ def verify_clone(clazz):              error(clazz, m, None, "Provide an explicit copy constructor instead of implementing clone()") +@verifier  def verify_pfd(clazz):      """Verify that android APIs use PFD over FD.""" +    if clazz.fullname == "android.os.FileUtils" or clazz.fullname == "android.system.Os": +        return +      examine = clazz.ctors + clazz.methods      for m in examine:          if m.typ == "java.io.FileDescriptor": @@ -1846,6 +1945,7 @@ def verify_pfd(clazz):              error(clazz, f, "FW11", "Must use ParcelFileDescriptor") +@verifier  def verify_numbers(clazz):      """Discourage small numbers types like short and byte.""" @@ -1868,6 +1968,49 @@ def verify_numbers(clazz):                  warn(clazz, m, "FW12", "Should avoid odd sized primitives; use int instead") +PRIMITIVES = {"void", "int", "float", "boolean", "short", "char", "byte", "long", "double"} + +@verifier +def verify_nullability(clazz): +    """Catches missing nullability annotations""" + +    for f in clazz.fields: +        if f.value is not None and 'static' in f.split and 'final' in f.split: +            continue  # Nullability of constants can be inferred. +        if f.typ not in PRIMITIVES and not has_nullability(f.annotations): +            error(clazz, f, "M12", "Field must be marked either @NonNull or @Nullable") + +    for c in clazz.ctors: +        verify_nullability_args(clazz, c) + +    for m in clazz.methods: +        if m.name == "writeToParcel" or m.name == "onReceive": +            continue  # Parcelable.writeToParcel() and BroadcastReceiver.onReceive() are not yet annotated + +        if m.typ not in PRIMITIVES and not has_nullability(m.annotations): +            error(clazz, m, "M12", "Return value must be marked either @NonNull or @Nullable") +        verify_nullability_args(clazz, m) + +def verify_nullability_args(clazz, m): +    for i, arg in enumerate(m.detailed_args): +        if arg.type not in PRIMITIVES and not has_nullability(arg.annotations): +            error(clazz, m, "M12", "Argument %d must be marked either @NonNull or @Nullable" % (i+1,)) + +def has_nullability(annotations): +    return "@NonNull" in annotations or "@Nullable" in annotations + + +@verifier +def verify_intdef(clazz): +    """intdefs must be @hide, because the constant names cannot be stored in +       the stubs (only the values are, which is not useful)""" +    if "@interface" not in clazz.split: +        return +    if "@IntDef" in clazz.annotations or "@LongDef" in clazz.annotations: +        error(clazz, None, None, "@IntDef and @LongDef annotations must be @hide") + + +@verifier  def verify_singleton(clazz):      """Catch singleton objects with constructors.""" @@ -1902,59 +2045,10 @@ def examine_clazz(clazz):      if not is_interesting(clazz): return -    verify_constants(clazz) -    verify_enums(clazz) -    verify_class_names(clazz) -    verify_method_names(clazz) -    verify_callbacks(clazz) -    verify_listeners(clazz) -    verify_actions(clazz) -    verify_extras(clazz) -    verify_equals(clazz) -    verify_parcelable(clazz) -    verify_protected(clazz) -    verify_fields(clazz) -    verify_register(clazz) -    verify_sync(clazz) -    verify_intent_builder(clazz) -    verify_helper_classes(clazz) -    verify_builder(clazz) -    verify_aidl(clazz) -    verify_internal(clazz) -    verify_layering(clazz) -    verify_boolean(clazz) -    verify_collections(clazz) -    verify_flags(clazz) -    verify_exception(clazz) +    for v in verifiers.itervalues(): +        v(clazz) +      if not ALLOW_GOOGLE: verify_google(clazz) -    verify_bitset(clazz) -    verify_manager(clazz) -    verify_boxed(clazz) -    verify_static_utils(clazz) -    # verify_overload_args(clazz) -    verify_callback_handlers(clazz) -    verify_context_first(clazz) -    verify_listener_last(clazz) -    verify_resource_names(clazz) -    verify_files(clazz) -    verify_manager_list(clazz) -    verify_abstract_inner(clazz) -    verify_runtime_exceptions(clazz) -    verify_error(clazz) -    verify_units(clazz) -    verify_closable(clazz) -    verify_member_name_not_kotlin_keyword(clazz) -    verify_method_name_not_kotlin_operator(clazz) -    verify_collections_over_arrays(clazz) -    verify_user_handle(clazz) -    verify_params(clazz) -    verify_services(clazz) -    verify_tense(clazz) -    verify_icu(clazz) -    verify_clone(clazz) -    verify_pfd(clazz) -    verify_numbers(clazz) -    verify_singleton(clazz)  def examine_stream(stream, base_stream=None, in_classes_with_base=[], out_classes_with_base=None): diff --git a/tools/apilint/apilint_test.py b/tools/apilint/apilint_test.py index 3716bf9f5d6f..5cb43db0b00d 100644 --- a/tools/apilint/apilint_test.py +++ b/tools/apilint/apilint_test.py @@ -88,20 +88,22 @@ class UtilTests(unittest.TestCase):  faulty_current_txt = """ +// Signature format: 2.0  package android.app {    public final class Activity {    }    public final class WallpaperColors implements android.os.Parcelable { -    ctor public WallpaperColors(android.os.Parcel); +    ctor public WallpaperColors(@NonNull android.os.Parcel);      method public int describeContents(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR; +    method public void writeToParcel(@NonNull android.os.Parcel, int); +    field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR;    }  } -""".split('\n') +""".strip().split('\n')  ok_current_txt = """ +// Signature format: 2.0  package android.app {    public final class Activity {    } @@ -109,19 +111,20 @@ package android.app {    public final class WallpaperColors implements android.os.Parcelable {      ctor public WallpaperColors();      method public int describeContents(); -    method public void writeToParcel(android.os.Parcel, int); -    field public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR; +    method public void writeToParcel(@NonNull android.os.Parcel, int); +    field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR;    }  } -""".split('\n') +""".strip().split('\n')  system_current_txt = """ +// Signature format: 2.0  package android.app {    public final class WallpaperColors implements android.os.Parcelable {      method public int getSomething();    }  } -""".split('\n') +""".strip().split('\n') @@ -239,6 +242,10 @@ class V2ParserTests(unittest.TestCase):          cls = self._cls("class Class {")          return apilint.Field(cls, 1, raw, '', sig_format=2) +    def test_parse_package(self): +        pkg = apilint.Package(999, "package wifi.p2p {", None) +        self.assertEquals("wifi.p2p", pkg.name) +      def test_class(self):          cls = self._cls("@Deprecated @IntRange(from=1, to=2) public static abstract class Some.Name extends Super<Class> implements Interface<Class> {")          self.assertTrue('deprecated' in cls.split) @@ -369,5 +376,21 @@ class V2ParserTests(unittest.TestCase):          m = self._method('method @NonNull public @NonNull String @NonNull [] split(@NonNull String, int);')          self.assertEquals('java.lang.String[]', m.typ) +class PackageTests(unittest.TestCase): +    def _package(self, raw): +        return apilint.Package(123, raw, "blame") + +    def test_regular_package(self): +        p = self._package("package an.pref.int {") +        self.assertEquals('an.pref.int', p.name) + +    def test_annotation_package(self): +        p = self._package("package @RestrictTo(a.b.C) an.pref.int {") +        self.assertEquals('an.pref.int', p.name) + +    def test_multi_annotation_package(self): +        p = self._package("package @Rt(a.b.L_G_P) @RestrictTo(a.b.C) an.pref.int {") +        self.assertEquals('an.pref.int', p.name) +  if __name__ == "__main__":      unittest.main() diff --git a/tools/hiddenapi/exclude.sh b/tools/hiddenapi/exclude.sh index 4ffcf6846947..18c40546fd02 100755 --- a/tools/hiddenapi/exclude.sh +++ b/tools/hiddenapi/exclude.sh @@ -9,6 +9,7 @@ LOCAL_DIR="$( dirname ${BASH_SOURCE} )"  LIBCORE_PACKAGES="\    android.icu \    android.system \ +  android.test \    com.android.bouncycastle \    com.android.conscrypt \    com.android.i18n.phonenumbers \ @@ -17,6 +18,7 @@ LIBCORE_PACKAGES="\    dalvik \    java \    javax \ +  junit \    libcore \    org.apache.harmony \    org.json \ diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index af44b7e6cd16..6715bf7acb85 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -141,8 +141,10 @@ interface IWifiManager      void stopWatchLocalOnlyHotspot(); +    @UnsupportedAppUsage      int getWifiApEnabledState(); +    @UnsupportedAppUsage      WifiConfiguration getWifiApConfiguration();      boolean setWifiApConfiguration(in WifiConfiguration wifiConfig, String packageName); @@ -167,6 +169,7 @@ interface IWifiManager      void factoryReset(String packageName); +    @UnsupportedAppUsage      Network getCurrentNetwork();      byte[] retrieveBackupData();  |