diff options
1827 files changed, 15953 insertions, 11646 deletions
diff --git a/Android.bp b/Android.bp index d58b48399a8f..b099babcf4fc 100644 --- a/Android.bp +++ b/Android.bp @@ -201,6 +201,7 @@ java_defaults { "core/java/android/net/INetworkScoreService.aidl", "core/java/android/net/INetworkStatsService.aidl", "core/java/android/net/INetworkStatsSession.aidl", + "core/java/android/net/ITestNetworkManager.aidl", "core/java/android/net/ITetheringStatsProvider.aidl", "core/java/android/net/nsd/INsdManager.aidl", "core/java/android/nfc/IAppCallback.aidl", @@ -551,6 +552,7 @@ java_defaults { "telephony/java/com/android/internal/telephony/IOnSubscriptionsChangedListener.aidl", "telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl", "telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl", + "telephony/java/com/android/internal/telephony/ISetOpportunisticDataCallback.aidl", "telephony/java/com/android/internal/telephony/ISms.aidl", "telephony/java/com/android/internal/telephony/ISub.aidl", "telephony/java/com/android/internal/telephony/IOns.aidl", @@ -768,6 +770,7 @@ java_library_host { // specified on the build command line. java_library { name: "framework-atb-backward-compatibility", + installable: true, srcs: [ "core/java/android/content/pm/AndroidTestBaseUpdater.java", ], @@ -1047,6 +1050,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", @@ -1188,10 +1192,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", ], @@ -1249,10 +1250,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, @@ -1686,3 +1684,11 @@ droidstubs { }, }, } + +// Creates an index of AIDL methods; used for adding UnsupportedAppUsage +// annotations to private apis +aidl_mapping { + name: "framework-aidl-mappings", + srcs: [":framework-defaults"], + output: "framework-aidl-mappings.txt" +}
\ No newline at end of file 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 172140fd653f..55f885cdf7af 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); @@ -8389,9 +8390,9 @@ package android.bluetooth { } public final class BluetoothHearingAid implements android.bluetooth.BluetoothProfile { - method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices(); - method public int getConnectionState(android.bluetooth.BluetoothDevice); - method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]); + method @NonNull public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices(); + method public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice); + method @NonNull public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(@NonNull int[]); field public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.hearingaid.profile.action.CONNECTION_STATE_CHANGED"; } @@ -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); } @@ -29192,10 +29194,10 @@ package android.nfc.cardemulation { method public boolean isDefaultServiceForCategory(android.content.ComponentName, String); method public boolean registerAidsForService(android.content.ComponentName, String, java.util.List<java.lang.String>); method public boolean removeAidsForService(android.content.ComponentName, String); - method public boolean setOffHostForService(android.content.ComponentName, String); + method public boolean setOffHostForService(@NonNull android.content.ComponentName, @NonNull String); method public boolean setPreferredService(android.app.Activity, android.content.ComponentName); method public boolean supportsAidPrefixRegistration(); - method public boolean unsetOffHostForService(android.content.ComponentName); + method public boolean unsetOffHostForService(@NonNull android.content.ComponentName); method public boolean unsetPreferredService(android.app.Activity); field public static final String ACTION_CHANGE_DEFAULT = "android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT"; field public static final String CATEGORY_OTHER = "other"; @@ -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 { @@ -41733,8 +41736,9 @@ package android.telecom { } public final class PhoneAccountSuggestion implements android.os.Parcelable { + ctor public PhoneAccountSuggestion(@NonNull android.telecom.PhoneAccountHandle, int, boolean); 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 +41892,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); @@ -42266,6 +42270,7 @@ package android.telephony { field public static final String KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL = "support_pause_ims_video_calls_bool"; field public static final String KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL = "support_swap_after_merge_bool"; field public static final String KEY_TREAT_DOWNGRADED_VIDEO_CALLS_AS_VIDEO_CALLS_BOOL = "treat_downgraded_video_calls_as_video_calls_bool"; + field public static final String KEY_TTY_SUPPORTED_BOOL = "tty_supported_bool"; field public static final String KEY_USE_HFA_FOR_PROVISIONING_BOOL = "use_hfa_for_provisioning_bool"; field public static final String KEY_USE_OTASP_FOR_PROVISIONING_BOOL = "use_otasp_for_provisioning_bool"; field public static final String KEY_USE_RCS_PRESENCE_BOOL = "use_rcs_presence_bool"; @@ -42333,10 +42338,10 @@ package android.telephony { } public final class CellIdentityNr extends android.telephony.CellIdentity { - method public int getChannelNumber(); method public String getMccString(); method public String getMncString(); method public long getNci(); + method public int getNrarfcn(); method public int getPci(); method public int getTac(); method public void writeToParcel(android.os.Parcel, int); @@ -42380,6 +42385,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 { @@ -42555,7 +42561,7 @@ package android.telephony { public class MbmsGroupCallSession implements java.lang.AutoCloseable { method public void close(); method @Nullable public static android.telephony.MbmsGroupCallSession create(@NonNull android.content.Context, int, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsGroupCallSessionCallback); - method public static android.telephony.MbmsGroupCallSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsGroupCallSessionCallback); + method @Nullable public static android.telephony.MbmsGroupCallSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsGroupCallSessionCallback); method @Nullable public android.telephony.mbms.GroupCall startGroupCall(long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.GroupCallCallback); } @@ -42683,6 +42689,7 @@ package android.telephony { public class PhoneStateListener { ctor public PhoneStateListener(); ctor public PhoneStateListener(@NonNull java.util.concurrent.Executor); + method public void onActiveDataSubscriptionIdChanged(int); method public void onCallForwardingIndicatorChanged(boolean); method public void onCallStateChanged(int, String); method public void onCellInfoChanged(java.util.List<android.telephony.CellInfo>); @@ -42695,6 +42702,7 @@ package android.telephony { method @Deprecated public void onSignalStrengthChanged(int); method public void onSignalStrengthsChanged(android.telephony.SignalStrength); method public void onUserMobileDataStateChanged(boolean); + field public static final int LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE = 4194304; // 0x400000 field public static final int LISTEN_CALL_FORWARDING_INDICATOR = 8; // 0x8 field public static final int LISTEN_CALL_STATE = 32; // 0x20 field public static final int LISTEN_CELL_INFO = 1024; // 0x400 @@ -42723,7 +42731,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 +42768,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(); @@ -42913,9 +42922,9 @@ package android.telephony { method public String getIccId(); method public int getIconTint(); method @Deprecated public int getMcc(); - method public String getMccString(); + method @Nullable public String getMccString(); method @Deprecated public int getMnc(); - method public String getMncString(); + method @Nullable public String getMncString(); method public String getNumber(); method public int getSimSlotIndex(); method public int getSubscriptionId(); @@ -43038,8 +43047,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 +43075,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 +43096,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(); @@ -43189,6 +43199,9 @@ package android.telephony { field public static final int PHONE_TYPE_GSM = 1; // 0x1 field public static final int PHONE_TYPE_NONE = 0; // 0x0 field public static final int PHONE_TYPE_SIP = 3; // 0x3 + field public static final int SET_OPPORTUNISTIC_SUB_INVALID_PARAMETER = 2; // 0x2 + field public static final int SET_OPPORTUNISTIC_SUB_SUCCESS = 0; // 0x0 + field public static final int SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED = 1; // 0x1 field public static final int SIM_STATE_ABSENT = 1; // 0x1 field public static final int SIM_STATE_CARD_IO_ERROR = 8; // 0x8 field public static final int SIM_STATE_CARD_RESTRICTED = 9; // 0x9 @@ -43234,13 +43247,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 +43371,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 } @@ -43369,7 +43383,7 @@ package android.telephony.data { method public android.telephony.data.ApnSetting.Builder setApnTypeBitmask(int); method public android.telephony.data.ApnSetting.Builder setAuthType(int); method public android.telephony.data.ApnSetting.Builder setCarrierEnabled(boolean); - method public android.telephony.data.ApnSetting.Builder setCarrierId(int); + method @NonNull public android.telephony.data.ApnSetting.Builder setCarrierId(int); method public android.telephony.data.ApnSetting.Builder setEntryName(String); method @Deprecated public android.telephony.data.ApnSetting.Builder setMmsProxyAddress(java.net.InetAddress); method public android.telephony.data.ApnSetting.Builder setMmsProxyAddress(String); @@ -43447,7 +43461,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,483 +43569,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 final class RcsEventQueryResult implements android.os.Parcelable { - method public int describeContents(); - method public android.telephony.ims.RcsQueryContinuationToken getContinuationToken(); - method public java.util.List<android.telephony.ims.RcsEvent> getEvents(); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsEventQueryResult> CREATOR; - } - - 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 implements android.os.Parcelable { - ctor public RcsGroupThreadIconChangedEvent(long, @NonNull android.telephony.ims.RcsGroupThread, @NonNull android.telephony.ims.RcsParticipant, @Nullable android.net.Uri); - method public int describeContents(); - method @Nullable public android.net.Uri getNewIcon(); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsGroupThreadIconChangedEvent> CREATOR; - } - - public final class RcsGroupThreadNameChangedEvent extends android.telephony.ims.RcsGroupThreadEvent implements android.os.Parcelable { - ctor public RcsGroupThreadNameChangedEvent(long, @NonNull android.telephony.ims.RcsGroupThread, @NonNull android.telephony.ims.RcsParticipant, @Nullable String); - method public int describeContents(); - method @Nullable public String getNewName(); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsGroupThreadNameChangedEvent> CREATOR; - } - - public final class RcsGroupThreadParticipantJoinedEvent extends android.telephony.ims.RcsGroupThreadEvent implements android.os.Parcelable { - ctor public RcsGroupThreadParticipantJoinedEvent(long, @NonNull android.telephony.ims.RcsGroupThread, @NonNull android.telephony.ims.RcsParticipant, @NonNull android.telephony.ims.RcsParticipant); - method public int describeContents(); - method public android.telephony.ims.RcsParticipant getJoinedParticipant(); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsGroupThreadParticipantJoinedEvent> CREATOR; - } - - public final class RcsGroupThreadParticipantLeftEvent extends android.telephony.ims.RcsGroupThreadEvent implements android.os.Parcelable { - ctor public RcsGroupThreadParticipantLeftEvent(long, @NonNull android.telephony.ims.RcsGroupThread, @NonNull android.telephony.ims.RcsParticipant, @NonNull android.telephony.ims.RcsParticipant); - method public int describeContents(); - method @NonNull public android.telephony.ims.RcsParticipant getLeavingParticipantId(); - method public void persist() throws android.telephony.ims.RcsMessageStoreException; - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsGroupThreadParticipantLeftEvent> CREATOR; - } - - 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 implements android.os.Parcelable { - ctor public RcsParticipantAliasChangedEvent(long, @NonNull android.telephony.ims.RcsParticipant, @Nullable String); - method public int describeContents(); - method @Nullable public String getNewAlias(); - method @NonNull public android.telephony.ims.RcsParticipant getParticipantId(); - method public void writeToParcel(android.os.Parcel, int); - field public static final android.os.Parcelable.Creator<android.telephony.ims.RcsParticipantAliasChangedEvent> CREATOR; - } - - 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 { @@ -55760,7 +55297,7 @@ package dalvik.system { public final class DelegateLastClassLoader extends dalvik.system.PathClassLoader { ctor public DelegateLastClassLoader(String, ClassLoader); ctor public DelegateLastClassLoader(String, String, ClassLoader); - ctor public DelegateLastClassLoader(String, String, ClassLoader, boolean); + ctor public DelegateLastClassLoader(@NonNull String, @Nullable String, @Nullable ClassLoader, boolean); } public class DexClassLoader extends dalvik.system.BaseDexClassLoader { diff --git a/api/removed.txt b/api/removed.txt index 72202ad9712a..d6169cbd883a 100644 --- a/api/removed.txt +++ b/api/removed.txt @@ -304,11 +304,17 @@ package android.media.tv { package android.net { public class ConnectivityManager { + method @Deprecated public void getLatestTetheringEntitlementValue(int, boolean, @NonNull android.net.ConnectivityManager.TetheringEntitlementValueListener, @Nullable android.os.Handler); method @Deprecated public boolean requestRouteToHost(int, int); method @Deprecated public int startUsingNetworkFeature(int, String); method @Deprecated public int stopUsingNetworkFeature(int, String); } + @Deprecated public abstract static class ConnectivityManager.TetheringEntitlementValueListener { + ctor public ConnectivityManager.TetheringEntitlementValueListener(); + method public void onEntitlementResult(int); + } + @Deprecated public class NetworkBadging { method @NonNull public static android.graphics.drawable.Drawable getWifiIcon(@IntRange(from=0, to=4) int, int, @Nullable android.content.res.Resources.Theme); field public static final int BADGING_4K = 30; // 0x1e diff --git a/api/system-current.txt b/api/system-current.txt index 9c45fb4ee5c4..24df5f1ecb16 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3098,7 +3098,7 @@ package android.net { method @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createSocketKeepalive(@NonNull android.net.Network, @NonNull java.net.Socket, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback); method public boolean getAvoidBadWifi(); method @RequiresPermission(android.Manifest.permission.LOCAL_MAC_ADDRESS) public String getCaptivePortalServerUrl(); - method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementValue(int, boolean, @NonNull android.net.ConnectivityManager.TetheringEntitlementValueListener, @Nullable android.os.Handler); + method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEntitlementResultListener); method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported(); method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void setAirplaneMode(boolean); method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public void startCaptivePortalApp(android.net.Network, android.os.Bundle); @@ -3121,8 +3121,7 @@ package android.net { method public void onTetheringStarted(); } - public abstract static class ConnectivityManager.TetheringEntitlementValueListener { - ctor public ConnectivityManager.TetheringEntitlementValueListener(); + public static interface ConnectivityManager.OnTetheringEntitlementResultListener { method public void onEntitlementResult(int); } @@ -3133,8 +3132,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(); @@ -3516,19 +3515,16 @@ package android.net.metrics { package android.net.util { public class SocketUtils { - method public static void addArpEntry(java.net.Inet4Address, android.net.MacAddress, String, java.io.FileDescriptor) throws java.io.IOException; - method public static void attachControlPacketFilter(java.io.FileDescriptor, int) throws java.net.SocketException; - method public static void attachDhcpFilter(java.io.FileDescriptor) throws java.net.SocketException; - method public static void attachRaFilter(java.io.FileDescriptor, int) throws java.net.SocketException; - method public static void bindSocket(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException; - method public static void bindSocketToInterface(java.io.FileDescriptor, String) throws android.system.ErrnoException; - method public static void closeSocket(java.io.FileDescriptor) throws java.io.IOException; - method public static void connectSocket(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException; + method public static void addArpEntry(@NonNull java.net.Inet4Address, @NonNull android.net.MacAddress, @NonNull String, @NonNull java.io.FileDescriptor) throws java.io.IOException; + method public static void attachControlPacketFilter(@NonNull java.io.FileDescriptor, int) throws java.net.SocketException; + method public static void attachDhcpFilter(@NonNull java.io.FileDescriptor) throws java.net.SocketException; + method public static void attachRaFilter(@NonNull java.io.FileDescriptor, int) throws java.net.SocketException; + method public static void bindSocketToInterface(@NonNull java.io.FileDescriptor, @NonNull String) throws android.system.ErrnoException; + method public static void closeSocket(@Nullable java.io.FileDescriptor) throws java.io.IOException; method public static java.net.SocketAddress makeNetlinkSocketAddress(int, int); method public static java.net.SocketAddress makePacketSocketAddress(short, int); - method public static java.net.SocketAddress makePacketSocketAddress(int, byte[]); - method public static void sendTo(java.io.FileDescriptor, byte[], int, int, int, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException; - method public static void setSocketTimeValueOption(java.io.FileDescriptor, int, int, long) throws android.system.ErrnoException; + method public static java.net.SocketAddress makePacketSocketAddress(int, @NonNull byte[]); + method public static void setSocketTimeValueOption(@NonNull java.io.FileDescriptor, int, int, long) throws android.system.ErrnoException; } } @@ -4015,6 +4011,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 +4096,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 +4116,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 +4127,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 +4152,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 +4203,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 +4651,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 +4860,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 +4944,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"; @@ -5408,10 +5409,6 @@ package android.telecom { field public static final int CAPABILITY_MULTI_USER = 32; // 0x20 } - public final class PhoneAccountSuggestion implements android.os.Parcelable { - ctor public PhoneAccountSuggestion(android.telecom.PhoneAccountHandle, int, boolean); - } - public class PhoneAccountSuggestionService extends android.app.Service { ctor public PhoneAccountSuggestionService(); method public void onAccountSuggestionRequest(@NonNull String); @@ -5487,8 +5484,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 +5505,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 +5547,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 +5562,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 +5914,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 +6023,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 +6053,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 +6108,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 +6153,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 +6161,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 +6259,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 @@ -6286,18 +6306,19 @@ package android.telephony { method public void requestEmbeddedSubscriptionInfoListRefresh(int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultDataSubId(int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultSmsSubId(int); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @NonNull java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public 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 +6356,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 +6372,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 +6391,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 +6436,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 +6488,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 +6496,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 +6516,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 +6557,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 +6570,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 +6593,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 +6601,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 +6675,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 +6843,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 +6868,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); @@ -6882,7 +6909,7 @@ package android.telephony.ims { public class ImsException extends java.lang.Exception { ctor public ImsException(@Nullable String); ctor public ImsException(@Nullable String, int); - ctor public ImsException(@Nullable String, int, Throwable); + ctor public ImsException(@Nullable String, int, @Nullable Throwable); method public int getCode(); field public static final int CODE_ERROR_SERVICE_UNAVAILABLE = 1; // 0x1 field public static final int CODE_ERROR_UNSPECIFIED = 0; // 0x0 @@ -6890,13 +6917,13 @@ package android.telephony.ims { } public final class ImsExternalCallState implements android.os.Parcelable { - ctor public ImsExternalCallState(String, android.net.Uri, android.net.Uri, boolean, int, int, boolean); + ctor public ImsExternalCallState(@NonNull String, @NonNull android.net.Uri, @Nullable android.net.Uri, boolean, int, int, boolean); method public int describeContents(); - method public android.net.Uri getAddress(); + method @NonNull public android.net.Uri getAddress(); method public int getCallId(); method public int getCallState(); method public int getCallType(); - method public android.net.Uri getLocalAddress(); + method @Nullable public android.net.Uri getLocalAddress(); method public boolean isCallHeld(); method public boolean isCallPullable(); method public void writeToParcel(android.os.Parcel, int); @@ -6906,7 +6933,7 @@ package android.telephony.ims { } public class ImsMmTelManager { - method public static android.telephony.ims.ImsMmTelManager createForSubscriptionId(int); + method @NonNull public static android.telephony.ims.ImsMmTelManager createForSubscriptionId(int); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getVoWiFiModeSetting(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getVoWiFiRoamingModeSetting(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAdvancedCallingSettingEnabled(); @@ -6915,16 +6942,16 @@ package android.telephony.ims { method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isVoWiFiRoamingSettingEnabled(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isVoWiFiSettingEnabled(); 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 registerImsRegistrationCallback(@NonNull 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 @@ -6934,15 +6961,15 @@ package android.telephony.ims { public static class ImsMmTelManager.CapabilityCallback { ctor public ImsMmTelManager.CapabilityCallback(); - method public void onCapabilitiesStatusChanged(android.telephony.ims.feature.MmTelFeature.MmTelCapabilities); + method public void onCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.MmTelFeature.MmTelCapabilities); } 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 onTechnologyChangeFailed(int, @Nullable android.telephony.ims.ImsReasonInfo); + method public void onUnregistered(@Nullable android.telephony.ims.ImsReasonInfo); } public final class ImsReasonInfo implements android.os.Parcelable { @@ -7145,12 +7172,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 +7237,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 +7250,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 +7271,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 +7286,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 @@ -7351,14 +7378,14 @@ package android.telephony.ims { } public class ProvisioningManager { - method public static android.telephony.ims.ProvisioningManager createForSubscriptionId(int); + method @NonNull public static android.telephony.ims.ProvisioningManager createForSubscriptionId(int); method @WorkerThread @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getProvisioningIntValue(int); - method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean getProvisioningStatusForCapability(@android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.MmTelCapability int, int); - method @WorkerThread @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getProvisioningStringValue(int); - method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.Callback) throws android.telephony.ims.ImsException; + method @WorkerThread @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean getProvisioningStatusForCapability(@android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.MmTelCapability int, int); + method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public String getProvisioningStringValue(int); + method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.Callback) throws android.telephony.ims.ImsException; method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningIntValue(int, int); - method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setProvisioningStatusForCapability(@android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.MmTelCapability int, int, boolean); - method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningStringValue(int, String); + method @WorkerThread @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setProvisioningStatusForCapability(@android.telephony.ims.feature.MmTelFeature.MmTelCapabilities.MmTelCapability int, int, boolean); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningStringValue(int, @NonNull String); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterProvisioningChangedCallback(@NonNull android.telephony.ims.ProvisioningManager.Callback); field public static final int KEY_VOICE_OVER_WIFI_MODE_OVERRIDE = 27; // 0x1b field public static final int KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE = 26; // 0x1a @@ -7371,7 +7398,7 @@ package android.telephony.ims { public static class ProvisioningManager.Callback { ctor public ProvisioningManager.Callback(); method public void onProvisioningIntChanged(int, int); - method public void onProvisioningStringChanged(int, String); + method public void onProvisioningStringChanged(int, @NonNull String); } } @@ -7692,12 +7719,12 @@ 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 { diff --git a/api/test-current.txt b/api/test-current.txt index c9d176979a65..055066337da5 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(); @@ -701,6 +703,21 @@ package android.net { field public static final android.os.Parcelable.Creator<android.net.StaticIpConfiguration> CREATOR; } + public final class TestNetworkInterface implements android.os.Parcelable { + ctor public TestNetworkInterface(android.os.ParcelFileDescriptor, String); + method public int describeContents(); + method public android.os.ParcelFileDescriptor getFileDescriptor(); + method public String getInterfaceName(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.net.TestNetworkInterface> CREATOR; + } + + public class TestNetworkManager { + method public android.net.TestNetworkInterface createTunInterface(@NonNull android.net.LinkAddress[]); + method public void setupTestNetwork(@NonNull String, @NonNull android.os.IBinder); + method public void teardownTestNetwork(@NonNull android.net.Network); + } + public class TrafficStats { method public static long getLoopbackRxBytes(); method public static long getLoopbackRxPackets(); @@ -915,19 +932,16 @@ package android.net.metrics { package android.net.util { public class SocketUtils { - method public static void addArpEntry(java.net.Inet4Address, android.net.MacAddress, String, java.io.FileDescriptor) throws java.io.IOException; - method public static void attachControlPacketFilter(java.io.FileDescriptor, int) throws java.net.SocketException; - method public static void attachDhcpFilter(java.io.FileDescriptor) throws java.net.SocketException; - method public static void attachRaFilter(java.io.FileDescriptor, int) throws java.net.SocketException; - method public static void bindSocket(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException; - method public static void bindSocketToInterface(java.io.FileDescriptor, String) throws android.system.ErrnoException; - method public static void closeSocket(java.io.FileDescriptor) throws java.io.IOException; - method public static void connectSocket(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException; + method public static void addArpEntry(@NonNull java.net.Inet4Address, @NonNull android.net.MacAddress, @NonNull String, @NonNull java.io.FileDescriptor) throws java.io.IOException; + method public static void attachControlPacketFilter(@NonNull java.io.FileDescriptor, int) throws java.net.SocketException; + method public static void attachDhcpFilter(@NonNull java.io.FileDescriptor) throws java.net.SocketException; + method public static void attachRaFilter(@NonNull java.io.FileDescriptor, int) throws java.net.SocketException; + method public static void bindSocketToInterface(@NonNull java.io.FileDescriptor, @NonNull String) throws android.system.ErrnoException; + method public static void closeSocket(@Nullable java.io.FileDescriptor) throws java.io.IOException; method public static java.net.SocketAddress makeNetlinkSocketAddress(int, int); method public static java.net.SocketAddress makePacketSocketAddress(short, int); - method public static java.net.SocketAddress makePacketSocketAddress(int, byte[]); - method public static void sendTo(java.io.FileDescriptor, byte[], int, int, int, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException; - method public static void setSocketTimeValueOption(java.io.FileDescriptor, int, int, long) throws android.system.ErrnoException; + method public static java.net.SocketAddress makePacketSocketAddress(int, @NonNull byte[]); + method public static void setSocketTimeValueOption(@NonNull java.io.FileDescriptor, int, int, long) throws android.system.ErrnoException; } } @@ -993,7 +1007,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 +1027,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 +1038,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 +1063,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 +1114,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 +1239,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 +1452,8 @@ package android.telecom { ctor public CallAudioState(boolean, int, int, @Nullable android.bluetooth.BluetoothDevice, @NonNull java.util.Collection<android.bluetooth.BluetoothDevice>); } - public final class PhoneAccountSuggestion implements android.os.Parcelable { - ctor public PhoneAccountSuggestion(android.telecom.PhoneAccountHandle, int, boolean); + public abstract class Conference extends android.telecom.Conferenceable { + method public android.telecom.Connection getPrimaryConnection(); } public class PhoneAccountSuggestionService extends android.app.Service { @@ -1449,6 +1464,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 { @@ -1479,6 +1504,7 @@ package android.telephony { public class TelephonyManager { method public int getCarrierIdListVersion(); + method public android.util.Pair<java.lang.Integer,java.lang.Integer> getRadioHalVersion(); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void refreshUiccProfile(); method public void setCarrierTestOverride(String, String, String, String, String, String, String); field public static final int UNKNOWN_CARRIER_ID_LIST_VERSION = -1; // 0xffffffff @@ -1541,12 +1567,12 @@ 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 { diff --git a/cmds/bootanimation/bootanim.rc b/cmds/bootanimation/bootanim.rc index 469c9646a4aa..3666d6af29f5 100644 --- a/cmds/bootanimation/bootanim.rc +++ b/cmds/bootanimation/bootanim.rc @@ -2,6 +2,9 @@ service bootanim /system/bin/bootanimation class core animation user graphics group graphics audio + # bootanimation depends on libandroidicu in the Runtime APEX. + # TODO(b/124939955): Remove this dependency on libandroidicu + updatable disabled oneshot writepid /dev/stune/top-app/tasks 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/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index e7f1caf26932..e7adba4d194a 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -71,6 +71,9 @@ const int FIELD_ID_STRINGS = 9; #define STATS_DATA_DIR "/data/misc/stats-data" +// Cool down period for writing data to disk to avoid overwriting files. +#define WRITE_DATA_COOL_DOWN_SEC 5 + StatsLogProcessor::StatsLogProcessor(const sp<UidMap>& uidMap, const sp<AlarmMonitor>& anomalyAlarmMonitor, const sp<AlarmMonitor>& periodicAlarmMonitor, @@ -526,6 +529,16 @@ void StatsLogProcessor::WriteDataToDiskLocked(const ConfigKey& key, void StatsLogProcessor::WriteDataToDiskLocked(const DumpReportReason dumpReportReason) { const int64_t timeNs = getElapsedRealtimeNs(); + // Do not write to disk if we already have in the last few seconds. + // This is to avoid overwriting files that would have the same name if we + // write twice in the same second. + if (static_cast<unsigned long long> (timeNs) < + mLastWriteTimeNs + WRITE_DATA_COOL_DOWN_SEC * NS_PER_SEC) { + ALOGI("Statsd skipping writing data to disk. Already wrote data in last %d seconds", + WRITE_DATA_COOL_DOWN_SEC); + return; + } + mLastWriteTimeNs = timeNs; for (auto& pair : mMetricsManagers) { WriteDataToDiskLocked(pair.first, timeNs, dumpReportReason); } diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h index b175b3c544b5..86eb855825aa 100644 --- a/cmds/statsd/src/StatsLogProcessor.h +++ b/cmds/statsd/src/StatsLogProcessor.h @@ -40,7 +40,8 @@ enum DumpReportReason { GET_DATA_CALLED = 4, ADB_DUMP = 5, CONFIG_RESET = 6, - STATSCOMPANION_DIED = 7 + STATSCOMPANION_DIED = 7, + TERMINATION_SIGNAL_RECEIVED = 8 }; class StatsLogProcessor : public ConfigListener { @@ -183,6 +184,9 @@ private: long mLastPullerCacheClearTimeSec = 0; + // Last time we wrote data to disk. + int64_t mLastWriteTimeNs = 0; + #ifdef VERY_VERBOSE_PRINTING bool mPrintAllLogs = false; #endif diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index 10c04f67ca05..cb48a716231f 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -881,6 +881,13 @@ void StatsService::Startup() { mConfigManager->Startup(); } +void StatsService::Terminate() { + ALOGI("StatsService::Terminating"); + if (mProcessor != nullptr) { + mProcessor->WriteDataToDisk(TERMINATION_SIGNAL_RECEIVED); + } +} + void StatsService::OnLogEvent(LogEvent* event, bool reconnectionStarts) { mProcessor->OnLogEvent(event, reconnectionStarts); } diff --git a/cmds/statsd/src/StatsService.h b/cmds/statsd/src/StatsService.h index b3a477645b73..d8aab88ce9f9 100644 --- a/cmds/statsd/src/StatsService.h +++ b/cmds/statsd/src/StatsService.h @@ -74,6 +74,11 @@ public: void Startup(); /** + * Called when terminiation signal received. + */ + void Terminate(); + + /** * Called by LogReader when there's a log event to process. */ virtual void OnLogEvent(LogEvent* event, bool reconnectionStarts); diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 1d629da2f250..47eccdbc8c1f 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -131,6 +131,7 @@ message Atom { PhoneServiceStateChanged phone_service_state_changed = 94; PhoneStateChanged phone_state_changed = 95; LowMemReported low_mem_reported = 81; + ThermalThrottlingStateChanged thermal_throttling = 86; NetworkDnsEventReported network_dns_event_reported = 116; DataStallEvent data_stall_event = 121; BluetoothLinkLayerConnectionEvent bluetooth_link_layer_connection_event = 125; @@ -239,6 +240,26 @@ message AttributionNode { */ /** + * Logs when the Thermal service HAL notifies the throttling start/stop events. + * + * Logged from: + * frameworks/base/services/core/java/com/android/server/stats/StatsCompanionService.java + */ +message ThermalThrottlingStateChanged { + optional android.os.TemperatureTypeEnum sensor_type = 1; + + enum State { + UNKNOWN = 0; + START = 1; + STOP = 2; + } + + optional State state = 2; + + optional float temperature = 3; +} + +/** * Logs when the screen state changes. * * Logged from: @@ -2389,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/cmds/statsd/src/main.cpp b/cmds/statsd/src/main.cpp index e8904c625325..58bbd96af7cf 100644 --- a/cmds/statsd/src/main.cpp +++ b/cmds/statsd/src/main.cpp @@ -96,6 +96,27 @@ static status_t start_log_reader_thread(const sp<StatsService>& service) { return NO_ERROR; } + +sp<StatsService> gStatsService = nullptr; + +void sigHandler(int sig) { + if (gStatsService != nullptr) { + gStatsService->Terminate(); + } +} + +void registerSigHandler() +{ + struct sigaction sa; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sa.sa_handler = sigHandler; + sigaction(SIGHUP, &sa, nullptr); + sigaction(SIGINT, &sa, nullptr); + sigaction(SIGQUIT, &sa, nullptr); + sigaction(SIGTERM, &sa, nullptr); +} + int main(int /*argc*/, char** /*argv*/) { // Set up the looper sp<Looper> looper(Looper::prepare(0 /* opts */)); @@ -108,21 +129,24 @@ int main(int /*argc*/, char** /*argv*/) { IPCThreadState::self()->disableBackgroundScheduling(true); // Create the service - sp<StatsService> service = new StatsService(looper); - if (defaultServiceManager()->addService(String16("stats"), service) != 0) { + gStatsService = new StatsService(looper); + if (defaultServiceManager()->addService(String16("stats"), gStatsService) != 0) { ALOGE("Failed to add service"); return -1; } - service->sayHiToStatsCompanion(); - service->Startup(); + registerSigHandler(); + + gStatsService->sayHiToStatsCompanion(); + + gStatsService->Startup(); - sp<StatsSocketListener> socketListener = new StatsSocketListener(service); + sp<StatsSocketListener> socketListener = new StatsSocketListener(gStatsService); if (kUseLogd) { ALOGI("using logd"); // Start the log reader thread - status_t err = start_log_reader_thread(service); + status_t err = start_log_reader_thread(gStatsService); if (err != NO_ERROR) { return 1; } diff --git a/cmds/statsd/src/stats_log.proto b/cmds/statsd/src/stats_log.proto index 2fe17daf7542..1c70d88f6cf3 100644 --- a/cmds/statsd/src/stats_log.proto +++ b/cmds/statsd/src/stats_log.proto @@ -265,6 +265,7 @@ message ConfigMetricsReport { ADB_DUMP = 5; CONFIG_RESET = 6; STATSCOMPANION_DIED = 7; + TERMINATION_SIGNAL_RECEIVED = 8; } optional DumpReportReason dump_report_reason = 8; diff --git a/config/hiddenapi-greylist-max-o.txt b/config/hiddenapi-greylist-max-o.txt index d9c1cd0313fc..54b518ab38bf 100644 --- a/config/hiddenapi-greylist-max-o.txt +++ b/config/hiddenapi-greylist-max-o.txt @@ -95641,11 +95641,11 @@ Lcom/android/internal/os/KernelCpuProcReader;->ERROR_THRESHOLD:I Lcom/android/internal/os/KernelCpuProcReader;->getActiveTimeReaderInstance()Lcom/android/internal/os/KernelCpuProcReader; Lcom/android/internal/os/KernelCpuProcReader;->getClusterTimeReaderInstance()Lcom/android/internal/os/KernelCpuProcReader; Lcom/android/internal/os/KernelCpuProcReader;->getFreqTimeReaderInstance()Lcom/android/internal/os/KernelCpuProcReader; -Lcom/android/internal/os/KernelCpuProcReader;->INITIAL_BUFFER_SIZE:I Lcom/android/internal/os/KernelCpuProcReader;->mActiveTimeReader:Lcom/android/internal/os/KernelCpuProcReader; Lcom/android/internal/os/KernelCpuProcReader;->MAX_BUFFER_SIZE:I -Lcom/android/internal/os/KernelCpuProcReader;->mBuffer:Ljava/nio/ByteBuffer; +Lcom/android/internal/os/KernelCpuProcReader;->mBuffer:[B Lcom/android/internal/os/KernelCpuProcReader;->mClusterTimeReader:Lcom/android/internal/os/KernelCpuProcReader; +Lcom/android/internal/os/KernelCpuProcReader;->mContentSize:I Lcom/android/internal/os/KernelCpuProcReader;->mErrors:I Lcom/android/internal/os/KernelCpuProcReader;->mFreqTimeReader:Lcom/android/internal/os/KernelCpuProcReader; Lcom/android/internal/os/KernelCpuProcReader;->mLastReadTime:J @@ -95655,7 +95655,6 @@ Lcom/android/internal/os/KernelCpuProcReader;->PROC_UID_ACTIVE_TIME:Ljava/lang/S Lcom/android/internal/os/KernelCpuProcReader;->PROC_UID_CLUSTER_TIME:Ljava/lang/String; Lcom/android/internal/os/KernelCpuProcReader;->PROC_UID_FREQ_TIME:Ljava/lang/String; Lcom/android/internal/os/KernelCpuProcReader;->readBytes()Ljava/nio/ByteBuffer; -Lcom/android/internal/os/KernelCpuProcReader;->resize()Z Lcom/android/internal/os/KernelCpuProcReader;->setThrottleInterval(J)V Lcom/android/internal/os/KernelCpuProcReader;->TAG:Ljava/lang/String; Lcom/android/internal/os/KernelCpuSpeedReader; diff --git a/config/hiddenapi-greylist.txt b/config/hiddenapi-greylist.txt index e166c31d578a..36936d10a3dd 100644 --- a/config/hiddenapi-greylist.txt +++ b/config/hiddenapi-greylist.txt @@ -5,21 +5,10 @@ Landroid/accounts/IAccountAuthenticator$Stub$Proxy;-><init>(Landroid/os/IBinder; Landroid/accounts/IAccountAuthenticator$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/accounts/IAccountAuthenticator$Stub;-><init>()V Landroid/accounts/IAccountAuthenticator$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountAuthenticator; -Landroid/accounts/IAccountAuthenticator;->addAccount(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)V -Landroid/accounts/IAccountAuthenticator;->confirmCredentials(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)V -Landroid/accounts/IAccountAuthenticator;->editProperties(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;)V -Landroid/accounts/IAccountAuthenticator;->getAccountRemovalAllowed(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;)V -Landroid/accounts/IAccountAuthenticator;->getAuthToken(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V -Landroid/accounts/IAccountAuthenticator;->getAuthTokenLabel(Landroid/accounts/IAccountAuthenticatorResponse;Ljava/lang/String;)V -Landroid/accounts/IAccountAuthenticator;->hasFeatures(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;[Ljava/lang/String;)V -Landroid/accounts/IAccountAuthenticator;->updateCredentials(Landroid/accounts/IAccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V Landroid/accounts/IAccountAuthenticatorResponse$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/accounts/IAccountAuthenticatorResponse$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/accounts/IAccountAuthenticatorResponse$Stub;-><init>()V Landroid/accounts/IAccountAuthenticatorResponse$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountAuthenticatorResponse; -Landroid/accounts/IAccountAuthenticatorResponse;->onError(ILjava/lang/String;)V -Landroid/accounts/IAccountAuthenticatorResponse;->onRequestContinued()V -Landroid/accounts/IAccountAuthenticatorResponse;->onResult(Landroid/os/Bundle;)V Landroid/accounts/IAccountManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/accounts/IAccountManager$Stub;-><init>()V Landroid/accounts/IAccountManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManager; @@ -27,8 +16,6 @@ Landroid/accounts/IAccountManagerResponse$Stub$Proxy;-><init>(Landroid/os/IBinde Landroid/accounts/IAccountManagerResponse$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/accounts/IAccountManagerResponse$Stub;-><init>()V Landroid/accounts/IAccountManagerResponse$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManagerResponse; -Landroid/accounts/IAccountManagerResponse;->onError(ILjava/lang/String;)V -Landroid/accounts/IAccountManagerResponse;->onResult(Landroid/os/Bundle;)V Landroid/app/ActivityManagerNative;-><init>()V Landroid/app/ActivityThread$AppBindData;-><init>()V Landroid/app/ActivityThread$CreateServiceData;-><init>()V @@ -36,21 +23,9 @@ Landroid/app/ActivityThread$H;-><init>(Landroid/app/ActivityThread;)V Landroid/app/admin/IDevicePolicyManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDevicePolicyManager; Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_packageHasActiveAdmins:I Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_removeActiveAdmin:I -Landroid/app/admin/IDevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/String;I)Z Landroid/app/backup/IBackupManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupManager; -Landroid/app/backup/IBackupManager;->acknowledgeFullBackupOrRestore(IZLjava/lang/String;Ljava/lang/String;Landroid/app/backup/IFullBackupRestoreObserver;)V -Landroid/app/backup/IBackupManager;->clearBackupData(Ljava/lang/String;Ljava/lang/String;)V -Landroid/app/backup/IBackupManager;->dataChanged(Ljava/lang/String;)V -Landroid/app/backup/IBackupManager;->getCurrentTransport()Ljava/lang/String; -Landroid/app/backup/IBackupManager;->isBackupEnabled()Z -Landroid/app/backup/IBackupManager;->isBackupServiceActive(I)Z -Landroid/app/backup/IBackupManager;->listAllTransports()[Ljava/lang/String; -Landroid/app/backup/IBackupManager;->selectBackupTransport(Ljava/lang/String;)Ljava/lang/String; -Landroid/app/backup/IBackupManager;->setAutoRestore(Z)V -Landroid/app/backup/IBackupManager;->setBackupEnabled(Z)V Landroid/app/backup/IFullBackupRestoreObserver$Stub;-><init>()V Landroid/app/backup/IRestoreObserver$Stub;-><init>()V -Landroid/app/DownloadManager;->restartDownload([J)V Landroid/app/IActivityController$Stub;-><init>()V Landroid/app/IActivityManager$Stub$Proxy;->getConfiguration()Landroid/content/res/Configuration; Landroid/app/IActivityManager$Stub$Proxy;->getLaunchedFromUid(Landroid/os/IBinder;)I @@ -62,136 +37,51 @@ Landroid/app/IActivityManager$Stub$Proxy;->setActivityController(Landroid/app/IA Landroid/app/IActivityManager$Stub$Proxy;->updatePersistentConfiguration(Landroid/content/res/Configuration;)V Landroid/app/IActivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IActivityManager; Landroid/app/IActivityManager;->bindService(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;I)I -Landroid/app/IActivityManager;->broadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I -Landroid/app/IActivityManager;->cancelRecentsAnimation(Z)V -Landroid/app/IActivityManager;->cancelTaskWindowTransition(I)V -Landroid/app/IActivityManager;->checkPermission(Ljava/lang/String;II)I -Landroid/app/IActivityManager;->closeSystemDialogs(Ljava/lang/String;)V Landroid/app/IActivityManager;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z -Landroid/app/IActivityManager;->finishHeavyWeightApp()V Landroid/app/IActivityManager;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V -Landroid/app/IActivityManager;->forceStopPackage(Ljava/lang/String;I)V -Landroid/app/IActivityManager;->getAllStackInfos()Ljava/util/List; -Landroid/app/IActivityManager;->getConfiguration()Landroid/content/res/Configuration; -Landroid/app/IActivityManager;->getCurrentUser()Landroid/content/pm/UserInfo; -Landroid/app/IActivityManager;->getFilteredTasks(III)Ljava/util/List; -Landroid/app/IActivityManager;->getIntentForIntentSender(Landroid/content/IIntentSender;)Landroid/content/Intent; Landroid/app/IActivityManager;->getIntentSender(ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender; Landroid/app/IActivityManager;->getLaunchedFromPackage(Landroid/os/IBinder;)Ljava/lang/String; Landroid/app/IActivityManager;->getLaunchedFromUid(Landroid/os/IBinder;)I -Landroid/app/IActivityManager;->getLockTaskModeState()I Landroid/app/IActivityManager;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V -Landroid/app/IActivityManager;->getPackageProcessState(Ljava/lang/String;Ljava/lang/String;)I -Landroid/app/IActivityManager;->getProcessLimit()I Landroid/app/IActivityManager;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo; Landroid/app/IActivityManager;->getProcessPss([I)[J -Landroid/app/IActivityManager;->getProviderMimeType(Landroid/net/Uri;I)Ljava/lang/String; -Landroid/app/IActivityManager;->getRecentTasks(III)Landroid/content/pm/ParceledListSlice; -Landroid/app/IActivityManager;->getRunningAppProcesses()Ljava/util/List; -Landroid/app/IActivityManager;->getServices(II)Ljava/util/List; -Landroid/app/IActivityManager;->getTaskBounds(I)Landroid/graphics/Rect; Landroid/app/IActivityManager;->getTaskForActivity(Landroid/os/IBinder;Z)I Landroid/app/IActivityManager;->getTaskSnapshot(IZ)Landroid/app/ActivityManager$TaskSnapshot; Landroid/app/IActivityManager;->handleApplicationStrictModeViolation(Landroid/os/IBinder;ILandroid/os/StrictMode$ViolationInfo;)V Landroid/app/IActivityManager;->hang(Landroid/os/IBinder;Z)V -Landroid/app/IActivityManager;->isInLockTaskMode()Z -Landroid/app/IActivityManager;->isIntentSenderAnActivity(Landroid/content/IIntentSender;)Z Landroid/app/IActivityManager;->isTopOfTask(Landroid/os/IBinder;)Z -Landroid/app/IActivityManager;->isUserRunning(II)Z -Landroid/app/IActivityManager;->killAllBackgroundProcesses()V -Landroid/app/IActivityManager;->killBackgroundProcesses(Ljava/lang/String;I)V Landroid/app/IActivityManager;->moveActivityTaskToBack(Landroid/os/IBinder;Z)Z -Landroid/app/IActivityManager;->moveTaskToFront(IILandroid/os/Bundle;)V -Landroid/app/IActivityManager;->moveTaskToStack(IIZ)V -Landroid/app/IActivityManager;->moveTopActivityToPinnedStack(ILandroid/graphics/Rect;)Z -Landroid/app/IActivityManager;->positionTaskInStack(III)V -Landroid/app/IActivityManager;->profileControl(Ljava/lang/String;IZLandroid/app/ProfilerInfo;I)Z -Landroid/app/IActivityManager;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V -Landroid/app/IActivityManager;->registerProcessObserver(Landroid/app/IProcessObserver;)V -Landroid/app/IActivityManager;->registerReceiver(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent; -Landroid/app/IActivityManager;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V -Landroid/app/IActivityManager;->registerUserSwitchObserver(Landroid/app/IUserSwitchObserver;Ljava/lang/String;)V Landroid/app/IActivityManager;->removeContentProviderExternal(Ljava/lang/String;Landroid/os/IBinder;)V -Landroid/app/IActivityManager;->removeStack(I)V -Landroid/app/IActivityManager;->removeTask(I)Z -Landroid/app/IActivityManager;->requestBugReport(I)V -Landroid/app/IActivityManager;->resizeDockedStack(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V -Landroid/app/IActivityManager;->resizeStack(ILandroid/graphics/Rect;ZZZI)V -Landroid/app/IActivityManager;->resizeTask(ILandroid/graphics/Rect;I)V -Landroid/app/IActivityManager;->restart()V -Landroid/app/IActivityManager;->resumeAppSwitches()V -Landroid/app/IActivityManager;->sendIdleJobTrigger()V Landroid/app/IActivityManager;->serviceDoneExecuting(Landroid/os/IBinder;III)V -Landroid/app/IActivityManager;->setActivityController(Landroid/app/IActivityController;Z)V -Landroid/app/IActivityManager;->setAlwaysFinish(Z)V -Landroid/app/IActivityManager;->setDebugApp(Ljava/lang/String;ZZ)V -Landroid/app/IActivityManager;->setDumpHeapDebugLimit(Ljava/lang/String;IJLjava/lang/String;)V -Landroid/app/IActivityManager;->setPackageScreenCompatMode(Ljava/lang/String;I)V Landroid/app/IActivityManager;->setProcessImportant(Landroid/os/IBinder;IZLjava/lang/String;)V -Landroid/app/IActivityManager;->setProcessLimit(I)V -Landroid/app/IActivityManager;->setProcessMemoryTrimLevel(Ljava/lang/String;II)Z Landroid/app/IActivityManager;->setRequestedOrientation(Landroid/os/IBinder;I)V -Landroid/app/IActivityManager;->setTaskResizeable(II)V -Landroid/app/IActivityManager;->shutdown(I)Z Landroid/app/IActivityManager;->startActivity(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;)I Landroid/app/IActivityManager;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;I)I -Landroid/app/IActivityManager;->startActivityFromRecents(ILandroid/os/Bundle;)I -Landroid/app/IActivityManager;->startBinderTracking()Z -Landroid/app/IActivityManager;->startInstrumentation(Landroid/content/ComponentName;Ljava/lang/String;ILandroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;ILjava/lang/String;)Z -Landroid/app/IActivityManager;->startRecentsActivity(Landroid/content/Intent;Landroid/app/IAssistDataReceiver;Landroid/view/IRecentsAnimationRunner;)V -Landroid/app/IActivityManager;->startSystemLockTaskMode(I)V -Landroid/app/IActivityManager;->startUserInBackground(I)Z -Landroid/app/IActivityManager;->stopAppSwitches()V Landroid/app/IActivityManager;->stopBinderTrackingAndDump(Landroid/os/ParcelFileDescriptor;)Z -Landroid/app/IActivityManager;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I -Landroid/app/IActivityManager;->stopUser(IZLandroid/app/IStopUserCallback;)I -Landroid/app/IActivityManager;->suppressResizeConfigChanges(Z)V -Landroid/app/IActivityManager;->switchUser(I)Z -Landroid/app/IActivityManager;->unbindService(Landroid/app/IServiceConnection;)Z -Landroid/app/IActivityManager;->unhandledBack()V -Landroid/app/IActivityManager;->unlockUser(I[B[BLandroid/os/IProgressListener;)Z -Landroid/app/IActivityManager;->unregisterProcessObserver(Landroid/app/IProcessObserver;)V -Landroid/app/IActivityManager;->unregisterReceiver(Landroid/content/IIntentReceiver;)V Landroid/app/IActivityManager;->unstableProviderDied(Landroid/os/IBinder;)V -Landroid/app/IActivityManager;->updateConfiguration(Landroid/content/res/Configuration;)Z -Landroid/app/IActivityManager;->updatePersistentConfiguration(Landroid/content/res/Configuration;)V Landroid/app/IAlarmManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/IAlarmManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IAlarmManager; Landroid/app/IAlarmManager$Stub;->TRANSACTION_remove:I Landroid/app/IAlarmManager$Stub;->TRANSACTION_set:I Landroid/app/IAlarmManager;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo; Landroid/app/IAlarmManager;->set(Ljava/lang/String;IJJJILandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;)V -Landroid/app/IAlarmManager;->setTime(J)Z Landroid/app/IApplicationThread;->scheduleBindService(Landroid/os/IBinder;Landroid/content/Intent;ZI)V Landroid/app/IApplicationThread;->scheduleCreateService(Landroid/os/IBinder;Landroid/content/pm/ServiceInfo;Landroid/content/res/CompatibilityInfo;I)V Landroid/app/IApplicationThread;->scheduleStopService(Landroid/os/IBinder;)V -Landroid/app/IApplicationThread;->scheduleTrimMemory(I)V Landroid/app/IApplicationThread;->scheduleUnbindService(Landroid/os/IBinder;Landroid/content/Intent;)V Landroid/app/IAppTask;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo; Landroid/app/IAssistDataReceiver$Stub;-><init>()V -Landroid/app/IAssistDataReceiver;->onHandleAssistData(Landroid/os/Bundle;)V -Landroid/app/IAssistDataReceiver;->onHandleAssistScreenshot(Landroid/graphics/Bitmap;)V -Landroid/app/IInputForwarder;->forwardEvent(Landroid/view/InputEvent;)Z Landroid/app/IInstrumentationWatcher$Stub;-><init>()V -Landroid/app/IInstrumentationWatcher;->instrumentationStatus(Landroid/content/ComponentName;ILandroid/os/Bundle;)V Landroid/app/INotificationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/INotificationManager$Stub$Proxy;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z Landroid/app/INotificationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/INotificationManager; Landroid/app/INotificationManager$Stub;->TRANSACTION_enqueueNotificationWithTag:I -Landroid/app/INotificationManager;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z -Landroid/app/INotificationManager;->cancelAllNotifications(Ljava/lang/String;I)V -Landroid/app/INotificationManager;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;II)V -Landroid/app/INotificationManager;->cancelToast(Ljava/lang/String;Landroid/app/ITransientNotification;)V -Landroid/app/INotificationManager;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;I)V Landroid/app/INotificationManager;->getActiveNotifications(Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification; Landroid/app/INotificationManager;->getHistoricalNotifications(Ljava/lang/String;I)[Landroid/service/notification/StatusBarNotification; -Landroid/app/INotificationManager;->getZenMode()I -Landroid/app/INotificationManager;->getZenModeConfig()Landroid/service/notification/ZenModeConfig; Landroid/app/IProcessObserver$Stub;-><init>()V Landroid/app/ISearchManager$Stub$Proxy;->getGlobalSearchActivity()Landroid/content/ComponentName; Landroid/app/ISearchManager$Stub$Proxy;->getWebSearchActivity()Landroid/content/ComponentName; Landroid/app/ISearchManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ISearchManager; -Landroid/app/ISearchManager;->getGlobalSearchActivity()Landroid/content/ComponentName; Landroid/app/IServiceConnection$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/IServiceConnection$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/IServiceConnection$Stub;-><init>()V @@ -200,49 +90,30 @@ Landroid/app/IServiceConnection;->connected(Landroid/content/ComponentName;Landr Landroid/app/IStopUserCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/IStopUserCallback$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/IStopUserCallback$Stub;-><init>()V -Landroid/app/IStopUserCallback;->userStopped(I)V Landroid/app/ITransientNotification$Stub;-><init>()V Landroid/app/ITransientNotification;->show(Landroid/os/IBinder;)V Landroid/app/IUiModeManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/IUserSwitchObserver$Stub;-><init>()V Landroid/app/IWallpaperManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IWallpaperManager; -Landroid/app/IWallpaperManager;->getHeightHint()I -Landroid/app/IWallpaperManager;->getWallpaper(Ljava/lang/String;Landroid/app/IWallpaperManagerCallback;ILandroid/os/Bundle;I)Landroid/os/ParcelFileDescriptor; -Landroid/app/IWallpaperManager;->getWallpaperInfo(I)Landroid/app/WallpaperInfo; -Landroid/app/IWallpaperManager;->getWidthHint()I -Landroid/app/IWallpaperManager;->hasNamedWallpaper(Ljava/lang/String;)Z -Landroid/app/IWallpaperManager;->setWallpaperComponent(Landroid/content/ComponentName;)V Landroid/app/IWallpaperManagerCallback$Stub;-><init>()V Landroid/app/job/IJobCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/job/IJobCallback$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/job/IJobCallback$Stub;-><init>()V Landroid/app/job/IJobCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobCallback; -Landroid/app/job/IJobCallback;->acknowledgeStartMessage(IZ)V -Landroid/app/job/IJobCallback;->acknowledgeStopMessage(IZ)V -Landroid/app/job/IJobCallback;->completeWork(II)Z -Landroid/app/job/IJobCallback;->dequeueWork(I)Landroid/app/job/JobWorkItem; -Landroid/app/job/IJobCallback;->jobFinished(IZ)V Landroid/app/job/IJobScheduler$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/job/IJobScheduler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobScheduler; Landroid/app/job/IJobService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/job/IJobService$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/job/IJobService$Stub;-><init>()V Landroid/app/job/IJobService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobService; -Landroid/app/job/IJobService;->startJob(Landroid/app/job/JobParameters;)V -Landroid/app/job/IJobService;->stopJob(Landroid/app/job/JobParameters;)V Landroid/app/PackageDeleteObserver;-><init>()V Landroid/app/PackageInstallObserver;-><init>()V -Landroid/app/ReceiverRestrictedContext;-><init>(Landroid/content/Context;)V Landroid/app/ResourcesManager$ActivityResources;-><init>()V Landroid/app/ResourcesManager;-><init>()V Landroid/app/TaskStackListener;-><init>()V Landroid/app/trust/ITrustManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/UiAutomationConnection;-><init>()V Landroid/app/usage/IUsageStatsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/usage/IUsageStatsManager; -Landroid/app/usage/IUsageStatsManager;->isAppInactive(Ljava/lang/String;I)Z -Landroid/app/usage/IUsageStatsManager;->queryConfigurationStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice; -Landroid/app/usage/IUsageStatsManager;->queryUsageStats(IJJLjava/lang/String;)Landroid/content/pm/ParceledListSlice; -Landroid/app/usage/IUsageStatsManager;->setAppInactive(Ljava/lang/String;ZI)V Landroid/app/UserSwitchObserver;-><init>()V Landroid/app/VrStateCallback;-><init>()V Landroid/bluetooth/IBluetooth$Stub$Proxy;->getAddress()Ljava/lang/String; @@ -287,22 +158,14 @@ Landroid/companion/ICompanionDeviceDiscoveryService$Stub;-><init>()V Landroid/companion/ICompanionDeviceDiscoveryServiceCallback;->onDeviceSelected(Ljava/lang/String;ILjava/lang/String;)V Landroid/companion/ICompanionDeviceDiscoveryServiceCallback;->onDeviceSelectionCancel()V Landroid/companion/IFindDeviceCallback;->onSuccess(Landroid/app/PendingIntent;)V -Landroid/content/ContentProviderProxy;->mRemote:Landroid/os/IBinder; Landroid/content/IClipboard$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/IClipboard$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IClipboard; Landroid/content/IContentService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/IContentService$Stub;-><init>()V Landroid/content/IContentService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentService; -Landroid/content/IContentService;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)V -Landroid/content/IContentService;->getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I -Landroid/content/IContentService;->getMasterSyncAutomatically()Z -Landroid/content/IContentService;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType; -Landroid/content/IContentService;->isSyncActive(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Z -Landroid/content/IContentService;->setMasterSyncAutomatically(Z)V Landroid/content/IIntentReceiver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/IIntentReceiver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/IIntentReceiver$Stub;-><init>()V -Landroid/content/IIntentReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V Landroid/content/IOnPrimaryClipChangedListener$Stub;-><init>()V Landroid/content/IOnPrimaryClipChangedListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IOnPrimaryClipChangedListener; Landroid/content/IRestrictionsManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IRestrictionsManager; @@ -310,24 +173,16 @@ Landroid/content/ISyncAdapter$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/ISyncAdapter$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/ISyncAdapter$Stub;-><init>()V Landroid/content/ISyncAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncAdapter; -Landroid/content/ISyncAdapter;->cancelSync(Landroid/content/ISyncContext;)V -Landroid/content/ISyncAdapter;->onUnsyncableAccount(Landroid/content/ISyncAdapterUnsyncableAccountCallback;)V -Landroid/content/ISyncAdapter;->startSync(Landroid/content/ISyncContext;Ljava/lang/String;Landroid/accounts/Account;Landroid/os/Bundle;)V Landroid/content/ISyncContext$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/ISyncContext$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/ISyncContext$Stub;-><init>()V Landroid/content/ISyncContext$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncContext; Landroid/content/ISyncServiceAdapter$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncServiceAdapter; -Landroid/content/ISyncServiceAdapter;->cancelSync(Landroid/content/ISyncContext;)V -Landroid/content/ISyncServiceAdapter;->startSync(Landroid/content/ISyncContext;Landroid/os/Bundle;)V Landroid/content/ISyncStatusObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/ISyncStatusObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/ISyncStatusObserver$Stub;-><init>()V Landroid/content/ISyncStatusObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/ISyncStatusObserver; -Landroid/content/ISyncStatusObserver;->onStatusChanged(I)V Landroid/content/om/IOverlayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/om/IOverlayManager; -Landroid/content/om/IOverlayManager;->getAllOverlays(I)Ljava/util/Map; -Landroid/content/om/IOverlayManager;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo; Landroid/content/pm/IPackageDataObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->onRemoveCompleted(Ljava/lang/String;Z)V @@ -335,7 +190,6 @@ Landroid/content/pm/IPackageDataObserver$Stub;-><init>()V Landroid/content/pm/IPackageDataObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDataObserver; Landroid/content/pm/IPackageDataObserver$Stub;->DESCRIPTOR:Ljava/lang/String; Landroid/content/pm/IPackageDataObserver$Stub;->TRANSACTION_onRemoveCompleted:I -Landroid/content/pm/IPackageDataObserver;->onRemoveCompleted(Ljava/lang/String;Z)V Landroid/content/pm/IPackageDeleteObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageDeleteObserver$Stub;-><init>()V Landroid/content/pm/IPackageDeleteObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDeleteObserver; @@ -345,17 +199,9 @@ Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;-><init>(Landroid/os/IBin Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageDeleteObserver2$Stub;-><init>()V Landroid/content/pm/IPackageDeleteObserver2$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDeleteObserver2; -Landroid/content/pm/IPackageDeleteObserver2;->onPackageDeleted(Ljava/lang/String;ILjava/lang/String;)V -Landroid/content/pm/IPackageDeleteObserver;->packageDeleted(Ljava/lang/String;I)V -Landroid/content/pm/IPackageInstaller;->uninstall(Landroid/content/pm/VersionedPackage;Ljava/lang/String;ILandroid/content/IntentSender;I)V Landroid/content/pm/IPackageInstallerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageInstallerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallerCallback; -Landroid/content/pm/IPackageInstallerCallback;->onSessionActiveChanged(IZ)V -Landroid/content/pm/IPackageInstallerCallback;->onSessionBadgingChanged(I)V -Landroid/content/pm/IPackageInstallerCallback;->onSessionCreated(I)V -Landroid/content/pm/IPackageInstallerCallback;->onSessionFinished(IZ)V -Landroid/content/pm/IPackageInstallerCallback;->onSessionProgressChanged(IF)V Landroid/content/pm/IPackageInstallerSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageInstallerSession$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageInstallerSession$Stub;-><init>()V @@ -364,8 +210,6 @@ Landroid/content/pm/IPackageInstallObserver2$Stub$Proxy;-><init>(Landroid/os/IBi Landroid/content/pm/IPackageInstallObserver2$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageInstallObserver2$Stub;-><init>()V Landroid/content/pm/IPackageInstallObserver2$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallObserver2; -Landroid/content/pm/IPackageInstallObserver2;->onPackageInstalled(Ljava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V -Landroid/content/pm/IPackageInstallObserver2;->onUserActionRequired(Landroid/content/Intent;)V Landroid/content/pm/IPackageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageManager$Stub$Proxy;->checkUidPermission(Ljava/lang/String;I)I Landroid/content/pm/IPackageManager$Stub$Proxy;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String; @@ -377,62 +221,6 @@ Landroid/content/pm/IPackageManager$Stub$Proxy;->getPackagesForUid(I)[Ljava/lang Landroid/content/pm/IPackageManager$Stub$Proxy;->getSystemSharedLibraryNames()[Ljava/lang/String; Landroid/content/pm/IPackageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageManager; Landroid/content/pm/IPackageManager$Stub;->TRANSACTION_getApplicationInfo:I -Landroid/content/pm/IPackageManager;->addPermission(Landroid/content/pm/PermissionInfo;)Z -Landroid/content/pm/IPackageManager;->addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z -Landroid/content/pm/IPackageManager;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I -Landroid/content/pm/IPackageManager;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I -Landroid/content/pm/IPackageManager;->checkUidSignatures(II)I -Landroid/content/pm/IPackageManager;->clearPackagePreferredActivities(Ljava/lang/String;)V -Landroid/content/pm/IPackageManager;->currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->deleteApplicationCacheFiles(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V -Landroid/content/pm/IPackageManager;->getActivityInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo; -Landroid/content/pm/IPackageManager;->getApplicationEnabledSetting(Ljava/lang/String;I)I -Landroid/content/pm/IPackageManager;->getApplicationInfo(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo; -Landroid/content/pm/IPackageManager;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getBlockUninstallForUser(Ljava/lang/String;I)Z -Landroid/content/pm/IPackageManager;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I -Landroid/content/pm/IPackageManager;->getFlagsForUid(I)I -Landroid/content/pm/IPackageManager;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName; -Landroid/content/pm/IPackageManager;->getInstalledApplications(II)Landroid/content/pm/ParceledListSlice; -Landroid/content/pm/IPackageManager;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice; -Landroid/content/pm/IPackageManager;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getInstallLocation()I -Landroid/content/pm/IPackageManager;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo; -Landroid/content/pm/IPackageManager;->getLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo; -Landroid/content/pm/IPackageManager;->getNameForUid(I)Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo; -Landroid/content/pm/IPackageManager;->getPackageInstaller()Landroid/content/pm/IPackageInstaller; -Landroid/content/pm/IPackageManager;->getPackagesForUid(I)[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getPackageUid(Ljava/lang/String;II)I -Landroid/content/pm/IPackageManager;->getPermissionControllerPackageName()Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo; -Landroid/content/pm/IPackageManager;->getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I -Landroid/content/pm/IPackageManager;->getProviderInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ProviderInfo; -Landroid/content/pm/IPackageManager;->getReceiverInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo; -Landroid/content/pm/IPackageManager;->getServiceInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ServiceInfo; -Landroid/content/pm/IPackageManager;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getSharedSystemSharedLibraryPackageName()Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getSystemSharedLibraryNames()[Ljava/lang/String; -Landroid/content/pm/IPackageManager;->getUidForSharedUser(Ljava/lang/String;)I -Landroid/content/pm/IPackageManager;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V -Landroid/content/pm/IPackageManager;->hasSystemUidErrors()Z -Landroid/content/pm/IPackageManager;->isPackageAvailable(Ljava/lang/String;I)Z -Landroid/content/pm/IPackageManager;->isSafeMode()Z -Landroid/content/pm/IPackageManager;->isStorageLow()Z -Landroid/content/pm/IPackageManager;->isUidPrivileged(I)Z -Landroid/content/pm/IPackageManager;->queryInstrumentation(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice; -Landroid/content/pm/IPackageManager;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice; -Landroid/content/pm/IPackageManager;->querySyncProviders(Ljava/util/List;Ljava/util/List;)V -Landroid/content/pm/IPackageManager;->removePermission(Ljava/lang/String;)V -Landroid/content/pm/IPackageManager;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V -Landroid/content/pm/IPackageManager;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ResolveInfo; -Landroid/content/pm/IPackageManager;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V -Landroid/content/pm/IPackageManager;->setApplicationHiddenSettingAsUser(Ljava/lang/String;ZI)Z -Landroid/content/pm/IPackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V -Landroid/content/pm/IPackageManager;->setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V -Landroid/content/pm/IPackageManager;->setLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/IntentFilter;ILandroid/content/ComponentName;)V -Landroid/content/pm/IPackageManager;->setPackageStoppedState(Ljava/lang/String;ZI)V Landroid/content/pm/IPackageMoveObserver$Stub;-><init>()V Landroid/content/pm/IPackageMoveObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageMoveObserver; Landroid/content/pm/IPackageStatsObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V @@ -441,13 +229,11 @@ Landroid/content/pm/IPackageStatsObserver$Stub;-><init>()V Landroid/content/pm/IPackageStatsObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageStatsObserver; Landroid/content/pm/IPackageStatsObserver$Stub;->DESCRIPTOR:Ljava/lang/String; Landroid/content/pm/IPackageStatsObserver$Stub;->TRANSACTION_onGetStatsCompleted:I -Landroid/content/pm/IPackageStatsObserver;->onGetStatsCompleted(Landroid/content/pm/PackageStats;Z)V Landroid/content/pm/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IShortcutService; Landroid/content/res/ConfigurationBoundResourceCache;-><init>()V Landroid/content/res/DrawableCache;-><init>()V Landroid/content/UndoManager;-><init>()V -Landroid/database/BulkCursorProxy;->mRemote:Landroid/os/IBinder; Landroid/database/IContentObserver$Stub;-><init>()V Landroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver; Landroid/database/IContentObserver;->onChange(ZLandroid/net/Uri;I)V @@ -509,16 +295,13 @@ Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_GREEN:Landroid/hardware/ Landroid/hardware/camera2/CaptureResult;->TONEMAP_CURVE_RED:Landroid/hardware/camera2/CaptureResult$Key; Landroid/hardware/camera2/utils/HashCodeHelpers;->hashCode([I)I Landroid/hardware/display/IDisplayManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/display/IDisplayManager; -Landroid/hardware/display/IDisplayManager;->getDisplayInfo(I)Landroid/view/DisplayInfo; Landroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/hardware/fingerprint/IFingerprintService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/fingerprint/IFingerprintService; Landroid/hardware/ICameraService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/ICameraService; Landroid/hardware/input/IInputManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/hardware/input/IInputManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputManager; Landroid/hardware/input/IInputManager$Stub;->TRANSACTION_injectInputEvent:I -Landroid/hardware/input/IInputManager;->injectInputEvent(Landroid/view/InputEvent;I)Z Landroid/hardware/location/IActivityRecognitionHardwareClient$Stub;-><init>()V -Landroid/hardware/location/IActivityRecognitionHardwareClient;->onAvailabilityChanged(ZLandroid/hardware/location/IActivityRecognitionHardware;)V Landroid/hardware/location/IContextHubService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/location/IContextHubService; Landroid/hardware/usb/IUsbManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/hardware/usb/IUsbManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/usb/IUsbManager; @@ -528,48 +311,28 @@ Landroid/location/ICountryDetector$Stub;->asInterface(Landroid/os/IBinder;)Landr Landroid/location/ICountryListener$Stub;-><init>()V Landroid/location/IGeocodeProvider$Stub;-><init>()V Landroid/location/IGeocodeProvider$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/IGeocodeProvider; -Landroid/location/IGeocodeProvider;->getFromLocation(DDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String; -Landroid/location/IGeocodeProvider;->getFromLocationName(Ljava/lang/String;DDDDILandroid/location/GeocoderParams;Ljava/util/List;)Ljava/lang/String; Landroid/location/IGeofenceProvider$Stub;-><init>()V -Landroid/location/IGeofenceProvider;->setGeofenceHardware(Landroid/hardware/location/IGeofenceHardware;)V Landroid/location/ILocationListener$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/location/ILocationListener$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/location/ILocationListener$Stub;-><init>()V Landroid/location/ILocationListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationListener; -Landroid/location/ILocationListener;->onLocationChanged(Landroid/location/Location;)V -Landroid/location/ILocationListener;->onProviderDisabled(Ljava/lang/String;)V -Landroid/location/ILocationListener;->onProviderEnabled(Ljava/lang/String;)V -Landroid/location/ILocationListener;->onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V Landroid/location/ILocationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/location/ILocationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/location/ILocationManager; Landroid/location/ILocationManager$Stub;->TRANSACTION_getAllProviders:I -Landroid/location/ILocationManager;->getAllProviders()Ljava/util/List; -Landroid/location/ILocationManager;->getNetworkProviderPackage()Ljava/lang/String; -Landroid/location/ILocationManager;->reportLocation(Landroid/location/Location;Z)V Landroid/location/INetInitiatedListener$Stub;-><init>()V -Landroid/location/INetInitiatedListener;->sendNiResponse(II)Z Landroid/location/LocationManager$ListenerTransport;-><init>(Landroid/location/LocationManager;Landroid/location/LocationListener;Landroid/os/Looper;)V Landroid/media/effect/SingleFilterEffect;-><init>(Landroid/media/effect/EffectContext;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V -Landroid/media/IAudioFocusDispatcher;->dispatchAudioFocusChange(ILjava/lang/String;)V Landroid/media/IAudioRoutesObserver$Stub;-><init>()V Landroid/media/IAudioService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/media/IAudioService$Stub;-><init>()V Landroid/media/IAudioService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioService; -Landroid/media/IAudioService;->getStreamMaxVolume(I)I -Landroid/media/IAudioService;->getStreamVolume(I)I -Landroid/media/IAudioService;->setStreamVolume(IIILjava/lang/String;)V -Landroid/media/IAudioService;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo; Landroid/media/IMediaRouterService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaRouterService; Landroid/media/IMediaScannerListener$Stub;-><init>()V Landroid/media/IMediaScannerService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaScannerService; -Landroid/media/IMediaScannerService;->requestScanFile(Ljava/lang/String;Ljava/lang/String;Landroid/media/IMediaScannerListener;)V -Landroid/media/IMediaScannerService;->scanFile(Ljava/lang/String;Ljava/lang/String;)V -Landroid/media/IRemoteDisplayCallback;->onStateChanged(Landroid/media/RemoteDisplayState;)V Landroid/media/IRingtonePlayer;->play(Landroid/os/IBinder;Landroid/net/Uri;Landroid/media/AudioAttributes;FZ)V Landroid/media/IVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IVolumeController; Landroid/media/MediaFile;-><init>()V Landroid/media/MediaScanner$MyMediaScannerClient;-><init>(Landroid/media/MediaScanner;)V -Landroid/media/projection/IMediaProjectionManager;->hasProjectionPermission(ILjava/lang/String;)Z Landroid/media/session/ISessionManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/session/ISessionManager; Landroid/media/tv/ITvRemoteProvider$Stub;-><init>()V Landroid/media/tv/ITvRemoteServiceInput;->clearInputBridge(Landroid/os/IBinder;)V @@ -592,41 +355,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 +372,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; @@ -1458,9 +1183,7 @@ Landroid/R$styleable;->View_visibility:I Landroid/R$styleable;->Window:[I Landroid/R$styleable;->Window_windowBackground:I Landroid/R$styleable;->Window_windowFrame:I -Landroid/security/Credentials;->convertToPem([Ljava/security/cert/Certificate;)[B Landroid/security/IKeyChainService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/security/IKeyChainService; -Landroid/security/IKeyChainService;->requestPrivateKey(Ljava/lang/String;)Ljava/lang/String; Landroid/security/keymaster/KeymasterBlobArgument;-><init>(ILandroid/os/Parcel;)V Landroid/security/keymaster/KeymasterBlobArgument;-><init>(I[B)V Landroid/security/keymaster/KeymasterBlobArgument;->blob:[B @@ -1484,22 +1207,7 @@ Landroid/security/keystore/IKeystoreService;->list(Ljava/lang/String;I)[Ljava/la Landroid/security/keystore/IKeystoreService;->reset()I Landroid/security/keystore/IKeystoreService;->ungrant(Ljava/lang/String;I)I Landroid/service/dreams/IDreamManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/dreams/IDreamManager; -Landroid/service/dreams/IDreamManager;->awaken()V -Landroid/service/dreams/IDreamManager;->dream()V -Landroid/service/dreams/IDreamManager;->getDreamComponents()[Landroid/content/ComponentName; -Landroid/service/dreams/IDreamManager;->isDreaming()Z -Landroid/service/dreams/IDreamManager;->setDreamComponents([Landroid/content/ComponentName;)V -Landroid/service/euicc/IDeleteSubscriptionCallback;->onComplete(I)V -Landroid/service/euicc/IEraseSubscriptionsCallback;->onComplete(I)V Landroid/service/euicc/IEuiccService$Stub;-><init>()V -Landroid/service/euicc/IGetDefaultDownloadableSubscriptionListCallback;->onComplete(Landroid/service/euicc/GetDefaultDownloadableSubscriptionListResult;)V -Landroid/service/euicc/IGetDownloadableSubscriptionMetadataCallback;->onComplete(Landroid/service/euicc/GetDownloadableSubscriptionMetadataResult;)V -Landroid/service/euicc/IGetEidCallback;->onSuccess(Ljava/lang/String;)V -Landroid/service/euicc/IGetEuiccInfoCallback;->onSuccess(Landroid/telephony/euicc/EuiccInfo;)V -Landroid/service/euicc/IGetEuiccProfileInfoListCallback;->onComplete(Landroid/service/euicc/GetEuiccProfileInfoListResult;)V -Landroid/service/euicc/IRetainSubscriptionsForFactoryResetCallback;->onComplete(I)V -Landroid/service/euicc/ISwitchToSubscriptionCallback;->onComplete(I)V -Landroid/service/euicc/IUpdateSubscriptionNicknameCallback;->onComplete(I)V Landroid/service/media/IMediaBrowserServiceCallbacks$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/media/IMediaBrowserServiceCallbacks; Landroid/service/media/IMediaBrowserServiceCallbacks;->onConnect(Ljava/lang/String;Landroid/media/session/MediaSession$Token;Landroid/os/Bundle;)V Landroid/service/media/IMediaBrowserServiceCallbacks;->onConnectFailed()V @@ -1508,15 +1216,8 @@ Landroid/service/media/IMediaBrowserServiceCallbacks;->onLoadChildrenWithOptions Landroid/service/notification/INotificationListener$Stub;-><init>()V Landroid/service/persistentdata/IPersistentDataBlockService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/persistentdata/IPersistentDataBlockService; Landroid/service/vr/IVrManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/vr/IVrManager; -Landroid/service/vr/IVrManager;->getVr2dDisplayId()I -Landroid/service/vr/IVrManager;->getVrModeState()Z Landroid/service/wallpaper/IWallpaperConnection$Stub;-><init>()V -Landroid/service/wallpaper/IWallpaperEngine;->destroy()V -Landroid/service/wallpaper/IWallpaperEngine;->dispatchPointer(Landroid/view/MotionEvent;)V -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 +1228,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 +1253,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 +1269,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 +1284,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 +1297,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 +1308,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 +1317,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 +1358,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 +1391,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 +1410,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 +1421,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 +1446,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 +1900,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 +2527,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 +2548,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 +2732,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 +2745,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 +2942,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 +2953,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 +2980,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 +3539,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 +4072,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/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java index cd0ef6f0e403..28d9a90005a0 100644 --- a/core/java/android/accessibilityservice/AccessibilityService.java +++ b/core/java/android/accessibilityservice/AccessibilityService.java @@ -75,7 +75,7 @@ import java.util.List; * follows the established service life cycle. Starting an accessibility service is triggered * exclusively by the user explicitly turning the service on in device settings. After the system * binds to a service, it calls {@link AccessibilityService#onServiceConnected()}. This method can - * be overriden by clients that want to perform post binding setup. + * be overridden by clients that want to perform post binding setup. * </p> * <p> * An accessibility service stops either when the user turns it off in device settings or when diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index f0a0e88310f9..76c5a4732463 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -200,8 +200,8 @@ public class AccessibilityServiceInfo implements Parcelable { * semantics in the context of the screen content. For example, a three by three * grid can be implemented as three horizontal linear layouts and one vertical, * or three vertical linear layouts and one horizontal, or one grid layout, etc. - * In this context the actual layout mangers used to achieve the grid configuration - * are not important, rather it is important that there are nine evenly distributed + * In this context, the actual layout managers used to achieve the grid configuration + * are not important; rather it is important that there are nine evenly distributed * elements. * </p> */ diff --git a/core/java/android/accounts/AbstractAccountAuthenticator.java b/core/java/android/accounts/AbstractAccountAuthenticator.java index a3b3a9f21954..79d1361192e3 100644 --- a/core/java/android/accounts/AbstractAccountAuthenticator.java +++ b/core/java/android/accounts/AbstractAccountAuthenticator.java @@ -17,7 +17,6 @@ package android.accounts; import android.Manifest; -import android.annotation.SystemApi; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -32,8 +31,8 @@ import java.util.Arrays; /** * Abstract base class for creating AccountAuthenticators. - * In order to be an authenticator one must extend this class, provider implementations for the - * abstract methods and write a service that returns the result of {@link #getIBinder()} + * In order to be an authenticator one must extend this class, provide implementations for the + * abstract methods, and write a service that returns the result of {@link #getIBinder()} * in the service's {@link android.app.Service#onBind(android.content.Intent)} when invoked * with an intent with action {@link AccountManager#ACTION_AUTHENTICATOR_INTENT}. This service * must specify the following intent filter and metadata tags in its AndroidManifest.xml file diff --git a/core/java/android/accounts/AccountAuthenticatorActivity.java b/core/java/android/accounts/AccountAuthenticatorActivity.java index f9284e67f9c3..967aa0424b1d 100644 --- a/core/java/android/accounts/AccountAuthenticatorActivity.java +++ b/core/java/android/accounts/AccountAuthenticatorActivity.java @@ -48,7 +48,7 @@ public class AccountAuthenticatorActivity extends Activity { } /** - * Retreives the AccountAuthenticatorResponse from either the intent of the icicle, if the + * Retrieves the AccountAuthenticatorResponse from either the intent of the icicle, if the * icicle is non-zero. * @param icicle the save instance data of this Activity, may be null */ diff --git a/core/java/android/accounts/IAccountAuthenticator.aidl b/core/java/android/accounts/IAccountAuthenticator.aidl index 8b98ca28ca81..701cecf38f32 100644 --- a/core/java/android/accounts/IAccountAuthenticator.aidl +++ b/core/java/android/accounts/IAccountAuthenticator.aidl @@ -28,47 +28,55 @@ oneway interface IAccountAuthenticator { /** * prompts the user for account information and adds the result to the IAccountManager */ + @UnsupportedAppUsage void addAccount(in IAccountAuthenticatorResponse response, String accountType, String authTokenType, in String[] requiredFeatures, in Bundle options); /** * prompts the user for the credentials of the account */ + @UnsupportedAppUsage void confirmCredentials(in IAccountAuthenticatorResponse response, in Account account, in Bundle options); /** * gets the password by either prompting the user or querying the IAccountManager */ + @UnsupportedAppUsage void getAuthToken(in IAccountAuthenticatorResponse response, in Account account, String authTokenType, in Bundle options); /** * Gets the user-visible label of the given authtoken type. */ + @UnsupportedAppUsage void getAuthTokenLabel(in IAccountAuthenticatorResponse response, String authTokenType); /** * prompts the user for a new password and writes it to the IAccountManager */ + @UnsupportedAppUsage void updateCredentials(in IAccountAuthenticatorResponse response, in Account account, String authTokenType, in Bundle options); /** * launches an activity that lets the user edit and set the properties for an authenticator */ + @UnsupportedAppUsage void editProperties(in IAccountAuthenticatorResponse response, String accountType); /** * returns a Bundle where the boolean value BOOLEAN_RESULT_KEY is set if the account has the * specified features */ + @UnsupportedAppUsage void hasFeatures(in IAccountAuthenticatorResponse response, in Account account, in String[] features); /** * Gets whether or not the account is allowed to be removed. */ + @UnsupportedAppUsage void getAccountRemovalAllowed(in IAccountAuthenticatorResponse response, in Account account); /** diff --git a/core/java/android/accounts/IAccountAuthenticatorResponse.aidl b/core/java/android/accounts/IAccountAuthenticatorResponse.aidl index 0c75e507f1e8..fbc8e5dcf3db 100644 --- a/core/java/android/accounts/IAccountAuthenticatorResponse.aidl +++ b/core/java/android/accounts/IAccountAuthenticatorResponse.aidl @@ -22,7 +22,10 @@ import android.os.Bundle; * @hide */ oneway interface IAccountAuthenticatorResponse { + @UnsupportedAppUsage void onResult(in Bundle value); + @UnsupportedAppUsage void onRequestContinued(); + @UnsupportedAppUsage void onError(int errorCode, String errorMessage); } diff --git a/core/java/android/accounts/IAccountManagerResponse.aidl b/core/java/android/accounts/IAccountManagerResponse.aidl index ca1203d1a058..11d0c023350a 100644 --- a/core/java/android/accounts/IAccountManagerResponse.aidl +++ b/core/java/android/accounts/IAccountManagerResponse.aidl @@ -22,6 +22,8 @@ import android.os.Bundle; * @hide */ oneway interface IAccountManagerResponse { + @UnsupportedAppUsage void onResult(in Bundle value); + @UnsupportedAppUsage void onError(int errorCode, String errorMessage); } diff --git a/core/java/android/animation/Keyframe.java b/core/java/android/animation/Keyframe.java index 5483c49aef54..bcb94d11ea3c 100644 --- a/core/java/android/animation/Keyframe.java +++ b/core/java/android/animation/Keyframe.java @@ -76,7 +76,7 @@ public abstract class Keyframe implements Cloneable { * @param fraction The time, expressed as a value between 0 and 1, representing the fraction * of time elapsed of the overall animation duration. * @param value The value that the object will animate to as the animation time approaches - * the time in this keyframe, and the the value animated from as the time passes the time in + * the time in this keyframe, and the value animated from as the time passes the time in * this keyframe. */ public static Keyframe ofInt(float fraction, int value) { @@ -108,7 +108,7 @@ public abstract class Keyframe implements Cloneable { * @param fraction The time, expressed as a value between 0 and 1, representing the fraction * of time elapsed of the overall animation duration. * @param value The value that the object will animate to as the animation time approaches - * the time in this keyframe, and the the value animated from as the time passes the time in + * the time in this keyframe, and the value animated from as the time passes the time in * this keyframe. */ public static Keyframe ofFloat(float fraction, float value) { @@ -140,7 +140,7 @@ public abstract class Keyframe implements Cloneable { * @param fraction The time, expressed as a value between 0 and 1, representing the fraction * of time elapsed of the overall animation duration. * @param value The value that the object will animate to as the animation time approaches - * the time in this keyframe, and the the value animated from as the time passes the time in + * the time in this keyframe, and the value animated from as the time passes the time in * this keyframe. */ public static Keyframe ofObject(float fraction, Object value) { diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index aeeaa519e2f5..4b4611ee4f84 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -392,7 +392,7 @@ import java.util.List; * <td>The final call you receive before your * activity is destroyed. This can happen either because the * activity is finishing (someone called {@link Activity#finish} on - * it, or because the system is temporarily destroying this + * it), or because the system is temporarily destroying this * instance of the activity to save space. You can distinguish * between these two scenarios with the {@link * Activity#isFinishing} method.</td> @@ -543,12 +543,12 @@ import java.util.List; * <a name="SavingPersistentState"></a> * <h3>Saving Persistent State</h3> * - * <p>There are generally two kinds of persistent state than an activity + * <p>There are generally two kinds of persistent state that an activity * will deal with: shared document-like data (typically stored in a SQLite * database using a {@linkplain android.content.ContentProvider content provider}) * and internal state such as user preferences.</p> * - * <p>For content provider data, we suggest that activities use a + * <p>For content provider data, we suggest that activities use an * "edit in place" user model. That is, any edits a user makes are effectively * made immediately without requiring an additional confirmation step. * Supporting this model is generally a simple matter of following two rules:</p> @@ -1372,6 +1372,7 @@ public class Activity extends ContextThemeWrapper if (DEBUG_LIFECYCLE) Slog.v(TAG, "onResume " + this); getApplication().dispatchActivityResumed(this); mActivityTransitionState.onResume(this, isTopOfTask()); + enableAutofillCompatibilityIfNeeded(); if (mAutoFillResetNeeded) { if (!mAutoFillIgnoreFirstResumePause) { View focus = getCurrentFocus(); @@ -1967,7 +1968,7 @@ public class Activity extends ContextThemeWrapper /** * Perform any final cleanup before an activity is destroyed. This can * happen either because the activity is finishing (someone called - * {@link #finish} on it, or because the system is temporarily destroying + * {@link #finish} on it), or because the system is temporarily destroying * this instance of the activity to save space. You can distinguish * between these two scenarios with the {@link #isFinishing} method. * @@ -2933,7 +2934,7 @@ public class Activity extends ContextThemeWrapper /** * Use with {@link #setDefaultKeyMode} to specify that unhandled keystrokes * will start an application-defined search. (If the application or activity does not - * actually define a search, the the keys will be ignored.) + * actually define a search, the keys will be ignored.) * * <p>See {@link android.app.SearchManager android.app.SearchManager} for more details. * @@ -3233,7 +3234,7 @@ public class Activity extends ContextThemeWrapper * interacted with the device in some way while your activity is running. * This callback and {@link #onUserLeaveHint} are intended to help * activities manage status bar notifications intelligently; specifically, - * for helping activities determine the proper time to cancel a notfication. + * for helping activities determine the proper time to cancel a notification. * * <p>All calls to your activity's {@link #onUserLeaveHint} callback will * be accompanied by calls to {@link #onUserInteraction}. This @@ -7148,7 +7149,6 @@ public class Activity extends ContextThemeWrapper mWindow.setColorMode(info.colorMode); setAutofillCompatibilityEnabled(application.isAutofillCompatibilityEnabled()); - enableAutofillCompatibilityIfNeeded(); } private void enableAutofillCompatibilityIfNeeded() { @@ -7848,7 +7848,7 @@ public class Activity extends ContextThemeWrapper } /** - * Specifies whether an {@link Activity} should be shown on top of the the lock screen whenever + * Specifies whether an {@link Activity} should be shown on top of the lock screen whenever * the lockscreen is up and the activity is resumed. Normally an activity will be transitioned * to the stopped state if it is started while the lockscreen is up, but with this flag set the * activity will remain in the resumed state visible on-top of the lock screen. This value can diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index b2b85d442301..d4e17a89c97b 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -960,14 +960,15 @@ public class ActivityOptions { } /** - * Sets the bounds (window size) that the activity should be launched in. + * Sets the bounds (window size and position) that the activity should be launched in. * Rect position should be provided in pixels and in screen coordinates. - * Set to null explicitly for fullscreen. + * Set to {@code null} to explicitly launch fullscreen. * <p> - * <strong>NOTE:<strong/> This value is ignored on devices that don't have + * <strong>NOTE:</strong> This value is ignored on devices that don't have * {@link android.content.pm.PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT} or * {@link android.content.pm.PackageManager#FEATURE_PICTURE_IN_PICTURE} enabled. - * @param screenSpacePixelRect Launch bounds to use for the activity or null for fullscreen. + * @param screenSpacePixelRect launch bounds or {@code null} for fullscreen + * @return {@code this} {@link ActivityOptions} instance */ public ActivityOptions setLaunchBounds(@Nullable Rect screenSpacePixelRect) { mLaunchBounds = screenSpacePixelRect != null ? new Rect(screenSpacePixelRect) : null; @@ -1478,7 +1479,7 @@ public class ActivityOptions { } /** - * Ask the the system track that time the user spends in the app being launched, and + * Ask the system track that time the user spends in the app being launched, and * report it back once done. The report will be sent to the given receiver, with * the extras {@link #EXTRA_USAGE_TIME_REPORT} and {@link #EXTRA_USAGE_TIME_REPORT_PACKAGES} * filled in. 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/AlertDialog.java b/core/java/android/app/AlertDialog.java index dbc8c5d1727b..cf40e067e5b1 100644 --- a/core/java/android/app/AlertDialog.java +++ b/core/java/android/app/AlertDialog.java @@ -397,7 +397,7 @@ public class AlertDialog extends Dialog implements DialogInterface { * @param listener The {@link DialogInterface.OnClickListener} to use. * @deprecated Use * {@link #setButton(int, CharSequence, android.content.DialogInterface.OnClickListener)} - * with {@link DialogInterface#BUTTON_POSITIVE} + * with {@link DialogInterface#BUTTON_NEUTRAL} */ @Deprecated public void setButton3(CharSequence text, final OnClickListener listener) { 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/ContextImpl.java b/core/java/android/app/ContextImpl.java index 2256840814ba..d6fd61971d75 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -98,6 +98,7 @@ import java.util.Objects; import java.util.concurrent.Executor; class ReceiverRestrictedContext extends ContextWrapper { + @UnsupportedAppUsage ReceiverRestrictedContext(Context base) { super(base); } diff --git a/core/java/android/app/DatePickerDialog.java b/core/java/android/app/DatePickerDialog.java index 37a05f0e1d3a..9d82ffa838ca 100644 --- a/core/java/android/app/DatePickerDialog.java +++ b/core/java/android/app/DatePickerDialog.java @@ -239,7 +239,7 @@ public class DatePickerDialog extends AlertDialog implements OnClickListener, * @param year the selected year * @param month the selected month (0-11 for compatibility with * {@link Calendar#MONTH}) - * @param dayOfMonth th selected day of the month (1-31, depending on + * @param dayOfMonth the selected day of the month (1-31, depending on * month) */ void onDateSet(DatePicker view, int year, int month, int dayOfMonth); diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index 1622c06b0a34..5b53bd0ff34a 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -1150,6 +1150,7 @@ public class DownloadManager { * @param ids the IDs of the downloads * @hide */ + @UnsupportedAppUsage public void restartDownload(long... ids) { Cursor cursor = query(new Query().setFilterById(ids)); try { diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java index 6f3b3a3f9090..4f121aa35f7c 100644 --- a/core/java/android/app/Fragment.java +++ b/core/java/android/app/Fragment.java @@ -2259,7 +2259,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene } /** - * Sets whether the the exit transition and enter transition overlap or not. + * Sets whether the exit transition and enter transition overlap or not. * When true, the enter transition will start as soon as possible. When false, the * enter transition will wait until the exit transition completes before starting. * @@ -2272,7 +2272,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene } /** - * Returns whether the the exit transition and enter transition overlap or not. + * Returns whether the exit transition and enter transition overlap or not. * When true, the enter transition will start as soon as possible. When false, the * enter transition will wait until the exit transition completes before starting. * @@ -2286,7 +2286,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene } /** - * Sets whether the the return transition and reenter transition overlap or not. + * Sets whether the return transition and reenter transition overlap or not. * When true, the reenter transition will start as soon as possible. When false, the * reenter transition will wait until the return transition completes before starting. * @@ -2299,7 +2299,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene } /** - * Returns whether the the return transition and reenter transition overlap or not. + * Returns whether the return transition and reenter transition overlap or not. * When true, the reenter transition will start as soon as possible. When false, the * reenter transition will wait until the return transition completes before starting. * diff --git a/core/java/android/app/FragmentHostCallback.java b/core/java/android/app/FragmentHostCallback.java index 1a12fdc40886..26b4a11f4c10 100644 --- a/core/java/android/app/FragmentHostCallback.java +++ b/core/java/android/app/FragmentHostCallback.java @@ -53,7 +53,7 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer { private ArrayMap<String, LoaderManager> mAllLoaderManagers; /** Whether or not fragment loaders should retain their state */ private boolean mRetainLoaders; - /** The loader manger for the fragment host [i.e. Activity#getLoaderManager()] */ + /** The loader manager for the fragment host [i.e. Activity#getLoaderManager()] */ private LoaderManagerImpl mLoaderManager; private boolean mCheckedForLoaderManager; /** Whether or not the fragment host loader manager was started */ diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl index 569c2bd37b6a..8b84263e6cf8 100644 --- a/core/java/android/app/IActivityManager.aidl +++ b/core/java/android/app/IActivityManager.aidl @@ -103,13 +103,17 @@ interface IActivityManager { int startActivity(in IApplicationThread caller, in String callingPackage, in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho, int requestCode, int flags, in ProfilerInfo profilerInfo, in Bundle options); + @UnsupportedAppUsage void unhandledBack(); boolean finishActivity(in IBinder token, int code, in Intent data, int finishTask); + @UnsupportedAppUsage Intent registerReceiver(in IApplicationThread caller, in String callerPackage, in IIntentReceiver receiver, in IntentFilter filter, in String requiredPermission, int userId, int flags); + @UnsupportedAppUsage void unregisterReceiver(in IIntentReceiver receiver); + @UnsupportedAppUsage int broadcastIntent(in IApplicationThread caller, in Intent intent, in String resolvedType, in IIntentReceiver resultTo, int resultCode, in String resultData, in Bundle map, in String[] requiredPermissions, @@ -121,18 +125,21 @@ interface IActivityManager { oneway void activityIdle(in IBinder token, in Configuration config, in boolean stopProfiling); void activityPaused(in IBinder token); - oneway void activityStopped(in IBinder token, in Bundle state, + void activityStopped(in IBinder token, in Bundle state, in PersistableBundle persistentState, in CharSequence description); String getCallingPackage(in IBinder token); ComponentName getCallingActivity(in IBinder token); List<ActivityManager.RunningTaskInfo> getTasks(int maxNum); + @UnsupportedAppUsage List<ActivityManager.RunningTaskInfo> getFilteredTasks(int maxNum, int ignoreActivityType, int ignoreWindowingMode); + @UnsupportedAppUsage void moveTaskToFront(int task, int flags, in Bundle options); void moveTaskBackwards(int task); int getTaskForActivity(in IBinder token, in boolean onlyRoot); ContentProviderHolder getContentProvider(in IApplicationThread caller, in String name, int userId, boolean stable); + @UnsupportedAppUsage void publishContentProviders(in IApplicationThread caller, in List<ContentProviderHolder> providers); boolean refContentProvider(in IBinder connection, int stableDelta, int unstableDelta); @@ -140,17 +147,22 @@ interface IActivityManager { PendingIntent getRunningServiceControlPanel(in ComponentName service); ComponentName startService(in IApplicationThread caller, in Intent service, in String resolvedType, boolean requireForeground, in String callingPackage, int userId); + @UnsupportedAppUsage int stopService(in IApplicationThread caller, in Intent service, in String resolvedType, int userId); int bindService(in IApplicationThread caller, in IBinder token, in Intent service, in String resolvedType, in IServiceConnection connection, int flags, in String callingPackage, int userId); + @UnsupportedAppUsage boolean unbindService(in IServiceConnection connection); void publishService(in IBinder token, in Intent intent, in IBinder service); void activityResumed(in IBinder token); + @UnsupportedAppUsage void setDebugApp(in String packageName, boolean waitForDebugger, boolean persistent); void setAgentApp(in String packageName, @nullable String agent); + @UnsupportedAppUsage void setAlwaysFinish(boolean enabled); + @UnsupportedAppUsage boolean startInstrumentation(in ComponentName className, in String profileFile, int flags, in Bundle arguments, in IInstrumentationWatcher watcher, in IUiAutomationConnection connection, int userId, @@ -163,6 +175,7 @@ interface IActivityManager { * system. Corresponds to the configuration of the default display. * @throws RemoteException */ + @UnsupportedAppUsage Configuration getConfiguration(); /** * Updates global configuration and applies changes to the entire system. @@ -171,12 +184,16 @@ interface IActivityManager { * @throws RemoteException * @return Returns true if the configuration was updated. */ + @UnsupportedAppUsage boolean updateConfiguration(in Configuration values); boolean stopServiceToken(in ComponentName className, in IBinder token, int startId); ComponentName getActivityClassForToken(in IBinder token); String getPackageForToken(in IBinder token); + @UnsupportedAppUsage void setProcessLimit(int max); + @UnsupportedAppUsage int getProcessLimit(); + @UnsupportedAppUsage int checkPermission(in String permission, int pid, int uid); int checkUriPermission(in Uri uri, int pid, int uid, int mode, int userId, in IBinder callerToken); @@ -184,6 +201,7 @@ interface IActivityManager { int mode, int userId); void revokeUriPermission(in IApplicationThread caller, in String targetPkg, in Uri uri, int mode, int userId); + @UnsupportedAppUsage void setActivityController(in IActivityController watcher, boolean imAMonkey); void showWaitingForDebugger(in IApplicationThread who, boolean waiting); /* @@ -192,6 +210,7 @@ interface IActivityManager { */ void signalPersistentProcesses(int signal); + @UnsupportedAppUsage ParceledListSlice getRecentTasks(int maxNum, int flags, int userId); oneway void serviceDoneExecuting(in IBinder token, int type, int startId, int res); oneway void activityDestroyed(in IBinder token); @@ -219,20 +238,27 @@ interface IActivityManager { List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState(); boolean clearApplicationUserData(in String packageName, boolean keepState, in IPackageDataObserver observer, int userId); + @UnsupportedAppUsage void forceStopPackage(in String packageName, int userId); boolean killPids(in int[] pids, in String reason, boolean secure); + @UnsupportedAppUsage List<ActivityManager.RunningServiceInfo> getServices(int maxNum, int flags); ActivityManager.TaskDescription getTaskDescription(int taskId); // Retrieve running application processes in the system + @UnsupportedAppUsage List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses(); // Get device configuration ConfigurationInfo getDeviceConfigurationInfo(); IBinder peekService(in Intent service, in String resolvedType, in String callingPackage); // Turn on/off profiling in a particular process. + @UnsupportedAppUsage boolean profileControl(in String process, int userId, boolean start, in ProfilerInfo profilerInfo, int profileType); + @UnsupportedAppUsage boolean shutdown(int timeout); + @UnsupportedAppUsage void stopAppSwitches(); + @UnsupportedAppUsage void resumeAppSwitches(); boolean bindBackupAgent(in String packageName, int backupRestoreMode, int userId); void backupAgentCreated(in String packageName, in IBinder agent); @@ -242,6 +268,7 @@ interface IActivityManager { boolean requireFull, in String name, in String callerPackage); void addPackageDependency(in String packageName); void killApplication(in String pkg, int appId, int userId, in String reason); + @UnsupportedAppUsage void closeSystemDialogs(in String reason); Debug.MemoryInfo[] getProcessMemoryInfo(in int[] pids); void killApplicationProcess(in String processName, int uid); @@ -254,6 +281,7 @@ interface IActivityManager { // Special low-level communication with activity manager. boolean handleApplicationWtf(in IBinder app, in String tag, boolean system, in ApplicationErrorReport.ParcelableCrashInfo crashInfo); + @UnsupportedAppUsage void killBackgroundProcesses(in String packageName, int userId); boolean isUserAMonkey(); WaitResult startActivityAndWait(in IApplicationThread caller, in String callingPackage, @@ -268,6 +296,7 @@ interface IActivityManager { // Retrieve info of applications installed on external media that are currently // running. List<ApplicationInfo> getRunningExternalApplications(); + @UnsupportedAppUsage void finishHeavyWeightApp(); // A StrictMode violation to be handled. The violationMask is a // subset of the original StrictMode policy bitmask, with only the @@ -279,6 +308,7 @@ interface IActivityManager { void setImmersive(in IBinder token, boolean immersive); boolean isTopActivityImmersive(); void crashApplication(int uid, int initialPid, in String packageName, int userId, in String message); + @UnsupportedAppUsage String getProviderMimeType(in Uri uri, int userId); IBinder newUriPermissionOwner(in String name); void grantUriPermissionFromOwner(in IBinder owner, int fromUid, in String targetPkg, @@ -292,23 +322,31 @@ interface IActivityManager { int startActivities(in IApplicationThread caller, in String callingPackage, in Intent[] intents, in String[] resolvedTypes, in IBinder resultTo, in Bundle options, int userId); + @UnsupportedAppUsage boolean isUserRunning(int userid, int flags); oneway void activitySlept(in IBinder token); int getFrontActivityScreenCompatMode(); void setFrontActivityScreenCompatMode(int mode); int getPackageScreenCompatMode(in String packageName); + @UnsupportedAppUsage void setPackageScreenCompatMode(in String packageName, int mode); boolean getPackageAskScreenCompat(in String packageName); void setPackageAskScreenCompat(in String packageName, boolean ask); + @UnsupportedAppUsage boolean switchUser(int userid); void setFocusedTask(int taskId); + @UnsupportedAppUsage boolean removeTask(int taskId); + @UnsupportedAppUsage void registerProcessObserver(in IProcessObserver observer); + @UnsupportedAppUsage void unregisterProcessObserver(in IProcessObserver observer); boolean isIntentSenderTargetedToPackage(in IIntentSender sender); + @UnsupportedAppUsage void updatePersistentConfiguration(in Configuration values); long[] getProcessPss(in int[] pids); void showBootMessage(in CharSequence msg, boolean always); + @UnsupportedAppUsage void killAllBackgroundProcesses(); ContentProviderHolder getContentProviderExternal(in String name, int userId, in IBinder token); @@ -316,6 +354,7 @@ interface IActivityManager { // Get memory information about the calling process. void getMyMemoryState(out ActivityManager.RunningAppProcessInfo outInfo); boolean killProcessesBelowForeground(in String reason); + @UnsupportedAppUsage UserInfo getCurrentUser(); boolean shouldUpRecreateTask(in IBinder token, in String destAffinity); boolean navigateUpTo(in IBinder token, in Intent target, int resultCode, @@ -336,13 +375,16 @@ interface IActivityManager { // manage your activity to make sure it is always the uid you expect. int getLaunchedFromUid(in IBinder activityToken); void unstableProviderDied(in IBinder connection); + @UnsupportedAppUsage boolean isIntentSenderAnActivity(in IIntentSender sender); boolean isIntentSenderAForegroundService(in IIntentSender sender); int startActivityAsUser(in IApplicationThread caller, in String callingPackage, in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho, int requestCode, int flags, in ProfilerInfo profilerInfo, in Bundle options, int userId); + @UnsupportedAppUsage int stopUser(int userid, boolean force, in IStopUserCallback callback); + @UnsupportedAppUsage void registerUserSwitchObserver(in IUserSwitchObserver observer, in String name); void unregisterUserSwitchObserver(in IUserSwitchObserver observer); int[] getRunningUserIds(); @@ -350,6 +392,7 @@ interface IActivityManager { // Deprecated - This method is only used by a few internal components and it will soon be // replaced by a proper bug report API (which will be restricted to a few, pre-defined apps). // No new code should be calling it. + @UnsupportedAppUsage void requestBugReport(int bugreportType); /** @@ -380,6 +423,7 @@ interface IActivityManager { long inputDispatchingTimedOut(int pid, boolean aboveSystem, in String reason); void clearPendingBackup(); + @UnsupportedAppUsage Intent getIntentForIntentSender(in IIntentSender sender); Bundle getAssistContextExtras(int requestType); void reportAssistContextExtras(in IBinder token, in Bundle extras, @@ -399,6 +443,7 @@ interface IActivityManager { * @param toTop If the task should be moved to the top once the windowing mode changes. */ void setTaskWindowingMode(int taskId, int windowingMode, boolean toTop); + @UnsupportedAppUsage void moveTaskToStack(int taskId, int stackId, boolean toTop); /** * Resizes the input stack id to the given bounds. @@ -414,8 +459,10 @@ interface IActivityManager { * default animation duration should be used. * @throws RemoteException */ + @UnsupportedAppUsage void resizeStack(int stackId, in Rect bounds, boolean allowResizeInDockedMode, boolean preserveWindows, boolean animate, int animationDuration); + @UnsupportedAppUsage List<ActivityManager.StackInfo> getAllStackInfos(); void setFocusedStack(int stackId); ActivityManager.StackInfo getFocusedStackInfo(); @@ -424,22 +471,27 @@ interface IActivityManager { boolean convertToTranslucent(in IBinder token, in Bundle options); void notifyActivityDrawn(in IBinder token); void reportActivityFullyDrawn(in IBinder token, boolean restoredFromBundle); + @UnsupportedAppUsage void restart(); void performIdleMaintenance(); void takePersistableUriPermission(in Uri uri, int modeFlags, String toPackage, int userId); void releasePersistableUriPermission(in Uri uri, int modeFlags, String toPackage, int userId); ParceledListSlice getPersistedUriPermissions(in String packageName, boolean incoming); void appNotRespondingViaProvider(in IBinder connection); + @UnsupportedAppUsage Rect getTaskBounds(int taskId); int getActivityDisplayId(in IBinder activityToken); + @UnsupportedAppUsage boolean setProcessMemoryTrimLevel(in String process, int uid, int level); // Start of L transactions String getTagForIntentSender(in IIntentSender sender, in String prefix); + @UnsupportedAppUsage boolean startUserInBackground(int userid); void startLockTaskModeByToken(in IBinder token); void stopLockTaskModeByToken(in IBinder token); + @UnsupportedAppUsage boolean isInLockTaskMode(); void setTaskDescription(in IBinder token, in ActivityManager.TaskDescription values); int startVoiceActivity(in String callingPackage, int callingPid, int callingUid, @@ -448,12 +500,16 @@ interface IActivityManager { in Bundle options, int userId); int startAssistantActivity(in String callingPackage, int callingPid, int callingUid, in Intent intent, in String resolvedType, in Bundle options, int userId); + @UnsupportedAppUsage void startRecentsActivity(in Intent intent, in IAssistDataReceiver assistDataReceiver, in IRecentsAnimationRunner recentsAnimationRunner); + @UnsupportedAppUsage void cancelRecentsAnimation(boolean restoreHomeStackPosition); + @UnsupportedAppUsage int startActivityFromRecents(int taskId, in Bundle options); Bundle getActivityOptions(in IBinder token); List<IBinder> getAppTasks(in String callingPackage); + @UnsupportedAppUsage void startSystemLockTaskMode(int taskId); void stopSystemLockTaskMode(); void finishVoiceTask(in IVoiceInteractionSession session); @@ -476,17 +532,22 @@ interface IActivityManager { void startInPlaceAnimationOnFrontMostApplication(in Bundle opts); int checkPermissionWithToken(in String permission, int pid, int uid, in IBinder callerToken); + @UnsupportedAppUsage void registerTaskStackListener(in ITaskStackListener listener); void unregisterTaskStackListener(in ITaskStackListener listener); void notifyCleartextNetwork(int uid, in byte[] firstPacket); int createStackOnDisplay(int displayId); + @UnsupportedAppUsage void setTaskResizeable(int taskId, int resizeableMode); boolean requestAssistContextExtras(int requestType, in IAssistDataReceiver receiver, in Bundle receiverExtras, in IBinder activityToken, boolean focused, boolean newSessionId); + @UnsupportedAppUsage void resizeTask(int taskId, in Rect bounds, int resizeMode); + @UnsupportedAppUsage int getLockTaskModeState(); + @UnsupportedAppUsage void setDumpHeapDebugLimit(in String processName, int uid, long maxMemSize, in String reportPackage); void dumpHeapFinished(in String path); @@ -494,6 +555,7 @@ interface IActivityManager { void updateLockTaskPackages(int userId, in String[] packages); void noteAlarmStart(in IIntentSender sender, in WorkSource workSource, int sourceUid, in String tag); void noteAlarmFinish(in IIntentSender sender, in WorkSource workSource, int sourceUid, in String tag); + @UnsupportedAppUsage int getPackageProcessState(in String packageName, in String callingPackage); oneway void showLockTaskEscapeMessage(in IBinder token); void updateDeviceOwner(in String packageName); @@ -512,6 +574,7 @@ interface IActivityManager { // Start of N transactions // Start Binder transaction tracking for all applications. + @UnsupportedAppUsage boolean startBinderTracking(); // Stop Binder transaction tracking for all applications and dump trace data to the given file // descriptor. @@ -521,6 +584,7 @@ interface IActivityManager { * current user and stacks state. The task will be moved to target stack if it's currently in * different stack. */ + @UnsupportedAppUsage void positionTaskInStack(int taskId, int stackId, int position); void exitFreeformMode(in IBinder token); void reportSizeConfigurations(in IBinder token, in int[] horizontalSizeConfiguration, @@ -539,10 +603,13 @@ interface IActivityManager { * default animation duration should be used. */ void dismissPip(boolean animate, int animationDuration); + @UnsupportedAppUsage void suppressResizeConfigChanges(boolean suppress); void moveTasksToFullscreenStack(int fromStackId, boolean onTop); + @UnsupportedAppUsage boolean moveTopActivityToPinnedStack(int stackId, in Rect bounds); boolean isAppStartModeDisabled(int uid, in String packageName); + @UnsupportedAppUsage boolean unlockUser(int userid, in byte[] token, in byte[] secret, in IProgressListener listener); boolean isInMultiWindowMode(in IBinder token); @@ -572,6 +639,7 @@ interface IActivityManager { * stacks. * @throws RemoteException */ + @UnsupportedAppUsage void resizeDockedStack(in Rect dockedBounds, in Rect tempDockedTaskBounds, in Rect tempDockedTaskInsetBounds, in Rect tempOtherTaskBounds, in Rect tempOtherTaskInsetBounds); @@ -593,6 +661,7 @@ interface IActivityManager { boolean supportsLocalVoiceInteraction(); void notifyPinnedStackAnimationStarted(); void notifyPinnedStackAnimationEnded(); + @UnsupportedAppUsage void removeStack(int stackId); /** * Removes stacks in the input windowing modes from the system if they are of activity type @@ -616,6 +685,7 @@ interface IActivityManager { boolean isVrModePackageEnabled(in ComponentName packageName); void notifyLockedProfile(int userId); void startConfirmDeviceCredentialIntent(in Intent intent, in Bundle options); + @UnsupportedAppUsage void sendIdleJobTrigger(); int sendIntentSender(in IIntentSender target, in IBinder whitelistToken, int code, in Intent intent, in String resolvedType, in IIntentReceiver finishedReceiver, @@ -653,6 +723,7 @@ interface IActivityManager { int restartUserInBackground(int userId); /** Cancels the window transitions for the given task. */ + @UnsupportedAppUsage void cancelTaskWindowTransition(int taskId); /** @@ -714,4 +785,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/IAlarmManager.aidl b/core/java/android/app/IAlarmManager.aidl index ded4c4954956..3a858bb5dba1 100644 --- a/core/java/android/app/IAlarmManager.aidl +++ b/core/java/android/app/IAlarmManager.aidl @@ -32,6 +32,7 @@ interface IAlarmManager { void set(String callingPackage, int type, long triggerAtTime, long windowLength, long interval, int flags, in PendingIntent operation, in IAlarmListener listener, String listenerTag, in WorkSource workSource, in AlarmManager.AlarmClockInfo alarmClock); + @UnsupportedAppUsage boolean setTime(long millis); void setTimeZone(String zone); void remove(in PendingIntent operation, in IAlarmListener listener); diff --git a/core/java/android/app/IApplicationThread.aidl b/core/java/android/app/IApplicationThread.aidl index cbd85f59cdee..d478cd6e5946 100644 --- a/core/java/android/app/IApplicationThread.aidl +++ b/core/java/android/app/IApplicationThread.aidl @@ -102,6 +102,7 @@ oneway interface IApplicationThread { void updateHttpProxy(); void setCoreSettings(in Bundle coreSettings); void updatePackageCompatibilityInfo(in String pkg, in CompatibilityInfo info); + @UnsupportedAppUsage void scheduleTrimMemory(int level); void dumpMemInfo(in ParcelFileDescriptor fd, in Debug.MemoryInfo mem, boolean checkin, boolean dumpInfo, boolean dumpDalvik, boolean dumpSummaryOnly, boolean dumpUnreachable, diff --git a/core/java/android/app/IAssistDataReceiver.aidl b/core/java/android/app/IAssistDataReceiver.aidl index 2d5daf97a1c4..0d69838e4329 100644 --- a/core/java/android/app/IAssistDataReceiver.aidl +++ b/core/java/android/app/IAssistDataReceiver.aidl @@ -21,6 +21,8 @@ import android.os.Bundle; /** @hide */ oneway interface IAssistDataReceiver { + @UnsupportedAppUsage void onHandleAssistData(in Bundle resultData); + @UnsupportedAppUsage void onHandleAssistScreenshot(in Bitmap screenshot); } diff --git a/core/java/android/app/IInputForwarder.aidl b/core/java/android/app/IInputForwarder.aidl index d6be63eb54e5..702b61ed8a2a 100644 --- a/core/java/android/app/IInputForwarder.aidl +++ b/core/java/android/app/IInputForwarder.aidl @@ -25,5 +25,6 @@ import android.view.InputEvent; * @hide */ interface IInputForwarder { + @UnsupportedAppUsage boolean forwardEvent(in InputEvent event); }
\ No newline at end of file diff --git a/core/java/android/app/IInstrumentationWatcher.aidl b/core/java/android/app/IInstrumentationWatcher.aidl index 6c8c4d6e03ef..df42decd8c90 100644 --- a/core/java/android/app/IInstrumentationWatcher.aidl +++ b/core/java/android/app/IInstrumentationWatcher.aidl @@ -23,6 +23,7 @@ import android.os.Bundle; /** @hide */ interface IInstrumentationWatcher { + @UnsupportedAppUsage void instrumentationStatus(in ComponentName name, int resultCode, in Bundle results); void instrumentationFinished(in ComponentName name, int resultCode, diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index cd127102f83b..d4297cc2c020 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -40,15 +40,19 @@ import android.service.notification.ZenModeConfig; /** {@hide} */ interface INotificationManager { + @UnsupportedAppUsage void cancelAllNotifications(String pkg, int userId); void clearData(String pkg, int uid, boolean fromApp); + @UnsupportedAppUsage void enqueueToast(String pkg, ITransientNotification callback, int duration); + @UnsupportedAppUsage void cancelToast(String pkg, ITransientNotification callback); void finishToken(String pkg, ITransientNotification callback); void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id, in Notification notification, int userId); + @UnsupportedAppUsage void cancelNotificationWithTag(String pkg, String tag, int id, int userId); void setShowBadge(String pkg, int uid, boolean showBadge); @@ -61,6 +65,7 @@ interface INotificationManager */ void setNotificationsEnabledWithImportanceLockForPackage(String pkg, int uid, boolean enabled); + @UnsupportedAppUsage boolean areNotificationsEnabledForPackage(String pkg, int uid); boolean areNotificationsEnabled(String pkg); int getPackageImportance(String pkg); @@ -143,7 +148,9 @@ interface INotificationManager List<String> getEnabledNotificationListenerPackages(); List<ComponentName> getEnabledNotificationListeners(int userId); + @UnsupportedAppUsage int getZenMode(); + @UnsupportedAppUsage ZenModeConfig getZenModeConfig(); oneway void setZenMode(int mode, in Uri conditionId, String reason); oneway void notifyConditions(String pkg, in IConditionProvider provider, in Condition[] conditions); diff --git a/core/java/android/app/ISearchManager.aidl b/core/java/android/app/ISearchManager.aidl index 0d09e4a92d7b..53f1a46c1b8b 100644 --- a/core/java/android/app/ISearchManager.aidl +++ b/core/java/android/app/ISearchManager.aidl @@ -28,6 +28,7 @@ interface ISearchManager { SearchableInfo getSearchableInfo(in ComponentName launchActivity); List<SearchableInfo> getSearchablesInGlobalSearch(); List<ResolveInfo> getGlobalSearchActivities(); + @UnsupportedAppUsage ComponentName getGlobalSearchActivity(); ComponentName getWebSearchActivity(); void launchAssist(in Bundle args); diff --git a/core/java/android/app/IStopUserCallback.aidl b/core/java/android/app/IStopUserCallback.aidl index 19ac1d5d4ecd..d3c2ff776128 100644 --- a/core/java/android/app/IStopUserCallback.aidl +++ b/core/java/android/app/IStopUserCallback.aidl @@ -22,6 +22,7 @@ package android.app; */ interface IStopUserCallback { + @UnsupportedAppUsage void userStopped(int userId); void userStopAborted(int userId); } 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/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl index 5ef4be18ef2f..cfa62d7d58c8 100644 --- a/core/java/android/app/IWallpaperManager.aidl +++ b/core/java/android/app/IWallpaperManager.aidl @@ -55,11 +55,13 @@ interface IWallpaperManager { /** * Set the live wallpaper. This only affects the system wallpaper. */ + @UnsupportedAppUsage void setWallpaperComponent(in ComponentName name); /** * Get the wallpaper for a given user. */ + @UnsupportedAppUsage ParcelFileDescriptor getWallpaper(String callingPkg, IWallpaperManagerCallback cb, int which, out Bundle outParams, int userId); @@ -73,6 +75,7 @@ interface IWallpaperManager { * information about that wallpaper. Otherwise, if it is a static image, * simply return null. */ + @UnsupportedAppUsage WallpaperInfo getWallpaperInfo(int userId); /** @@ -83,6 +86,7 @@ interface IWallpaperManager { /** * Return whether the current system wallpaper has the given name. */ + @UnsupportedAppUsage boolean hasNamedWallpaper(String name); /** @@ -94,11 +98,13 @@ interface IWallpaperManager { /** * Returns the desired minimum width for the wallpaper. */ + @UnsupportedAppUsage int getWidthHint(); /** * Returns the desired minimum height for the wallpaper. */ + @UnsupportedAppUsage int getHeightHint(); /** diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index 5d2f620310e0..174b94eff5f8 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -1755,7 +1755,7 @@ public class Instrumentation { /** * Like {@link #execStartActivity(android.content.Context, android.os.IBinder, * android.os.IBinder, String, android.content.Intent, int, android.os.Bundle)}, - * but for calls from a {#link Fragment}. + * but for calls from a {@link Fragment}. * * @param who The Context from which the activity is being started. * @param contextThread The main thread of the Context from which the activity diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java index 1db111af0b10..fb933bd980c7 100644 --- a/core/java/android/app/KeyguardManager.java +++ b/core/java/android/app/KeyguardManager.java @@ -35,7 +35,6 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; import android.os.ServiceManager.ServiceNotFoundException; -import android.os.UserHandle; import android.provider.Settings; import android.service.persistentdata.IPersistentDataBlockService; import android.util.Log; @@ -561,7 +560,7 @@ public class KeyguardManager { * This will, if the keyguard is secure, bring up the unlock screen of * the keyguard. * - * @param callback Let's you know whether the operation was succesful and + * @param callback Lets you know whether the operation was successful and * it is safe to launch anything that would normally be considered safe * once the user has gotten past the keyguard. */ 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/Notification.java b/core/java/android/app/Notification.java index ae59fdf0bd1c..97349fe76a97 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -3494,7 +3494,7 @@ public class Notification implements Parcelable /** * Set the small icon, which will be used to represent the notification in the - * status bar and content view (unless overriden there by a + * status bar and content view (unless overridden there by a * {@link #setLargeIcon(Bitmap) large icon}). * * @param icon An Icon object to use. @@ -6198,7 +6198,7 @@ public class Notification implements Parcelable public abstract boolean areNotificationsVisiblyDifferent(Style other); /** - * @return the the text that should be displayed in the statusBar when heads-upped. + * @return the text that should be displayed in the statusBar when heads-upped. * If {@code null} is returned, the default implementation will be used. * * @hide @@ -6685,7 +6685,7 @@ public class Notification implements Parcelable } /** - * @return the the text that should be displayed in the statusBar when heads upped. + * @return the text that should be displayed in the statusBar when heads upped. * If {@code null} is returned, the default implementation will be used. * * @hide @@ -7341,7 +7341,7 @@ public class Notification implements Parcelable } /** - * Get the the Uri pointing to the content of the message. Can be null, in which case + * Get the Uri pointing to the content of the message. Can be null, in which case * {@see #getText()} is used. */ public Uri getDataUri() { diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java index 4fb19084eef6..3d024073fafc 100644 --- a/core/java/android/app/SearchManager.java +++ b/core/java/android/app/SearchManager.java @@ -169,7 +169,7 @@ public class SearchManager * Intent extra data key: Use this key with Intent.ACTION_SEARCH and * {@link android.content.Intent#getStringExtra content.Intent.getStringExtra()} * to obtain the action message that was defined for a particular search action key and/or - * suggestion. It will be null if the search was launched by typing "enter", touched the the + * suggestion. It will be null if the search was launched by typing "enter", touching the * "GO" button, or other means not involving any action key. */ public final static String ACTION_MSG = "action_msg"; @@ -404,7 +404,7 @@ public class SearchManager * Column name for suggestions cursor. <i>Optional.</i> If your content is rentable, you * should provide this column to specify the displayable string representation of the rental * price of your content including the currency and the amount. If it's free, you should - * provide localized string to specify that it's free. This column can be ommitted if the + * provide localized string to specify that it's free. This column can be omitted if the * content is not applicable to rent. */ public final static String SUGGEST_COLUMN_RENTAL_PRICE = "suggest_rental_price"; @@ -579,7 +579,7 @@ public class SearchManager * * @param initialQuery A search string can be pre-entered here, but this * is typically null or empty. - * @param selectInitialQuery If true, the intial query will be preselected, which means that + * @param selectInitialQuery If true, the initial query will be preselected, which means that * any further typing will replace it. This is useful for cases where an entire pre-formed * query is being inserted. If false, the selection point will be placed at the end of the * inserted query. This is useful when the inserted query is text that the user entered, diff --git a/core/java/android/app/Service.java b/core/java/android/app/Service.java index 67acfe906915..16f6bdaa4313 100644 --- a/core/java/android/app/Service.java +++ b/core/java/android/app/Service.java @@ -21,13 +21,13 @@ import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.content.ComponentCallbacks2; import android.content.ComponentName; -import android.content.Intent; -import android.content.ContextWrapper; import android.content.Context; +import android.content.ContextWrapper; +import android.content.Intent; import android.content.res.Configuration; import android.os.Build; -import android.os.RemoteException; import android.os.IBinder; +import android.os.RemoteException; import android.util.Log; import java.io.FileDescriptor; @@ -391,7 +391,7 @@ public abstract class Service extends ContextWrapper implements ComponentCallbac * don't recreate until a future explicit call to * {@link Context#startService Context.startService(Intent)}. The * service will not receive a {@link #onStartCommand(Intent, int, int)} - * call with a null Intent because it will not be re-started if there + * call with a null Intent because it will not be restarted if there * are no pending Intents to deliver. * * <p>This mode makes sense for things that want to do some work as a @@ -416,7 +416,7 @@ public abstract class Service extends ContextWrapper implements ComponentCallbac * redelivery until the service calls {@link #stopSelf(int)} with the * start ID provided to {@link #onStartCommand}. The * service will not receive a {@link #onStartCommand(Intent, int, int)} - * call with a null Intent because it will will only be re-started if + * call with a null Intent because it will only be restarted if * it is not finished processing all Intents sent to it (and any such * pending events will be delivered at the point of restart). */ 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/UiModeManager.java b/core/java/android/app/UiModeManager.java index 4f172a4251d4..a554882123f1 100644 --- a/core/java/android/app/UiModeManager.java +++ b/core/java/android/app/UiModeManager.java @@ -25,7 +25,6 @@ import android.content.res.Configuration; import android.os.RemoteException; import android.os.ServiceManager; import android.os.ServiceManager.ServiceNotFoundException; -import android.util.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -214,7 +213,7 @@ public class UiModeManager { } /** - * Sets the night mode. + * Sets the system-wide night mode. * <p> * The mode can be one of: * <ul> @@ -231,6 +230,12 @@ public class UiModeManager { * are only effective when the {@link Configuration#UI_MODE_TYPE_CAR car} * or {@link Configuration#UI_MODE_TYPE_DESK desk} mode is enabled on a * device. Starting in API 23, changes to night mode are always effective. + * <p> + * Changes to night mode take effect globally and will result in a configuration change + * (and potentially an Activity lifecycle event) being applied to all running apps. + * Developers interested in an app-local implementation of night mode should consider using + * {@link android.support.v7.app.AppCompatDelegate#setDefaultNightMode(int)} to manage the + * -night qualifier locally. * * @param mode the night mode to set * @see #getNightMode() diff --git a/core/java/android/app/WaitResult.java b/core/java/android/app/WaitResult.java index 898d0cabee3e..5baf2e22bc31 100644 --- a/core/java/android/app/WaitResult.java +++ b/core/java/android/app/WaitResult.java @@ -28,10 +28,10 @@ import java.io.PrintWriter; * @hide */ public class WaitResult implements Parcelable { + public static final int INVALID_DELAY = -1; public int result; public boolean timeout; public ComponentName who; - public long thisTime; public long totalTime; public WaitResult() { @@ -47,7 +47,6 @@ public class WaitResult implements Parcelable { dest.writeInt(result); dest.writeInt(timeout ? 1 : 0); ComponentName.writeToParcel(who, dest); - dest.writeLong(thisTime); dest.writeLong(totalTime); } @@ -68,7 +67,6 @@ public class WaitResult implements Parcelable { result = source.readInt(); timeout = source.readInt() != 0; who = ComponentName.readFromParcel(source); - thisTime = source.readLong(); totalTime = source.readLong(); } @@ -77,7 +75,6 @@ public class WaitResult implements Parcelable { pw.println(prefix + " result=" + result); pw.println(prefix + " timeout=" + timeout); pw.println(prefix + " who=" + who); - pw.println(prefix + " thisTime=" + thisTime); pw.println(prefix + " totalTime=" + totalTime); } }
\ No newline at end of file diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 18a006ffff31..3871d7a2418a 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -3306,7 +3306,7 @@ public class DevicePolicyManager { * restrictions on the parent profile. * * @param admin The name of the admin component to check, or {@code null} to aggregate - * accross all participating admins. + * across all participating admins. * @return The timeout in milliseconds or 0 if not configured for the provided admin. */ public long getRequiredStrongAuthTimeout(@Nullable ComponentName admin) { @@ -3890,6 +3890,11 @@ public class DevicePolicyManager { /** * Installs the given certificate as a user CA. + * <p> + * Inserted user CAs aren't automatically trusted by apps in Android 7.0 (API level 24) and + * higher. App developers can change the default behavior for an app by adding a + * <a href="{@docRoot}training/articles/security-config.html">Security Configuration + * File</a> to the app manifest file. * * The caller must be a profile or device owner on that user, or a delegate package given the * {@link #DELEGATION_CERT_INSTALL} scope via {@link #setDelegatedScopes}; otherwise a diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 00463028a685..0e95e6392733 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -122,6 +122,7 @@ interface IDevicePolicyManager { void setActiveAdmin(in ComponentName policyReceiver, boolean refreshing, int userHandle); boolean isAdminActive(in ComponentName policyReceiver, int userHandle); List<ComponentName> getActiveAdmins(int userHandle); + @UnsupportedAppUsage boolean packageHasActiveAdmins(String packageName, int userHandle); void getRemoveWarning(in ComponentName policyReceiver, in RemoteCallback result, int userHandle); void removeActiveAdmin(in ComponentName policyReceiver, int userHandle); diff --git a/core/java/android/app/admin/SystemUpdatePolicy.java b/core/java/android/app/admin/SystemUpdatePolicy.java index 96dbc760278f..dd7284540fef 100644 --- a/core/java/android/app/admin/SystemUpdatePolicy.java +++ b/core/java/android/app/admin/SystemUpdatePolicy.java @@ -76,9 +76,7 @@ import java.util.stream.Collectors; * </code></pre> * * <h3>Developer guide</h3> - * To learn more about managing system updates, read - * <a href="{@docRoot}/work/dpc/security.html#control_remote_software_updates">Control remote - * software updates</a>. + * To learn more, read <a href="{@docRoot}work/dpc/system-updates">Manage system updates</a>. * * @see DevicePolicyManager#setSystemUpdatePolicy * @see DevicePolicyManager#getSystemUpdatePolicy diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java index dd61f286c88e..76ade94272a4 100644 --- a/core/java/android/app/assist/AssistStructure.java +++ b/core/java/android/app/assist/AssistStructure.java @@ -1002,7 +1002,7 @@ public class AssistStructure implements Parcelable { } /** - * Gets the the type of value that can be used to autofill the view contents. + * Gets the type of value that can be used to autofill the view contents. * * <p>It's only relevant when the {@link AssistStructure} is used for autofill purposes. * @@ -1028,7 +1028,7 @@ public class AssistStructure implements Parcelable { } /** - * Gets the the value of this view. + * Gets the value of this view. * * <p>It's only relevant when the {@link AssistStructure} is used for autofill purposes, * not for assist purposes. @@ -1350,7 +1350,7 @@ public class AssistStructure implements Parcelable { } /** - * Returns the the list of locales associated with this view. + * Returns the list of locales associated with this view. */ @Nullable public LocaleList getLocaleList() { return mLocaleList; diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl index f3ca74656e8c..34191f100b4f 100644 --- a/core/java/android/app/backup/IBackupManager.aidl +++ b/core/java/android/app/backup/IBackupManager.aidl @@ -44,6 +44,7 @@ interface IBackupManager { * only callers who hold the android.permission.BACKUP permission * may invoke it for arbitrary packages. */ + @UnsupportedAppUsage void dataChanged(String packageName); /** @@ -54,6 +55,7 @@ interface IBackupManager { * only callers who hold the android.permission.BACKUP permission * may invoke it for arbitrary packages. */ + @UnsupportedAppUsage void clearBackupData(String transportName, String packageName); /** @@ -92,6 +94,7 @@ interface IBackupManager { * * <p>Callers must hold the android.permission.BACKUP permission to use this method. */ + @UnsupportedAppUsage void setBackupEnabled(boolean isEnabled); /** @@ -107,6 +110,7 @@ interface IBackupManager { * @param doAutoRestore When true, enables the automatic app-data restore facility. When * false, this facility will be disabled. */ + @UnsupportedAppUsage void setAutoRestore(boolean doAutoRestore); /** @@ -121,6 +125,7 @@ interface IBackupManager { * * <p>Callers must hold the android.permission.BACKUP permission to use this method. */ + @UnsupportedAppUsage boolean isBackupEnabled(); /** @@ -217,6 +222,7 @@ interface IBackupManager { * * <p>Callers must hold the android.permission.BACKUP permission to use this method. */ + @UnsupportedAppUsage void acknowledgeFullBackupOrRestore(int token, boolean allow, in String curPassword, in String encryptionPassword, IFullBackupRestoreObserver observer); @@ -255,12 +261,14 @@ interface IBackupManager { * Identify the currently selected transport. Callers must hold the * android.permission.BACKUP permission to use this method. */ + @UnsupportedAppUsage String getCurrentTransport(); /** * Request a list of all available backup transports' names. Callers must * hold the android.permission.BACKUP permission to use this method. */ + @UnsupportedAppUsage String[] listAllTransports(); ComponentName[] listAllTransportComponents(); @@ -283,6 +291,7 @@ interface IBackupManager { * name is not one of the currently available transports, no change is made to * the current transport setting and the method returns null. */ + @UnsupportedAppUsage String selectBackupTransport(String transport); /** @@ -385,6 +394,7 @@ interface IBackupManager { * @param whichUser User handle of the defined user whose backup active state * is being queried. */ + @UnsupportedAppUsage boolean isBackupServiceActive(int whichUser); /** diff --git a/core/java/android/app/backup/package.html b/core/java/android/app/backup/package.html index 8b5e3ba3532f..dd6c2546898c 100644 --- a/core/java/android/app/backup/package.html +++ b/core/java/android/app/backup/package.html @@ -11,7 +11,7 @@ href="{@docRoot}guide/topics/data/backup.html">Data Backup</a> guide.</p> <p>All backup and restore operations are controlled by the {@link android.app.backup.BackupManager}. Each application that would -like to enable backup and preserve its data on remote strage must implement a +like to enable backup and preserve its data on remote storage must implement a backup agent. A backup agent can be built by extending either {@link android.app.backup.BackupAgent} or {@link android.app.backup.BackupAgentHelper}. The {@link android.app.backup.BackupAgentHelper} class provides a wrapper around {@link diff --git a/core/java/android/app/job/IJobCallback.aidl b/core/java/android/app/job/IJobCallback.aidl index e7695e2e747f..d281da037fde 100644 --- a/core/java/android/app/job/IJobCallback.aidl +++ b/core/java/android/app/job/IJobCallback.aidl @@ -36,6 +36,7 @@ interface IJobCallback { * @param ongoing True to indicate that the client is processing the job. False if the job is * complete */ + @UnsupportedAppUsage void acknowledgeStartMessage(int jobId, boolean ongoing); /** * Immediate callback to the system after sending a stop signal, used to quickly detect ANR. @@ -43,14 +44,17 @@ interface IJobCallback { * @param jobId Unique integer used to identify this job. * @param reschedule Whether or not to reschedule this job. */ + @UnsupportedAppUsage void acknowledgeStopMessage(int jobId, boolean reschedule); /* * Called to deqeue next work item for the job. */ + @UnsupportedAppUsage JobWorkItem dequeueWork(int jobId); /* * Called to report that job has completed processing a work item. */ + @UnsupportedAppUsage boolean completeWork(int jobId, int workId); /* * Tell the job manager that the client is done with its execution, so that it can go on to @@ -59,5 +63,6 @@ interface IJobCallback { * @param jobId Unique integer used to identify this job. * @param reschedule Whether or not to reschedule this job. */ + @UnsupportedAppUsage void jobFinished(int jobId, boolean reschedule); } diff --git a/core/java/android/app/job/IJobService.aidl b/core/java/android/app/job/IJobService.aidl index 7f55d29e87ed..22ad252b9639 100644 --- a/core/java/android/app/job/IJobService.aidl +++ b/core/java/android/app/job/IJobService.aidl @@ -26,7 +26,9 @@ import android.app.job.JobParameters; */ oneway interface IJobService { /** Begin execution of application's job. */ + @UnsupportedAppUsage void startJob(in JobParameters jobParams); /** Stop execution of application's job. */ + @UnsupportedAppUsage void stopJob(in JobParameters jobParams); } 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/app/usage/IUsageStatsManager.aidl b/core/java/android/app/usage/IUsageStatsManager.aidl index 971352783dcb..763af9ec28fb 100644 --- a/core/java/android/app/usage/IUsageStatsManager.aidl +++ b/core/java/android/app/usage/IUsageStatsManager.aidl @@ -28,8 +28,10 @@ import java.util.Map; * {@hide} */ interface IUsageStatsManager { + @UnsupportedAppUsage ParceledListSlice queryUsageStats(int bucketType, long beginTime, long endTime, String callingPackage); + @UnsupportedAppUsage ParceledListSlice queryConfigurationStats(int bucketType, long beginTime, long endTime, String callingPackage); ParceledListSlice queryEventStats(int bucketType, long beginTime, long endTime, @@ -38,7 +40,9 @@ interface IUsageStatsManager { UsageEvents queryEventsForPackage(long beginTime, long endTime, String callingPackage); UsageEvents queryEventsForUser(long beginTime, long endTime, int userId, String callingPackage); UsageEvents queryEventsForPackageForUser(long beginTime, long endTime, int userId, String pkg, String callingPackage); + @UnsupportedAppUsage void setAppInactive(String packageName, boolean inactive, int userId); + @UnsupportedAppUsage boolean isAppInactive(String packageName, int userId); void whitelistAppTemporarily(String packageName, long duration, int userId); void onCarrierPrivilegedAppsChanged(); diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 4afd520c99c5..ab8c196edccd 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -3044,7 +3044,7 @@ public final class BluetoothAdapter { * socket will be encrypted. * <p>Use {@link BluetoothServerSocket#accept} to retrieve incoming connections from a listening * {@link BluetoothServerSocket}. - * <p>The system will assign a dynamic PSM value. This PSM value can be read from the {#link + * <p>The system will assign a dynamic PSM value. This PSM value can be read from the {@link * BluetoothServerSocket#getPsm()} and this value will be released when this server socket is * closed, Bluetooth is turned off, or the application exits unexpectedly. * <p>The mechanism of disclosing the assigned dynamic PSM value to the initiating peer is @@ -3102,7 +3102,7 @@ public final class BluetoothAdapter { * <p>Use {@link BluetoothServerSocket#accept} to retrieve incoming connections from a listening * {@link BluetoothServerSocket}. * <p>The system will assign a dynamic protocol/service multiplexer (PSM) value. This PSM value - * can be read from the {#link BluetoothServerSocket#getPsm()} and this value will be released + * can be read from the {@link BluetoothServerSocket#getPsm()} and this value will be released * when this server socket is closed, Bluetooth is turned off, or the application exits * unexpectedly. * <p>The mechanism of disclosing the assigned dynamic PSM value to the initiating peer is diff --git a/core/java/android/bluetooth/BluetoothCodecStatus.java b/core/java/android/bluetooth/BluetoothCodecStatus.java index 78560d2de420..32bb681f2e89 100644 --- a/core/java/android/bluetooth/BluetoothCodecStatus.java +++ b/core/java/android/bluetooth/BluetoothCodecStatus.java @@ -74,8 +74,8 @@ public final class BluetoothCodecStatus implements Parcelable { * @param c2 the second array of capabilities to compare * @return true if both arrays contain same capabilities */ - private static boolean sameCapabilities(BluetoothCodecConfig[] c1, - BluetoothCodecConfig[] c2) { + public static boolean sameCapabilities(BluetoothCodecConfig[] c1, + BluetoothCodecConfig[] c2) { if (c1 == null) { return (c2 == null); } diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 23f29041487d..4d8dc35d7148 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -793,7 +793,7 @@ public final class BluetoothDevice implements Parcelable { public static final int ACCESS_REJECTED = 2; /** - * No preferrence of physical transport for GATT connections to remote dual-mode devices + * No preference of physical transport for GATT connections to remote dual-mode devices */ public static final int TRANSPORT_AUTO = 0; @@ -1799,7 +1799,7 @@ public final class BluetoothDevice implements Parcelable { * For example, for Bluetooth 2.1 devices, if any of the devices does not * have an input and output capability or just has the ability to * display a numeric key, a secure socket connection is not possible. - * In such a case, use {#link createInsecureRfcommSocket}. + * In such a case, use {@link createInsecureRfcommSocket}. * For more details, refer to the Security Model section 5.2 (vol 3) of * Bluetooth Core Specification version 2.1 + EDR. * <p>Use {@link BluetoothSocket#connect} to initiate the outgoing @@ -1834,7 +1834,7 @@ public final class BluetoothDevice implements Parcelable { * For example, for Bluetooth 2.1 devices, if any of the devices does not * have an input and output capability or just has the ability to * display a numeric key, a secure socket connection is not possible. - * In such a case, use {#link createInsecureRfcommSocket}. + * In such a case, use {@link createInsecureRfcommSocket}. * For more details, refer to the Security Model section 5.2 (vol 3) of * Bluetooth Core Specification version 2.1 + EDR. * <p>Use {@link BluetoothSocket#connect} to initiate the outgoing @@ -1891,7 +1891,7 @@ public final class BluetoothDevice implements Parcelable { * For example, for Bluetooth 2.1 devices, if any of the devices does not * have an input and output capability or just has the ability to * display a numeric key, a secure socket connection is not possible. - * In such a case, use {#link createInsecureRfcommSocketToServiceRecord}. + * In such a case, use {@link #createInsecureRfcommSocketToServiceRecord}. * For more details, refer to the Security Model section 5.2 (vol 3) of * Bluetooth Core Specification version 2.1 + EDR. * <p>Hint: If you are connecting to a Bluetooth serial board then try @@ -2174,8 +2174,7 @@ public final class BluetoothDevice implements Parcelable { * <p>The remote device will be authenticated and communication on this socket will be * encrypted. * <p> Use this socket if an authenticated socket link is possible. Authentication refers - * to the authentication of the link key to prevent man-in-the-middle type of attacks. When a - * secure socket connection is not possible, use {#link createInsecureL2capChannel(int)}. + * to the authentication of the link key to prevent man-in-the-middle type of attacks. * * @param psm dynamic PSM value from remote device * @return a CoC #BluetoothSocket ready for an outgoing connection diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java index b248b896cdb0..d616b8f92d3a 100644 --- a/core/java/android/bluetooth/BluetoothGatt.java +++ b/core/java/android/bluetooth/BluetoothGatt.java @@ -1293,7 +1293,7 @@ public final class BluetoothGatt implements BluetoothProfile { * <p>After all characteristics have been queued up and verified, * {@link #executeReliableWrite} will execute all writes. If a characteristic * was not written correctly, calling {@link #abortReliableWrite} will - * cancel the current transaction without commiting any values on the + * cancel the current transaction without committing any values on the * remote device. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} permission. diff --git a/core/java/android/bluetooth/BluetoothGattServer.java b/core/java/android/bluetooth/BluetoothGattServer.java index ef1b0bd71885..13b1b4f93cf0 100644 --- a/core/java/android/bluetooth/BluetoothGattServer.java +++ b/core/java/android/bluetooth/BluetoothGattServer.java @@ -522,7 +522,7 @@ public final class BluetoothGattServer implements BluetoothProfile { * {@link BluetoothGattServerCallback#onConnectionStateChange} callback will be * invoked when the connection state changes as a result of this function. * - * <p>The autoConnect paramter determines whether to actively connect to + * <p>The autoConnect parameter determines whether to actively connect to * the remote device, or rather passively scan and finalize the connection * when the remote device is in range/available. Generally, the first ever * connection to a device should be direct (autoConnect set to false) and @@ -695,7 +695,7 @@ public final class BluetoothGattServer implements BluetoothProfile { /** * Add a service to the list of services to be hosted. * - * <p>Once a service has been addded to the the list, the service and its + * <p>Once a service has been addded to the list, the service and its * included characteristics will be provided by the local device. * * <p>If the local device has already exposed services when this function diff --git a/core/java/android/bluetooth/BluetoothHearingAid.java b/core/java/android/bluetooth/BluetoothHearingAid.java index 23a8159de4c3..c5a0bbd2f802 100644 --- a/core/java/android/bluetooth/BluetoothHearingAid.java +++ b/core/java/android/bluetooth/BluetoothHearingAid.java @@ -17,6 +17,7 @@ package android.bluetooth; import android.Manifest; +import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; @@ -302,7 +303,7 @@ public final class BluetoothHearingAid implements BluetoothProfile { * {@inheritDoc} */ @Override - public List<BluetoothDevice> getConnectedDevices() { + public @NonNull List<BluetoothDevice> getConnectedDevices() { if (VDBG) log("getConnectedDevices()"); try { mServiceLock.readLock().lock(); @@ -322,8 +323,8 @@ public final class BluetoothHearingAid implements BluetoothProfile { /** * {@inheritDoc} */ - @Override - public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) { + @Override public @NonNull List<BluetoothDevice> getDevicesMatchingConnectionStates( + @NonNull int[] states) { if (VDBG) log("getDevicesMatchingStates()"); try { mServiceLock.readLock().lock(); @@ -344,7 +345,7 @@ public final class BluetoothHearingAid implements BluetoothProfile { * {@inheritDoc} */ @Override - public int getConnectionState(BluetoothDevice device) { + public int getConnectionState(@NonNull BluetoothDevice device) { if (VDBG) log("getState(" + device + ")"); try { mServiceLock.readLock().lock(); diff --git a/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java b/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java index 237082e4cb66..2f0b44f76ffb 100644 --- a/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java +++ b/core/java/android/bluetooth/BluetoothHidDeviceAppSdpSettings.java @@ -18,6 +18,7 @@ package android.bluetooth; import android.os.Parcel; import android.os.Parcelable; +import android.util.EventLog; /** @@ -30,6 +31,8 @@ import android.os.Parcelable; */ public final class BluetoothHidDeviceAppSdpSettings implements Parcelable { + private static final int MAX_DESCRIPTOR_SIZE = 2048; + private final String mName; private final String mDescription; private final String mProvider; @@ -55,6 +58,12 @@ public final class BluetoothHidDeviceAppSdpSettings implements Parcelable { mDescription = description; mProvider = provider; mSubclass = subclass; + + if (descriptors == null || descriptors.length > MAX_DESCRIPTOR_SIZE) { + EventLog.writeEvent(0x534e4554, "119819889", -1, ""); + throw new IllegalArgumentException("descriptors must be not null and shorter than " + + MAX_DESCRIPTOR_SIZE); + } mDescriptors = descriptors.clone(); } diff --git a/core/java/android/bluetooth/BluetoothServerSocket.java b/core/java/android/bluetooth/BluetoothServerSocket.java index 5fc344a14f99..4e886250b4fa 100644 --- a/core/java/android/bluetooth/BluetoothServerSocket.java +++ b/core/java/android/bluetooth/BluetoothServerSocket.java @@ -203,8 +203,8 @@ public final class BluetoothServerSocket implements Closeable { /** * Returns the assigned dynamic protocol/service multiplexer (PSM) value for the listening L2CAP * Connection-oriented Channel (CoC) server socket. This server socket must be returned by the - * {#link BluetoothAdapter.listenUsingL2capChannel()} or {#link - * BluetoothAdapter.listenUsingInsecureL2capChannel()}. The returned value is undefined if this + * {@link BluetoothAdapter#listenUsingL2capChannel()} or {@link + * BluetoothAdapter#listenUsingInsecureL2capChannel()}. The returned value is undefined if this * method is called on non-L2CAP server sockets. * * @return the assigned PSM or LE_PSM value depending on transport diff --git a/core/java/android/bluetooth/le/AdvertisingSetCallback.java b/core/java/android/bluetooth/le/AdvertisingSetCallback.java index 58a3696fc092..51324fdb01ff 100644 --- a/core/java/android/bluetooth/le/AdvertisingSetCallback.java +++ b/core/java/android/bluetooth/le/AdvertisingSetCallback.java @@ -56,7 +56,7 @@ public abstract class AdvertisingSetCallback { /** * Callback triggered in response to {@link BluetoothLeAdvertiser#startAdvertisingSet} * indicating result of the operation. If status is ADVERTISE_SUCCESS, then advertisingSet - * contains the started set and it is advertising. If error occured, advertisingSet is + * contains the started set and it is advertising. If error occurred, advertisingSet is * null, and status will be set to proper error code. * * @param advertisingSet The advertising set that was started or null if error. diff --git a/core/java/android/content/AbstractThreadedSyncAdapter.java b/core/java/android/content/AbstractThreadedSyncAdapter.java index b528e397906f..a086a308d0d9 100644 --- a/core/java/android/content/AbstractThreadedSyncAdapter.java +++ b/core/java/android/content/AbstractThreadedSyncAdapter.java @@ -95,7 +95,7 @@ import java.util.concurrent.atomic.AtomicInteger; * the SyncManager will wait until the sync adapter is not in use before requesting that * it sync an account's data. * <li><code>android:isAlwaysSyncable</code> defaults to false and if true tells the SyncManager - * to intialize the isSyncable state to 1 for that sync adapter for each account that is added. + * to initialize the isSyncable state to 1 for that sync adapter for each account that is added. * <li><code>android:syncAdapterSettingsAction</code> defaults to null and if supplied it * specifies an Intent action of an activity that can be used to adjust the sync adapter's * sync settings. The activity must live in the same package as the sync adapter. diff --git a/core/java/android/content/ClipData.java b/core/java/android/content/ClipData.java index 089cf1098ffc..ed3d4557061e 100644 --- a/core/java/android/content/ClipData.java +++ b/core/java/android/content/ClipData.java @@ -224,7 +224,7 @@ public class ClipData implements Parcelable { * Create an Item consisting of a single block of (possibly styled) text, * with an alternative HTML formatted representation. You <em>must</em> * supply a plain text representation in addition to HTML text; coercion - * will not be done from HTML formated text into plain text. + * will not be done from HTML formatted text into plain text. */ public Item(CharSequence text, String htmlText) { mText = text; @@ -268,7 +268,7 @@ public class ClipData implements Parcelable { * Create a complex Item, containing multiple representations of * text, HTML text, Intent, and/or URI. If providing HTML text, you * <em>must</em> supply a plain text representation as well; coercion - * will not be done from HTML formated text into plain text. + * will not be done from HTML formatted text into plain text. */ public Item(CharSequence text, String htmlText, Intent intent, Uri uri) { if (htmlText != null && text == null) { diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java index d3393b9193ce..2997e984add4 100644 --- a/core/java/android/content/ContentProvider.java +++ b/core/java/android/content/ContentProvider.java @@ -98,6 +98,7 @@ import java.util.Objects; * <p>For more information about using content providers, read the * <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> * developer guide.</p> + * </div> */ public abstract class ContentProvider implements ComponentCallbacks2 { diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java index 6bede131c817..fccb5eba4ae4 100644 --- a/core/java/android/content/ContentProviderNative.java +++ b/core/java/android/content/ContentProviderNative.java @@ -795,5 +795,6 @@ final class ContentProviderProxy implements IContentProvider } } + @UnsupportedAppUsage private IBinder mRemote; } diff --git a/core/java/android/content/ContentProviderOperation.java b/core/java/android/content/ContentProviderOperation.java index 7dc45776715c..6a3fa6b2f197 100644 --- a/core/java/android/content/ContentProviderOperation.java +++ b/core/java/android/content/ContentProviderOperation.java @@ -637,7 +637,7 @@ public class ContentProviderOperation implements Parcelable { /** * The selection and arguments to use. An occurrence of '?' in the selection will be - * replaced with the corresponding occurence of the selection argument. Any of the + * replaced with the corresponding occurrence of the selection argument. Any of the * selection arguments may be overwritten by a selection argument back reference as * specified by {@link #withSelectionBackReference}. * This can only be used with builders of type update, delete, or assert. diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index ac98e12bda3e..69a3b74640b4 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -1868,7 +1868,7 @@ public abstract class ContentResolver { * that services the content at uri, starting the provider if necessary. Returns * null if there is no provider associated wih the uri. The caller must indicate that they are * done with the provider by calling {@link ContentProviderClient#release} which will allow - * the system to release the provider it it determines that there is no other reason for + * the system to release the provider if it determines that there is no other reason for * keeping it active. * @param uri specifies which provider should be acquired * @return a {@link ContentProviderClient} that is associated with the {@link ContentProvider} @@ -1888,7 +1888,7 @@ public abstract class ContentResolver { * with the authority of name, starting the provider if necessary. Returns * null if there is no provider associated wih the uri. The caller must indicate that they are * done with the provider by calling {@link ContentProviderClient#release} which will allow - * the system to release the provider it it determines that there is no other reason for + * the system to release the provider if it determines that there is no other reason for * keeping it active. * @param name specifies which provider should be acquired * @return a {@link ContentProviderClient} that is associated with the {@link ContentProvider} diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index b072740ccfdf..136657ff555e 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -187,7 +187,7 @@ public abstract class Context { * * <p>This was the legacy (but undocumented) behavior in and * before Gingerbread (Android 2.3) and this flag is implied when - * targetting such releases. For applications targetting SDK + * targeting such releases. For applications targeting SDK * versions <em>greater than</em> Android 2.3, this flag must be * explicitly set if desired. * @@ -2840,7 +2840,7 @@ public abstract class Context { * * @param service Description of the service to be stopped. The Intent must be either * fully explicit (supplying a component name) or specify a specific package - * name it is targetted to. + * name it is targeted to. * * @return If there is a service matching the given Intent that is already * running, then it is stopped and {@code true} is returned; else {@code false} is returned. @@ -3395,7 +3395,7 @@ public abstract class Context { /** * Use with {@link #getSystemService(String)} to retrieve a - * {@link android.app.NotificationManager} for controlling keyguard. + * {@link android.app.KeyguardManager} for controlling keyguard. * * @see #getSystemService(String) * @see android.app.KeyguardManager diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java index 4e46d5716c7b..4ccafab741d8 100644 --- a/core/java/android/content/CursorLoader.java +++ b/core/java/android/content/CursorLoader.java @@ -36,7 +36,7 @@ import java.util.Arrays; * perform, either through the * {@link #CursorLoader(Context, Uri, String[], String, String[], String)} or * creating an empty instance with {@link #CursorLoader(Context)} and filling - * in the desired paramters with {@link #setUri(Uri)}, {@link #setSelection(String)}, + * in the desired parameters with {@link #setUri(Uri)}, {@link #setSelection(String)}, * {@link #setSelectionArgs(String[])}, {@link #setSortOrder(String)}, * and {@link #setProjection(String[])}. * diff --git a/core/java/android/content/IContentService.aidl b/core/java/android/content/IContentService.aidl index dc1766611c3b..44bfd3c76933 100644 --- a/core/java/android/content/IContentService.aidl +++ b/core/java/android/content/IContentService.aidl @@ -61,6 +61,7 @@ interface IContentService { */ void sync(in SyncRequest request); void syncAsUser(in SyncRequest request, int userId); + @UnsupportedAppUsage void cancelSync(in Account account, String authority, in ComponentName cname); void cancelSyncAsUser(in Account account, String authority, in ComponentName cname, int userId); @@ -118,6 +119,7 @@ interface IContentService { * Check if this account/provider is syncable. * @return >0 if it is syncable, 0 if not, and <0 if the state isn't known yet. */ + @UnsupportedAppUsage int getIsSyncable(in Account account, String providerName); int getIsSyncableAsUser(in Account account, String providerName, int userId); @@ -127,9 +129,11 @@ interface IContentService { */ void setIsSyncable(in Account account, String providerName, int syncable); + @UnsupportedAppUsage void setMasterSyncAutomatically(boolean flag); void setMasterSyncAutomaticallyAsUser(boolean flag, int userId); + @UnsupportedAppUsage boolean getMasterSyncAutomatically(); boolean getMasterSyncAutomaticallyAsUser(int userId); @@ -140,6 +144,7 @@ interface IContentService { * Returns the types of the SyncAdapters that are registered with the system. * @return Returns the types of the SyncAdapters that are registered with the system. */ + @UnsupportedAppUsage SyncAdapterType[] getSyncAdapterTypes(); SyncAdapterType[] getSyncAdapterTypesAsUser(int userId); @@ -153,6 +158,7 @@ interface IContentService { * @param cname component to identify sync service, must be null if account/providerName are * non-null. */ + @UnsupportedAppUsage boolean isSyncActive(in Account account, String authority, in ComponentName cname); /** diff --git a/core/java/android/content/IIntentReceiver.aidl b/core/java/android/content/IIntentReceiver.aidl index 3d9272388e03..2b45021db90e 100644 --- a/core/java/android/content/IIntentReceiver.aidl +++ b/core/java/android/content/IIntentReceiver.aidl @@ -27,6 +27,7 @@ import android.os.Bundle; * {@hide} */ oneway interface IIntentReceiver { + @UnsupportedAppUsage void performReceive(in Intent intent, int resultCode, String data, in Bundle extras, boolean ordered, boolean sticky, int sendingUser); } diff --git a/core/java/android/content/ISyncAdapter.aidl b/core/java/android/content/ISyncAdapter.aidl index 0eb581e6b585..9242d0289cfa 100644 --- a/core/java/android/content/ISyncAdapter.aidl +++ b/core/java/android/content/ISyncAdapter.aidl @@ -32,6 +32,7 @@ oneway interface ISyncAdapter { * * @param cb If called back with {@code false} accounts are not synced. */ + @UnsupportedAppUsage void onUnsyncableAccount(ISyncAdapterUnsyncableAccountCallback cb); /** @@ -44,6 +45,7 @@ oneway interface ISyncAdapter { * @param account the account that should be synced * @param extras SyncAdapter-specific parameters */ + @UnsupportedAppUsage void startSync(ISyncContext syncContext, String authority, in Account account, in Bundle extras); @@ -52,5 +54,6 @@ oneway interface ISyncAdapter { * after the ISyncContext.onFinished() for that sync was called. * @param syncContext the ISyncContext that was passed to {@link #startSync} */ + @UnsupportedAppUsage void cancelSync(ISyncContext syncContext); } diff --git a/core/java/android/content/ISyncServiceAdapter.aidl b/core/java/android/content/ISyncServiceAdapter.aidl index d419307e7fa2..29f3a406e5a9 100644 --- a/core/java/android/content/ISyncServiceAdapter.aidl +++ b/core/java/android/content/ISyncServiceAdapter.aidl @@ -35,11 +35,13 @@ oneway interface ISyncServiceAdapter { * @param extras SyncAdapter-specific parameters. * */ + @UnsupportedAppUsage void startSync(ISyncContext syncContext, in Bundle extras); /** * Cancel the currently ongoing sync. */ + @UnsupportedAppUsage void cancelSync(ISyncContext syncContext); } diff --git a/core/java/android/content/ISyncStatusObserver.aidl b/core/java/android/content/ISyncStatusObserver.aidl index eb2684544abf..64bf3bd355e4 100644 --- a/core/java/android/content/ISyncStatusObserver.aidl +++ b/core/java/android/content/ISyncStatusObserver.aidl @@ -20,5 +20,6 @@ package android.content; * @hide */ oneway interface ISyncStatusObserver { + @UnsupportedAppUsage void onStatusChanged(int which); } diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 2963947c03c6..b879047f05dc 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -5562,7 +5562,7 @@ public class Intent implements Parcelable, Cloneable { /** * If set and this intent is being used to launch a new activity from an * existing one, then the reply target of the existing activity will be - * transfered to the new activity. This way the new activity can call + * transferred to the new activity. This way, the new activity can call * {@link android.app.Activity#setResult} and have that result sent back to * the reply target of the original activity. */ diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java index 0469a9006b25..36d8a3720b5e 100644 --- a/core/java/android/content/IntentFilter.java +++ b/core/java/android/content/IntentFilter.java @@ -479,7 +479,7 @@ public class IntentFilter implements Parcelable { /** * Modify priority of this filter. This only affects receiver filters. * The priority of activity filters are set in XML and cannot be changed - * programatically. The default priority is 0. Positive values will be + * programmatically. The default priority is 0. Positive values will be * before the default, lower values will be after it. Applications should * use a value that is larger than {@link #SYSTEM_LOW_PRIORITY} and * smaller than {@link #SYSTEM_HIGH_PRIORITY} . diff --git a/core/java/android/content/om/IOverlayManager.aidl b/core/java/android/content/om/IOverlayManager.aidl index 5b3c9dd93370..722c128c0502 100644 --- a/core/java/android/content/om/IOverlayManager.aidl +++ b/core/java/android/content/om/IOverlayManager.aidl @@ -37,6 +37,7 @@ interface IOverlayManager { * mapped to lists of overlays; if no overlays exist for the * requested user, an empty map is returned. */ + @UnsupportedAppUsage Map getAllOverlays(in int userId); /** @@ -60,6 +61,7 @@ interface IOverlayManager { * @return The OverlayInfo for the overlay package; or null if no such * overlay package exists. */ + @UnsupportedAppUsage OverlayInfo getOverlayInfo(in String packageName, in int userId); /** diff --git a/core/java/android/content/pm/AndroidTestBaseUpdater.java b/core/java/android/content/pm/AndroidTestBaseUpdater.java index 2aaac0280a0e..6a1778cfd3f6 100644 --- a/core/java/android/content/pm/AndroidTestBaseUpdater.java +++ b/core/java/android/content/pm/AndroidTestBaseUpdater.java @@ -19,11 +19,12 @@ import static android.content.pm.SharedLibraryNames.ANDROID_TEST_BASE; import static android.content.pm.SharedLibraryNames.ANDROID_TEST_RUNNER; import android.content.pm.PackageParser.Package; +import android.os.Build; import com.android.internal.annotations.VisibleForTesting; /** - * Updates a package to ensure that if it targets < P that the android.test.base library is + * Updates a package to ensure that if it targets <= P that the android.test.base library is * included by default. * * <p>This is separated out so that it can be conditionally included at build time depending on @@ -37,12 +38,17 @@ import com.android.internal.annotations.VisibleForTesting; @VisibleForTesting public class AndroidTestBaseUpdater extends PackageSharedLibraryUpdater { + private static boolean apkTargetsApiLevelLessThanOrEqualToP(Package pkg) { + int targetSdkVersion = pkg.applicationInfo.targetSdkVersion; + return targetSdkVersion <= Build.VERSION_CODES.P; + } + @Override public void updatePackage(Package pkg) { - // Packages targeted at <= O_MR1 expect the classes in the android.test.base library + // Packages targeted at <= P expect the classes in the android.test.base library // to be accessible so this maintains backward compatibility by adding the // android.test.base library to those packages. - if (apkTargetsApiLevelLessThanOrEqualToOMR1(pkg)) { + if (apkTargetsApiLevelLessThanOrEqualToP(pkg)) { prefixRequiredLibrary(pkg, ANDROID_TEST_BASE); } else { // If a package already depends on android.test.runner then add a dependency on diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index da8811a6f636..3f25959f8e8e 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -237,7 +237,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** * Value for {@link #flags}: true when the application knows how to - * accomodate different screen densities. Corresponds to + * accommodate different screen densities. Corresponds to * {@link android.R.styleable#AndroidManifestSupportsScreens_anyDensity * android:anyDensity}. */ diff --git a/core/java/android/content/pm/IPackageDataObserver.aidl b/core/java/android/content/pm/IPackageDataObserver.aidl index d010ee432752..926ecda04ba8 100644 --- a/core/java/android/content/pm/IPackageDataObserver.aidl +++ b/core/java/android/content/pm/IPackageDataObserver.aidl @@ -24,5 +24,6 @@ package android.content.pm; * {@hide} */ oneway interface IPackageDataObserver { + @UnsupportedAppUsage void onRemoveCompleted(in String packageName, boolean succeeded); } diff --git a/core/java/android/content/pm/IPackageDeleteObserver.aidl b/core/java/android/content/pm/IPackageDeleteObserver.aidl index 2e2d16ebd7fb..faae81e3254b 100644 --- a/core/java/android/content/pm/IPackageDeleteObserver.aidl +++ b/core/java/android/content/pm/IPackageDeleteObserver.aidl @@ -23,6 +23,7 @@ package android.content.pm; * {@hide} */ oneway interface IPackageDeleteObserver { + @UnsupportedAppUsage void packageDeleted(in String packageName, in int returnCode); } diff --git a/core/java/android/content/pm/IPackageDeleteObserver2.aidl b/core/java/android/content/pm/IPackageDeleteObserver2.aidl index bff3baa55768..ea8096755e5c 100644 --- a/core/java/android/content/pm/IPackageDeleteObserver2.aidl +++ b/core/java/android/content/pm/IPackageDeleteObserver2.aidl @@ -21,5 +21,6 @@ import android.content.Intent; /** {@hide} */ oneway interface IPackageDeleteObserver2 { void onUserActionRequired(in Intent intent); + @UnsupportedAppUsage void onPackageDeleted(String packageName, int returnCode, String msg); } diff --git a/core/java/android/content/pm/IPackageInstallObserver2.aidl b/core/java/android/content/pm/IPackageInstallObserver2.aidl index bb5f22a2faa1..ed2eb7dceff5 100644 --- a/core/java/android/content/pm/IPackageInstallObserver2.aidl +++ b/core/java/android/content/pm/IPackageInstallObserver2.aidl @@ -25,6 +25,7 @@ import android.os.Bundle; * @hide */ oneway interface IPackageInstallObserver2 { + @UnsupportedAppUsage void onUserActionRequired(in Intent intent); /** @@ -42,5 +43,6 @@ oneway interface IPackageInstallObserver2 { * </tr> * </table> */ + @UnsupportedAppUsage void onPackageInstalled(String basePackageName, int returnCode, String msg, in Bundle extras); } diff --git a/core/java/android/content/pm/IPackageInstaller.aidl b/core/java/android/content/pm/IPackageInstaller.aidl index ecc8cd678af1..fa2393329816 100644 --- a/core/java/android/content/pm/IPackageInstaller.aidl +++ b/core/java/android/content/pm/IPackageInstaller.aidl @@ -45,6 +45,7 @@ interface IPackageInstaller { void registerCallback(IPackageInstallerCallback callback, int userId); void unregisterCallback(IPackageInstallerCallback callback); + @UnsupportedAppUsage void uninstall(in VersionedPackage versionedPackage, String callerPackageName, int flags, in IntentSender statusReceiver, int userId); diff --git a/core/java/android/content/pm/IPackageInstallerCallback.aidl b/core/java/android/content/pm/IPackageInstallerCallback.aidl index 974eb1ede5b2..ee265007b39d 100644 --- a/core/java/android/content/pm/IPackageInstallerCallback.aidl +++ b/core/java/android/content/pm/IPackageInstallerCallback.aidl @@ -18,9 +18,14 @@ package android.content.pm; /** {@hide} */ oneway interface IPackageInstallerCallback { + @UnsupportedAppUsage void onSessionCreated(int sessionId); + @UnsupportedAppUsage void onSessionBadgingChanged(int sessionId); + @UnsupportedAppUsage void onSessionActiveChanged(int sessionId, boolean active); + @UnsupportedAppUsage void onSessionProgressChanged(int sessionId, float progress); + @UnsupportedAppUsage void onSessionFinished(int sessionId, boolean success); } diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index da7d6643c3fb..48165dcf45f2 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -62,45 +62,60 @@ import android.content.IntentSender; */ interface IPackageManager { void checkPackageStartable(String packageName, int userId); + @UnsupportedAppUsage boolean isPackageAvailable(String packageName, int userId); + @UnsupportedAppUsage PackageInfo getPackageInfo(String packageName, int flags, int userId); PackageInfo getPackageInfoVersioned(in VersionedPackage versionedPackage, int flags, int userId); + @UnsupportedAppUsage int getPackageUid(String packageName, int flags, int userId); int[] getPackageGids(String packageName, int flags, int userId); + @UnsupportedAppUsage String[] currentToCanonicalPackageNames(in String[] names); + @UnsupportedAppUsage String[] canonicalToCurrentPackageNames(in String[] names); PermissionInfo getPermissionInfo(String name, String packageName, int flags); ParceledListSlice queryPermissionsByGroup(String group, int flags); + @UnsupportedAppUsage PermissionGroupInfo getPermissionGroupInfo(String name, int flags); ParceledListSlice getAllPermissionGroups(int flags); + @UnsupportedAppUsage ApplicationInfo getApplicationInfo(String packageName, int flags ,int userId); + @UnsupportedAppUsage ActivityInfo getActivityInfo(in ComponentName className, int flags, int userId); boolean activitySupportsIntent(in ComponentName className, in Intent intent, String resolvedType); + @UnsupportedAppUsage ActivityInfo getReceiverInfo(in ComponentName className, int flags, int userId); + @UnsupportedAppUsage ServiceInfo getServiceInfo(in ComponentName className, int flags, int userId); + @UnsupportedAppUsage ProviderInfo getProviderInfo(in ComponentName className, int flags, int userId); + @UnsupportedAppUsage int checkPermission(String permName, String pkgName, int userId); int checkUidPermission(String permName, int uid); + @UnsupportedAppUsage boolean addPermission(in PermissionInfo info); + @UnsupportedAppUsage void removePermission(String name); + @UnsupportedAppUsage void grantRuntimePermission(String packageName, String permissionName, int userId); void revokeRuntimePermission(String packageName, String permissionName, int userId); @@ -119,33 +134,43 @@ interface IPackageManager { boolean isProtectedBroadcast(String actionName); + @UnsupportedAppUsage int checkSignatures(String pkg1, String pkg2); + @UnsupportedAppUsage int checkUidSignatures(int uid1, int uid2); List<String> getAllPackages(); + @UnsupportedAppUsage String[] getPackagesForUid(int uid); + @UnsupportedAppUsage String getNameForUid(int uid); String[] getNamesForUids(in int[] uids); + @UnsupportedAppUsage int getUidForSharedUser(String sharedUserName); + @UnsupportedAppUsage int getFlagsForUid(int uid); int getPrivateFlagsForUid(int uid); + @UnsupportedAppUsage boolean isUidPrivileged(int uid); + @UnsupportedAppUsage String[] getAppOpPermissionPackages(String permissionName); + @UnsupportedAppUsage ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId); ResolveInfo findPersistentPreferredActivity(in Intent intent, int userId); boolean canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId); + @UnsupportedAppUsage ParceledListSlice queryIntentActivities(in Intent intent, String resolvedType, int flags, int userId); @@ -172,6 +197,7 @@ interface IPackageManager { * limit that kicks in when flags are included that bloat up the data * returned. */ + @UnsupportedAppUsage ParceledListSlice getInstalledPackages(int flags, in int userId); /** @@ -189,6 +215,7 @@ interface IPackageManager { * limit that kicks in when flags are included that bloat up the data * returned. */ + @UnsupportedAppUsage ParceledListSlice getInstalledApplications(int flags, int userId); /** @@ -209,20 +236,24 @@ interface IPackageManager { * @param outInfo Filled in with a list of the ProviderInfo for each * name in 'outNames'. */ + @UnsupportedAppUsage void querySyncProviders(inout List<String> outNames, inout List<ProviderInfo> outInfo); ParceledListSlice queryContentProviders( String processName, int uid, int flags, String metaDataKey); + @UnsupportedAppUsage InstrumentationInfo getInstrumentationInfo( in ComponentName className, int flags); + @UnsupportedAppUsage ParceledListSlice queryInstrumentation( String targetPackage, int flags); void finishPackageInstall(int token, boolean didLaunch); + @UnsupportedAppUsage void setInstallerPackageName(in String targetPackage, in String installerPackageName); void setApplicationCategoryHint(String packageName, int categoryHint, String callerPackageName); @@ -242,24 +273,30 @@ interface IPackageManager { void deletePackageVersioned(in VersionedPackage versionedPackage, IPackageDeleteObserver2 observer, int userId, int flags); + @UnsupportedAppUsage String getInstallerPackageName(in String packageName); void resetApplicationPreferences(int userId); + @UnsupportedAppUsage ResolveInfo getLastChosenActivity(in Intent intent, String resolvedType, int flags); + @UnsupportedAppUsage void setLastChosenActivity(in Intent intent, String resolvedType, int flags, in IntentFilter filter, int match, in ComponentName activity); void addPreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity, int userId); + @UnsupportedAppUsage void replacePreferredActivity(in IntentFilter filter, int match, in ComponentName[] set, in ComponentName activity, int userId); + @UnsupportedAppUsage void clearPackagePreferredActivities(String packageName); + @UnsupportedAppUsage int getPreferredActivities(out List<IntentFilter> outFilters, out List<ComponentName> outActivities, String packageName); @@ -296,6 +333,7 @@ interface IPackageManager { * Report the set of 'Home' activity candidates, plus (if any) which of them * is the current "always use this one" setting. */ + @UnsupportedAppUsage ComponentName getHomeActivities(out List<ResolveInfo> outHomeCandidates); void setHomeActivity(in ComponentName className, int userId); @@ -303,23 +341,27 @@ interface IPackageManager { /** * As per {@link android.content.pm.PackageManager#setComponentEnabledSetting}. */ + @UnsupportedAppUsage void setComponentEnabledSetting(in ComponentName componentName, in int newState, in int flags, int userId); /** * As per {@link android.content.pm.PackageManager#getComponentEnabledSetting}. */ + @UnsupportedAppUsage int getComponentEnabledSetting(in ComponentName componentName, int userId); /** * As per {@link android.content.pm.PackageManager#setApplicationEnabledSetting}. */ + @UnsupportedAppUsage void setApplicationEnabledSetting(in String packageName, in int newState, int flags, int userId, String callingPackage); /** * As per {@link android.content.pm.PackageManager#getApplicationEnabledSetting}. */ + @UnsupportedAppUsage int getApplicationEnabledSetting(in String packageName, int userId); /** @@ -337,6 +379,7 @@ interface IPackageManager { * Set whether the given package should be considered stopped, making * it not visible to implicit intents that filter out stopped packages. */ + @UnsupportedAppUsage void setPackageStoppedState(String packageName, boolean stopped, int userId); /** @@ -392,6 +435,7 @@ interface IPackageManager { * files need to be deleted * @param observer a callback used to notify when the deletion is finished. */ + @UnsupportedAppUsage void deleteApplicationCacheFiles(in String packageName, IPackageDataObserver observer); /** @@ -432,6 +476,7 @@ interface IPackageManager { * Get a list of shared libraries that are available on the * system. */ + @UnsupportedAppUsage String[] getSystemSharedLibraryNames(); /** @@ -443,8 +488,10 @@ interface IPackageManager { boolean hasSystemFeature(String name, int version); void enterSafeMode(); + @UnsupportedAppUsage boolean isSafeMode(); void systemReady(); + @UnsupportedAppUsage boolean hasSystemUidErrors(); /** @@ -563,9 +610,11 @@ interface IPackageManager { int movePackage(in String packageName, in String volumeUuid); int movePrimaryStorage(in String volumeUuid); + @UnsupportedAppUsage boolean addPermissionAsync(in PermissionInfo info); boolean setInstallLocation(int loc); + @UnsupportedAppUsage int getInstallLocation(); int installExistingPackageAsUser(String packageName, int userId, int installFlags, @@ -593,17 +642,21 @@ interface IPackageManager { boolean isPermissionEnforced(String permission); /** Reflects current DeviceStorageMonitorService state */ + @UnsupportedAppUsage boolean isStorageLow(); + @UnsupportedAppUsage boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, int userId); boolean getApplicationHiddenSettingAsUser(String packageName, int userId); void setSystemAppHiddenUntilInstalled(String packageName, boolean hidden); boolean setSystemAppInstallState(String packageName, boolean installed, int userId); + @UnsupportedAppUsage IPackageInstaller getPackageInstaller(); boolean setBlockUninstallForUser(String packageName, boolean blockUninstall, int userId); + @UnsupportedAppUsage boolean getBlockUninstallForUser(String packageName, int userId); KeySet getKeySetByAlias(String packageName, String alias); @@ -624,6 +677,7 @@ interface IPackageManager { boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId); + @UnsupportedAppUsage String getPermissionControllerPackageName(); ParceledListSlice getInstantApps(int userId); @@ -640,7 +694,9 @@ interface IPackageManager { */ void setUpdateAvailable(String packageName, boolean updateAvaialble); + @UnsupportedAppUsage String getServicesSystemSharedLibraryPackageName(); + @UnsupportedAppUsage String getSharedSystemSharedLibraryPackageName(); ChangedPackages getChangedPackages(int sequenceNumber, int userId); diff --git a/core/java/android/content/pm/IPackageStatsObserver.aidl b/core/java/android/content/pm/IPackageStatsObserver.aidl index ede4d1d9a791..559a0355de17 100644 --- a/core/java/android/content/pm/IPackageStatsObserver.aidl +++ b/core/java/android/content/pm/IPackageStatsObserver.aidl @@ -26,5 +26,6 @@ import android.content.pm.PackageStats; */ oneway interface IPackageStatsObserver { + @UnsupportedAppUsage void onGetStatsCompleted(in PackageStats pStats, boolean succeeded); } diff --git a/core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java b/core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java index 7790067b03de..707443b19679 100644 --- a/core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java +++ b/core/java/android/content/pm/OrgApacheHttpLegacyUpdater.java @@ -18,6 +18,7 @@ package android.content.pm; import static android.content.pm.SharedLibraryNames.ORG_APACHE_HTTP_LEGACY; import android.content.pm.PackageParser.Package; +import android.os.Build; import com.android.internal.annotations.VisibleForTesting; @@ -30,6 +31,11 @@ import com.android.internal.annotations.VisibleForTesting; @VisibleForTesting public class OrgApacheHttpLegacyUpdater extends PackageSharedLibraryUpdater { + private static boolean apkTargetsApiLevelLessThanOrEqualToOMR1(Package pkg) { + int targetSdkVersion = pkg.applicationInfo.targetSdkVersion; + return targetSdkVersion < Build.VERSION_CODES.P; + } + @Override public void updatePackage(Package pkg) { // Packages targeted at <= O_MR1 expect the classes in the org.apache.http.legacy library diff --git a/core/java/android/content/pm/PackageBackwardCompatibility.java b/core/java/android/content/pm/PackageBackwardCompatibility.java index b19196a9b636..4331bd4ac4d4 100644 --- a/core/java/android/content/pm/PackageBackwardCompatibility.java +++ b/core/java/android/content/pm/PackageBackwardCompatibility.java @@ -116,7 +116,7 @@ public class PackageBackwardCompatibility extends PackageSharedLibraryUpdater { private final PackageSharedLibraryUpdater[] mPackageUpdaters; - public PackageBackwardCompatibility( + private PackageBackwardCompatibility( boolean bootClassPathContainsATB, PackageSharedLibraryUpdater[] packageUpdaters) { this.mBootClassPathContainsATB = bootClassPathContainsATB; this.mPackageUpdaters = packageUpdaters; diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java index 8cb6ffb47fb9..cd8dc6338612 100644 --- a/core/java/android/content/pm/PackageInfo.java +++ b/core/java/android/content/pm/PackageInfo.java @@ -236,7 +236,7 @@ public class PackageInfo implements Parcelable { /** * Array of all signatures read from the package file. This is only filled * in if the flag {@link PackageManager#GET_SIGNATURES} was set. A package - * must be singed with at least one certificate which is at position zero. + * must be signed with at least one certificate which is at position zero. * The package can be signed with additional certificates which appear as * subsequent entries. * 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/content/pm/PackageSharedLibraryUpdater.java b/core/java/android/content/pm/PackageSharedLibraryUpdater.java index b14b321a2481..1565d9ce77d4 100644 --- a/core/java/android/content/pm/PackageSharedLibraryUpdater.java +++ b/core/java/android/content/pm/PackageSharedLibraryUpdater.java @@ -17,7 +17,6 @@ package android.content.pm; import android.annotation.NonNull; import android.annotation.Nullable; -import android.os.Build; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; @@ -60,11 +59,6 @@ public abstract class PackageSharedLibraryUpdater { || ArrayUtils.contains(usesOptionalLibraries, apacheHttpLegacy); } - static boolean apkTargetsApiLevelLessThanOrEqualToOMR1(PackageParser.Package pkg) { - int targetSdkVersion = pkg.applicationInfo.targetSdkVersion; - return targetSdkVersion < Build.VERSION_CODES.P; - } - /** * Add an implicit dependency. * diff --git a/core/java/android/content/res/package.html b/core/java/android/content/res/package.html index 3d0bac18d7b7..3970b16a57e1 100644 --- a/core/java/android/content/res/package.html +++ b/core/java/android/content/res/package.html @@ -1,7 +1,7 @@ <HTML> <BODY> <p>Contains classes for accessing application resources, -such as raw asset files, colors, drawables, media or other other files +such as raw asset files, colors, drawables, media, or other files in the package, plus important device configuration details (orientation, input types, etc.) that affect how the application may behave.</p> @@ -9,4 +9,4 @@ in the package, plus important device configuration details href="{@docRoot}guide/topics/resources/index.html">Application Resources</a> guide.</p> {@more} </BODY> -</HTML>
\ No newline at end of file +</HTML> diff --git a/core/java/android/database/BulkCursorNative.java b/core/java/android/database/BulkCursorNative.java index d3c11e785d7f..77a13cf80073 100644 --- a/core/java/android/database/BulkCursorNative.java +++ b/core/java/android/database/BulkCursorNative.java @@ -16,6 +16,7 @@ package android.database; +import android.annotation.UnsupportedAppUsage; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; @@ -138,6 +139,7 @@ public abstract class BulkCursorNative extends Binder implements IBulkCursor final class BulkCursorProxy implements IBulkCursor { + @UnsupportedAppUsage private IBinder mRemote; private Bundle mExtras; diff --git a/core/java/android/database/sqlite/SQLiteCompatibilityWalFlags.java b/core/java/android/database/sqlite/SQLiteCompatibilityWalFlags.java index 5bf3a7c43640..06c069c583b5 100644 --- a/core/java/android/database/sqlite/SQLiteCompatibilityWalFlags.java +++ b/core/java/android/database/sqlite/SQLiteCompatibilityWalFlags.java @@ -41,6 +41,7 @@ public class SQLiteCompatibilityWalFlags { private static volatile boolean sFlagsSet; private static volatile boolean sCompatibilityWalSupported; private static volatile String sWALSyncMode; + private static volatile long sTruncateSize = -1; // This flag is used to avoid recursive initialization due to circular dependency on Settings private static volatile boolean sCallingGlobalSettings; @@ -71,6 +72,19 @@ public class SQLiteCompatibilityWalFlags { return sWALSyncMode; } + /** + * Override {@link com.android.internal.R.integer#db_wal_truncate_size}. + * + * @return the value set in the global setting, or -1 if a value is not set. + * + * @hide + */ + @VisibleForTesting + public static long getTruncateSize() { + initIfNeeded(); + return sTruncateSize; + } + private static void initIfNeeded() { if (sInitialized || sCallingGlobalSettings) { return; @@ -115,6 +129,7 @@ public class SQLiteCompatibilityWalFlags { sCompatibilityWalSupported = parser.getBoolean("compatibility_wal_supported", SQLiteGlobal.isCompatibilityWalSupported()); sWALSyncMode = parser.getString("wal_syncmode", SQLiteGlobal.getWALSyncMode()); + sTruncateSize = parser.getInt("truncate_size", -1); Log.i(TAG, "Read compatibility WAL flags: compatibility_wal_supported=" + sCompatibilityWalSupported + ", wal_syncmode=" + sWALSyncMode); sFlagsSet = true; diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java index 101fb821f4ce..9c639a5a9867 100644 --- a/core/java/android/database/sqlite/SQLiteConnection.java +++ b/core/java/android/database/sqlite/SQLiteConnection.java @@ -32,6 +32,7 @@ import android.util.Printer; import dalvik.system.BlockGuard; import dalvik.system.CloseGuard; +import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -303,6 +304,7 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen } else { setSyncMode(SQLiteGlobal.getWALSyncMode()); } + maybeTruncateWalFile(); } else { setJournalMode(mConfiguration.journalMode == null ? SQLiteGlobal.getDefaultJournalMode() : mConfiguration.journalMode); @@ -312,6 +314,40 @@ public final class SQLiteConnection implements CancellationSignal.OnCancelListen } } + /** + * If the WAL file exists and larger than a threshold, truncate it by executing + * PRAGMA wal_checkpoint. + */ + private void maybeTruncateWalFile() { + final long threshold = SQLiteGlobal.getWALTruncateSize(); + if (DEBUG) { + Log.d(TAG, "Truncate threshold=" + threshold); + } + if (threshold == 0) { + return; + } + + final File walFile = new File(mConfiguration.path + "-wal"); + if (!walFile.isFile()) { + return; + } + final long size = walFile.length(); + if (size < threshold) { + if (DEBUG) { + Log.d(TAG, walFile.getAbsolutePath() + " " + size + " bytes: No need to truncate"); + } + return; + } + + Log.i(TAG, walFile.getAbsolutePath() + " " + size + " bytes: Bigger than " + + threshold + "; truncating"); + try { + executeForString("PRAGMA wal_checkpoint(TRUNCATE)", null, null); + } catch (SQLiteException e) { + Log.w(TAG, "Failed to truncate the -wal file", e); + } + } + private void setSyncMode(String newValue) { String value = executeForString("PRAGMA synchronous", null, null); if (!canonicalizeSyncMode(value).equalsIgnoreCase( diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java index 01557c59f8ac..eb5c720d6309 100644 --- a/core/java/android/database/sqlite/SQLiteDatabase.java +++ b/core/java/android/database/sqlite/SQLiteDatabase.java @@ -649,7 +649,7 @@ public final class SQLiteDatabase extends SQLiteClosable { * successful so far. Do not call setTransactionSuccessful before calling this. When this * returns a new transaction will have been created but not marked as successful. * @return true if the transaction was yielded - * @deprecated if the db is locked more than once (becuase of nested transactions) then the lock + * @deprecated if the db is locked more than once (because of nested transactions) then the lock * will not be yielded. Use yieldIfContendedSafely instead. */ @Deprecated diff --git a/core/java/android/database/sqlite/SQLiteGlobal.java b/core/java/android/database/sqlite/SQLiteGlobal.java index e6b6acf7b8ee..67e5f65d5a1f 100644 --- a/core/java/android/database/sqlite/SQLiteGlobal.java +++ b/core/java/android/database/sqlite/SQLiteGlobal.java @@ -164,4 +164,21 @@ public final class SQLiteGlobal { com.android.internal.R.integer.db_default_idle_connection_timeout)); } + /** + * When opening a database, if the WAL file is larger than this size, we'll truncate it. + * + * (If it's 0, we do not truncate.) + * + * @hide + */ + public static long getWALTruncateSize() { + final long setting = SQLiteCompatibilityWalFlags.getTruncateSize(); + if (setting >= 0) { + return setting; + } + return SystemProperties.getInt("debug.sqlite.wal.truncatesize", + Resources.getSystem().getInteger( + com.android.internal.R.integer.db_wal_truncate_size)); + } + } diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java index ad86319408af..982c10ae7fae 100644 --- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java +++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java @@ -16,9 +16,9 @@ package android.database.sqlite; -import android.annotation.UnsupportedAppUsage; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.UnsupportedAppUsage; import android.content.ContentValues; import android.database.Cursor; import android.database.DatabaseUtils; @@ -44,7 +44,8 @@ import java.util.regex.Pattern; * This is a convenience class that helps build SQL queries to be sent to * {@link SQLiteDatabase} objects. */ -public class SQLiteQueryBuilder { +public class SQLiteQueryBuilder +{ private static final String TAG = "SQLiteQueryBuilder"; private static final Pattern sLimitPattern = Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?"); diff --git a/core/java/android/database/sqlite/SQLiteStatement.java b/core/java/android/database/sqlite/SQLiteStatement.java index 8f8f67625a33..42e7ac7e8431 100644 --- a/core/java/android/database/sqlite/SQLiteStatement.java +++ b/core/java/android/database/sqlite/SQLiteStatement.java @@ -53,7 +53,7 @@ public final class SQLiteStatement extends SQLiteProgram { } /** - * Execute this SQL statement, if the the number of rows affected by execution of this SQL + * Execute this SQL statement, if the number of rows affected by execution of this SQL * statement is of any importance to the caller - for example, UPDATE / DELETE SQL statements. * * @return the number of rows affected by this SQL statement execution. diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index ac863b2a45af..81abdea0d23f 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -1174,6 +1174,7 @@ public class Camera { { private final Camera mCamera; + @UnsupportedAppUsage public EventHandler(Camera c, Looper looper) { super(looper); mCamera = c; diff --git a/core/java/android/hardware/GeomagneticField.java b/core/java/android/hardware/GeomagneticField.java index 94f2ac085965..0d7b695d7f1d 100644 --- a/core/java/android/hardware/GeomagneticField.java +++ b/core/java/android/hardware/GeomagneticField.java @@ -31,7 +31,7 @@ import java.util.GregorianCalendar; * Android may use a newer version of the model. */ public class GeomagneticField { - // The magnetic field at a given point, in nonoteslas in geodetic + // The magnetic field at a given point, in nanoteslas in geodetic // coordinates. private float mX; private float mY; @@ -278,7 +278,7 @@ public class GeomagneticField { } /** - * @return Horizontal component of the field strength in nonoteslas. + * @return Horizontal component of the field strength in nanoteslas. */ public float getHorizontalStrength() { return (float) Math.hypot(mX, mY); diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index 35584ae21869..a787d77bc964 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -335,10 +335,10 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri /** * <p>Returns a subset of {@link #getAvailableCaptureRequestKeys} keys that can - * be overriden for physical devices backing a logical multi-camera.</p> + * be overridden for physical devices backing a logical multi-camera.</p> * * <p>This is a subset of android.request.availableRequestKeys which contains a list - * of keys that can be overriden using {@link CaptureRequest.Builder#setPhysicalCameraKey }. + * of keys that can be overridden using {@link CaptureRequest.Builder#setPhysicalCameraKey }. * The respective value of such request key can be obtained by calling * {@link CaptureRequest.Builder#getPhysicalCameraKey }. Capture requests that contain * individual physical device requests must be built via @@ -353,7 +353,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * * <p>Each key is only listed once in the list. The order of the keys is undefined.</p> * - * @return List of keys that can be overriden in individual physical device requests. + * @return List of keys that can be overridden in individual physical device requests. * In case the camera device doesn't support such keys the list can be null. */ @SuppressWarnings({"unchecked"}) @@ -1860,10 +1860,10 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri new Key<int[]>("android.request.availableSessionKeys", int[].class); /** - * <p>A subset of the available request keys that can be overriden for + * <p>A subset of the available request keys that can be overridden for * physical devices backing a logical multi-camera.</p> * <p>This is a subset of android.request.availableRequestKeys which contains a list - * of keys that can be overriden using {@link CaptureRequest.Builder#setPhysicalCameraKey }. + * of keys that can be overridden using {@link CaptureRequest.Builder#setPhysicalCameraKey }. * The respective value of such request key can be obtained by calling * {@link CaptureRequest.Builder#getPhysicalCameraKey }. Capture requests that contain * individual physical device requests must be built via diff --git a/core/java/android/hardware/camera2/utils/CloseableLock.java b/core/java/android/hardware/camera2/utils/CloseableLock.java index 9ac89c825430..3b8beaccdcd9 100644 --- a/core/java/android/hardware/camera2/utils/CloseableLock.java +++ b/core/java/android/hardware/camera2/utils/CloseableLock.java @@ -290,7 +290,7 @@ public class CloseableLock implements AutoCloseable { /** * Release a single lock that was acquired. * - * <p>Any other other that is blocked and trying to acquire a lock will get a chance + * <p>Any other thread that is blocked and trying to acquire a lock will get a chance * to acquire the lock.</p> * * @throws IllegalStateException if no locks were acquired, or if the lock was already closed diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl index b57599724ad5..37d93e7c5e25 100644 --- a/core/java/android/hardware/display/IDisplayManager.aidl +++ b/core/java/android/hardware/display/IDisplayManager.aidl @@ -30,6 +30,7 @@ import android.view.Surface; /** @hide */ interface IDisplayManager { + @UnsupportedAppUsage DisplayInfo getDisplayInfo(int displayId); int[] getDisplayIds(); diff --git a/core/java/android/hardware/input/IInputManager.aidl b/core/java/android/hardware/input/IInputManager.aidl index 97868fa268ad..cd17a3efbd71 100644 --- a/core/java/android/hardware/input/IInputManager.aidl +++ b/core/java/android/hardware/input/IInputManager.aidl @@ -46,6 +46,7 @@ interface IInputManager { // Injects an input event into the system. To inject into windows owned by other // applications, the caller must have the INJECT_EVENTS permission. + @UnsupportedAppUsage boolean injectInputEvent(in InputEvent ev, int mode); // Calibrate input device position diff --git a/core/java/android/hardware/location/IActivityRecognitionHardwareClient.aidl b/core/java/android/hardware/location/IActivityRecognitionHardwareClient.aidl index 3fe645c59a30..2dfaf601c6f5 100644 --- a/core/java/android/hardware/location/IActivityRecognitionHardwareClient.aidl +++ b/core/java/android/hardware/location/IActivityRecognitionHardwareClient.aidl @@ -32,5 +32,6 @@ oneway interface IActivityRecognitionHardwareClient { * @param isSupported whether the platform has hardware support for the feature * @param instance the available instance to provide access to the feature */ + @UnsupportedAppUsage void onAvailabilityChanged(in boolean isSupported, in IActivityRecognitionHardware instance); } diff --git a/core/java/android/hardware/location/NanoAppInstanceInfo.java b/core/java/android/hardware/location/NanoAppInstanceInfo.java index 75fb915708de..2db6a794fe9c 100644 --- a/core/java/android/hardware/location/NanoAppInstanceInfo.java +++ b/core/java/android/hardware/location/NanoAppInstanceInfo.java @@ -24,7 +24,7 @@ import android.os.Parcelable; import libcore.util.EmptyArray; /** - * Describes an instance of a nanoapp, used by the internal state manged by ContextHubService. + * Describes an instance of a nanoapp, used by the internal state managed by ContextHubService. * * TODO(b/69270990) Remove this class once the old API is deprecated. * diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 364962612e71..049e5af56019 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -2085,7 +2085,7 @@ public class InputMethodService extends AbstractInputMethodService { * Called when the application has reported a new location of its text * cursor. This is only called if explicitly requested by the input method. * The default implementation does nothing. - * @deprecated Use {#link onUpdateCursorAnchorInfo(CursorAnchorInfo)} instead. + * @deprecated Use {@link #onUpdateCursorAnchorInfo(CursorAnchorInfo)} instead. */ @Deprecated public void onUpdateCursor(Rect newCursor) { @@ -2152,7 +2152,7 @@ public class InputMethodService extends AbstractInputMethodService { } /** - * @return {#link ExtractEditText} if it is considered to be visible and active. Otherwise + * @return {@link ExtractEditText} if it is considered to be visible and active. Otherwise * {@code null} is returned. */ private ExtractEditText getExtractEditTextIfVisible() { diff --git a/core/java/android/inputmethodservice/SoftInputWindow.java b/core/java/android/inputmethodservice/SoftInputWindow.java index b4b88871d251..0513feef801f 100644 --- a/core/java/android/inputmethodservice/SoftInputWindow.java +++ b/core/java/android/inputmethodservice/SoftInputWindow.java @@ -162,9 +162,9 @@ public class SoftInputWindow extends Dialog { /** * Set which boundary of the screen the DockWindow sticks to. * - * @param gravity The boundary of the screen to stick. See {#link - * android.view.Gravity.LEFT}, {#link android.view.Gravity.TOP}, - * {#link android.view.Gravity.BOTTOM}, {#link + * @param gravity The boundary of the screen to stick. See {@link + * android.view.Gravity.LEFT}, {@link android.view.Gravity.TOP}, + * {@link android.view.Gravity.BOTTOM}, {@link * android.view.Gravity.RIGHT}. */ public void setGravity(int gravity) { diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 92b30a440d69..524077b02f1a 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -2681,12 +2681,39 @@ public class ConnectivityManager { } } + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(value = { + TETHER_ERROR_NO_ERROR, + TETHER_ERROR_PROVISION_FAILED, + TETHER_ERROR_ENTITLEMENT_UNKONWN, + }) + public @interface EntitlementResultCode { + } + /** - * Callback for use with {@link #getLatestTetheringEntitlementValue} to find out whether + * Callback for use with {@link #getLatestTetheringEntitlementResult} to find out whether * entitlement succeeded. * @hide */ @SystemApi + public interface OnTetheringEntitlementResultListener { + /** + * Called to notify entitlement result. + * + * @param resultCode an int value of entitlement result. It may be one of + * {@link #TETHER_ERROR_NO_ERROR}, + * {@link #TETHER_ERROR_PROVISION_FAILED}, or + * {@link #TETHER_ERROR_ENTITLEMENT_UNKONWN}. + */ + void onEntitlementResult(@EntitlementResultCode int resultCode); + } + + /** + * @removed + * @deprecated This API would be removed when all of caller has been updated. + * */ + @Deprecated public abstract static class TetheringEntitlementValueListener { /** * Called to notify entitlement result. @@ -2712,14 +2739,43 @@ public class ConnectivityManager { * {@link #TETHERING_USB}, or * {@link #TETHERING_BLUETOOTH}. * @param showEntitlementUi a boolean indicating whether to run UI-based entitlement check. - * @param listener an {@link TetheringEntitlementValueListener} which will be called to notify - * the caller of the result of entitlement check. The listener may be called zero or - * one time. - * @param handler {@link Handler} to specify the thread upon which the listener will be invoked. + * @param executor the executor on which callback will be invoked. + * @param listener an {@link OnTetheringEntitlementResultListener} which will be called to + * notify the caller of the result of entitlement check. The listener may be called zero + * or one time. * {@hide} */ @SystemApi @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) + public void getLatestTetheringEntitlementResult(int type, boolean showEntitlementUi, + @NonNull @CallbackExecutor Executor executor, + @NonNull final OnTetheringEntitlementResultListener listener) { + Preconditions.checkNotNull(listener, "TetheringEntitlementResultListener cannot be null."); + ResultReceiver wrappedListener = new ResultReceiver(null) { + @Override + protected void onReceiveResult(int resultCode, Bundle resultData) { + Binder.withCleanCallingIdentity(() -> + executor.execute(() -> { + listener.onEntitlementResult(resultCode); + })); + } + }; + + try { + String pkgName = mContext.getOpPackageName(); + Log.i(TAG, "getLatestTetheringEntitlementResult:" + pkgName); + mService.getLatestTetheringEntitlementResult(type, wrappedListener, + showEntitlementUi, pkgName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * @removed + * @deprecated This API would be removed when all of caller has been updated. + * */ + @Deprecated public void getLatestTetheringEntitlementValue(int type, boolean showEntitlementUi, @NonNull final TetheringEntitlementValueListener listener, @Nullable Handler handler) { Preconditions.checkNotNull(listener, "TetheringEntitlementValueListener cannot be null."); @@ -2733,7 +2789,7 @@ public class ConnectivityManager { try { String pkgName = mContext.getOpPackageName(); Log.i(TAG, "getLatestTetheringEntitlementValue:" + pkgName); - mService.getLatestTetheringEntitlementValue(type, wrappedListener, + mService.getLatestTetheringEntitlementResult(type, wrappedListener, showEntitlementUi, pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -3668,7 +3724,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 +3741,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 +4333,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/DnsPacket.java b/core/java/android/net/DnsPacket.java index 458fb340b196..0ac02b1b7b37 100644 --- a/core/java/android/net/DnsPacket.java +++ b/core/java/android/net/DnsPacket.java @@ -28,7 +28,6 @@ import java.text.DecimalFormat; import java.text.FieldPosition; import java.util.ArrayList; import java.util.List; -import java.util.StringJoiner; /** * Defines basic data for DNS protocol based on RFC 1035. @@ -42,7 +41,7 @@ public abstract class DnsPacket { public final int id; public final int flags; public final int rcode; - private final int[] mSectionCount; + private final int[] mRecordCount; /** * Create a new DnsHeader from a positioned ByteBuffer. @@ -52,27 +51,32 @@ public abstract class DnsPacket { * When this constructor returns, the reading position of the ByteBuffer has been * advanced to the end of the DNS header record. * This is meant to chain with other methods reading a DNS response in sequence. - * */ DnsHeader(@NonNull ByteBuffer buf) throws BufferUnderflowException { id = BitUtils.uint16(buf.getShort()); flags = BitUtils.uint16(buf.getShort()); rcode = flags & 0xF; - mSectionCount = new int[NUM_SECTIONS]; + mRecordCount = new int[NUM_SECTIONS]; for (int i = 0; i < NUM_SECTIONS; ++i) { - mSectionCount[i] = BitUtils.uint16(buf.getShort()); + mRecordCount[i] = BitUtils.uint16(buf.getShort()); } } /** - * Get section count by section type. + * Get record count by type. */ - public int getSectionCount(int sectionType) { - return mSectionCount[sectionType]; + public int getRecordCount(int type) { + return mRecordCount[type]; } } - public class DnsSection { + /** + * It's used both for DNS questions and DNS resource records. + * + * DNS questions (No TTL/RDATA) + * DNS resource records (With TTL/RDATA) + */ + public class DnsRecord { private static final int MAXNAMESIZE = 255; private static final int MAXLABELSIZE = 63; private static final int MAXLABELCOUNT = 128; @@ -81,57 +85,57 @@ public abstract class DnsPacket { private final DecimalFormat byteFormat = new DecimalFormat(); private final FieldPosition pos = new FieldPosition(0); - private static final String TAG = "DnsSection"; + private static final String TAG = "DnsRecord"; public final String dName; public final int nsType; public final int nsClass; public final long ttl; - private final byte[] mRR; + private final byte[] mRdata; /** - * Create a new DnsSection from a positioned ByteBuffer. + * Create a new DnsRecord from a positioned ByteBuffer. * - * The ByteBuffer must be in network byte order (which is the default). - * Reads the passed ByteBuffer from its current position and decodes a DNS section. + * @param ByteBuffer input of record, must be in network byte order + * (which is the default). + * Reads the passed ByteBuffer from its current position and decodes a DNS record. * When this constructor returns, the reading position of the ByteBuffer has been * advanced to the end of the DNS header record. * This is meant to chain with other methods reading a DNS response in sequence. - * */ - DnsSection(int sectionType, @NonNull ByteBuffer buf) + DnsRecord(int recordType, @NonNull ByteBuffer buf) throws BufferUnderflowException, ParseException { dName = parseName(buf, 0 /* Parse depth */); if (dName.length() > MAXNAMESIZE) { - throw new ParseException("Parse name fail, name size is too long"); + throw new ParseException( + "Parse name fail, name size is too long: " + dName.length()); } nsType = BitUtils.uint16(buf.getShort()); nsClass = BitUtils.uint16(buf.getShort()); - if (sectionType != QDSECTION) { + if (recordType != QDSECTION) { ttl = BitUtils.uint32(buf.getInt()); final int length = BitUtils.uint16(buf.getShort()); - mRR = new byte[length]; - buf.get(mRR); + mRdata = new byte[length]; + buf.get(mRdata); } else { ttl = 0; - mRR = null; + mRdata = null; } } /** - * Get a copy of rr. + * Get a copy of rdata. */ - @Nullable public byte[] getRR() { - return (mRR == null) ? null : mRR.clone(); + @Nullable + public byte[] getRR() { + return (mRdata == null) ? null : mRdata.clone(); } /** * Convert label from {@code byte[]} to {@code String} * - * It follows the same converting rule as native layer. - * (See ns_name.c in libc) - * + * Follows the same conversion rules of the native code (ns_name.c in libc) */ private String labelToString(@NonNull byte[] label) { final StringBuffer sb = new StringBuffer(); @@ -139,13 +143,16 @@ public abstract class DnsPacket { int b = BitUtils.uint8(label[i]); // Control characters and non-ASCII characters. if (b <= 0x20 || b >= 0x7f) { + // Append the byte as an escaped decimal number, e.g., "\19" for 0x13. sb.append('\\'); byteFormat.format(b, sb, pos); } else if (b == '"' || b == '.' || b == ';' || b == '\\' || b == '(' || b == ')' || b == '@' || b == '$') { + // Append the byte as an escaped character, e.g., "\:" for 0x3a. sb.append('\\'); sb.append((char) b); } else { + // Append the byte as a character, e.g., "a" for 0x61. sb.append((char) b); } } @@ -154,7 +161,9 @@ public abstract class DnsPacket { private String parseName(@NonNull ByteBuffer buf, int depth) throws BufferUnderflowException, ParseException { - if (depth > MAXLABELCOUNT) throw new ParseException("Parse name fails, too many labels"); + if (depth > MAXLABELCOUNT) { + throw new ParseException("Failed to parse name, too many labels"); + } final int len = BitUtils.uint8(buf.get()); final int mask = len & NAME_COMPRESSION; if (0 == len) { @@ -194,7 +203,7 @@ public abstract class DnsPacket { private static final String TAG = DnsPacket.class.getSimpleName(); protected final DnsHeader mHeader; - protected final List<DnsSection>[] mSections; + protected final List<DnsRecord>[] mRecords; public static class ParseException extends Exception { public ParseException(String msg) { @@ -216,18 +225,18 @@ public abstract class DnsPacket { throw new ParseException("Parse Header fail, bad input data", e); } - mSections = new ArrayList[NUM_SECTIONS]; + mRecords = new ArrayList[NUM_SECTIONS]; for (int i = 0; i < NUM_SECTIONS; ++i) { - final int count = mHeader.getSectionCount(i); + final int count = mHeader.getRecordCount(i); if (count > 0) { - mSections[i] = new ArrayList(count); + mRecords[i] = new ArrayList(count); } for (int j = 0; j < count; ++j) { try { - mSections[i].add(new DnsSection(i, buffer)); + mRecords[i].add(new DnsRecord(i, buffer)); } catch (BufferUnderflowException e) { - throw new ParseException("Parse section fail", e); + throw new ParseException("Parse record fail", e); } } } diff --git a/core/java/android/net/DnsResolver.java b/core/java/android/net/DnsResolver.java index 6d54264cd89f..d3bc3e66fbee 100644 --- a/core/java/android/net/DnsResolver.java +++ b/core/java/android/net/DnsResolver.java @@ -43,6 +43,9 @@ import java.util.function.Consumer; /** * Dns resolver class for asynchronous dns querying * + * Note that if a client sends a query with more than 1 record in the question section but + * the remote dns server does not support this, it may not respond at all, leading to a timeout. + * */ public final class DnsResolver { private static final String TAG = "DnsResolver"; @@ -226,19 +229,19 @@ public final class DnsResolver { if (mHeader.rcode != 0) { throw new ParseException("Response error, rcode:" + mHeader.rcode); } - if (mHeader.getSectionCount(ANSECTION) == 0) { + if (mHeader.getRecordCount(ANSECTION) == 0) { throw new ParseException("No available answer"); } - if (mHeader.getSectionCount(QDSECTION) == 0) { + if (mHeader.getRecordCount(QDSECTION) == 0) { throw new ParseException("No question found"); } - // Assume only one question per answer packet. (RFC1035) - mQueryType = mSections[QDSECTION].get(0).nsType; + // Expect only one question in question section. + mQueryType = mRecords[QDSECTION].get(0).nsType; } public @NonNull List<InetAddress> getAddresses() { final List<InetAddress> results = new ArrayList<InetAddress>(); - for (final DnsSection ansSec : mSections[ANSECTION]) { + for (final DnsRecord ansSec : mRecords[ANSECTION]) { // Only support A and AAAA, also ignore answers if query type != answer type. int nsType = ansSec.nsType; if (nsType != mQueryType || (nsType != TYPE_A && nsType != TYPE_AAAA)) { diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 83bb3a0c8c15..ad903d960627 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, @@ -203,6 +212,6 @@ interface IConnectivityManager boolean isCallerCurrentAlwaysOnVpnApp(); boolean isCallerCurrentAlwaysOnVpnLockdownApp(); - void getLatestTetheringEntitlementValue(int type, in ResultReceiver receiver, + void getLatestTetheringEntitlementResult(int type, in ResultReceiver receiver, boolean showEntitlementUi, String callerPkg); } 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/ITestNetworkManager.aidl b/core/java/android/net/ITestNetworkManager.aidl new file mode 100644 index 000000000000..119a30cb2ddb --- /dev/null +++ b/core/java/android/net/ITestNetworkManager.aidl @@ -0,0 +1,36 @@ +/** + * 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. + */ + +package android.net; + +import android.net.LinkAddress; +import android.net.TestNetworkInterface; +import android.os.IBinder; +import android.os.ParcelFileDescriptor; + +/** + * Interface that allows for creation and management of test-only networks. + * + * @hide + */ +interface ITestNetworkManager +{ + TestNetworkInterface createTunInterface(in LinkAddress[] linkAddrs); + + void setupTestNetwork(in String iface, in IBinder binder); + + void teardownTestNetwork(int netId); +} 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/NetworkFactory.java b/core/java/android/net/NetworkFactory.java index 7c6ca57ebf9c..181cab41e928 100644 --- a/core/java/android/net/NetworkFactory.java +++ b/core/java/android/net/NetworkFactory.java @@ -212,7 +212,7 @@ public class NetworkFactory extends Handler { * Called for every request every time a new NetworkRequest is seen * and whenever the filterScore or filterNetworkCapabilities change. * - * acceptRequest can be overriden to provide complex filter behavior + * acceptRequest can be overridden to provide complex filter behavior * for the incoming requests * * For output, this class will call {@link #needNetworkFor} and diff --git a/core/java/android/net/NetworkMisc.java b/core/java/android/net/NetworkMisc.java index daa264038529..c0487b521b46 100644 --- a/core/java/android/net/NetworkMisc.java +++ b/core/java/android/net/NetworkMisc.java @@ -46,7 +46,7 @@ public class NetworkMisc implements Parcelable { /** * Set if the user desires to use this network even if it is unvalidated. This field has meaning - * only if {#link explicitlySelected} is true. If it is, this field must also be set to the + * only if {@link explicitlySelected} is true. If it is, this field must also be set to the * appropriate value based on previous user choice. */ public boolean acceptUnvalidated; diff --git a/core/java/android/net/NetworkSpecifier.java b/core/java/android/net/NetworkSpecifier.java index 12cdc342e28e..fcfb72035c19 100644 --- a/core/java/android/net/NetworkSpecifier.java +++ b/core/java/android/net/NetworkSpecifier.java @@ -35,7 +35,7 @@ public abstract class NetworkSpecifier { public abstract boolean satisfiedBy(NetworkSpecifier other); /** - * Optional method which can be overriden by concrete implementations of NetworkSpecifier to + * Optional method which can be overridden by concrete implementations of NetworkSpecifier to * check a self-reported UID. A concrete implementation may contain a UID which would be self- * reported by the caller (since NetworkSpecifier implementations should be non-mutable). This * function is called by ConnectivityService and is passed the actual UID of the caller - diff --git a/core/java/android/net/OWNERS b/core/java/android/net/OWNERS index 15f4913c5419..a1c7fce67d30 100644 --- a/core/java/android/net/OWNERS +++ b/core/java/android/net/OWNERS @@ -1,12 +1,11 @@ set noparent codewiz@google.com -ek@google.com -jsharkey@android.com jchalard@google.com +jsharkey@android.com +junyulai@google.com lorenzo@google.com reminv@google.com satk@google.com -silberst@google.com per-file SSL*, Uri*, Url* = flooey@google.com, narayan@google.com, tobiast@google.com 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/TestNetworkInterface.aidl b/core/java/android/net/TestNetworkInterface.aidl new file mode 100644 index 000000000000..e1f4f9f794eb --- /dev/null +++ b/core/java/android/net/TestNetworkInterface.aidl @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net; + +/** @hide */ +parcelable TestNetworkInterface; diff --git a/core/java/android/net/TestNetworkInterface.java b/core/java/android/net/TestNetworkInterface.java new file mode 100644 index 000000000000..30e68f5b9854 --- /dev/null +++ b/core/java/android/net/TestNetworkInterface.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.net; + +import android.annotation.TestApi; +import android.os.Parcel; +import android.os.ParcelFileDescriptor; +import android.os.Parcelable; + +/** + * This class is used to return the interface name and fd of the test interface + * + * @hide + */ +@TestApi +public final class TestNetworkInterface implements Parcelable { + private static final String TAG = "TestNetworkInterface"; + + private final ParcelFileDescriptor mFileDescriptor; + private final String mInterfaceName; + + @Override + public int describeContents() { + return (mFileDescriptor != null) ? Parcelable.CONTENTS_FILE_DESCRIPTOR : 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(mFileDescriptor, PARCELABLE_WRITE_RETURN_VALUE); + out.writeString(mInterfaceName); + } + + public TestNetworkInterface(ParcelFileDescriptor pfd, String intf) { + mFileDescriptor = pfd; + mInterfaceName = intf; + } + + private TestNetworkInterface(Parcel in) { + mFileDescriptor = in.readParcelable(ParcelFileDescriptor.class.getClassLoader()); + mInterfaceName = in.readString(); + } + + public ParcelFileDescriptor getFileDescriptor() { + return mFileDescriptor; + } + + public String getInterfaceName() { + return mInterfaceName; + } + + public static final Parcelable.Creator<TestNetworkInterface> CREATOR = + new Parcelable.Creator<TestNetworkInterface>() { + public TestNetworkInterface createFromParcel(Parcel in) { + return new TestNetworkInterface(in); + } + + public TestNetworkInterface[] newArray(int size) { + return new TestNetworkInterface[size]; + } + }; +} diff --git a/core/java/android/net/TestNetworkManager.java b/core/java/android/net/TestNetworkManager.java new file mode 100644 index 000000000000..cd58e6641e51 --- /dev/null +++ b/core/java/android/net/TestNetworkManager.java @@ -0,0 +1,91 @@ +/* + * 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. + */ +package android.net; + +import android.annotation.NonNull; +import android.annotation.TestApi; +import android.content.Context; +import android.os.IBinder; +import android.os.RemoteException; + +import com.android.internal.util.Preconditions; + +/** + * Class that allows creation and management of per-app, test-only networks + * + * @hide + */ +@TestApi +public class TestNetworkManager { + @NonNull private static final String TAG = TestNetworkManager.class.getSimpleName(); + + @NonNull private final ITestNetworkManager mService; + @NonNull private final Context mContext; + + /** @hide */ + public TestNetworkManager(@NonNull Context context, @NonNull ITestNetworkManager service) { + mContext = Preconditions.checkNotNull(context, "missing Context"); + mService = Preconditions.checkNotNull(service, "missing ITestNetworkManager"); + } + + /** + * Teardown the capability-limited, testing-only network for a given interface + * + * @param network The test network that should be torn down + * @hide + */ + @TestApi + public void teardownTestNetwork(@NonNull Network network) { + try { + mService.teardownTestNetwork(network.netId); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Sets up a capability-limited, testing-only network for a given interface + * + * @param iface the name of the interface to be used for the Network LinkProperties. + * @param binder A binder object guarding the lifecycle of this test network. + * @hide + */ + @TestApi + public void setupTestNetwork(@NonNull String iface, @NonNull IBinder binder) { + try { + mService.setupTestNetwork(iface, binder); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** + * Create a tun interface for testing purposes + * + * @param linkAddrs an array of LinkAddresses to assign to the TUN interface + * @return A ParcelFileDescriptor of the underlying TUN interface. Close this to tear down the + * TUN interface. + * @hide + */ + @TestApi + public TestNetworkInterface createTunInterface(@NonNull LinkAddress[] linkAddrs) { + try { + return mService.createTunInterface(linkAddrs); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } +} 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/UrlQuerySanitizer.java b/core/java/android/net/UrlQuerySanitizer.java index d2073b4dfd3a..5b674067192e 100644 --- a/core/java/android/net/UrlQuerySanitizer.java +++ b/core/java/android/net/UrlQuerySanitizer.java @@ -287,7 +287,7 @@ public class UrlQuerySanitizer { /** * Sanitize a value. * <ol> - * <li>If script URLs are not OK, the will be removed. + * <li>If script URLs are not OK, they will be removed. * <li>If neither spaces nor other white space is OK, then * white space will be trimmed from the beginning and end of * the URL. (Just the actual white space characters are trimmed, not @@ -563,7 +563,7 @@ public class UrlQuerySanitizer { } /** - * Constructs a UrlQuerySanitizer and parse a URL. + * Constructs a UrlQuerySanitizer and parses a URL. * This constructor is provided for convenience when the * default parsing behavior is acceptable. * <p> @@ -644,7 +644,7 @@ public class UrlQuerySanitizer { } /** - * An array list of all of the parameter value pairs in the sanitized + * An array list of all of the parameter-value pairs in the sanitized * query, in the order they appeared in the query. May contain duplicate * parameters. * <p class="note"><b>Note:</b> Do not modify this list. Treat it as a read-only list.</p> @@ -656,7 +656,7 @@ public class UrlQuerySanitizer { /** * Check if a parameter exists in the current sanitized query. * @param parameter the unencoded name of a parameter. - * @return true if the paramater exists in the current sanitized queary. + * @return true if the parameter exists in the current sanitized queary. */ public boolean hasParameter(String parameter) { return mEntries.containsKey(parameter); @@ -766,7 +766,7 @@ public class UrlQuerySanitizer { * the value. If all goes well then addSanitizedValue is called with * the unescaped parameter and the sanitized unescaped value. * @param parameter an escaped parameter - * @param value an unsanitzied escaped value + * @param value an unsanitized escaped value */ protected void parseEntry(String parameter, String value) { String unescapedParameter = unescape(parameter); @@ -812,7 +812,7 @@ public class UrlQuerySanitizer { /** * Get the effective value sanitizer for a parameter. Like getValueSanitizer, * except if there is no value sanitizer registered for a parameter, and - * unregistered paramaters are allowed, then the default value sanitizer is + * unregistered parameters are allowed, then the default value sanitizer is * returned. * @param parameter an unescaped parameter * @return the effective value sanitizer for a parameter. 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/net/util/SocketUtils.java b/core/java/android/net/util/SocketUtils.java index fbb15ed693d9..5827f9ec9343 100644 --- a/core/java/android/net/util/SocketUtils.java +++ b/core/java/android/net/util/SocketUtils.java @@ -19,6 +19,8 @@ package android.net.util; import static android.system.OsConstants.SOL_SOCKET; import static android.system.OsConstants.SO_BINDTODEVICE; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.TestApi; import android.net.MacAddress; @@ -49,7 +51,7 @@ public class SocketUtils { * * <p>Data sent through the socket will go directly to the underlying network, ignoring VPNs. */ - public static void bindSocketToInterface(FileDescriptor socket, String iface) + public static void bindSocketToInterface(@NonNull FileDescriptor socket, @NonNull String iface) throws ErrnoException { // SO_BINDTODEVICE actually takes a string. This works because the first member // of struct ifreq is a NULL-terminated interface name. @@ -75,7 +77,7 @@ public class SocketUtils { /** * Make a socket address that packet socket can send packets to. */ - public static SocketAddress makePacketSocketAddress(int ifIndex, byte[] hwAddr) { + public static SocketAddress makePacketSocketAddress(int ifIndex, @NonNull byte[] hwAddr) { return new PacketSocketAddress(ifIndex, hwAddr); } @@ -83,45 +85,21 @@ public class SocketUtils { * Set an option on a socket that takes a time value argument. */ public static void setSocketTimeValueOption( - FileDescriptor fd, int level, int option, long millis) throws ErrnoException { + @NonNull FileDescriptor fd, int level, int option, long millis) throws ErrnoException { Os.setsockoptTimeval(fd, level, option, StructTimeval.fromMillis(millis)); } /** - * Bind a socket to the specified address. - */ - public static void bindSocket(FileDescriptor fd, SocketAddress addr) - throws ErrnoException, SocketException { - Os.bind(fd, addr); - } - - /** - * Connect a socket to the specified address. - */ - public static void connectSocket(FileDescriptor fd, SocketAddress addr) - throws ErrnoException, SocketException { - Os.connect(fd, addr); - } - - /** - * Send a message on a socket, using the specified SocketAddress. - */ - public static void sendTo(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount, - int flags, SocketAddress addr) throws ErrnoException, SocketException { - Os.sendto(fd, bytes, byteOffset, byteCount, flags, addr); - } - - /** * @see IoBridge#closeAndSignalBlockedThreads(FileDescriptor) */ - public static void closeSocket(FileDescriptor fd) throws IOException { + public static void closeSocket(@Nullable FileDescriptor fd) throws IOException { IoBridge.closeAndSignalBlockedThreads(fd); } /** * Attaches a socket filter that accepts DHCP packets to the given socket. */ - public static void attachDhcpFilter(FileDescriptor fd) throws SocketException { + public static void attachDhcpFilter(@NonNull FileDescriptor fd) throws SocketException { NetworkUtils.attachDhcpFilter(fd); } @@ -130,7 +108,8 @@ public class SocketUtils { * @param fd the socket's {@link FileDescriptor}. * @param packetType the hardware address type, one of ARPHRD_*. */ - public static void attachRaFilter(FileDescriptor fd, int packetType) throws SocketException { + public static void attachRaFilter(@NonNull FileDescriptor fd, int packetType) + throws SocketException { NetworkUtils.attachRaFilter(fd, packetType); } @@ -142,7 +121,7 @@ public class SocketUtils { * @param fd the socket's {@link FileDescriptor}. * @param packetType the hardware address type, one of ARPHRD_*. */ - public static void attachControlPacketFilter(FileDescriptor fd, int packetType) + public static void attachControlPacketFilter(@NonNull FileDescriptor fd, int packetType) throws SocketException { NetworkUtils.attachControlPacketFilter(fd, packetType); } @@ -150,8 +129,8 @@ public class SocketUtils { /** * Add an entry into the ARP cache. */ - public static void addArpEntry(Inet4Address ipv4Addr, MacAddress ethAddr, String ifname, - FileDescriptor fd) throws IOException { + public static void addArpEntry(@NonNull Inet4Address ipv4Addr, @NonNull MacAddress ethAddr, + @NonNull String ifname, @NonNull FileDescriptor fd) throws IOException { NetworkUtils.addArpEntry(ipv4Addr, ethAddr, ifname, fd); } 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/nfc/cardemulation/CardEmulation.java b/core/java/android/nfc/cardemulation/CardEmulation.java index 01932abfaa9b..f23dc2da291a 100644 --- a/core/java/android/nfc/cardemulation/CardEmulation.java +++ b/core/java/android/nfc/cardemulation/CardEmulation.java @@ -16,6 +16,7 @@ package android.nfc.cardemulation; +import android.annotation.NonNull; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.app.Activity; @@ -359,7 +360,7 @@ public final class CardEmulation { * @param service The component name of the service * @return whether the registration was successful. */ - public boolean unsetOffHostForService(ComponentName service) { + public boolean unsetOffHostForService(@NonNull ComponentName service) { NfcAdapter adapter = NfcAdapter.getDefaultAdapter(mContext); if (adapter == null) { return false; @@ -405,7 +406,8 @@ public final class CardEmulation { * @param offHostSecureElement Secure Element to register the AID to * @return whether the registration was successful. */ - public boolean setOffHostForService(ComponentName service, String offHostSecureElement) { + public boolean setOffHostForService(@NonNull ComponentName service, + @NonNull String offHostSecureElement) { boolean validSecureElement = false; NfcAdapter adapter = NfcAdapter.getDefaultAdapter(mContext); diff --git a/core/java/android/nfc/cardemulation/OffHostApduService.java b/core/java/android/nfc/cardemulation/OffHostApduService.java index 6a8aeee1ebee..2286e8476d94 100644 --- a/core/java/android/nfc/cardemulation/OffHostApduService.java +++ b/core/java/android/nfc/cardemulation/OffHostApduService.java @@ -31,7 +31,7 @@ import android.os.IBinder; * <div class="special reference"> * <h3>Developer Guide</h3> * For a general introduction into the topic of card emulation, - * please read the <a href="{@docRoot}guide/topics/nfc/ce.html"> + * please read the <a href="{@docRoot}guide/topics/connectivity/nfc/hce.html"> * NFC card emulation developer guide.</a></p> * </div> * diff --git a/core/java/android/nfc/tech/MifareClassic.java b/core/java/android/nfc/tech/MifareClassic.java index 8c92288d0047..9b5bda885abd 100644 --- a/core/java/android/nfc/tech/MifareClassic.java +++ b/core/java/android/nfc/tech/MifareClassic.java @@ -38,7 +38,7 @@ import java.nio.ByteOrder; * <li>MIFARE Classic Mini are 320 bytes ({@link #SIZE_MINI}), with 5 sectors each of 4 blocks. * <li>MIFARE Classic 1k are 1024 bytes ({@link #SIZE_1K}), with 16 sectors each of 4 blocks. * <li>MIFARE Classic 2k are 2048 bytes ({@link #SIZE_2K}), with 32 sectors each of 4 blocks. - * <li>MIFARE Classic 4k} are 4096 bytes ({@link #SIZE_4K}). The first 32 sectors contain 4 blocks + * <li>MIFARE Classic 4k are 4096 bytes ({@link #SIZE_4K}). The first 32 sectors contain 4 blocks * and the last 8 sectors contain 16 blocks. * </ul> * 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/Handler.java b/core/java/android/os/Handler.java index f5bca04ae104..2b5f3da5431e 100644 --- a/core/java/android/os/Handler.java +++ b/core/java/android/os/Handler.java @@ -33,7 +33,7 @@ import java.lang.reflect.Modifier; * them as they come out of the message queue. * * <p>There are two main uses for a Handler: (1) to schedule messages and - * runnables to be executed as some point in the future; and (2) to enqueue + * runnables to be executed at some point in the future; and (2) to enqueue * an action to be performed on a different thread than your own. * * <p>Scheduling messages is accomplished with the 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/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index 3d28a5ec02b0..66ace2d69603 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -366,8 +366,8 @@ public class ZygoteProcess { } } - /** - * See com.android.internal.os.SystemZygoteInit.readArgumentList() + /* + * See com.android.internal.os.ZygoteArguments.parseArgs() * Presently the wire format to the zygote process is: * a) a count of arguments (argc, in essence) * b) a number of newline-separated argument strings equal to count diff --git a/core/java/android/preference/DialogPreference.java b/core/java/android/preference/DialogPreference.java index 4b5a7b40fe44..a615f2dfc9df 100644 --- a/core/java/android/preference/DialogPreference.java +++ b/core/java/android/preference/DialogPreference.java @@ -342,16 +342,31 @@ public abstract class DialogPreference extends Preference implements dialog.show(); } + /** + * Get the DecorView. + * @return the DecorView for the current dialog window, if it exists. + * If the window does not exist, null is returned. + */ + private View getDecorView() { + if (mDialog != null && mDialog.getWindow() != null) { + return mDialog.getWindow().getDecorView(); + } + return null; + } + void postDismiss() { removeDismissCallbacks(); - View decorView = mDialog.getWindow().getDecorView(); - decorView.post(mDismissRunnable); + View decorView = getDecorView(); + if (decorView != null) { + // If decorView is null, dialog was already dismissed + decorView.post(mDismissRunnable); + } } private void removeDismissCallbacks() { - if (mDialog != null && mDialog.getWindow() != null - && mDialog.getWindow().getDecorView() != null) { - mDialog.getWindow().getDecorView().removeCallbacks(mDismissRunnable); + View decorView = getDecorView(); + if (decorView != null) { + decorView.removeCallbacks(mDismissRunnable); } } 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/ContactsContract.java b/core/java/android/provider/ContactsContract.java index 61be7f785bb8..51b983e76fa7 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -868,13 +868,21 @@ public final class ContactsContract { */ protected interface ContactOptionsColumns { /** - * The number of times a contact has been contacted + * The number of times a contact has been contacted. + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field is obsolete. For + * more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page.</p> * <P>Type: INTEGER</P> */ public static final String TIMES_CONTACTED = "times_contacted"; /** * The last time a contact was contacted. + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field is obsolete. For + * more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page.</p> * <P>Type: INTEGER</P> */ public static final String LAST_TIME_CONTACTED = "last_time_contacted"; @@ -1694,6 +1702,11 @@ public final class ContactsContract { * TIMES_CONTACTED field is incremented by 1 and the LAST_TIME_CONTACTED * field is populated with the current system time. * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this method is obsolete. For + * more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. + * * @param resolver the ContentResolver to use * @param contactId the person who was contacted * @@ -1730,12 +1743,22 @@ public final class ContactsContract { * The content:// style URI for this table joined with useful data from * {@link ContactsContract.Data}, filtered to include only starred contacts * and the most frequently contacted contacts. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer sorts + * results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. */ public static final Uri CONTENT_STREQUENT_URI = Uri.withAppendedPath( CONTENT_URI, "strequent"); /** * The content:// style URI for showing a list of frequently contacted people. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer sorts + * results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. */ public static final Uri CONTENT_FREQUENT_URI = Uri.withAppendedPath( CONTENT_URI, "frequent"); @@ -1745,6 +1768,11 @@ public final class ContactsContract { * {@link #CONTENT_STREQUENT_URI} URI. The filter string will be used to match * various parts of the contact name. The filter argument should be passed * as an additional path segment after this URI. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer sorts + * results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. */ public static final Uri CONTENT_STREQUENT_FILTER_URI = Uri.withAppendedPath( CONTENT_STREQUENT_URI, "filter"); @@ -4288,10 +4316,27 @@ public final class ContactsContract { * Columns in the Data_Usage_Stat table */ protected interface DataUsageStatColumns { - /** The last time (in milliseconds) this {@link Data} was used. */ + /** + * The last time (in milliseconds) this {@link Data} was used. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field is obsolete. For + * more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. + * + */ public static final String LAST_TIME_USED = "last_time_used"; - /** The number of times the referenced {@link Data} has been used. */ + /** + * The number of times the referenced {@link Data} has been used. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field is obsolete. For + * more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. + * + * + */ public static final String TIMES_USED = "times_used"; /** @hide Raw value. */ @@ -5260,7 +5305,14 @@ public final class ContactsContract { private PhoneLookup() {} /** - * The content:// style URI for this table. Append the phone number you want to lookup + * The content:// style URI for this table. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer + * sorts results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. + * + * Append the phone number you want to lookup * to this URI and query it to perform a lookup. For example: * <pre> * Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, @@ -5273,6 +5325,11 @@ public final class ContactsContract { /** * <p>URI used for the "enterprise caller-id".</p> * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer + * sorts results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. + * * <p> * It supports the same semantics as {@link #CONTENT_FILTER_URI} and returns the same * columns. If the device has no corp profile that is linked to the current profile, it @@ -6068,14 +6125,24 @@ public final class ContactsContract { * records of MIME type {@link #CONTENT_ITEM_TYPE}. The filter is applied * to display names as well as phone numbers. The filter argument should be passed * as an additional path segment after this URI. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer + * sorts results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. */ public static final Uri CONTENT_FILTER_URI = Uri.withAppendedPath(CONTENT_URI, "filter"); /** - * It supports the similar semantics as {@link #CONTENT_FILTER_URI} and returns the same - * columns. This URI requires {@link ContactsContract#DIRECTORY_PARAM_KEY} in + * It supports the similar semantics as {@link #CONTENT_FILTER_URI} and returns the + * same columns. This URI requires {@link ContactsContract#DIRECTORY_PARAM_KEY} in * parameters, otherwise it will throw IllegalArgumentException. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer sorts + * results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. */ public static final Uri ENTERPRISE_CONTENT_FILTER_URI = Uri.withAppendedPath( CONTENT_URI, "filter_enterprise"); @@ -6243,7 +6310,7 @@ public final class ContactsContract { */ public static final class Email implements DataColumnsWithJoins, CommonColumns, ContactCounts { - /** + /* * This utility class cannot be instantiated */ private Email() {} @@ -6334,12 +6401,17 @@ public final class ContactsContract { Uri.withAppendedPath(CONTENT_URI, "lookup_enterprise"); /** - * <p> * The content:// style URL for email lookup using a filter. The filter returns * records of MIME type {@link #CONTENT_ITEM_TYPE}. The filter is applied * to display names as well as email addresses. The filter argument should be passed * as an additional path segment after this URI. * </p> + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer sorts + * results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page.</p> + * * <p>The query in the following example will return "Robert Parr (bob@incredibles.com)" * as well as "Bob Parr (incredible@android.com)". * <pre> @@ -6354,9 +6426,14 @@ public final class ContactsContract { "filter"); /** - * It supports the similar semantics as {@link #CONTENT_FILTER_URI} and returns the same - * columns. This URI requires {@link ContactsContract#DIRECTORY_PARAM_KEY} in + * It supports the similar semantics as {@link #CONTENT_FILTER_URI} and returns the + * same columns. This URI requires {@link ContactsContract#DIRECTORY_PARAM_KEY} in * parameters, otherwise it will throw IllegalArgumentException. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer + * sorts results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. */ public static final Uri ENTERPRISE_CONTENT_FILTER_URI = Uri.withAppendedPath( CONTENT_URI, "filter_enterprise"); @@ -7571,6 +7648,11 @@ public final class ContactsContract { /** * Similar to {@link Phone#CONTENT_FILTER_URI}, but allows users to filter callable * data. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer + * sorts results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. */ public static final Uri CONTENT_FILTER_URI = Uri.withAppendedPath(CONTENT_URI, "filter"); @@ -7579,6 +7661,11 @@ public final class ContactsContract { * Similar to {@link Phone#ENTERPRISE_CONTENT_FILTER_URI}, but allows users to filter * callable data. This URI requires {@link ContactsContract#DIRECTORY_PARAM_KEY} in * parameters, otherwise it will throw IllegalArgumentException. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer + * sorts results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page.</p> */ public static final Uri ENTERPRISE_CONTENT_FILTER_URI = Uri.withAppendedPath( CONTENT_URI, "filter_enterprise"); @@ -7603,8 +7690,13 @@ public final class ContactsContract { "contactables"); /** - * The content:// style URI for these data items, which allows for a query parameter to - * be appended onto the end to filter for data items matching the query. + * The content:// style URI for these data items, which allows for a query parameter + * to be appended onto the end to filter for data items matching the query. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this field no longer + * sorts results based on contacts frequency. For more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. */ public static final Uri CONTENT_FILTER_URI = Uri.withAppendedPath( Contactables.CONTENT_URI, "filter"); @@ -8253,11 +8345,15 @@ public final class ContactsContract { } /** - * <p> * API allowing applications to send usage information for each {@link Data} row to the * Contacts Provider. Applications can also clear all usage information. + * + * <p class="caution"><b>Caution: </b>As of January 7, 2019, this class is obsolete. For + * more information, see the + * <a href="/guide/topics/providers/contacts-provider#ObsoleteData">Contacts Provider</a> + * page. * </p> - * <p> + * * With the feedback, Contacts Provider may return more contextually appropriate results for * Data listing, typically supplied with * {@link ContactsContract.Contacts#CONTENT_FILTER_URI}, diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java index 2b40c12a3a89..acb3fa816bdb 100644 --- a/core/java/android/provider/DocumentsContract.java +++ b/core/java/android/provider/DocumentsContract.java @@ -1556,7 +1556,7 @@ public final class DocumentsContract { * * <p>Note, that due to internal limitations, if there is already a web link * intent created for the specified document but with different options, - * then it may be overriden. + * then it may be overridden. * * <p>Providers are required to show confirmation UI for all new permissions granted * for the linked document. diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java index c7d37add5134..68f8acd8a586 100644 --- a/core/java/android/provider/DocumentsProvider.java +++ b/core/java/android/provider/DocumentsProvider.java @@ -806,7 +806,7 @@ public abstract class DocumentsProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Cannot be overriden. + * Implementation is provided by the parent class. Cannot be overridden. * * @see #queryRoots(String[]) * @see #queryRecentDocuments(String, String[], Bundle, CancellationSignal) @@ -864,7 +864,7 @@ public abstract class DocumentsProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Cannot be overriden. + * Implementation is provided by the parent class. Cannot be overridden. * * @see #getDocumentType(String) */ @@ -939,7 +939,7 @@ public abstract class DocumentsProvider extends ContentProvider { /** * Implementation is provided by the parent class. Throws by default, and - * cannot be overriden. + * cannot be overridden. * * @see #createDocument(String, String, String) */ @@ -950,7 +950,7 @@ public abstract class DocumentsProvider extends ContentProvider { /** * Implementation is provided by the parent class. Throws by default, and - * cannot be overriden. + * cannot be overridden. * * @see #deleteDocument(String) */ @@ -961,7 +961,7 @@ public abstract class DocumentsProvider extends ContentProvider { /** * Implementation is provided by the parent class. Throws by default, and - * cannot be overriden. + * cannot be overridden. */ @Override public final int update( @@ -1201,7 +1201,7 @@ public abstract class DocumentsProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Cannot be overriden. + * Implementation is provided by the parent class. Cannot be overridden. * * @see #openDocument(String, String, CancellationSignal) */ @@ -1212,7 +1212,7 @@ public abstract class DocumentsProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Cannot be overriden. + * Implementation is provided by the parent class. Cannot be overridden. * * @see #openDocument(String, String, CancellationSignal) */ @@ -1224,7 +1224,7 @@ public abstract class DocumentsProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Cannot be overriden. + * Implementation is provided by the parent class. Cannot be overridden. * * @see #openDocument(String, String, CancellationSignal) */ @@ -1238,7 +1238,7 @@ public abstract class DocumentsProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Cannot be overriden. + * Implementation is provided by the parent class. Cannot be overridden. * * @see #openDocument(String, String, CancellationSignal) */ @@ -1252,7 +1252,7 @@ public abstract class DocumentsProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Cannot be overriden. + * Implementation is provided by the parent class. Cannot be overridden. * * @see #openDocumentThumbnail(String, Point, CancellationSignal) * @see #openTypedDocument(String, String, Bundle, CancellationSignal) @@ -1265,7 +1265,7 @@ public abstract class DocumentsProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Cannot be overriden. + * Implementation is provided by the parent class. Cannot be overridden. * * @see #openDocumentThumbnail(String, Point, CancellationSignal) * @see #openTypedDocument(String, String, Bundle, CancellationSignal) diff --git a/core/java/android/provider/SearchIndexablesProvider.java b/core/java/android/provider/SearchIndexablesProvider.java index 138e77b69627..02a5e6fd157f 100644 --- a/core/java/android/provider/SearchIndexablesProvider.java +++ b/core/java/android/provider/SearchIndexablesProvider.java @@ -181,7 +181,7 @@ public abstract class SearchIndexablesProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Throws by default, and cannot be overriden. + * Implementation is provided by the parent class. Throws by default, and cannot be overridden. */ @Override public final Uri insert(Uri uri, ContentValues values) { @@ -189,7 +189,7 @@ public abstract class SearchIndexablesProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Throws by default, and cannot be overriden. + * Implementation is provided by the parent class. Throws by default, and cannot be overridden. */ @Override public final int delete(Uri uri, String selection, String[] selectionArgs) { @@ -197,7 +197,7 @@ public abstract class SearchIndexablesProvider extends ContentProvider { } /** - * Implementation is provided by the parent class. Throws by default, and cannot be overriden. + * Implementation is provided by the parent class. Throws by default, and cannot be overridden. */ @Override public final int update( diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index abd7c89a0301..946d38667fea 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -4198,7 +4198,8 @@ public final class Settings { SHOW_BATTERY_PERCENT, NOTIFICATION_VIBRATION_INTENSITY, HAPTIC_FEEDBACK_INTENSITY, - DISPLAY_COLOR_MODE + DISPLAY_COLOR_MODE, + NOTIFICATION_LIGHT_PULSE, }; /** @@ -4404,6 +4405,7 @@ public final class Settings { VALIDATORS.put(WIFI_STATIC_DNS1, WIFI_STATIC_DNS1_VALIDATOR); VALIDATORS.put(WIFI_STATIC_DNS2, WIFI_STATIC_DNS2_VALIDATOR); VALIDATORS.put(SHOW_BATTERY_PERCENT, SHOW_BATTERY_PERCENT_VALIDATOR); + VALIDATORS.put(NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR); } /** @@ -8144,6 +8146,8 @@ public final class Settings { VOLUME_HUSH_GESTURE, MANUAL_RINGER_TOGGLE_COUNT, HUSH_GESTURE_USED, + LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, + LOCK_SCREEN_SHOW_NOTIFICATIONS, }; /** @@ -8290,6 +8294,8 @@ public final class Settings { ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES_VALIDATOR); //legacy restore setting VALIDATORS.put(HUSH_GESTURE_USED, HUSH_GESTURE_USED_VALIDATOR); VALIDATORS.put(MANUAL_RINGER_TOGGLE_COUNT, MANUAL_RINGER_TOGGLE_COUNT_VALIDATOR); + VALIDATORS.put(LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, BOOLEAN_VALIDATOR); + VALIDATORS.put(LOCK_SCREEN_SHOW_NOTIFICATIONS, BOOLEAN_VALIDATOR); } /** @@ -10469,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 */ @@ -10501,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 @@ -10511,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 @@ -13028,6 +13047,7 @@ public final class Settings { * Supported keys: * compatibility_wal_supported (boolean) * wal_syncmode (String) + * truncate_size (int) * * @hide */ diff --git a/core/java/android/security/keystore/recovery/RecoveryController.java b/core/java/android/security/keystore/recovery/RecoveryController.java index 70054fc2d71e..000b8f300dd0 100644 --- a/core/java/android/security/keystore/recovery/RecoveryController.java +++ b/core/java/android/security/keystore/recovery/RecoveryController.java @@ -29,6 +29,7 @@ import android.os.ServiceManager; import android.os.ServiceSpecificException; import android.security.KeyStore; import android.security.keystore.AndroidKeyStoreProvider; +import android.security.keystore.KeyPermanentlyInvalidatedException; import com.android.internal.widget.ILockSettings; @@ -635,7 +636,7 @@ public class RecoveryController { return getKeyFromGrant(grantAlias); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); - } catch (UnrecoverableKeyException e) { + } catch (KeyPermanentlyInvalidatedException | UnrecoverableKeyException e) { throw new InternalRecoveryServiceException("Failed to get key from keystore", e); } catch (ServiceSpecificException e) { if (e.errorCode == ERROR_INSECURE_USER) { @@ -666,7 +667,7 @@ public class RecoveryController { return getKeyFromGrant(grantAlias); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); - } catch (UnrecoverableKeyException e) { + } catch (KeyPermanentlyInvalidatedException | UnrecoverableKeyException e) { throw new InternalRecoveryServiceException("Failed to get key from keystore", e); } catch (ServiceSpecificException e) { if (e.errorCode == ERROR_INSECURE_USER) { @@ -696,6 +697,8 @@ public class RecoveryController { return getKeyFromGrant(grantAlias); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); + } catch (KeyPermanentlyInvalidatedException | UnrecoverableKeyException e) { + throw new UnrecoverableKeyException("Failed to get key from keystore"); } catch (ServiceSpecificException e) { throw wrapUnexpectedServiceSpecificException(e); } @@ -704,7 +707,8 @@ public class RecoveryController { /** * Returns the key with the given {@code grantAlias}. */ - @NonNull Key getKeyFromGrant(@NonNull String grantAlias) throws UnrecoverableKeyException { + @NonNull Key getKeyFromGrant(@NonNull String grantAlias) + throws UnrecoverableKeyException, KeyPermanentlyInvalidatedException { return AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore( mKeyStore, grantAlias, diff --git a/core/java/android/security/keystore/recovery/RecoverySession.java b/core/java/android/security/keystore/recovery/RecoverySession.java index 3bb64219cdca..662271281085 100644 --- a/core/java/android/security/keystore/recovery/RecoverySession.java +++ b/core/java/android/security/keystore/recovery/RecoverySession.java @@ -22,6 +22,7 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.os.RemoteException; import android.os.ServiceSpecificException; +import android.security.keystore.KeyPermanentlyInvalidatedException; import android.util.ArrayMap; import android.util.Log; @@ -218,7 +219,7 @@ public class RecoverySession implements AutoCloseable { Key key; try { key = mRecoveryController.getKeyFromGrant(grantAlias); - } catch (UnrecoverableKeyException e) { + } catch (KeyPermanentlyInvalidatedException | UnrecoverableKeyException e) { throw new InternalRecoveryServiceException( String.format( Locale.US, diff --git a/core/java/android/service/autofill/FillCallback.java b/core/java/android/service/autofill/FillCallback.java index 1695c1306824..818ffde44297 100644 --- a/core/java/android/service/autofill/FillCallback.java +++ b/core/java/android/service/autofill/FillCallback.java @@ -39,13 +39,20 @@ public final class FillCallback { } /** - * Notifies the Android System that an - * {@link AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, - * FillCallback)} was successfully fulfilled by the service. + * Notifies the Android System that a fill request + * ({@link AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, + * FillCallback)}) was successfully fulfilled by the service. + * + * <p>This method should always be called, even if the service doesn't have the heuristics to + * fulfill the request (in which case it should be called with {@code null}). + * + * <p>See the main {@link AutofillService} documentation for more details and examples. + * + * @param response autofill information for that activity, or {@code null} when the service + * cannot autofill the activity. * - * @param response autofill information for that activity, or {@code null} when the activity - * cannot be autofilled (for example, if it only contains read-only fields). See - * {@link FillResponse} for examples. + * @throws IllegalStateException if this method or {@link #onFailure(CharSequence)} was already + * called. */ public void onSuccess(@Nullable FillResponse response) { assertNotCalled(); @@ -63,11 +70,25 @@ public final class FillCallback { } /** - * Notifies the Android System that an + * Notifies the Android System that a fill request ( * {@link AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, - * FillCallback)} could not be fulfilled by the service. + * FillCallback)}) could not be fulfilled by the service (for example, because the user data was + * not available yet), so the request could be retried later. + * + * <p><b>Note: </b>this method should not be used when the service didn't have the heursitics to + * fulfill the request; in this case, the service should call {@link #onSuccess(FillResponse) + * onSuccess(null)} instead. + * + * <p><b>Note: </b>on Android versions up to {@link android.os.Build.VERSION_CODES#P}, this + * method is not working as intended, and the service should call + * {@link #onSuccess(FillResponse) onSuccess(null)} instead. + * + * @param message error message to be displayed to the user. <b>Note: </b> this message is + * displayed on {@code logcat} logs and should not contain PII (Personally Identifiable + * Information, such as username or email address). * - * @param message error message to be displayed to the user. + * @throws IllegalStateException if this method or {@link #onSuccess(FillResponse)} was already + * called. */ public void onFailure(@Nullable CharSequence message) { assertNotCalled(); diff --git a/core/java/android/service/autofill/Sanitizer.java b/core/java/android/service/autofill/Sanitizer.java index 38757ac7408b..8a1310de6e32 100644 --- a/core/java/android/service/autofill/Sanitizer.java +++ b/core/java/android/service/autofill/Sanitizer.java @@ -21,6 +21,9 @@ package android.service.autofill; * <p>Typically used to avoid displaying the save UI for values that are autofilled but reformatted * by the app—for example, if the autofill service sends a credit card number * value as "004815162342108" and the app automatically changes it to "0048 1516 2342 108". + * + * <p><b>Note:</b> This interface is not meant to be implemented by app developers; only + * implementations provided by the Android System can be used in other Autofill APIs. */ public interface Sanitizer { } diff --git a/core/java/android/service/autofill/SaveCallback.java b/core/java/android/service/autofill/SaveCallback.java index 855981a544fd..a98a2492f694 100644 --- a/core/java/android/service/autofill/SaveCallback.java +++ b/core/java/android/service/autofill/SaveCallback.java @@ -41,6 +41,9 @@ public final class SaveCallback { * Notifies the Android System that an * {@link AutofillService#onSaveRequest(SaveRequest, SaveCallback)} was successfully handled * by the service. + * + * @throws IllegalStateException if this method, {@link #onSuccess(IntentSender)}, or + * {@link #onFailure(CharSequence)} was already called. */ public void onSuccess() { onSuccessInternal(null); @@ -58,6 +61,9 @@ public final class SaveCallback { * * @param intentSender intent that will be launched from the context of activity being * autofilled. + * + * @throws IllegalStateException if this method, {@link #onSuccess()}, + * or {@link #onFailure(CharSequence)} was already called. */ public void onSuccess(@NonNull IntentSender intentSender) { onSuccessInternal(Preconditions.checkNotNull(intentSender)); @@ -86,7 +92,12 @@ public final class SaveCallback { * you prefer to show your own message, call {@link #onSuccess()} or * {@link #onSuccess(IntentSender)} instead. * - * @param message error message to be displayed to the user. + * @param message error message to be displayed to the user. <b>Note: </b> this message is + * displayed on {@code logcat} logs and should not contain PII (Personally Identifiable + * Information, such as username or email address). + * + * @throws IllegalStateException if this method, {@link #onSuccess()}, + * or {@link #onSuccess(IntentSender)} was already called. */ public void onFailure(CharSequence message) { assertNotCalled(); diff --git a/core/java/android/service/autofill/Transformation.java b/core/java/android/service/autofill/Transformation.java index aa8bc9b9500f..de43955e2dc1 100644 --- a/core/java/android/service/autofill/Transformation.java +++ b/core/java/android/service/autofill/Transformation.java @@ -20,6 +20,9 @@ package android.service.autofill; * template} at runtime, using the values of fields contained in the screen. * * <p>Typically used by {@link CustomDescription} to provide a customized autofill save UI. + * + * <p><b>Note:</b> This interface is not meant to be implemented by app developers; only + * implementations provided by the Android System can be used in other Autofill APIs. */ public interface Transformation { } 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/dreams/IDreamManager.aidl b/core/java/android/service/dreams/IDreamManager.aidl index be3f3b345824..33f3effd970b 100644 --- a/core/java/android/service/dreams/IDreamManager.aidl +++ b/core/java/android/service/dreams/IDreamManager.aidl @@ -23,12 +23,17 @@ import android.os.IBinder; /** @hide */ interface IDreamManager { + @UnsupportedAppUsage void dream(); + @UnsupportedAppUsage void awaken(); + @UnsupportedAppUsage void setDreamComponents(in ComponentName[] componentNames); + @UnsupportedAppUsage ComponentName[] getDreamComponents(); ComponentName getDefaultDreamComponent(); void testDream(in ComponentName componentName); + @UnsupportedAppUsage boolean isDreaming(); void finishSelf(in IBinder token, boolean immediate); void startDozing(in IBinder token, int screenState, int screenBrightness); 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/service/euicc/IDeleteSubscriptionCallback.aidl b/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl index 4667066df866..aff8f1b7b346 100644 --- a/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl +++ b/core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IDeleteSubscriptionCallback { + @UnsupportedAppUsage void onComplete(int result); }
\ No newline at end of file diff --git a/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl b/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl index c975f1894aa2..34b53cc71dfb 100644 --- a/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl +++ b/core/java/android/service/euicc/IEraseSubscriptionsCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IEraseSubscriptionsCallback { + @UnsupportedAppUsage void onComplete(int result); }
\ No newline at end of file diff --git a/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl b/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl index 0c5a0c692cb5..ad69ef132428 100644 --- a/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl +++ b/core/java/android/service/euicc/IGetDefaultDownloadableSubscriptionListCallback.aidl @@ -20,5 +20,6 @@ import android.service.euicc.GetDefaultDownloadableSubscriptionListResult; /** @hide */ oneway interface IGetDefaultDownloadableSubscriptionListCallback { + @UnsupportedAppUsage void onComplete(in GetDefaultDownloadableSubscriptionListResult result); }
\ No newline at end of file diff --git a/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl b/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl index 3353061ad93e..01f187ed11e2 100644 --- a/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl +++ b/core/java/android/service/euicc/IGetDownloadableSubscriptionMetadataCallback.aidl @@ -20,5 +20,6 @@ import android.service.euicc.GetDownloadableSubscriptionMetadataResult; /** @hide */ oneway interface IGetDownloadableSubscriptionMetadataCallback { + @UnsupportedAppUsage void onComplete(in GetDownloadableSubscriptionMetadataResult result); }
\ No newline at end of file diff --git a/core/java/android/service/euicc/IGetEidCallback.aidl b/core/java/android/service/euicc/IGetEidCallback.aidl index 35ee9c25a48e..e405a981c85a 100644 --- a/core/java/android/service/euicc/IGetEidCallback.aidl +++ b/core/java/android/service/euicc/IGetEidCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IGetEidCallback { + @UnsupportedAppUsage void onSuccess(String eid); }
\ No newline at end of file diff --git a/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl b/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl index 6d281487602a..c0611825ff0f 100644 --- a/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl +++ b/core/java/android/service/euicc/IGetEuiccInfoCallback.aidl @@ -20,5 +20,6 @@ import android.telephony.euicc.EuiccInfo; /** @hide */ oneway interface IGetEuiccInfoCallback { + @UnsupportedAppUsage void onSuccess(in EuiccInfo euiccInfo); }
\ No newline at end of file diff --git a/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl b/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl index 761ec1f01324..0485f7be29d3 100644 --- a/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl +++ b/core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl @@ -20,5 +20,6 @@ import android.service.euicc.GetEuiccProfileInfoListResult; /** @hide */ oneway interface IGetEuiccProfileInfoListCallback { + @UnsupportedAppUsage void onComplete(in GetEuiccProfileInfoListResult result); }
\ No newline at end of file diff --git a/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl b/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl index 127683059c02..340401fe89cb 100644 --- a/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl +++ b/core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IRetainSubscriptionsForFactoryResetCallback { + @UnsupportedAppUsage void onComplete(int result); }
\ No newline at end of file diff --git a/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl b/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl index 0f91a6b29e26..b8f984d1c28b 100644 --- a/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl +++ b/core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface ISwitchToSubscriptionCallback { + @UnsupportedAppUsage void onComplete(int result); }
\ No newline at end of file diff --git a/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl b/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl index 66669330c8c0..0aa66978bb91 100644 --- a/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl +++ b/core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl @@ -18,5 +18,6 @@ package android.service.euicc; /** @hide */ oneway interface IUpdateSubscriptionNicknameCallback { + @UnsupportedAppUsage void onComplete(int result); }
\ No newline at end of file diff --git a/core/java/android/service/vr/IVrManager.aidl b/core/java/android/service/vr/IVrManager.aidl index f7acfc5918a8..ee0c13b4cbd1 100644 --- a/core/java/android/service/vr/IVrManager.aidl +++ b/core/java/android/service/vr/IVrManager.aidl @@ -57,6 +57,7 @@ interface IVrManager { * * @return {@code true} if VR mode is enabled. */ + @UnsupportedAppUsage boolean getVrModeState(); /** @@ -93,6 +94,7 @@ interface IVrManager { * @return {@link android.view.Display.INVALID_DISPLAY} if there is no virtual display * currently, else return the display id of the virtual display */ + @UnsupportedAppUsage int getVr2dDisplayId(); /** diff --git a/core/java/android/service/wallpaper/IWallpaperEngine.aidl b/core/java/android/service/wallpaper/IWallpaperEngine.aidl index dccce406e32c..ffc5454fc50a 100644 --- a/core/java/android/service/wallpaper/IWallpaperEngine.aidl +++ b/core/java/android/service/wallpaper/IWallpaperEngine.aidl @@ -26,11 +26,15 @@ import android.os.Bundle; oneway interface IWallpaperEngine { void setDesiredSize(int width, int height); void setDisplayPadding(in Rect padding); + @UnsupportedAppUsage void setVisibility(boolean visible); void setInAmbientMode(boolean inAmbientDisplay, boolean animated); + @UnsupportedAppUsage void dispatchPointer(in MotionEvent event); + @UnsupportedAppUsage void dispatchWallpaperCommand(String action, int x, int y, int z, in Bundle extras); void requestWallpaperColors(); + @UnsupportedAppUsage void destroy(); } 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/text/TextWatcher.java b/core/java/android/text/TextWatcher.java index bad09f2a0f0e..a0aef690a1b8 100644 --- a/core/java/android/text/TextWatcher.java +++ b/core/java/android/text/TextWatcher.java @@ -17,7 +17,7 @@ package android.text; /** - * When an object of a type is attached to an Editable, its methods will + * When an object of this type is attached to an Editable, its methods will * be called when the text is changed. */ public interface TextWatcher extends NoCopySpan { diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java index 32866c5c785a..ff69bcb2e7bb 100644 --- a/core/java/android/util/FeatureFlagUtils.java +++ b/core/java/android/util/FeatureFlagUtils.java @@ -47,6 +47,7 @@ public class FeatureFlagUtils { DEFAULT_FLAGS.put("settings_data_usage_v2", "true"); DEFAULT_FLAGS.put("settings_audio_switcher", "true"); DEFAULT_FLAGS.put("settings_systemui_theme", "true"); + DEFAULT_FLAGS.put("settings_dynamic_android", "false"); DEFAULT_FLAGS.put(HEARING_AID_SETTINGS, "false"); DEFAULT_FLAGS.put(SAFETY_HUB, "false"); } diff --git a/core/java/android/util/JsonReader.java b/core/java/android/util/JsonReader.java index 7d1c6c4918db..50f63f8db304 100644 --- a/core/java/android/util/JsonReader.java +++ b/core/java/android/util/JsonReader.java @@ -16,13 +16,15 @@ package android.util; +import libcore.internal.StringPool; + import java.io.Closeable; import java.io.EOFException; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.List; -import libcore.internal.StringPool; + /** * Reads a JSON (<a href="http://www.ietf.org/rfc/rfc4627.txt">RFC 4627</a>) @@ -295,7 +297,7 @@ public final class JsonReader implements Closeable { /** * Consumes the next token from the JSON stream and asserts that it is the - * end of the current array. + * end of the current object. */ public void endObject() throws IOException { expect(JsonToken.END_OBJECT); 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/KeyCharacterMap.java b/core/java/android/view/KeyCharacterMap.java index 14646f7ee3fa..fae1251c591e 100644 --- a/core/java/android/view/KeyCharacterMap.java +++ b/core/java/android/view/KeyCharacterMap.java @@ -124,7 +124,7 @@ public class KeyCharacterMap implements Parcelable { /** * Modifier keys may be chorded with character keys. * - * @see {#link #getModifierBehavior()} for more details. + * @see {@link #getModifierBehavior()} for more details. */ public static final int MODIFIER_BEHAVIOR_CHORDED = 0; @@ -132,7 +132,7 @@ public class KeyCharacterMap implements Parcelable { * Modifier keys may be chorded with character keys or they may toggle * into latched or locked states when pressed independently. * - * @see {#link #getModifierBehavior()} for more details. + * @see {@link #getModifierBehavior()} for more details. */ public static final int MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED = 1; diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index 00e0a3a87716..78331a1566c5 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -886,8 +886,8 @@ public class KeyEvent extends InputEvent implements Parcelable { /** * {@link #getAction} value: multiple duplicate key events have * occurred in a row, or a complex string is being delivered. If the - * key code is not {#link {@link #KEYCODE_UNKNOWN} then the - * {#link {@link #getRepeatCount()} method returns the number of times + * key code is not {@link #KEYCODE_UNKNOWN} then the + * {@link #getRepeatCount()} method returns the number of times * the given key code should be executed. * Otherwise, if the key code is {@link #KEYCODE_UNKNOWN}, then * this is a sequence of characters as returned by {@link #getCharacters}. 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/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 1dbe166899dc..66f16d57c828 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -530,9 +530,9 @@ public class SurfaceControl implements Parcelable { */ public Builder setColorLayer(boolean isColorLayer) { if (isColorLayer) { - setFlags(FX_SURFACE_DIM, FX_SURFACE_MASK); + mFlags |= FX_SURFACE_DIM; } else { - setBufferLayer(); + mFlags &= ~FX_SURFACE_DIM; } return this; } @@ -547,22 +547,14 @@ public class SurfaceControl implements Parcelable { */ public Builder setContainerLayer(boolean isContainerLayer) { if (isContainerLayer) { - setFlags(FX_SURFACE_CONTAINER, FX_SURFACE_MASK); + mFlags |= FX_SURFACE_CONTAINER; } else { - setBufferLayer(); + mFlags &= ~FX_SURFACE_CONTAINER; } return this; } /** - * Indicates whether a buffer layer is to be constructed. - * - */ - public Builder setBufferLayer() { - return setFlags(FX_SURFACE_NORMAL, FX_SURFACE_MASK); - } - - /** * Set 'Surface creation flags' such as {@link HIDDEN}, {@link SECURE}. * * TODO: Finish conversion to individual builder methods? @@ -572,11 +564,6 @@ public class SurfaceControl implements Parcelable { mFlags = flags; return this; } - - private Builder setFlags(int flags, int mask) { - mFlags = (mFlags & ~mask) | flags; - return this; - } } /** diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index efff6d617376..48aa576c1e91 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -15584,7 +15584,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Sets the visual z position of this view, in pixels. This is equivalent to setting the * {@link #setTranslationZ(float) translationZ} property to be the difference between - * the x value passed in and the current {@link #getElevation() elevation} property. + * the z value passed in and the current {@link #getElevation() elevation} property. * * @param z The visual z position of this view, in pixels. */ diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 81ab4b6b267a..b20a521aca51 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -8114,7 +8114,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * Sets the margins, in pixels. A call to {@link android.view.View#requestLayout()} needs * to be done so that the new margins are taken into account. Left and right margins may be - * overriden by {@link android.view.View#requestLayout()} depending on layout direction. + * overridden by {@link android.view.View#requestLayout()} depending on layout direction. * Margin values should be positive. * * @param left the left margin size @@ -8144,8 +8144,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * Sets the relative margins, in pixels. A call to {@link android.view.View#requestLayout()} * needs to be done so that the new relative margins are taken into account. Left and right - * margins may be overriden by {@link android.view.View#requestLayout()} depending on layout - * direction. Margin values should be positive. + * margins may be overridden by {@link android.view.View#requestLayout()} depending on + * layout direction. Margin values should be positive. * * @param start the start margin size * @param top the top margin size 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/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java index da5a1cd67922..0e1e379d610a 100644 --- a/core/java/android/view/accessibility/AccessibilityCache.java +++ b/core/java/android/view/accessibility/AccessibilityCache.java @@ -418,20 +418,28 @@ public class AccessibilityCache { * * @param nodes The nodes in the hosting window. * @param rootNodeId The id of the root to evict. + * + * @return {@code true} if the cache was cleared */ - private void clearSubTreeRecursiveLocked(LongSparseArray<AccessibilityNodeInfo> nodes, + private boolean clearSubTreeRecursiveLocked(LongSparseArray<AccessibilityNodeInfo> nodes, long rootNodeId) { AccessibilityNodeInfo current = nodes.get(rootNodeId); if (current == null) { - return; + // The node isn't in the cache, but its descendents might be. + clear(); + return true; } nodes.remove(rootNodeId); final int childCount = current.getChildCount(); for (int i = 0; i < childCount; i++) { final long childNodeId = current.getChildId(i); - clearSubTreeRecursiveLocked(nodes, childNodeId); + if (clearSubTreeRecursiveLocked(nodes, childNodeId)) { + current.recycle(); + return true; + } } current.recycle(); + return false; } /** diff --git a/core/java/android/view/animation/DecelerateInterpolator.java b/core/java/android/view/animation/DecelerateInterpolator.java index f89743c149b1..2d1249df4fb5 100644 --- a/core/java/android/view/animation/DecelerateInterpolator.java +++ b/core/java/android/view/animation/DecelerateInterpolator.java @@ -41,8 +41,8 @@ public class DecelerateInterpolator extends BaseInterpolator implements NativeIn * Constructor * * @param factor Degree to which the animation should be eased. Setting factor to 1.0f produces - * an upside-down y=x^2 parabola. Increasing factor above 1.0f makes exaggerates the - * ease-out effect (i.e., it starts even faster and ends evens slower) + * an upside-down y=x^2 parabola. Increasing factor above 1.0f exaggerates the + * ease-out effect (i.e., it starts even faster and ends evens slower). */ public DecelerateInterpolator(float factor) { mFactor = factor; diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index d21cb3e64b8c..8b3ce42b076b 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -44,6 +44,7 @@ import android.service.autofill.UserData; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; +import android.util.Slog; import android.util.SparseArray; import android.view.Choreographer; import android.view.KeyEvent; @@ -548,6 +549,9 @@ public final class AutofillManager { // different bridge based on which activity is currently focused // in the current process. Since compat would be rarely used, just // create and register a new instance every time. + if (sDebug) { + Slog.d(TAG, "creating CompatibilityBridge for " + mContext); + } mCompatibilityBridge = new CompatibilityBridge(); } } 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/android/webkit/SafeBrowsingResponse.java b/core/java/android/webkit/SafeBrowsingResponse.java index 1d3a617a6bec..7839a00eff69 100644 --- a/core/java/android/webkit/SafeBrowsingResponse.java +++ b/core/java/android/webkit/SafeBrowsingResponse.java @@ -36,14 +36,14 @@ public abstract class SafeBrowsingResponse { public abstract void showInterstitial(boolean allowReporting); /** - * Act as if the user clicked "visit this unsafe site." + * Act as if the user clicked the "visit this unsafe site" button. * * @param report {@code true} to enable Safe Browsing reporting. */ public abstract void proceed(boolean report); /** - * Act as if the user clicked "back to safety." + * Act as if the user clicked the "back to safety" button. * * @param report {@code true} to enable Safe Browsing reporting. */ diff --git a/core/java/android/webkit/TracingController.java b/core/java/android/webkit/TracingController.java index 05c0304e042c..30f465cb42c6 100644 --- a/core/java/android/webkit/TracingController.java +++ b/core/java/android/webkit/TracingController.java @@ -36,7 +36,7 @@ import java.util.concurrent.Executor; * <pre class="prettyprint"> * TracingController tracingController = TracingController.getInstance(); * tracingController.start(new TracingConfig.Builder() - * .addCategories(CATEGORIES_WEB_DEVELOPER).build()); + * .addCategories(TracingConfig.CATEGORIES_WEB_DEVELOPER).build()); * ... * tracingController.stop(new FileOutputStream("trace.json"), * Executors.newSingleThreadExecutor()); diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 0f56abac06d4..a18c38580a92 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -7700,6 +7700,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te mLastSeenPos = firstPos; final int childCount = getChildCount(); + + if (childCount <= 0) { + return; + } + final int position = mTargetPos; final int lastPos = firstPos + childCount - 1; diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java index dd6c923e7f47..f3fe16e8a675 100644 --- a/core/java/android/widget/AdapterView.java +++ b/core/java/android/widget/AdapterView.java @@ -682,7 +682,7 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup { /** * Sets the currently selected item. To support accessibility subclasses that - * override this method must invoke the overriden super method first. + * override this method must invoke the overridden super method first. * * @param position Index (starting at 0) of the data item to be selected. */ diff --git a/core/java/android/widget/CursorAdapter.java b/core/java/android/widget/CursorAdapter.java index cc8b55009316..e250f63bbc65 100644 --- a/core/java/android/widget/CursorAdapter.java +++ b/core/java/android/widget/CursorAdapter.java @@ -365,7 +365,7 @@ public abstract class CursorAdapter extends BaseAdapter implements Filterable, * closed. * * @param newCursor The new cursor to be used. - * @return Returns the previously set Cursor, or null if there wasa not one. + * @return Returns the previously set Cursor, or null if there was not one. * If the given new Cursor is the same instance is the previously set * Cursor, null is also returned. */ diff --git a/core/java/android/widget/DigitalClock.java b/core/java/android/widget/DigitalClock.java index c503ef215ea1..8ebf303136ef 100644 --- a/core/java/android/widget/DigitalClock.java +++ b/core/java/android/widget/DigitalClock.java @@ -27,7 +27,7 @@ import android.util.AttributeSet; import java.util.Calendar; /** - * Like AnalogClock, but digital. Shows seconds. + * Like AnalogClock, but digital. * * @deprecated It is recommended you use {@link TextClock} instead. */ diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java index 452e9036cc54..f2e478d0e072 100644 --- a/core/java/android/widget/LinearLayout.java +++ b/core/java/android/widget/LinearLayout.java @@ -653,7 +653,7 @@ public class LinearLayout extends ViewGroup { } /** - * <p>Returns the view at the specified index. This method can be overriden + * <p>Returns the view at the specified index. This method can be overridden * to take into account virtual children. Refer to * {@link android.widget.TableLayout} and {@link android.widget.TableRow} * for an example.</p> @@ -1527,7 +1527,7 @@ public class LinearLayout extends ViewGroup { /** * <p>Measure the child according to the parent's measure specs. This - * method should be overriden by subclasses to force the sizing of + * method should be overridden by subclasses to force the sizing of * children. This method is called by {@link #measureVertical(int, int)} and * {@link #measureHorizontal(int, int)}.</p> * diff --git a/core/java/android/widget/ShareActionProvider.java b/core/java/android/widget/ShareActionProvider.java index 9a24061ba0d6..c78f4ac116ee 100644 --- a/core/java/android/widget/ShareActionProvider.java +++ b/core/java/android/widget/ShareActionProvider.java @@ -268,7 +268,7 @@ public class ShareActionProvider extends ActionProvider { * Intent shareIntent = new Intent(Intent.ACTION_SEND); * shareIntent.setType("image/*"); * Uri uri = Uri.fromFile(new File(getFilesDir(), "foo.jpg")); - * shareIntent.putExtra(Intent.EXTRA_STREAM, uri));</pre> + * shareIntent.putExtra(Intent.EXTRA_STREAM, uri);</pre> * * @param shareIntent The share intent. * diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 4c0163ef89da..8a199275b123 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -3572,7 +3572,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener /** * Read the Text Appearance attributes from a given TypedArray and set its values to the given * set. If the TypedArray contains a value that was already set in the given attributes, that - * will be overriden. + * will be overridden. * * @param context The Context to be used * @param appearance The TypedArray to read properties from 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/net/VpnProfile.java b/core/java/com/android/internal/net/VpnProfile.java index ec02432223de..940cc363f742 100644 --- a/core/java/com/android/internal/net/VpnProfile.java +++ b/core/java/com/android/internal/net/VpnProfile.java @@ -18,6 +18,8 @@ package com.android.internal.net; import android.annotation.UnsupportedAppUsage; import android.os.Build; +import android.net.ProxyInfo; +import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -46,6 +48,10 @@ public class VpnProfile implements Cloneable, Parcelable { public static final int TYPE_IPSEC_HYBRID_RSA = 5; public static final int TYPE_MAX = 5; + // Match these constants with R.array.vpn_proxy_settings. + public static final int PROXY_NONE = 0; + public static final int PROXY_MANUAL = 1; + // Entity fields. @UnsupportedAppUsage public final String key; // -1 @@ -68,6 +74,7 @@ public class VpnProfile implements Cloneable, Parcelable { public String ipsecUserCert = ""; // 12 public String ipsecCaCert = ""; // 13 public String ipsecServerCert = "";// 14 + public ProxyInfo proxy = null; // 15~18 // Helper fields. @UnsupportedAppUsage @@ -96,6 +103,7 @@ public class VpnProfile implements Cloneable, Parcelable { ipsecCaCert = in.readString(); ipsecServerCert = in.readString(); saveLogin = in.readInt() != 0; + proxy = in.readParcelable(null); } @Override @@ -117,6 +125,7 @@ public class VpnProfile implements Cloneable, Parcelable { out.writeString(ipsecCaCert); out.writeString(ipsecServerCert); out.writeInt(saveLogin ? 1 : 0); + out.writeParcelable(proxy, flags); } @UnsupportedAppUsage @@ -127,8 +136,8 @@ public class VpnProfile implements Cloneable, Parcelable { } String[] values = new String(value, StandardCharsets.UTF_8).split("\0", -1); - // There can be 14 or 15 values in ICS MR1. - if (values.length < 14 || values.length > 15) { + // There can be 14 - 19 Bytes in values.length. + if (values.length < 14 || values.length > 19) { return null; } @@ -151,7 +160,18 @@ public class VpnProfile implements Cloneable, Parcelable { profile.ipsecUserCert = values[12]; profile.ipsecCaCert = values[13]; profile.ipsecServerCert = (values.length > 14) ? values[14] : ""; - + if (values.length > 15) { + String host = (values.length > 15) ? values[15] : ""; + String port = (values.length > 16) ? values[16] : ""; + String exclList = (values.length > 17) ? values[17] : ""; + String pacFileUrl = (values.length > 18) ? values[18] : ""; + if (pacFileUrl.isEmpty()) { + profile.proxy = new ProxyInfo(host, port.isEmpty() ? + 0 : Integer.parseInt(port), exclList); + } else { + profile.proxy = new ProxyInfo(pacFileUrl); + } + } // else profle.proxy = null profile.saveLogin = !profile.username.isEmpty() || !profile.password.isEmpty(); return profile; } catch (Exception e) { @@ -176,6 +196,13 @@ public class VpnProfile implements Cloneable, Parcelable { builder.append('\0').append(ipsecUserCert); builder.append('\0').append(ipsecCaCert); builder.append('\0').append(ipsecServerCert); + if (proxy != null) { + builder.append('\0').append(proxy.getHost() != null ? proxy.getHost() : ""); + builder.append('\0').append(proxy.getPort()); + builder.append('\0').append(proxy.getExclusionListAsString() != null ? + proxy.getExclusionListAsString() : ""); + builder.append('\0').append(proxy.getPacFileUrl().toString()); + } return builder.toString().getBytes(StandardCharsets.UTF_8); } 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/KernelCpuProcReader.java b/core/java/com/android/internal/os/KernelCpuProcReader.java index 396deb4d7a0a..c233ea8e78b7 100644 --- a/core/java/com/android/internal/os/KernelCpuProcReader.java +++ b/core/java/com/android/internal/os/KernelCpuProcReader.java @@ -24,13 +24,14 @@ import com.android.internal.annotations.VisibleForTesting; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import java.nio.channels.FileChannel; +import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; +import java.util.Arrays; /** * Reads cpu time proc files with throttling (adjustable interval). @@ -55,7 +56,6 @@ public class KernelCpuProcReader { private static final int ERROR_THRESHOLD = 5; // Throttle interval in milliseconds private static final long DEFAULT_THROTTLE_INTERVAL = 3000L; - private static final int INITIAL_BUFFER_SIZE = 8 * 1024; private static final int MAX_BUFFER_SIZE = 1024 * 1024; private static final String PROC_UID_FREQ_TIME = "/proc/uid_cpupower/time_in_state"; private static final String PROC_UID_ACTIVE_TIME = "/proc/uid_cpupower/concurrent_active_time"; @@ -84,13 +84,12 @@ public class KernelCpuProcReader { private long mThrottleInterval = DEFAULT_THROTTLE_INTERVAL; private long mLastReadTime = Long.MIN_VALUE; private final Path mProc; - private ByteBuffer mBuffer; + private byte[] mBuffer = new byte[8 * 1024]; + private int mContentSize; @VisibleForTesting public KernelCpuProcReader(String procFile) { mProc = Paths.get(procFile); - mBuffer = ByteBuffer.allocateDirect(INITIAL_BUFFER_SIZE); - mBuffer.clear(); } /** @@ -108,38 +107,45 @@ public class KernelCpuProcReader { return null; } if (SystemClock.elapsedRealtime() < mLastReadTime + mThrottleInterval) { - if (mBuffer.limit() > 0 && mBuffer.limit() < mBuffer.capacity()) { - // mBuffer has data. - return mBuffer.asReadOnlyBuffer().order(ByteOrder.nativeOrder()); + if (mContentSize > 0) { + return ByteBuffer.wrap(mBuffer, 0, mContentSize).asReadOnlyBuffer() + .order(ByteOrder.nativeOrder()); } return null; } mLastReadTime = SystemClock.elapsedRealtime(); - mBuffer.clear(); + mContentSize = 0; final int oldMask = StrictMode.allowThreadDiskReadsMask(); - try (FileChannel fc = FileChannel.open(mProc, StandardOpenOption.READ)) { - while (fc.read(mBuffer) == mBuffer.capacity()) { - if (!resize()) { - mErrors++; - Slog.e(TAG, "Proc file is too large: " + mProc); - return null; + try (InputStream in = Files.newInputStream(mProc)) { + int numBytes = 0; + int curr; + while ((curr = in.read(mBuffer, numBytes, mBuffer.length - numBytes)) >= 0) { + numBytes += curr; + if (numBytes == mBuffer.length) { + // Hit the limit. Resize mBuffer. + if (mBuffer.length == MAX_BUFFER_SIZE) { + mErrors++; + Slog.e(TAG, "Proc file is too large: " + mProc); + return null; + } + mBuffer = Arrays.copyOf(mBuffer, + Math.min(mBuffer.length << 1, MAX_BUFFER_SIZE)); } - fc.position(0); } + mContentSize = numBytes; + return ByteBuffer.wrap(mBuffer, 0, mContentSize).asReadOnlyBuffer() + .order(ByteOrder.nativeOrder()); } catch (NoSuchFileException | FileNotFoundException e) { // Happens when the kernel does not provide this file. Not a big issue. Just log it. mErrors++; Slog.w(TAG, "File not exist: " + mProc); - return null; } catch (IOException e) { mErrors++; Slog.e(TAG, "Error reading: " + mProc, e); - return null; } finally { StrictMode.setThreadPolicyMask(oldMask); } - mBuffer.flip(); - return mBuffer.asReadOnlyBuffer().order(ByteOrder.nativeOrder()); + return null; } /** @@ -153,14 +159,4 @@ public class KernelCpuProcReader { mThrottleInterval = throttleInterval; } } - - private boolean resize() { - if (mBuffer.capacity() >= MAX_BUFFER_SIZE) { - return false; - } - int newSize = Math.min(mBuffer.capacity() << 1, MAX_BUFFER_SIZE); - // Slog.i(TAG, "Resize buffer " + mBuffer.capacity() + " => " + newSize); - mBuffer = ByteBuffer.allocateDirect(newSize); - return true; - } } 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/os/RoSystemProperties.java b/core/java/com/android/internal/os/RoSystemProperties.java index dc660a452c3b..209933adf91d 100644 --- a/core/java/com/android/internal/os/RoSystemProperties.java +++ b/core/java/com/android/internal/os/RoSystemProperties.java @@ -17,6 +17,7 @@ package com.android.internal.os; import android.os.SystemProperties; +import android.sysprop.CryptoProperties; /** * This is a cache of various ro.* properties so that they can be read just once @@ -44,7 +45,7 @@ public class RoSystemProperties { // ------ ro.crypto.* -------- // public static final String CRYPTO_STATE = SystemProperties.get("ro.crypto.state"); - public static final String CRYPTO_TYPE = SystemProperties.get("ro.crypto.type"); + public static final String CRYPTO_TYPE = CryptoProperties.type().orElse("none"); // These are pseudo-properties public static final boolean CRYPTO_ENCRYPTABLE = !CRYPTO_STATE.isEmpty() && !"unsupported".equals(CRYPTO_STATE); diff --git a/core/java/com/android/internal/os/SomeArgs.java b/core/java/com/android/internal/os/SomeArgs.java index b9d53c1b5884..d78bfac1f878 100644 --- a/core/java/com/android/internal/os/SomeArgs.java +++ b/core/java/com/android/internal/os/SomeArgs.java @@ -120,6 +120,8 @@ public final class SomeArgs { arg5 = null; arg6 = null; arg7 = null; + arg8 = null; + arg9 = null; argi1 = 0; argi2 = 0; argi3 = 0; diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index 56eb128558e8..d4fa5cbb4f55 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -731,17 +731,6 @@ public final class Zygote { * @throws IOException passed straight through */ static String[] readArgumentList(BufferedReader socketReader) throws IOException { - - /** - * See android.os.Process.zygoteSendArgsAndGetPid() - * Presently the wire format to the zygote process is: - * a) a count of arguments (argc, in essence) - * b) a number of newline-separated argument strings equal to count - * - * After the zygote process reads these it will write the pid of - * the child or -1 on failure. - */ - int argc; try { diff --git a/core/java/com/android/internal/os/ZygoteArguments.java b/core/java/com/android/internal/os/ZygoteArguments.java index 2e869aefcb77..af90b150b4c6 100644 --- a/core/java/com/android/internal/os/ZygoteArguments.java +++ b/core/java/com/android/internal/os/ZygoteArguments.java @@ -196,8 +196,17 @@ class ZygoteArguments { * Per security review bug #1112214, duplicate args are disallowed in critical cases to make * injection harder. */ - private void parseArgs(String[] args) - throws IllegalArgumentException { + private void parseArgs(String[] args) throws IllegalArgumentException { + /* + * See android.os.ZygoteProcess.zygoteSendArgsAndGetResult() + * Presently the wire format to the zygote process is: + * a) a count of arguments (argc, in essence) + * b) a number of newline-separated argument strings equal to count + * + * After the zygote process reads these it will write the pid of + * the child or -1 on failure. + */ + int curArg = 0; boolean seenRuntimeArgs = false; diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index d067ae792e2d..14958ca539de 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -319,13 +319,25 @@ class ZygoteConnection { private final MetricsLogger mMetricsLogger = new MetricsLogger(); private static HiddenApiUsageLogger sInstance = new HiddenApiUsageLogger(); + private int mHiddenApiAccessLogSampleRate = 0; + + public static void setHiddenApiAccessLogSampleRate(int sampleRate) { + sInstance.mHiddenApiAccessLogSampleRate = sampleRate; + } public static HiddenApiUsageLogger getInstance() { return HiddenApiUsageLogger.sInstance; } - public void hiddenApiUsed(String packageName, String signature, + public void hiddenApiUsed(int sampledValue, String packageName, String signature, int accessMethod, boolean accessDenied) { + if (sampledValue < mHiddenApiAccessLogSampleRate) { + logUsage(packageName, signature, accessMethod, accessDenied); + } + } + + private void logUsage(String packageName, String signature, int accessMethod, + boolean accessDenied) { int accessMethodMetric = HiddenApiUsageLogger.ACCESS_METHOD_NONE; switch(accessMethod) { case HiddenApiUsageLogger.ACCESS_METHOD_NONE: @@ -356,6 +368,7 @@ class ZygoteConnection { private void handleHiddenApiAccessLogSampleRate(int samplingRate) { try { ZygoteInit.setHiddenApiAccessLogSampleRate(samplingRate); + HiddenApiUsageLogger.setHiddenApiAccessLogSampleRate(samplingRate); ZygoteInit.setHiddenApiUsageLogger(HiddenApiUsageLogger.getInstance()); mSocketOutStream.writeInt(0); } catch (IOException ioe) { 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/java/com/android/server/net/OWNERS b/core/java/com/android/server/net/OWNERS index 7311eee32a4c..d3836d4c6c57 100644 --- a/core/java/com/android/server/net/OWNERS +++ b/core/java/com/android/server/net/OWNERS @@ -1,8 +1,8 @@ set noparent codewiz@google.com -ek@google.com jchalard@google.com +junyulai@google.com lorenzo@google.com reminv@google.com satk@google.com 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 b94ac9c29f9f..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; /* @@ -651,6 +669,20 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv, bool zygote) char methodTraceFileSizeBuf[sizeof("-Xmethod-trace-file-size:") + PROPERTY_VALUE_MAX]; std::string fingerprintBuf; char jdwpProviderBuf[sizeof("-XjdwpProvider:") - 1 + PROPERTY_VALUE_MAX]; + char bootImageBuf[sizeof("-Ximage:") - 1 + PROPERTY_VALUE_MAX]; + + 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; property_get("dalvik.vm.checkjni", propBuf, ""); @@ -764,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/AndroidManifest.xml b/core/res/AndroidManifest.xml index 7590675a9f9d..35bc46ae33ab 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1000,7 +1000,7 @@ <!-- Allows a calling application which manages it own calls through the self-managed {@link android.telecom.ConnectionService} APIs. See - {@link android.telecom.PhoneAccount#CAPABILITY_SELF_MANAGED for more information on the + {@link android.telecom.PhoneAccount#CAPABILITY_SELF_MANAGED} for more information on the self-managed ConnectionService APIs. <p>Protection level: normal --> @@ -1085,9 +1085,9 @@ android:priority="700" /> <!-- Required to be able to access the camera device. - <p>This will automatically enforce the <a - href="{@docRoot}guide/topics/manifest/uses-feature-element.html"> - <uses-feature>}</a> manifest element for <em>all</em> camera features. + <p>This will automatically enforce the + <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"> + uses-feature</a> manifest element for <em>all</em> camera features. If you do not require all camera features or can properly operate if a camera is not available, then you must modify your manifest as appropriate in order to install on devices that don't support all camera features.</p> @@ -1839,12 +1839,12 @@ <!-- Must be required by a {@link android.telecom.PhoneAccountSuggestionService}, to ensure that only the system can bind to it. - <p>Protection level: signature|privileged + <p>Protection level: signature @SystemApi @hide --> <permission android:name="android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE" - android:protectionLevel="signature|privileged" /> + android:protectionLevel="signature" /> <!-- Must be required by a {@link android.telecom.CallRedirectionService}, to ensure that only the system can bind to it. diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index e87f5a857fb9..dd0bd07e0e22 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -171,10 +171,10 @@ <string name="contentServiceSync" msgid="8353523060269335667">"مزامنة"</string> <string name="contentServiceSyncNotificationTitle" msgid="7036196943673524858">"تتعذّر المزامنة."</string> <string name="contentServiceTooManyDeletesNotificationDesc" msgid="4884451152168188763">"تمت محاولة حذف مقدار كبير من محتوى <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string> - <string name="low_memory" product="tablet" msgid="6494019234102154896">"سعة تخزين الجهاز اللوحي ممتلئة! احذف بعض الملفات لإخلاء مساحة."</string> - <string name="low_memory" product="watch" msgid="4415914910770005166">"سعة تخزين المشاهدة ممتلئة! احذف بعض الملفات لتحرير مساحة."</string> - <string name="low_memory" product="tv" msgid="516619861191025923">"سعة تخزين التلفزيون ممتلئة. يمكنك حذف بعض الملفات لتوفير مساحة فارغة."</string> - <string name="low_memory" product="default" msgid="3475999286680000541">"سعة تخزين الهاتف ممتلئة. احذف بعض الملفات لإخلاء مساحة."</string> + <string name="low_memory" product="tablet" msgid="6494019234102154896">"مساحة تخزين الجهاز اللوحي ممتلئة! احذف بعض الملفات لإخلاء مساحة."</string> + <string name="low_memory" product="watch" msgid="4415914910770005166">"مساحة تخزين المشاهدة ممتلئة! احذف بعض الملفات لتحرير مساحة."</string> + <string name="low_memory" product="tv" msgid="516619861191025923">"مساحة تخزين التلفزيون ممتلئة. يمكنك حذف بعض الملفات لتوفير مساحة فارغة."</string> + <string name="low_memory" product="default" msgid="3475999286680000541">"مساحة تخزين الهاتف ممتلئة. احذف بعض الملفات لإخلاء مساحة."</string> <plurals name="ssl_ca_cert_warning" formatted="false" msgid="5106721205300213569"> <item quantity="zero">تم تثبيت شهادة المرجع المصدق</item> <item quantity="two">تم تثبيت شهادتي المرجع المصدق</item> @@ -619,7 +619,7 @@ <string name="policylab_encryptedStorage" msgid="8901326199909132915">"تعيين تشفير التخزين"</string> <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"يمكنك طلب تشفير بيانات التطبيق المخزنة."</string> <string name="policylab_disableCamera" msgid="6395301023152297826">"إيقاف الكاميرات"</string> - <string name="policydesc_disableCamera" msgid="2306349042834754597">"يمكنك منح استخدام جميع كاميرات الجهاز."</string> + <string name="policydesc_disableCamera" msgid="2306349042834754597">"يمكنك منع استخدام جميع كاميرات الجهاز."</string> <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"إيقاف بعض ميزات قفل الشاشة"</string> <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"منع استخدام بعض ميزات قفل الشاشة."</string> <string-array name="phoneTypes"> @@ -1116,7 +1116,7 @@ <string name="view_flight_desc" msgid="3876322502674253506">"تتبُّع الرحلة الجوية المختارة"</string> <string name="low_internal_storage_view_title" msgid="5576272496365684834">"مساحة التخزين منخفضة"</string> <string name="low_internal_storage_view_text" msgid="6640505817617414371">"قد لا تعمل بعض وظائف النظام"</string> - <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"ليست هناك سعة تخزينية كافية للنظام. تأكد من أنه لديك مساحة خالية تبلغ ٢٥٠ ميغابايت وأعد التشغيل."</string> + <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"ليست هناك مساحة تخزين كافية للنظام. تأكد من أنه لديك مساحة خالية تبلغ ٢٥٠ ميغابايت وأعد التشغيل."</string> <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> قيد التشغيل"</string> <string name="app_running_notification_text" msgid="1197581823314971177">"انقر للحصول على مزيد من المعلومات أو لإيقاف التطبيق."</string> <string name="ok" msgid="5970060430562524910">"حسنًا"</string> @@ -1192,7 +1192,7 @@ <string name="android_start_title" product="default" msgid="4536778526365907780">"جارٍ بدء تشغيل الهاتف…"</string> <string name="android_start_title" product="tablet" msgid="4929837533850340472">"جارٍ بدء تشغيل الجهاز اللوحي…"</string> <string name="android_start_title" product="device" msgid="7467484093260449437">"جارٍ بدء تشغيل الجهاز…"</string> - <string name="android_upgrading_fstrim" msgid="8036718871534640010">"جارٍ تحسين سعة التخزين."</string> + <string name="android_upgrading_fstrim" msgid="8036718871534640010">"جارٍ تحسين مساحة التخزين."</string> <string name="android_upgrading_notification_title" product="default" msgid="1511552415039349062">"جارٍ إنهاء تحديث النظام…"</string> <string name="app_upgrading_toast" msgid="3008139776215597053">"جارٍ ترقية <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"جارٍ تحسين التطبيق <xliff:g id="NUMBER_0">%1$d</xliff:g> من <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> @@ -1441,7 +1441,7 @@ <string name="forward_intent_to_work" msgid="621480743856004612">"أنت تستخدم هذا التطبيق في ملفك الشخصي للعمل"</string> <string name="input_method_binding_label" msgid="1283557179944992649">"طريقة الإرسال"</string> <string name="sync_binding_label" msgid="3687969138375092423">"مزامنة"</string> - <string name="accessibility_binding_label" msgid="4148120742096474641">"إمكانية الدخول"</string> + <string name="accessibility_binding_label" msgid="4148120742096474641">"إمكانية الوصول"</string> <string name="wallpaper_binding_label" msgid="1240087844304687662">"الخلفية"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"تغيير الخلفية"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"برنامج تلقّي الإشعارات الصوتية"</string> @@ -1537,7 +1537,7 @@ <string name="action_menu_overflow_description" msgid="2295659037509008453">"المزيد من الخيارات"</string> <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s، %2$s"</string> <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s، %2$s، %3$s"</string> - <string name="storage_internal" msgid="3570990907910199483">"سعة التخزين المشتركة الداخلية"</string> + <string name="storage_internal" msgid="3570990907910199483">"مساحة التخزين المشتركة الداخلية"</string> <string name="storage_sd_card" msgid="3282948861378286745">"بطاقة SD"</string> <string name="storage_sd_card_label" msgid="6347111320774379257">"بطاقة SD من <xliff:g id="MANUFACTURER">%s</xliff:g>"</string> <string name="storage_usb_drive" msgid="6261899683292244209">"محرك أقراص USB"</string> @@ -1958,7 +1958,7 @@ <string name="app_category_news" msgid="7496506240743986873">"الأخبار والمجلات"</string> <string name="app_category_maps" msgid="5878491404538024367">"الخرائط والتنقل"</string> <string name="app_category_productivity" msgid="3742083261781538852">"الإنتاجية"</string> - <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"سعة التخزين للجهاز"</string> + <string name="device_storage_monitor_notification_channel" msgid="3295871267414816228">"مساحة التخزين للجهاز"</string> <string name="adb_debugging_notification_channel_tv" msgid="5537766997350092316">"تصحيح أخطاء USB"</string> <string name="time_picker_hour_label" msgid="2979075098868106450">"ساعة"</string> <string name="time_picker_minute_label" msgid="5168864173796598399">"دقيقة"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index f400d469ccf3..541dd8f608c8 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -213,7 +213,7 @@ <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Sat će se ugasiti."</string> <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefon će se isključiti."</string> <string name="shutdown_confirm_question" msgid="2906544768881136183">"Da li želite da isključite telefon?"</string> - <string name="reboot_safemode_title" msgid="7054509914500140361">"Ponovo pokreni sistem u bezbednom režimu"</string> + <string name="reboot_safemode_title" msgid="7054509914500140361">"Restartuj sistem u bezbednom režimu"</string> <string name="reboot_safemode_confirm" msgid="55293944502784668">"Da li želite da ponovo pokrenete sistem u bezbednom režimu? Ovo će onemogućiti sve instalirane aplikacije nezavisnih proizvođača. One će biti vraćene kada ponovo pokrenete sistem."</string> <string name="recent_tasks_title" msgid="3691764623638127888">"Nedavno"</string> <string name="no_recent_tasks" msgid="8794906658732193473">"Nema nedavnih aplikacija."</string> @@ -494,11 +494,11 @@ <string name="permlab_disableKeyguard" msgid="3598496301486439258">"onemogućavanje zaključavanja ekrana"</string> <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Dozvoljava aplikaciji da onemogući zaključavanje tastature i sve povezane bezbednosne mere sa lozinkama. Na primer, telefon onemogućava zaključavanje tastature pri prijemu dolaznog telefonskog poziva, a zatim ga ponovo omogućava po završetku poziva."</string> <string name="permlab_useBiometric" msgid="8837753668509919318">"koristi biometrijski hardver"</string> - <string name="permdesc_useBiometric" msgid="8389855232721612926">"Dozvoljava aplikaciji da koristi biometrijski hardver za potvrdu autentičnosti"</string> + <string name="permdesc_useBiometric" msgid="8389855232721612926">"Dozvoljava aplikaciji da koristi biometrijski hardver za potvrdu identiteta"</string> <string name="permlab_manageFingerprint" msgid="5640858826254575638">"upravljaj hardverom za otiske prstiju"</string> <string name="permdesc_manageFingerprint" msgid="178208705828055464">"Dozvoljava aplikaciji da aktivira metode za dodavanje i brisanje šablona otisaka prstiju koji će se koristiti."</string> <string name="permlab_useFingerprint" msgid="3150478619915124905">"koristi hardver za otiske prstiju"</string> - <string name="permdesc_useFingerprint" msgid="9165097460730684114">"Dozvoljava aplikaciji da koristi hardver za otiske prstiju radi potvrde autentičnosti"</string> + <string name="permdesc_useFingerprint" msgid="9165097460730684114">"Dozvoljava aplikaciji da koristi hardver za otiske prstiju radi potvrde identiteta"</string> <string name="fingerprint_acquired_partial" msgid="735082772341716043">"Otkriven je delimični otisak prsta. Probajte ponovo."</string> <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Nije uspela obrada otiska prsta. Probajte ponovo."</string> <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Senzor za otiske prstiju je prljav. Očistite ga i pokušajte ponovo."</string> @@ -835,7 +835,7 @@ <string name="factorytest_failed" msgid="5410270329114212041">"Fabričko testiranje nije uspelo"</string> <string name="factorytest_not_system" msgid="4435201656767276723">"Radnja FACTORY_TEST je podržana samo za pakete instalirane u direktorijumu /system/app."</string> <string name="factorytest_no_action" msgid="872991874799998561">"Nije pronađen nijedan paket koji obezbeđuje radnju FACTORY_TEST."</string> - <string name="factorytest_reboot" msgid="6320168203050791643">"Ponovo pokreni"</string> + <string name="factorytest_reboot" msgid="6320168203050791643">"Restartuj"</string> <string name="js_dialog_title" msgid="1987483977834603872">"Na stranici na adresi „<xliff:g id="TITLE">%s</xliff:g>“ piše:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Potvrda navigacije"</string> @@ -1255,7 +1255,7 @@ <string name="sim_done_button" msgid="827949989369963775">"Gotovo"</string> <string name="sim_added_title" msgid="3719670512889674693">"SIM kartica je dodata"</string> <string name="sim_added_message" msgid="6599945301141050216">"Restartujte uređaj da biste mogli da pristupite mobilnoj mreži."</string> - <string name="sim_restart_button" msgid="4722407842815232347">"Ponovo pokreni"</string> + <string name="sim_restart_button" msgid="4722407842815232347">"Restartuj"</string> <string name="install_carrier_app_notification_title" msgid="9056007111024059888">"Aktivirajte mobilnu uslugu"</string> <string name="install_carrier_app_notification_text" msgid="3346681446158696001">"Preuzmite aplikaciju mobilnog operatera da biste aktivirali novi SIM"</string> <string name="install_carrier_app_notification_text_app_name" msgid="1196505084835248137">"Preuzmite aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> da biste aktivirali novu SIM karticu"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 5544ac360080..0573a9a123dc 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -591,7 +591,7 @@ <string name="policylab_resetPassword" msgid="4934707632423915395">"স্ক্রিন লক পরিবর্তন করুন"</string> <string name="policydesc_resetPassword" msgid="1278323891710619128">"স্ক্রিন লক পরিবর্তন করুন৷"</string> <string name="policylab_forceLock" msgid="2274085384704248431">"স্ক্রিনটি লক করে"</string> - <string name="policydesc_forceLock" msgid="1141797588403827138">"স্ক্রিন কখন কিভাবে লক হবে তা নিয়ন্ত্রণ করে৷"</string> + <string name="policydesc_forceLock" msgid="1141797588403827138">"স্ক্রিন কখন কীভাবে লক হবে তা নিয়ন্ত্রণ করে৷"</string> <string name="policylab_wipeData" msgid="3910545446758639713">"সমস্ত ডেটা মুছে দেয়"</string> <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"ফ্যাক্টরি ডেটা আবার সেট কার্য সম্পাদনার দ্বারা কোনো রকম সতর্কতা ছাড়াই ট্যাবলেটের ডেটা মোছে৷"</string> <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"সতর্কীকরণ ছাড়াই একটি ফ্যাক্টরি ডেটা আবার সেট করার দ্বারা টিভির ডেটা মুছে ফেলে৷"</string> @@ -1815,7 +1815,7 @@ <string name="suspended_widget_accessibility" msgid="6712143096475264190">"অক্ষম করা <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="conference_call" msgid="3751093130790472426">"কনফারেন্স কল"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"টুলটিপ"</string> - <string name="app_category_game" msgid="5431836943981492993">"গেম্স"</string> + <string name="app_category_game" msgid="5431836943981492993">"গেম"</string> <string name="app_category_audio" msgid="1659853108734301647">"মিউজিক ও অডিও"</string> <string name="app_category_video" msgid="2728726078629384196">"চলচ্চিত্র ও ভিডিওগুলি"</string> <string name="app_category_image" msgid="4867854544519846048">"ফটো ও ছবিগুলি"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 1b93ca6b5ea3..89b8a4a10b34 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -583,11 +583,11 @@ <string name="policydesc_limitPassword" msgid="2502021457917874968">"Tjek længden samt tilladte tegn i adgangskoder og pinkoder til skærmlåsen."</string> <string name="policylab_watchLogin" msgid="5091404125971980158">"Overvåg forsøg på oplåsning af skærm"</string> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Overvåg antallet af forkert indtastede adgangskoder, når du låser skærmen op, og lås din tablet, eller slet alle data i den, hvis der er indtastet for mange forkerte adgangskoder."</string> - <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Overvåg antallet af forkert indtastede adgangskoder ved oplåsning af skærmen, og lås tv\'et eller slet alle dets data, hvis der indtastes for mange forkerte adgangskoder."</string> + <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Overvåg antallet af forkert indtastede adgangskoder ved oplåsning af skærmen, og lås tv\'et eller slet alle dets data, hvis der angives for mange forkerte adgangskoder."</string> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Overvåg antallet af forkerte adgangskoder ved oplåsning af skærmen, og lås telefonen eller slet alle data på telefonen, hvis der er indtastet for mange forkerte adgangskoder."</string> - <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Registrer antallet af forkerte adgangskoder, der indtastes ved oplåsning af skærmen, og lås din tablet, eller slet alle brugerens data, hvis adgangskoden tastes forkert for mange gange."</string> - <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Registrer antallet af forkerte adgangskoder, der indtastes ved oplåsning af skærmen, og lås tv-adgangen, eller slet alle brugerens data, hvis adgangskoden tastes forkert for mange gange."</string> - <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Registrer antallet af forkerte adgangskoder, der indtastes ved oplåsning af skærmen, og lås telefonen, eller slet alle brugerens data, hvis adgangskoden tastes forkert for mange gange."</string> + <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Registrer antallet af forkerte adgangskoder, der angives ved oplåsning af skærmen, og lås din tablet, eller slet alle brugerens data, hvis adgangskoden tastes forkert for mange gange."</string> + <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Registrer antallet af forkerte adgangskoder, der angives ved oplåsning af skærmen, og lås tv-adgangen, eller slet alle brugerens data, hvis adgangskoden tastes forkert for mange gange."</string> + <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Registrer antallet af forkerte adgangskoder, der angives ved oplåsning af skærmen, og lås telefonen, eller slet alle brugerens data, hvis adgangskoden tastes forkert for mange gange."</string> <string name="policylab_resetPassword" msgid="4934707632423915395">"Skifte skærmlås"</string> <string name="policydesc_resetPassword" msgid="1278323891710619128">"Skifter skærmlås"</string> <string name="policylab_forceLock" msgid="2274085384704248431">"Låse skærmen"</string> @@ -739,7 +739,7 @@ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Tryk på Menu for at låse op eller foretage et nødopkald."</string> <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Tryk på Menu for at låse op."</string> <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Tegn oplåsningsmønster"</string> - <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Nødopkald"</string> + <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Nødsituation"</string> <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Tilbage til opkald"</string> <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Rigtigt!"</string> <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Prøv igen"</string> @@ -887,7 +887,7 @@ <string name="menu_sym_shortcut_label" msgid="4019695553731017933">"Sym+"</string> <string name="menu_function_shortcut_label" msgid="1984053777418162618">"Fn+"</string> <string name="menu_space_shortcut_label" msgid="2410328639272162537">"plads"</string> - <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"indtast"</string> + <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"angiv"</string> <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"slet"</string> <string name="search_go" msgid="8298016669822141719">"Søg"</string> <string name="search_hint" msgid="1733947260773056054">"Søg…"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index d030cd24eb69..b4a64b517c8e 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -580,11 +580,11 @@ <string name="permlab_access_notification_policy" msgid="4247510821662059671">"Acceso a la función No interrumpir"</string> <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Permite que la aplicación lea y modifique la configuración de la función No interrumpir."</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"Establecer reglas de contraseña"</string> - <string name="policydesc_limitPassword" msgid="2502021457917874968">"Permite controlar la longitud y los caracteres permitidos en las contraseñas y los PIN para el bloqueo de pantalla."</string> + <string name="policydesc_limitPassword" msgid="2502021457917874968">"Controlar la longitud y los caracteres permitidos en las contraseñas y los PIN para el bloqueo de pantalla."</string> <string name="policylab_watchLogin" msgid="5091404125971980158">"Supervisa los intentos para desbloquear la pantalla"</string> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Controla la cantidad de contraseñas incorrectas ingresadas al desbloquear la pantalla y bloquea la tablet o borra todos los datos de la tablet si se ingresaron demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Permite controlar la cantidad de contraseñas incorrectas que se escriben al desbloquear la pantalla y permite bloquear la TV o borrar todos los datos de la TV si se escriben demasiadas contraseñas incorrectas."</string> - <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Controla la cantidad de contraseñas ingresadas incorrectamente al desbloquear la pantalla y bloquea el dispositivo o borra todos sus datos si se ingresan demasiadas contraseñas incorrectas."</string> + <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Supervisar la cantidad de contraseñas ingresadas incorrectamente al desbloquear la pantalla, y bloquear el dispositivo o borrar todos sus datos si se ingresan demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Permite controlar la cantidad de contraseñas incorrectas que se escriben al desbloquear la pantalla y bloquear la tablet, o borrar todos los datos del usuario, si se ingresan demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Permite controlar la cantidad de contraseñas incorrectas que se escriben al desbloquear la pantalla y bloquear la televisión, o borrar todos los datos del usuario, si se ingresan demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Permite controlar la cantidad de contraseñas incorrectas que se escriben al desbloquear la pantalla y bloquear el teléfono, o borrar todos los datos del usuario, si se ingresan demasiadas contraseñas incorrectas."</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index d795d252610e..396a2c029d6a 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -588,14 +588,14 @@ <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Controla el número de contraseñas incorrectas introducidas para desbloquear la pantalla y bloquea el tablet o borra todos los datos del usuario si se introducen demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Controla el número de contraseñas incorrectas introducidas para desbloquear la pantalla y bloquea la TV o borra todos los datos del usuario si se introducen demasiadas contraseñas incorrectas."</string> <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Controla el número de contraseñas incorrectas introducidas para desbloquear la pantalla y bloquea el teléfono o borra todos los datos del usuario si se introducen demasiadas contraseñas incorrectas."</string> - <string name="policylab_resetPassword" msgid="4934707632423915395">"Cambiar el bloqueo de pantalla"</string> - <string name="policydesc_resetPassword" msgid="1278323891710619128">"Cambiar el bloqueo de pantalla"</string> + <string name="policylab_resetPassword" msgid="4934707632423915395">"Cambia el bloqueo de pantalla"</string> + <string name="policydesc_resetPassword" msgid="1278323891710619128">"Cambia el bloqueo de pantalla"</string> <string name="policylab_forceLock" msgid="2274085384704248431">"Bloquear la pantalla"</string> - <string name="policydesc_forceLock" msgid="1141797588403827138">"Controlar cómo y cuándo se bloquea la pantalla"</string> + <string name="policydesc_forceLock" msgid="1141797588403827138">"Controla cómo y cuándo se bloquea la pantalla"</string> <string name="policylab_wipeData" msgid="3910545446758639713">"Borrar todos los datos"</string> <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Borrar los datos del tablet sin avisar restableciendo el estado de fábrica"</string> <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Borra los datos de la TV sin advertencia previa restableciendo la TV a los valores predeterminados de fábrica."</string> - <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Borrar los datos del teléfono sin avisar restableciendo el estado de fábrica"</string> + <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Borra los datos del teléfono sin avisar restableciendo el estado de fábrica"</string> <string name="policylab_wipeData_secondaryUser" msgid="8362863289455531813">"Borrar datos del usuario"</string> <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="6336255514635308054">"Borra los datos del usuario en este tablet sin avisar."</string> <string name="policydesc_wipeData_secondaryUser" product="tv" msgid="2086473496848351810">"Borra los datos del usuario en esta TV sin avisar."</string> @@ -607,7 +607,7 @@ <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Cifrado del almacenamiento"</string> <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Exige que se cifren los datos de la aplicación almacenados."</string> <string name="policylab_disableCamera" msgid="6395301023152297826">"Inhabilitar cámaras"</string> - <string name="policydesc_disableCamera" msgid="2306349042834754597">"Evitar el uso de las cámaras del dispositivo"</string> + <string name="policydesc_disableCamera" msgid="2306349042834754597">"Evita el uso de las cámaras del dispositivo"</string> <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Inhabilitar algunas funciones del bloqueo de pantalla"</string> <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Evitar el uso de algunas funciones del bloqueo de pantalla"</string> <string-array name="phoneTypes"> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index d96571fa5128..6478207884cf 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -579,9 +579,9 @@ <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"Antaa sovelluksen luoda sidoksen operaattorin palveluun. Ei tavallisten sovelluksien käyttöön."</string> <string name="permlab_access_notification_policy" msgid="4247510821662059671">"Älä häiritse -tilan käyttöoikeus"</string> <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Sallii sovelluksen lukea ja muokata Älä häiritse -tilan asetuksia."</string> - <string name="policylab_limitPassword" msgid="4497420728857585791">"Aseta salasanasäännöt"</string> - <string name="policydesc_limitPassword" msgid="2502021457917874968">"Hallinnoi ruudun ruudun lukituksen salasanoissa ja PIN-koodeissa sallittuja merkkejä ja niiden pituutta."</string> - <string name="policylab_watchLogin" msgid="5091404125971980158">"Tarkkaile näytön avaamisyrityksiä"</string> + <string name="policylab_limitPassword" msgid="4497420728857585791">"Asentaa salasanasäännöt"</string> + <string name="policydesc_limitPassword" msgid="2502021457917874968">"Hallinnoida ruudun lukituksen salasanoissa ja PIN-koodeissa sallittuja merkkejä ja niiden pituutta."</string> + <string name="policylab_watchLogin" msgid="5091404125971980158">"Tarkkailla näytön avaamisyrityksiä"</string> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Valvoo väärien salasanojen lukumäärää näytön lukituksen poistossa sekä lukitsee tablet-laitteen tai poistaa sen tiedot, jos salasana syötetään väärin liian monta kertaa."</string> <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Valvo väärien salasanojen määrää poistettaessa näytön lukitusta ja lukitse televisio tai poista television kaikki tiedot, jos salasana kirjoitetaan väärin liian monta kertaa."</string> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Valvoo väärien salasanojen lukumäärää näytön lukituksen poistossa ja lukitsee puhelimen tai poistaa sen kaikki tiedot, jos väärä salasana syötetään liian monta kertaa."</string> @@ -602,14 +602,14 @@ <string name="policydesc_wipeData_secondaryUser" product="default" msgid="6787904546711590238">"Pyyhi tämän käyttäjän tiedot puhelimesta ilman varoitusta."</string> <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Aseta laitteen yleinen välityspalvelin"</string> <string name="policydesc_setGlobalProxy" msgid="8459859731153370499">"Aseta laitteen yleinen välityspalvelin käyttöön, kun käytäntö on käytössä. Vain laitteen omistaja voi asettaa yleisen välityspalvelimen."</string> - <string name="policylab_expirePassword" msgid="5610055012328825874">"Määritä ruudun lukituksen salasanan viimeinen voimassaolopäivä"</string> - <string name="policydesc_expirePassword" msgid="5367525762204416046">"Muuta sitä, miten usein ruudun lukituksen salasana, PIN-koodi tai kuvio tulee vaihtaa."</string> - <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Aseta tallennustilan salaus"</string> + <string name="policylab_expirePassword" msgid="5610055012328825874">"Määrittää ruudun lukituksen salasanan viimeinen voimassaolopäivä"</string> + <string name="policydesc_expirePassword" msgid="5367525762204416046">"Muuttaa sitä, miten usein ruudun lukituksen salasana, PIN-koodi tai kuvio tulee vaihtaa."</string> + <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Asettaa tallennustilan salaus"</string> <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Pakota tallennettujen sovellustietojen salaus."</string> - <string name="policylab_disableCamera" msgid="6395301023152297826">"Poista kamerat käytöstä"</string> - <string name="policydesc_disableCamera" msgid="2306349042834754597">"Estä laitteen kaikkien kameroiden käyttö."</string> + <string name="policylab_disableCamera" msgid="6395301023152297826">"Poistaa kamerat käytöstä"</string> + <string name="policydesc_disableCamera" msgid="2306349042834754597">"Estää laitteen kaikkien kameroiden käytön."</string> <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Estää lukitun näytön toimintoja"</string> - <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Estä joidenkin lukitun näytön toimintojen käyttö."</string> + <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Estää joidenkin lukitun näytön toimintojen käytön."</string> <string-array name="phoneTypes"> <item msgid="8901098336658710359">"Koti"</item> <item msgid="869923650527136615">"Mobiili"</item> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 08aad0ce373a..159bc419256c 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -138,7 +138,7 @@ <string name="wfcSpnFormat_spn_vowifi" msgid="4444638298656953681">"VoWiFi <xliff:g id="SPN">%s</xliff:g>"</string> <string name="wifi_calling_off_summary" msgid="8720659586041656098">"Désactivé"</string> <string name="wfc_mode_wifi_preferred_summary" msgid="1994113411286935263">"Wi-Fi de préférence"</string> - <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Priorité au mobile"</string> + <string name="wfc_mode_cellular_preferred_summary" msgid="1988279625335345908">"Données mobiles de préférence"</string> <string name="wfc_mode_wifi_only_summary" msgid="2379919155237869320">"Wi-Fi uniquement"</string> <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g> : non transféré"</string> <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g> : <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string> @@ -602,13 +602,13 @@ <string name="policydesc_wipeData_secondaryUser" product="default" msgid="6787904546711590238">"Effacer les informations sur cet utilisateur de ce téléphone sans avertissement"</string> <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Définir le proxy global du mobile"</string> <string name="policydesc_setGlobalProxy" msgid="8459859731153370499">"Indiquer le proxy global à utiliser pour l\'appareil lorsque la règle est activée. Seul le propriétaire de l\'appareil peut définir le proxy global."</string> - <string name="policylab_expirePassword" msgid="5610055012328825874">"Config. expir. mot passe verr. écran"</string> + <string name="policylab_expirePassword" msgid="5610055012328825874">"Définir l\'expiration du mot de passe de verrouillage d\'écran"</string> <string name="policydesc_expirePassword" msgid="5367525762204416046">"Modifier la fréquence de modification du mot de passe, du code d\'accès ou du schéma de verrouillage de l\'écran"</string> <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Définir chiffrement du stockage"</string> <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Exiger le chiffrement des données d\'application stockées"</string> <string name="policylab_disableCamera" msgid="6395301023152297826">"Désactiver les appareils photo"</string> <string name="policydesc_disableCamera" msgid="2306349042834754597">"Empêcher l\'utilisation de tous les appareils photos"</string> - <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Désact. options du verr. écran"</string> + <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Désactiver les options de verrouillage de l\'écran"</string> <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Empêcher l\'utilisation de certaines fonctionnalités du verrouillage de l\'écran."</string> <string-array name="phoneTypes"> <item msgid="8901098336658710359">"Domicile"</item> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 2012d7e11a11..14d6b263d95d 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -300,7 +300,7 @@ <string name="permgrouprequest_calllog" msgid="8487355309583773267">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को अपने काॅल लाॅग एक्सेस करने की मंज़ूरी देना चाहते हैं?"</string> <string name="permgrouplab_phone" msgid="5229115638567440675">"फ़ोन"</string> <string name="permgroupdesc_phone" msgid="6234224354060641055">"फ़ोन कॉल करें और प्रबंधित करें"</string> - <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को फ़ोन कॉल करने और उन्हें प्रबंधित करने की अनुमति देना चाहते हैं?"</string> + <string name="permgrouprequest_phone" msgid="9166979577750581037">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को फ़ोन कॉल करने और उन्हें प्रबंधित करने की अनुमति दें?"</string> <string name="permgrouplab_sensors" msgid="416037179223226722">"शरीर संवेदक"</string> <string name="permgroupdesc_sensors" msgid="7147968539346634043">"अपने महत्वपूर्ण संकेतों के बारे में सेंसर डेटा को ऐक्सेस करें"</string> <string name="permgrouprequest_sensors" msgid="6349806962814556786">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> को अपने स्वास्थ्य से जुड़ी ज़रूरी जानकारी इस्तेमाल करने की अनुमति देना चाहते हैं?"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index ac393d7e1409..78c442dfade3 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -222,7 +222,7 @@ <string name="global_actions" product="default" msgid="2406416831541615258">"Opcije telefona"</string> <string name="global_action_lock" msgid="2844945191792119712">"Zaključavanje zaslona"</string> <string name="global_action_power_off" msgid="4471879440839879722">"Isključi"</string> - <string name="global_action_emergency" msgid="7112311161137421166">"Hitno"</string> + <string name="global_action_emergency" msgid="7112311161137421166">"Hitne službe"</string> <string name="global_action_bug_report" msgid="7934010578922304799">"Izvješće o bugovima"</string> <string name="global_action_logout" msgid="935179188218826050">"Završi sesiju"</string> <string name="global_action_screenshot" msgid="8329831278085426283">"Snimka zaslona"</string> @@ -742,7 +742,7 @@ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Pritisnite Izbornik za otključavanje ili pozivanje hitnih službi."</string> <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Pritisnite Izbornik za otključavanje."</string> <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Iscrtajte uzorak za otključavanje"</string> - <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Hitno"</string> + <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Hitne službe"</string> <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Uzvrati poziv"</string> <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Ispravno!"</string> <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Pokušajte ponovo"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index f28ab4e5732a..a76c72c2ec6b 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -1076,8 +1076,8 @@ <string name="noApplications" msgid="2991814273936504689">"Ոչ մի հավելված չի կարող կատարել այս գործողությունը:"</string> <string name="aerr_application" msgid="250320989337856518">"<xliff:g id="APPLICATION">%1$s</xliff:g> – աշխատանքն ընդհատվեց"</string> <string name="aerr_process" msgid="6201597323218674729">"<xliff:g id="PROCESS">%1$s</xliff:g> գործընթացն ընդհատվել է"</string> - <string name="aerr_application_repeated" msgid="3146328699537439573">"<xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածի աշխատանքը շարունակաբար ընդհատվում է"</string> - <string name="aerr_process_repeated" msgid="6235302956890402259">"<xliff:g id="PROCESS">%1$s</xliff:g> գործընթացը շարունակաբար ընդհատվում է"</string> + <string name="aerr_application_repeated" msgid="3146328699537439573">"<xliff:g id="APPLICATION">%1$s</xliff:g>-ն էլի ընդհատվեց"</string> + <string name="aerr_process_repeated" msgid="6235302956890402259">"<xliff:g id="PROCESS">%1$s</xliff:g>՝ նորից ընդհատվեց"</string> <string name="aerr_restart" msgid="7581308074153624475">"Կրկին բացել հավելվածը"</string> <string name="aerr_report" msgid="5371800241488400617">"Հաղորդել"</string> <string name="aerr_close" msgid="2991640326563991340">"Փակել"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 3ea1443c93a9..a7d5b1c5be7f 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -581,19 +581,19 @@ <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Mengizinkan aplikasi membaca dan menulis konfigurasi status Jangan Ganggu."</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"Setel aturan sandi"</string> <string name="policydesc_limitPassword" msgid="2502021457917874968">"Mengontrol panjang dan karakter yang diizinkan dalam sandi dan PIN kunci layar."</string> - <string name="policylab_watchLogin" msgid="5091404125971980158">"Memantau upaya pembukaan kunci layar"</string> - <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Memantau jumlah sandi yang salah ketik saat membuka kunci layar, dan mengunci tablet atau menghapus semua data tablet jika sandi yang salah ketik terlalu banyak."</string> - <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Memantau banyaknya sandi salah yang diketikkan saat membuka kunci layar, dan mengunci TV atau menghapus semua data TV jika terlalu banyak sandi salah diketikkan."</string> - <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Memantau jumlah sandi salah ketik saat membuka kunci layar, dan mengunci ponsel atau menghapus semua data ponsel jika sandi yang salah ketik terlalu banyak."</string> - <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Memantau banyaknya sandi salah yang diketikkan saat membuka kunci layar, dan mengunci tablet atau menghapus semua data pengguna ini jika terlalu banyak sandi salah diketikkan."</string> - <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Memantau banyaknya sandi salah yang diketikkan saat membuka kunci layar, dan mengunci TV atau menghapus semua data pengguna ini jika terlalu banyak sandi salah diketikkan."</string> - <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Memantau banyaknya sandi salah yang diketikkan saat membuka kunci layar, dan mengunci ponsel atau menghapus semua data pengguna ini jika terlalu banyak sandi salah diketikkan."</string> + <string name="policylab_watchLogin" msgid="5091404125971980158">"Pantau upaya pembukaan kunci layar"</string> + <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Memantau berapa kali sandi yang dimasukkan salah saat ingin membuka kunci layar, dan mengunci tablet atau menghapus semua data tablet jika terjadi terlalu banyak kesalahan memasukkan sandi."</string> + <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Memantau berapa kali sandi yang dimasukkan salah saat ingin membuka kunci layar, dan mengunci TV atau menghapus semua data TV jika terjadi terlalu banyak kesalahan memasukkan sandi."</string> + <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Memantau berapa kali sandi yang dimasukkan salah saat ingin membuka kunci layar, dan mengunci ponsel atau menghapus semua data ponsel jika terjadi terlalu banyak kesalahan memasukkan sandi."</string> + <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Memantau berapa kali sandi yang dimasukkan salah saat ingin membuka kunci layar, dan mengunci tablet atau menghapus semua data pengguna ini jika terjadi terlalu banyak kesalahan memasukkan sandi."</string> + <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Memantau berapa kali sandi yang dimasukkan salah saat ingin membuka kunci layar, dan mengunci TV atau menghapus semua data pengguna ini jika terjadi terlalu banyak kesalahan memasukkan sandi."</string> + <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Memantau berapa kali sandi yang dimasukkan salah saat ingin membuka kunci layar, dan mengunci ponsel atau menghapus semua data pengguna ini jika terjadi terlalu banyak kesalahan memasukkan sandi."</string> <string name="policylab_resetPassword" msgid="4934707632423915395">"Mengubah kunci layar"</string> <string name="policydesc_resetPassword" msgid="1278323891710619128">"Mengubah kunci layar."</string> <string name="policylab_forceLock" msgid="2274085384704248431">"Mengunci layar"</string> <string name="policydesc_forceLock" msgid="1141797588403827138">"Mengontrol cara dan kapan layar mengunci."</string> <string name="policylab_wipeData" msgid="3910545446758639713">"Menghapus semua data"</string> - <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Hapus data tablet tanpa peringatan dengan menyetel ulang data pabrik."</string> + <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Menghapus data tablet tanpa peringatan dengan mereset ke setelan pabrik."</string> <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Menghapus data TV tanpa peringatan dengan mengembalikan ke setelan pabrik."</string> <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Menghapus data ponsel tanpa peringatan dengan melakukan reset ke setelan pabrik."</string> <string name="policylab_wipeData_secondaryUser" msgid="8362863289455531813">"Menghapus data pengguna"</string> @@ -602,13 +602,13 @@ <string name="policydesc_wipeData_secondaryUser" product="default" msgid="6787904546711590238">"Menghapus data pengguna ini di ponsel ini tanpa peringatan."</string> <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Setel proxy global perangkat"</string> <string name="policydesc_setGlobalProxy" msgid="8459859731153370499">"Menyetel proxy global perangkat yang akan digunakan jika kebijakan diaktifkan. Hanya pemilik perangkat yang dapat menyetel proxy global."</string> - <string name="policylab_expirePassword" msgid="5610055012328825874">"Menyetel berakhirnya sandi kunci layar"</string> + <string name="policylab_expirePassword" msgid="5610055012328825874">"Setel akhir masa berlaku sandi kunci layar"</string> <string name="policydesc_expirePassword" msgid="5367525762204416046">"Mengubah seberapa sering sandi, PIN, atau pola kunci layar harus diubah."</string> <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Setel enkripsi penyimpanan"</string> <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Mengharuskan data apl yang disimpan untuk dienkripsi."</string> <string name="policylab_disableCamera" msgid="6395301023152297826">"Nonaktifkan kamera"</string> <string name="policydesc_disableCamera" msgid="2306349042834754597">"Mencegah penggunaan semua kamera perangkat."</string> - <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Menonaktifkan beberapa fitur kunci layar"</string> + <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Nonaktifkan beberapa fitur kunci layar"</string> <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Mencegah penggunaan beberapa fitur kunci layar."</string> <string-array name="phoneTypes"> <item msgid="8901098336658710359">"Rumah"</item> @@ -761,7 +761,7 @@ <string name="lockscreen_transport_stop_description" msgid="5907083260651210034">"Berhenti"</string> <string name="lockscreen_transport_rew_description" msgid="6944412838651990410">"Putar Ulang"</string> <string name="lockscreen_transport_ffw_description" msgid="42987149870928985">"Maju cepat"</string> - <string name="emergency_calls_only" msgid="6733978304386365407">"Telepon urgen saja"</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Panggilan darurat saja"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Jaringan terkunci"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kartu SIM terkunci PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Lihatlah Panduan Pengguna atau hubungi Layanan Pelanggan."</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index bfe6adc969d0..1e35e5bd2216 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -1117,7 +1117,7 @@ <string name="app_upgrading_toast" msgid="3008139776215597053">"Upgrade dell\'app <xliff:g id="APPLICATION">%1$s</xliff:g>…"</string> <string name="android_upgrading_apk" msgid="7904042682111526169">"Ottimizzazione applicazione <xliff:g id="NUMBER_0">%1$d</xliff:g> di <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string> <string name="android_preparing_apk" msgid="8162599310274079154">"<xliff:g id="APPNAME">%1$s</xliff:g> in preparazione."</string> - <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Avvio applicazioni."</string> + <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Avvio app."</string> <string name="android_upgrading_complete" msgid="1405954754112999229">"Conclusione dell\'avvio."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> in esecuzione"</string> <string name="heavy_weight_notification_detail" msgid="2304833848484424985">"Tocca per tornare al gioco"</string> @@ -1744,7 +1744,7 @@ <string name="zen_mode_rule_name_combination" msgid="191109939968076477">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string> <string name="toolbar_collapse_description" msgid="2821479483960330739">"Comprimi"</string> <string name="zen_mode_feature_name" msgid="5254089399895895004">"Non disturbare"</string> - <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Tempo di inattività"</string> + <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Tempo di riposo"</string> <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Notte di un giorno feriale"</string> <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Fine settimana"</string> <string name="zen_mode_default_events_name" msgid="8158334939013085363">"Evento"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 0c7e98cdd7c4..526a61d10d7e 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -559,8 +559,8 @@ <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"מאפשר לאפליקציה לנהל מדיניות הרשת להגדיר כללים ספציפיים-לאפליקציה."</string> <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"שנה ניהול חשבונות של שימוש ברשת"</string> <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"הרשאה זו מאפשרת לאפליקציה לשנות את אופן החישוב של נתוני שימוש ברשת מול כל אפליקציה. לא מיועד לשימוש באפליקציות רגילות."</string> - <string name="permlab_accessNotifications" msgid="7673416487873432268">"גישה להודעות"</string> - <string name="permdesc_accessNotifications" msgid="458457742683431387">"מאפשר לאפליקציה לאחזר, לבדוק ולמחוק הודעות, כולל כאלה שפורסמו על ידי אפליקציות אחרות."</string> + <string name="permlab_accessNotifications" msgid="7673416487873432268">"גישה להתראות"</string> + <string name="permdesc_accessNotifications" msgid="458457742683431387">"מאפשר לאפליקציה לאחזר, לבדוק ולמחוק התראות, כולל כאלה שפורסמו על ידי אפליקציות אחרות."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"איגוד לשירות של מאזין להתראות"</string> <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"הרשאה זו מאפשרת למשתמש לבצע איגוד לממשק הרמה העליונה של שירות מאזין להתראות. הרשאה זו אף פעם אינה נחוצה לאפליקציות רגילים."</string> <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"איגוד לשירות ספק תנאי"</string> @@ -597,7 +597,7 @@ <string name="policylab_resetPassword" msgid="4934707632423915395">"שינוי נעילת המסך"</string> <string name="policydesc_resetPassword" msgid="1278323891710619128">"שינוי של נעילת המסך."</string> <string name="policylab_forceLock" msgid="2274085384704248431">"נעילת המסך"</string> - <string name="policydesc_forceLock" msgid="1141797588403827138">"שליטה באופן ובתזמון של נעילת המסך"</string> + <string name="policydesc_forceLock" msgid="1141797588403827138">"שליטה באופן ובתזמון של נעילת המסך."</string> <string name="policylab_wipeData" msgid="3910545446758639713">"מחיקת כל הנתונים"</string> <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"מחק את נתוני הטאבלט ללא אזהרה על ידי ביצוע איפוס נתוני יצרן."</string> <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"מחיקה של נתוני הטלוויזיה ללא אזהרה, על ידי ביצוע איפוס לנתוני היצרן."</string> @@ -1845,7 +1845,7 @@ <item quantity="one">בחרת <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> <string name="default_notification_channel_label" msgid="5929663562028088222">"ללא שיוך לקטגוריה"</string> - <string name="importance_from_user" msgid="7318955817386549931">"אתה מגדיר את החשיבות של ההודעות האלה."</string> + <string name="importance_from_user" msgid="7318955817386549931">"עליך להגדיר את החשיבות של ההתראות האלה."</string> <string name="importance_from_person" msgid="9160133597262938296">"ההודעה חשובה בשל האנשים המעורבים."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"האם לאפשר ל-<xliff:g id="APP">%1$s</xliff:g> ליצור משתמש חדש לחשבון <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"האם לאפשר ל-<xliff:g id="APP">%1$s</xliff:g> ליצור משתמש חדש לחשבון <xliff:g id="ACCOUNT">%2$s</xliff:g> (כבר קיים משתמש לחשבון הזה) ?"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 618143832d2a..7d541ffd7ef1 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -577,8 +577,8 @@ <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"携帯通信会社のSMSサービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string> <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"携帯通信会社のサービスへのバインド"</string> <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"携帯通信会社のサービスにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string> - <string name="permlab_access_notification_policy" msgid="4247510821662059671">"マナーモードへのアクセス"</string> - <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"マナーモード設定の読み取りと書き込みをアプリに許可します。"</string> + <string name="permlab_access_notification_policy" msgid="4247510821662059671">"サイレント モードへのアクセス"</string> + <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"サイレント モード設定の読み取りと書き込みをアプリに許可します。"</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"パスワードルールの設定"</string> <string name="policydesc_limitPassword" msgid="2502021457917874968">"画面ロックのパスワードとPINの長さと使用できる文字を制御します。"</string> <string name="policylab_watchLogin" msgid="5091404125971980158">"画面ロック解除試行の監視"</string> @@ -1740,10 +1740,10 @@ <string name="zen_mode_until" msgid="7336308492289875088">"<xliff:g id="FORMATTEDTIME">%1$s</xliff:g>まで"</string> <string name="zen_mode_alarm" msgid="9128205721301330797">"<xliff:g id="FORMATTEDTIME">%1$s</xliff:g>(次のアラーム)まで"</string> <string name="zen_mode_forever" msgid="931849471004038757">"自分が OFF にするまで"</string> - <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"マナーモードを OFF にするまで"</string> + <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"サイレント モードを OFF にするまで"</string> <string name="zen_mode_rule_name_combination" msgid="191109939968076477">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string> <string name="toolbar_collapse_description" msgid="2821479483960330739">"折りたたむ"</string> - <string name="zen_mode_feature_name" msgid="5254089399895895004">"マナーモード"</string> + <string name="zen_mode_feature_name" msgid="5254089399895895004">"サイレント モード"</string> <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"ダウンタイム"</string> <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"平日の夜"</string> <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"週末"</string> @@ -1879,10 +1879,10 @@ <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"着信や通知をバイブレーションで知らせます"</string> <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"着信音と通知音をミュートします"</string> <string name="notification_channel_system_changes" msgid="5072715579030948646">"システムの変更"</string> - <string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"マナーモード"</string> - <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"新機能: マナーモードでは通知が非表示になります"</string> + <string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"サイレント モード"</string> + <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"新機能: サイレント モードでは通知が非表示になります"</string> <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"タップすると、詳細を確認して設定を変更できます。"</string> - <string name="zen_upgrade_notification_title" msgid="3799603322910377294">"マナーモードが変わりました"</string> + <string name="zen_upgrade_notification_title" msgid="3799603322910377294">"サイレント モードが変わりました"</string> <string name="zen_upgrade_notification_content" msgid="1794994264692424562">"タップしてブロック対象をご確認ください。"</string> <string name="notification_app_name_system" msgid="4205032194610042794">"システム"</string> <string name="notification_app_name_settings" msgid="7751445616365753381">"設定"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index f8c4f366b1bc..0f7c4a30a091 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -222,7 +222,7 @@ <string name="global_actions" product="default" msgid="2406416831541615258">"Tālruņa opcijas"</string> <string name="global_action_lock" msgid="2844945191792119712">"Ekrāna bloķētājs"</string> <string name="global_action_power_off" msgid="4471879440839879722">"Strāvas padeve ir izslēgta."</string> - <string name="global_action_emergency" msgid="7112311161137421166">"Ārkārtas"</string> + <string name="global_action_emergency" msgid="7112311161137421166">"Ārkārtas situācija"</string> <string name="global_action_bug_report" msgid="7934010578922304799">"Kļūdu ziņojums"</string> <string name="global_action_logout" msgid="935179188218826050">"Beigt sesiju"</string> <string name="global_action_screenshot" msgid="8329831278085426283">"Ekrānuzņēmums"</string> @@ -742,7 +742,7 @@ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Nospiediet Izvēlne, lai atbloķētu, vai veiciet ārkārtas zvanu."</string> <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Lai atbloķētu, nospiediet vienumu Izvēlne."</string> <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Zīmējiet kombināciju, lai atbloķētu."</string> - <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Ārkārtas"</string> + <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Ārkārtas situācija"</string> <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Atpakaļ pie zvana"</string> <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Pareizi!"</string> <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Mēģināt vēlreiz"</string> 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-mr/strings.xml b/core/res/res/values-mr/strings.xml index 3466568f7857..24f0317525dc 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -206,10 +206,10 @@ <string name="reboot_to_reset_title" msgid="4142355915340627490">"फॅक्टरी डेटा रीसेट"</string> <string name="reboot_to_reset_message" msgid="2432077491101416345">"रीस्टार्ट करत आहे..."</string> <string name="shutdown_progress" msgid="2281079257329981203">"बंद होत आहे…"</string> - <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"आपला टॅबलेट बंद होईल."</string> - <string name="shutdown_confirm" product="tv" msgid="476672373995075359">"आपला टीव्ही बंद होईल."</string> + <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"तुमचा टॅबलेट बंद होईल."</string> + <string name="shutdown_confirm" product="tv" msgid="476672373995075359">"तुमचा टीव्ही बंद होईल."</string> <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"तुमचे घड्याळ बंद होईल."</string> - <string name="shutdown_confirm" product="default" msgid="649792175242821353">"आपला फोन बंद होईल."</string> + <string name="shutdown_confirm" product="default" msgid="649792175242821353">"तुमचा फोन बंद होईल."</string> <string name="shutdown_confirm_question" msgid="2906544768881136183">"तुम्ही बंद करू इच्छिता?"</string> <string name="reboot_safemode_title" msgid="7054509914500140361">"सुरक्षित मोडमध्ये रीबूट करा"</string> <string name="reboot_safemode_confirm" msgid="55293944502784668">"तुम्ही सुरक्षित मोडमध्ये रीबूट करू इच्छिता? हे तुम्ही इंस्टॉल केलेले सर्व तृतीय पक्ष अॅप्लिकेशन अक्षम करेल. तुम्ही पुन्हा रीबूट करता तेव्हा ते पुनर्संचयित केले जातील."</string> @@ -227,7 +227,7 @@ <string name="bugreport_title" msgid="2667494803742548533">"बग रीपोर्ट घ्या"</string> <string name="bugreport_message" msgid="398447048750350456">"ई-मेल मेसेज म्हणून पाठविण्यासाठी, हे तुमच्या सद्य डिव्हाइस स्थितीविषयी माहिती संकलित करेल. बग रीपोर्ट सुरू करण्यापासून तो पाठविण्यापर्यंत थोडा वेळ लागेल; कृपया धीर धरा."</string> <string name="bugreport_option_interactive_title" msgid="8635056131768862479">"परस्परसंवादी अहवाल"</string> - <string name="bugreport_option_interactive_summary" msgid="229299488536107968">"बहुतांश प्रसंगांमध्ये याचा वापर करा. ते आपल्याला अहवालाच्या प्रगतीचा मागोवा घेण्याची, समस्येविषयी आणखी तपाशील एंटर करण्याची आणि स्क्रीनशॉट घेण्याची अनुमती देते. ते कदाचित अहवाल देण्यासाठी बराच वेळ घेणारे कमी-वापरलेले विभाग वगळू शकते."</string> + <string name="bugreport_option_interactive_summary" msgid="229299488536107968">"बहुतांश प्रसंगांमध्ये याचा वापर करा. ते तुम्हाला अहवालाच्या प्रगतीचा मागोवा घेण्याची, समस्येविषयी आणखी तपाशील एंटर करण्याची आणि स्क्रीनशॉट घेण्याची अनुमती देते. ते कदाचित अहवाल देण्यासाठी बराच वेळ घेणारे कमी-वापरलेले विभाग वगळू शकते."</string> <string name="bugreport_option_full_title" msgid="6354382025840076439">"संपूर्ण अहवाल"</string> <string name="bugreport_option_full_summary" msgid="7210859858969115745">"तुमचे डिव्हाइस प्रतिसाद देत नाही किंवा खूप धीमे असते किंवा तुम्हाला सर्व अहवाल विभागांची आवश्यकता असते तेव्हा कमीतकमी सिस्टम हस्तक्षेपासाठी या पर्यायाचा वापर करा. तुम्हाला आणखी तपशील एंटर करण्याची किंवा अतिरिक्त स्क्रीनशॉट घेण्याची अनुमती देत नाही."</string> <plurals name="bugreport_countdown" formatted="false" msgid="6878900193900090368"> @@ -333,9 +333,9 @@ <string name="permlab_receiveSms" msgid="8673471768947895082">"मजकूर मेसेज मिळवा (SMS)"</string> <string name="permdesc_receiveSms" msgid="6424387754228766939">"SMS मेसेज प्राप्त करण्याची आणि त्यावर प्रक्रिया करण्याची अॅप ला अनुमती देते. म्हणजेच अॅप आपल्या डीव्हाइसवर पाठविलेले मेसेज तुम्हाला न दर्शवता त्यांचे परीक्षण करू किंवा ते हटवू शकतो."</string> <string name="permlab_receiveMms" msgid="1821317344668257098">"मजकूर मेसेज मिळवा (MMS)"</string> - <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS मेसेज प्राप्त करण्यास आणि त्यावर प्रक्रिया करण्यास अॅप ला अनुमती देते. म्हणजेच अॅप आपल्या डिव्हाइसवर पाठविलेले मेसेज आपल्याला न दर्शवता त्यांचे परीक्षण करू किंवा ते हटवू शकतो."</string> + <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS मेसेज प्राप्त करण्यास आणि त्यावर प्रक्रिया करण्यास अॅप ला अनुमती देते. म्हणजेच अॅप आपल्या डिव्हाइसवर पाठविलेले मेसेज तुम्हाला न दर्शवता त्यांचे परीक्षण करू किंवा ते हटवू शकतो."</string> <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"सेल प्रसारण मेसेज वाचा"</string> - <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"आपल्या डिव्हाइसद्वारे प्राप्त केलेले सेल प्रसारण मेसेज वाचण्यासाठी अॅप ला अनुमती देते. काही स्थानांमध्ये आपल्याला आणीबाणीच्या परिस्थितीची चेतावणी देण्यासाठी सेल प्रसारण सूचना वितरीत केल्या जातात. आणीबाणी सेल प्रसारण प्राप्त होते तेव्हा आपल्या डिव्हाइसच्या कार्यप्रदर्शनात किंवा कार्यात दुर्भावनापूर्ण अॅप्स व्यत्यय आणू शकतात."</string> + <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"आपल्या डिव्हाइसद्वारे प्राप्त केलेले सेल प्रसारण मेसेज वाचण्यासाठी अॅप ला अनुमती देते. काही स्थानांमध्ये तुम्हाला आणीबाणीच्या परिस्थितीची चेतावणी देण्यासाठी सेल प्रसारण सूचना वितरीत केल्या जातात. आणीबाणी सेल प्रसारण प्राप्त होते तेव्हा आपल्या डिव्हाइसच्या कार्यप्रदर्शनात किंवा कार्यात दुर्भावनापूर्ण अॅप्स व्यत्यय आणू शकतात."</string> <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"सदस्यता घेतलेली फीड वाचा"</string> <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"सध्या संकालित केलेल्या फीडविषयी तपशील मिळविण्यासाठी अॅप ला अनुमती देते."</string> <string name="permlab_sendSms" msgid="7544599214260982981">"SMS मेसेज पाठवणे आणि पाहणे"</string> @@ -345,7 +345,7 @@ <string name="permdesc_readSms" product="tv" msgid="5796670395641116592">"हा अॅप तुमच्या टीव्हीवर स्टोअर केलेले सर्व SMS (मजकूर) मेसेज वाचू शकतो."</string> <string name="permdesc_readSms" product="default" msgid="6826832415656437652">"हा अॅप तुमच्या फोनवर स्टोअर केलेले सर्व SMS (मजकूर) मेसेज वाचू शकतो."</string> <string name="permlab_receiveWapPush" msgid="5991398711936590410">"मजकूर मेसेज मिळवा (WAP)"</string> - <string name="permdesc_receiveWapPush" msgid="748232190220583385">"WAP मेसेज प्राप्त करण्यास आणि त्यावर प्रक्रिया करण्यासाठी अॅप ला अनुमती देते. ही परवानगी आपल्याला पाठविलेले मेसेज आपल्याला न दर्शविता त्यांचे परीक्षण करण्याची आणि ते हटविण्याची क्षमता समाविष्ट करते."</string> + <string name="permdesc_receiveWapPush" msgid="748232190220583385">"WAP मेसेज प्राप्त करण्यास आणि त्यावर प्रक्रिया करण्यासाठी अॅप ला अनुमती देते. ही परवानगी तुम्हाला पाठविलेले मेसेज तुम्हाला न दर्शविता त्यांचे परीक्षण करण्याची आणि ते हटविण्याची क्षमता समाविष्ट करते."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"चालणारे अॅप्स पुनर्प्राप्त करा"</string> <string name="permdesc_getTasks" msgid="7454215995847658102">"सध्या आणि अलीकडे चालणार्या कार्यांविषयी माहिती पुनर्प्राप्त करण्यासाठी अॅप ला अनुमती देते. हे डिव्हाइसवर कोणते अॅप्लिकेशन वापरले जात आहेत त्याविषयी माहिती शोधण्यासाठी अॅप ला अनुमती देऊ शकतात."</string> <string name="permlab_manageProfileAndDeviceOwners" msgid="7918181259098220004">"प्रोफाईल आणि डिव्हाइस मालक व्यवस्थापित करा"</string> @@ -381,25 +381,25 @@ <string name="permdesc_broadcastSticky" product="tv" msgid="6839285697565389467">"रोचक प्रसारणे पाठविण्यास अॅपला अनुमती देते, जे प्रसारण समाप्त झाल्यानंतर तसेच रहाते. अतिरिक्त वापर टीव्ही धीमा किंवा यासाठी बरीच मेमरी वापरली जात असल्यामुळे तो अस्थिर करू शकतो."</string> <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"रोचक प्रसारणे पाठविण्यासाठी अॅप ला अनुमती देते, जे प्रसारण समाप्त झाल्यानंतर देखील तसेच राहते. अत्याधिक वापरामुळे बरीच मेमरी वापरली जाऊन तो फोनला धीमा किंवा अस्थिर करू शकतो."</string> <string name="permlab_readContacts" msgid="8348481131899886131">"तुमचे संपर्क वाचा"</string> - <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"तुम्ही कॉल केलेल्या, ईमेल केलेल्या किंवा विशिष्ट लोकांशी अन्य मार्गांनी संवाद प्रस्थापित केलेल्या लोकांच्या फ्रिक्वेन्सीसह, आपल्या टॅब्लेटवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा वाचण्यासाठी अॅप ला अनुमती देते. ही परवानगी आपला संपर्क डेटा सेव्ह करण्याची अॅप्स ला अनुमती देते आणि दुर्भावनापूर्ण अॅप्स आपल्या माहितीशिवाय संपर्क डेटा सामायिक करू शकतात."</string> - <string name="permdesc_readContacts" product="tv" msgid="1839238344654834087">"तुम्ही विशिष्ट लोकांना इतर मार्गांनी कॉल केलेल्या, ईमेल केलेल्या किंवा संप्रेषित केलेल्या फ्रिक्वेन्सीसह, आपल्या टीव्हीवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा वाचण्यासाठी अॅप्सला अनुमती देतात. ही परवागनी अॅप्सला आपला संपर्क डेटा सेव्ह करण्यासाठी अनुमती देते आणि दुर्भावनापूर्ण अॅप्स आपल्याला न कळविता संपर्क डेटा सामायिक करू शकतात."</string> - <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"तुम्ही कॉल केलेल्या, ईमेल केलेल्या किंवा विशिष्ट लोकांशी अन्य मार्गांनी संवाद प्रस्थापित केलेल्या लोकांच्या फ्रिक्वेन्सीसह, आपल्या फोनवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा वाचण्यासाठी अॅप ला अनुमती देते. ही परवानगी आपला संपर्क डेटा सेव्ह करण्याची अॅप्स ला अनुमती देते आणि दुर्भावनापूर्ण अॅप्स आपल्या माहितीशिवाय संपर्क डेटा सामायिक करू शकतात."</string> + <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"तुम्ही कॉल केलेल्या, ईमेल केलेल्या किंवा विशिष्ट लोकांशी अन्य मार्गांनी संवाद प्रस्थापित केलेल्या लोकांच्या फ्रिक्वेन्सीसह, आपल्या टॅब्लेटवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा वाचण्यासाठी अॅप ला अनुमती देते. ही परवानगी तुमचा संपर्क डेटा सेव्ह करण्याची अॅप्स ला अनुमती देते आणि दुर्भावनापूर्ण अॅप्स आपल्या माहितीशिवाय संपर्क डेटा शेअर करू शकतात."</string> + <string name="permdesc_readContacts" product="tv" msgid="1839238344654834087">"तुम्ही विशिष्ट लोकांना इतर मार्गांनी कॉल केलेल्या, ईमेल केलेल्या किंवा संप्रेषित केलेल्या फ्रिक्वेन्सीसह, आपल्या टीव्हीवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा वाचण्यासाठी अॅप्सला अनुमती देतात. ही परवागनी अॅप्सला तुमचा संपर्क डेटा सेव्ह करण्यासाठी अनुमती देते आणि दुर्भावनापूर्ण अॅप्स तुम्हाला न कळविता संपर्क डेटा शेअर करू शकतात."</string> + <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"तुम्ही कॉल केलेल्या, ईमेल केलेल्या किंवा विशिष्ट लोकांशी अन्य मार्गांनी संवाद प्रस्थापित केलेल्या लोकांच्या फ्रिक्वेन्सीसह, आपल्या फोनवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा वाचण्यासाठी अॅप ला अनुमती देते. ही परवानगी तुमचा संपर्क डेटा सेव्ह करण्याची अॅप्स ला अनुमती देते आणि दुर्भावनापूर्ण अॅप्स आपल्या माहितीशिवाय संपर्क डेटा शेअर करू शकतात."</string> <string name="permlab_writeContacts" msgid="5107492086416793544">"तुमचे संपर्क सुधारित करा"</string> <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"तुम्ही विशिष्ट संपर्कांशी अन्य मार्गांनी कॉल केलेल्या, ईमेल केलेल्या किंवा संवाद प्रस्थापित केलेल्या फ्रिक्वेन्सीसह, आपल्या टॅब्लेटवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा सुधारित करण्यासाठी अॅप ला अनुमती देते. ही परवानगी संपर्क डेटा हटविण्यासाठी अॅप ला अनुमती देते."</string> <string name="permdesc_writeContacts" product="tv" msgid="5438230957000018959">"तुम्ही विशिष्ट संपर्कांशी अन्य मार्गांनी कॉल केलेल्या, ईमेल केलेल्या किंवा संवाद प्रस्थापित केलेल्या फ्रिक्वेन्सीसह, आपल्या टीव्हीवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा सुधारित करण्यासाठी अॅपला अनुमती देते. ही परवानगी संपर्क डेटा हटविण्यासाठी अॅपला अनुमती देते."</string> <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"तुम्ही विशिष्ट संपर्कांशी अन्य मार्गांनी कॉल केलेल्या, ईमेल केलेल्या किंवा संवाद प्रस्थापित केलेल्या फ्रिक्वेन्सीसह, आपल्या फोनवर स्टोअर केलेल्या आपल्या संपर्कांविषयीचा डेटा सुधारित करण्यासाठी अॅप ला अनुमती देते. ही परवानगी संपर्क डेटा हटविण्यासाठी अॅप ला अनुमती देते."</string> <string name="permlab_readCallLog" msgid="3478133184624102739">"कॉल लॉग वाचा"</string> - <string name="permdesc_readCallLog" msgid="3204122446463552146">"हा अॅप आपला कॉल इतिहास वाचू शकता."</string> + <string name="permdesc_readCallLog" msgid="3204122446463552146">"हा अॅप तुमचा कॉल इतिहास वाचू शकता."</string> <string name="permlab_writeCallLog" msgid="8552045664743499354">"कॉल लॉग लिहा"</string> - <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, आपल्या टॅब्लेटचा कॉल लॉग सुधारित करण्यासाठी अॅप ला अनुमती देते. दुर्भावनापूर्ण अॅप्स आपला कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string> - <string name="permdesc_writeCallLog" product="tv" msgid="4225034892248398019">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, आपल्या टीव्हीचा कॉल लॉग सुधारित करण्यासाठी अॅपला अनुमती देते. दुर्भावनापूर्ण अॅप्स आपला कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string> - <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, आपल्या फोनचा कॉल लॉग सुधारित करण्यासाठी अॅप ला अनुमती देते. दुर्भावनापूर्ण अॅप्स आपला कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string> + <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, आपल्या टॅब्लेटचा कॉल लॉग सुधारित करण्यासाठी अॅप ला अनुमती देते. दुर्भावनापूर्ण अॅप्स तुमचा कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string> + <string name="permdesc_writeCallLog" product="tv" msgid="4225034892248398019">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, आपल्या टीव्हीचा कॉल लॉग सुधारित करण्यासाठी अॅपला अनुमती देते. दुर्भावनापूर्ण अॅप्स तुमचा कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string> + <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"येणार्या आणि केल्या जाणार्या कॉलविषयीच्या डेटासह, आपल्या फोनचा कॉल लॉग सुधारित करण्यासाठी अॅप ला अनुमती देते. दुर्भावनापूर्ण अॅप्स तुमचा कॉल लॉग मिटवण्यासाठी किंवा सुधारित करण्यासाठी याचा वापर करू शकतात."</string> <string name="permlab_bodySensors" msgid="4683341291818520277">"शरीर सेंसर (हृदय गती मॉनिटरसारखे) अॅक्सेस करा"</string> <string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"हृदय गती सारख्या, आपल्या शारीरिक स्थितीचे नियंत्रण करणार्या सेन्सरवरून डेटामध्ये प्रवेश करण्यासाठी अॅपला अनुमती देते."</string> <string name="permlab_readCalendar" msgid="6716116972752441641">"कॅलेंडर इव्हेंट आणि तपशील वाचा"</string> - <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"हा अॅप आपल्या टॅब्लेटवर स्टोअर केलेले सर्व कॅलेंडर इव्हेंट वाचू आणि सामायिक करू शकतो किंवा आपला कॅलेंडर डेटा सेव्ह करू शकतो."</string> - <string name="permdesc_readCalendar" product="tv" msgid="8837931557573064315">"हा अॅप आपल्या टीव्हीवर स्टोअर केलेले सर्व कॅलेंडर इव्हेंट वाचू आणि सामायिक करू शकतो किंवा आपला कॅलेंडर डेटा सेव्ह करू शकतो."</string> - <string name="permdesc_readCalendar" product="default" msgid="4373978642145196715">"हा अॅप आपल्या फोनवर स्टोअर केलेले सर्व कॅलेंडर इव्हेंट वाचू आणि सामायिक करू शकतो किंवा आपला कॅलेंडर डेटा सेव्ह करू शकतो."</string> + <string name="permdesc_readCalendar" product="tablet" msgid="4993979255403945892">"हा अॅप आपल्या टॅब्लेटवर स्टोअर केलेले सर्व कॅलेंडर इव्हेंट वाचू आणि शेअर करू शकतो किंवा तुमचा कॅलेंडर डेटा सेव्ह करू शकतो."</string> + <string name="permdesc_readCalendar" product="tv" msgid="8837931557573064315">"हा अॅप आपल्या टीव्हीवर स्टोअर केलेले सर्व कॅलेंडर इव्हेंट वाचू आणि शेअर करू शकतो किंवा तुमचा कॅलेंडर डेटा सेव्ह करू शकतो."</string> + <string name="permdesc_readCalendar" product="default" msgid="4373978642145196715">"हा अॅप आपल्या फोनवर स्टोअर केलेले सर्व कॅलेंडर इव्हेंट वाचू आणि शेअर करू शकतो किंवा तुमचा कॅलेंडर डेटा सेव्ह करू शकतो."</string> <string name="permlab_writeCalendar" msgid="8438874755193825647">"कॅलेंडर इव्हेंट जोडा किंवा बदला आणि मालकाला न कळवता अतिथींना ईमेल पाठवा"</string> <string name="permdesc_writeCalendar" product="tablet" msgid="1675270619903625982">"हा अॅप आपल्या टॅब्लेटवर कॅलेंडर इव्हेंट जोडू, काढू किंवा बदलू शकतो. हा अॅप कॅलेंडर मालकांकडून येत आहेत असे वाटणारे मेसेज पाठवू किंवा त्यांच्या मालकांना सूचित केल्याशिवाय इव्हेंट बदलू शकतो."</string> <string name="permdesc_writeCalendar" product="tv" msgid="9017809326268135866">"हा अॅप आपल्या टीव्हीवर कॅलेंडर इव्हेंट जोडू, काढू किंवा बदलू शकतो. हा अॅप कॅलेंडर मालकांकडून येत आहेत असे वाटणारे मेसेज पाठवू किंवा त्यांच्या मालकांना सूचित केल्याशिवाय इव्हेंट बदलू शकतो."</string> @@ -446,7 +446,7 @@ <string name="permdesc_transmitIr" product="default" msgid="7957763745020300725">"अॅप ला फोनच्या इन्फ्रारेड ट्रान्समीटरचा वापर करण्याची अनुमती देते."</string> <string name="permlab_setWallpaper" msgid="6627192333373465143">"वॉलपेपर सेट करा"</string> <string name="permdesc_setWallpaper" msgid="7373447920977624745">"सिस्टम वॉलपेपर सेट करण्यासाठी अॅप ला अनुमती देते."</string> - <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"आपला वॉलपेपर आकार समायोजित करा"</string> + <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"तुमचा वॉलपेपर आकार समायोजित करा"</string> <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"सिस्टम वॉलपेपर आकार सूचना सेट करण्यासाठी अॅप ला अनुमती देते."</string> <string name="permlab_setTimeZone" msgid="2945079801013077340">"टाइम झोन सेट करा"</string> <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"टॅब्लेटचा टाइम झोन बदलण्यासाठी अॅप ला अनुमती देते."</string> @@ -470,7 +470,7 @@ <string name="permdesc_changeWifiState" msgid="7137950297386127533">"वाय-फाय अॅक्सेस बिंदूंवर कनेक्ट करण्यासाठी आणि त्यावरून डिस्कनेक्ट करण्यासाठी आणि वाय-फाय नेटवर्कसाठी डिव्हाइस कॉंफिगरेशनमध्ये बदल करण्यासाठी अॅपला अनुमती देते."</string> <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"वाय-फाय मल्टिकास्ट रिसेप्शनला अनुमती द्या"</string> <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"मल्टिकास्ट पत्ते वापरून फक्त तुमच्या टॅब्लेटवर नाही, तर वाय-फाय नेटवर्कवरील सर्व डीव्हाइसवर पाठविलेले पॅकेट प्राप्त करण्यासाठी अॅप ला अनुमती देते. हे मल्टिकास्टखेरिज इतर मोडसाठी अधिक पॉवर वापरते."</string> - <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"केवळ आपला टीव्ही न वापरता, एकाधिक पत्ते वापरून एका वाय-फाय नेटवकवरील सर्व डीव्हाइसवर पाठविलेली पॅकेट प्राप्त करण्यासाठी अॅपला अनुमती देते."</string> + <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"केवळ तुमचा टीव्ही न वापरता, एकाधिक पत्ते वापरून एका वाय-फाय नेटवकवरील सर्व डीव्हाइसवर पाठविलेली पॅकेट प्राप्त करण्यासाठी अॅपला अनुमती देते."</string> <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"मल्टिकास्ट पत्ते वापरून फक्त तुमच्या फोनवर नाही, तर वाय-फाय नेटवर्कवरील सर्व डीव्हाइसवर पाठविलेले पॅकेट प्राप्त करण्यासाठी अॅप ला अनुमती देते. हे मल्टिकास्टखेरिज इतर मोडसाठी अधिक पॉवर वापरते."</string> <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"ब्लूटूथ सेटिंग्ज अॅक्सेस करा"</string> <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"स्थानिक ब्लूटूथ टॅबलेट कॉंफिगर करण्याकरिता आणि दूरस्थ डिव्हाइस शोधण्यासाठी आणि त्यासह जोडण्यासाठी अॅप ला अनुमती देते."</string> @@ -767,12 +767,12 @@ <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"वापरकर्ता मार्गदर्शक पहा किंवा कस्टमर केअरशी संपर्क साधा."</string> <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"सिम कार्ड लॉक केलेले आहे."</string> <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"सिम कार्ड अनलॉक करत आहे…"</string> - <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"तुम्ही आपला अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने काढला. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> - <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"तुम्ही आपला पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने टाइप केला आहे. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> - <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"तुम्ही आपला पिन <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने टाइप केला आहे. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> - <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"तुम्ही आपला अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीचा रेखांकित केला आहे. <xliff:g id="NUMBER_1">%2$d</xliff:g> अधिक अयशस्वी प्रयत्नांनंतर, तुम्हाला तुमचे Google साइन इन वापरून आपला टॅब्लेट अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> - <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा आपला अनलॉक पॅटर्न अयोग्यरीत्या काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला तुमचे Google साइन इन वापरून आपला टीव्ही अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांनी पुन्हा प्रयत्न करा."</string> - <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"तुम्ही आपला अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यपणे रेखांकित केला आहे. <xliff:g id="NUMBER_1">%2$d</xliff:g> अधिक अयशस्वी प्रयत्नांनंतर, तुम्हाला तुमचे Google साइन इन वापरून आपला फोन अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"तुम्ही तुमचा अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने काढला. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"तुम्ही तुमचा पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने टाइप केला आहे. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"तुम्ही तुमचा पिन <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने टाइप केला आहे. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"तुम्ही तुमचा अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीचा रेखांकित केला आहे. <xliff:g id="NUMBER_1">%2$d</xliff:g> अधिक अयशस्वी प्रयत्नांनंतर, तुम्हाला तुमचे Google साइन इन वापरून तुमचा टॅब्लेट अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा तुमचा अनलॉक पॅटर्न अयोग्यरीत्या काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला तुमचे Google साइन इन वापरून तुमचा टीव्ही अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांनी पुन्हा प्रयत्न करा."</string> + <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"तुम्ही तुमचा अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यपणे रेखांकित केला आहे. <xliff:g id="NUMBER_1">%2$d</xliff:g> अधिक अयशस्वी प्रयत्नांनंतर, तुम्हाला तुमचे Google साइन इन वापरून तुमचा फोन अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा टॅबलेट अनलॉक करण्याचे चुकीचे प्रयत्न केले. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, टॅबलेट फॅक्टरी डीफॉल्टवर रीसेट केला जाईल आणि सर्व वापरकर्ता डेटा गमावला जाईल."</string> <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="950408382418270260">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा टीव्ही अनलॉक करण्याचा अयोग्यरित्या प्रयत्न केला. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, टीव्ही फॅक्टरी डीफॉल्टवर रीसेट केला जाईल आणि सर्व वापरकर्ता डेटा गमावेल."</string> <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा फोन अनलॉक करण्याचे चुकीचे प्रयत्न केले. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, फोन फॅक्टरी डीफॉल्टवर रीसेट केला जाईल आणि सर्व वापरकर्ता डेटा गमावला जाईल."</string> @@ -837,7 +837,7 @@ <string name="js_dialog_title_default" msgid="6961903213729667573">"Javascript"</string> <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"नेव्हिगेशनची पुष्टी करा"</string> <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"हे पृष्ठ सोडा"</string> - <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"या पृष्ठावर रहा"</string> + <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"या पेजवर रहा"</string> <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nआपल्याला खात्री आहे की तुम्ही या पृष्ठावरून नेव्हिगेट करू इच्छिता?"</string> <string name="save_password_label" msgid="6860261758665825069">"पुष्टी करा"</string> <string name="double_tap_toast" msgid="4595046515400268881">"टीप: झूम कमी करण्यासाठी आणि वाढवण्यासाठी दोनदा-टॅप करा."</string> @@ -876,7 +876,7 @@ <string name="save_password_notnow" msgid="6389675316706699758">"आत्ता नाही"</string> <string name="save_password_remember" msgid="6491879678996749466">"लक्षात ठेवा"</string> <string name="save_password_never" msgid="8274330296785855105">"कधीही नाही"</string> - <string name="open_permission_deny" msgid="7374036708316629800">"आपल्याला हे पृष्ठ उघडण्याची परवानगी नाही."</string> + <string name="open_permission_deny" msgid="7374036708316629800">"तुम्हाला हे पृष्ठ उघडण्याची परवानगी नाही."</string> <string name="text_copied" msgid="4985729524670131385">"मजकूर क्लिपबोर्डवर कॉपी केला."</string> <string name="more_item_label" msgid="4650918923083320495">"अधिक"</string> <string name="prepend_shortcut_label" msgid="2572214461676015642">"मेनू+"</string> @@ -1128,8 +1128,8 @@ <string name="new_app_description" msgid="5894852887817332322">"<xliff:g id="OLD_APP">%1$s</xliff:g> सेव्ह न करता बंद होईल"</string> <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> ने मेमेरी मर्यादा वाढविली"</string> <string name="dump_heap_notification_detail" msgid="3993078784053054141">"हीप डंप गोळा केले. शेअर करण्यासाठी टॅप करा."</string> - <string name="dump_heap_title" msgid="5864292264307651673">"हीप डंप सामायिक करायचे?"</string> - <string name="dump_heap_text" msgid="4809417337240334941">"<xliff:g id="PROC">%1$s</xliff:g> प्रक्रियेने त्याची <xliff:g id="SIZE">%2$s</xliff:g> ची प्रक्रिया मेमरी मर्यादा ओलांडली आहे. त्याच्या विकासकासह सामायिक करण्यासाठी तुमच्यासाठी हीप डंप उपलब्ध आहे. सावधगिरी बाळगा: या हीप डंपमध्ये तुमची कोणतीही वैयक्तिक माहिती असू शकते ज्यात अॅप्लिकेशन प्रवेश करू शकतो."</string> + <string name="dump_heap_title" msgid="5864292264307651673">"हीप डंप शेअर करायचे?"</string> + <string name="dump_heap_text" msgid="4809417337240334941">"<xliff:g id="PROC">%1$s</xliff:g> प्रक्रियेने त्याची <xliff:g id="SIZE">%2$s</xliff:g> ची प्रक्रिया मेमरी मर्यादा ओलांडली आहे. त्याच्या विकासकासह शेअर करण्यासाठी तुमच्यासाठी हीप डंप उपलब्ध आहे. सावधगिरी बाळगा: या हीप डंपमध्ये तुमची कोणतीही वैयक्तिक माहिती असू शकते ज्यात अॅप्लिकेशन प्रवेश करू शकतो."</string> <string name="sendText" msgid="5209874571959469142">"मजकुरासाठी क्रिया निवडा"</string> <string name="volume_ringtone" msgid="6885421406845734650">"रिंगर व्हॉल्यूम"</string> <string name="volume_music" msgid="5421651157138628171">"मीडिया व्हॉल्यूम"</string> @@ -1265,7 +1265,7 @@ <string name="adb_active_notification_message" msgid="7463062450474107752">"USB डीबगिंग बंद करण्यासाठी टॅप करा"</string> <string name="adb_active_notification_message" product="tv" msgid="8470296818270110396">"USB डीबगिंग बंद करण्यासाठी निवडा."</string> <string name="taking_remote_bugreport_notification_title" msgid="6742483073875060934">"बग रीपोर्ट घेत आहे..."</string> - <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"बग अहवाल सामायिक करायचा?"</string> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"बग अहवाल शेअर करायचा?"</string> <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"बग रीपोर्ट शेअर करत आहे..."</string> <string name="share_remote_bugreport_notification_message_finished" msgid="6029609949340992866">"आपल्या प्रशासकाने या डिव्हाइसचे समस्या निवारण करण्यात मदत करण्यासाठी दोष अहवालाची विनंती केली. अॅप्स आणि डेटा शेअर केले जाऊ शकतात."</string> <string name="share_remote_bugreport_action" msgid="6249476773913384948">"शेअर करा"</string> @@ -1384,7 +1384,7 @@ <string name="next_button_label" msgid="1080555104677992408">"पुढील"</string> <string name="skip_button_label" msgid="1275362299471631819">"वगळा"</string> <string name="no_matches" msgid="8129421908915840737">"कोणत्याही जुळण्या नाहीत"</string> - <string name="find_on_page" msgid="1946799233822820384">"पृष्ठावर शोधा"</string> + <string name="find_on_page" msgid="1946799233822820384">"पेजवर शोधा"</string> <plurals name="matches_found" formatted="false" msgid="1210884353962081884"> <item quantity="one"><xliff:g id="TOTAL">%d</xliff:g> पैकी <xliff:g id="INDEX">%d</xliff:g></item> <item quantity="other"><xliff:g id="TOTAL">%d</xliff:g> पैकी <xliff:g id="INDEX">%d</xliff:g></item> @@ -1446,7 +1446,7 @@ <string name="action_menu_overflow_description" msgid="2295659037509008453">"अधिक पर्याय"</string> <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string> <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string> - <string name="storage_internal" msgid="3570990907910199483">"अंतर्गत सामायिक केलेला स्टोरेज"</string> + <string name="storage_internal" msgid="3570990907910199483">"अंतर्गत शेअर केलेला स्टोरेज"</string> <string name="storage_sd_card" msgid="3282948861378286745">"SD कार्ड"</string> <string name="storage_sd_card_label" msgid="6347111320774379257">"<xliff:g id="MANUFACTURER">%s</xliff:g> SD कार्ड"</string> <string name="storage_usb_drive" msgid="6261899683292244209">"USB ड्राइव्ह"</string> @@ -1544,18 +1544,18 @@ <string name="kg_login_invalid_input" msgid="5754664119319872197">"अवैध वापरकर्तानाव किंवा पासवर्ड."</string> <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"तुमचे वापरकर्तानाव किंवा पासवर्ड विसरलात?\n "<b>"google.com/accounts/recovery"</b>" ला भेट द्या."</string> <string name="kg_login_checking_password" msgid="1052685197710252395">"खाते तपासत आहे…"</string> - <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"तुम्ही आपला पिन <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने टाइप केला आहे. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> - <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"तुम्ही आपला पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने टाइप केला आहे. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> - <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"तुम्ही आपला अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने काढला. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"तुम्ही तुमचा पिन <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने टाइप केला आहे. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"तुम्ही तुमचा पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने टाइप केला आहे. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"तुम्ही तुमचा अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने काढला. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा टॅबलेट अनलॉक करण्याचा अयोग्यपणे प्रयत्न केला. <xliff:g id="NUMBER_1">%2$d</xliff:g> आणखी अयशस्वी प्रयत्नांनंतर, टॅबलेट फॅक्टरी डीफॉल्टवर रीसेट केला जाईल आणि वापरकर्ता डेटा गमावेल."</string> <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="5621231220154419413">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा टीव्ही अनलॉक करण्याचा अयोग्यरित्या प्रयत्न केला. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, टीव्ही फॅक्टरी डीफॉल्टवर रीसेट केला जाईल आणि सर्व वापरकर्ता डेटा गमावेल."</string> <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा फोन अनलॉक करण्याचा अयोग्यपणे प्रयत्न केला. <xliff:g id="NUMBER_1">%2$d</xliff:g> आणखी अयशस्वी प्रयत्नांनंतर, फोन फॅक्टरी डीफॉल्टवर रीसेट केला जाईल आणि वापरकर्ता डेटा गमावेल."</string> <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"तुम्ही <xliff:g id="NUMBER">%d</xliff:g> वेळा टॅबलेट अनलॉक करण्याचा अयोग्यपणे प्रयत्न केला. टॅबलेट आता फॅक्टरी डीफॉल्ट वर रीसेट केला जाईल."</string> <string name="kg_failed_attempts_now_wiping" product="tv" msgid="4987878286750741463">"तुम्ही <xliff:g id="NUMBER">%d</xliff:g> वेळा टीव्ही अनलॉक करण्याचा अयोग्यरित्या प्रयत्न केला. टीव्ही आता फॅक्टरी डीफॉल्टवर रीसेट केला जाईल."</string> <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"तुम्ही <xliff:g id="NUMBER">%d</xliff:g> वेळा फोन अनलॉक करण्याचा अयोग्यपणे प्रयत्न केला. फोन आता फॅक्टरी डीफॉल्ट वर रीसेट केला जाईल."</string> - <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"तुम्ही आपला अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यपणे काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला ईमेल खाते वापरून आपला टॅब्लेट अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> - <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा आपला अनलॉक पॅटर्न अयोग्यरीत्या काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला ईमेल खाते वापरून आपला टीव्ही अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांनी पुन्हा प्रयत्न करा."</string> - <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"तुम्ही आपला अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यपणे काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला ईमेल खाते वापरून आपला फोन अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"तुम्ही तुमचा अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यपणे काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला ईमेल खाते वापरून तुमचा टॅब्लेट अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> + <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"तुम्ही <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा तुमचा अनलॉक पॅटर्न अयोग्यरीत्या काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला ईमेल खाते वापरून तुमचा टीव्ही अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांनी पुन्हा प्रयत्न करा."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"तुम्ही तुमचा अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यपणे काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला ईमेल खाते वापरून तुमचा फोन अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"काढा"</string> <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"शिफारस केलेल्या पातळीच्या वर आवाज वाढवायचा?\n\nउच्च आवाजात दीर्घ काळ ऐकण्याने आपल्या श्रवणशक्तीची हानी होऊ शकते."</string> @@ -1751,7 +1751,7 @@ <string name="zen_mode_default_events_name" msgid="8158334939013085363">"इव्हेंट"</string> <string name="zen_mode_default_every_night_name" msgid="3012363838882944175">"निष्क्रिय आहे"</string> <string name="muted_by" msgid="5942954724562097128">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g> काही ध्वनी म्यूट करत आहे"</string> - <string name="system_error_wipe_data" msgid="6608165524785354962">"आपल्या डिव्हाइसमध्ये अंतर्गत समस्या आहे आणि आपला फॅक्टरी डेटा रीसेट होईपर्यंत ती अस्थिर असू शकते."</string> + <string name="system_error_wipe_data" msgid="6608165524785354962">"आपल्या डिव्हाइसमध्ये अंतर्गत समस्या आहे आणि तुमचा फॅक्टरी डेटा रीसेट होईपर्यंत ती अस्थिर असू शकते."</string> <string name="system_error_manufacturer" msgid="8086872414744210668">"आपल्या डिव्हाइसमध्ये अंतर्गत समस्या आहे. तपशीलांसाठी आपल्या निर्मात्याशी संपर्क साधा."</string> <string name="stk_cc_ussd_to_dial" msgid="5214333646366591205">"USSD विनंती नियमित कॉलवर बदलली"</string> <string name="stk_cc_ussd_to_ss" msgid="4884994189414782605">"USSD विनंती SS विनंतीवर बदलली"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 54097dfe65dc..b65c142b47c5 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -499,7 +499,7 @@ <string name="fingerprint_acquired_partial" msgid="735082772341716043">"Deler av fingeravtrykket er registrert. Prøv på nytt."</string> <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Kunne ikke registrere fingeravtrykket. Prøv på nytt."</string> <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Fingeravtrykksensoren er skitten. Rengjør den og prøv på nytt."</string> - <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Du flyttet fingeren for kjapt. Prøv på nytt."</string> + <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Du flyttet fingeren for raskt. Prøv på nytt."</string> <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Du flyttet fingeren for sakte. Prøv på nytt."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> @@ -510,7 +510,7 @@ <string name="fingerprint_error_timeout" msgid="3927186043737732875">"Tidsavbrudd for fingeravtrykk er nådd. Prøv på nytt."</string> <string name="fingerprint_error_canceled" msgid="4402024612660774395">"Fingeravtrykk-operasjonen ble avbrutt."</string> <string name="fingerprint_error_user_canceled" msgid="7999639584615291494">"Fingeravtrykk-operasjonen ble avbrutt av brukeren."</string> - <string name="fingerprint_error_lockout" msgid="5536934748136933450">"For mange forsøk. Prøve på nytt senere."</string> + <string name="fingerprint_error_lockout" msgid="5536934748136933450">"For mange forsøk. Prøv på nytt senere."</string> <string name="fingerprint_error_lockout_permanent" msgid="5033251797919508137">"For mange forsøk. Fingeravtrykkssensoren er slått av."</string> <string name="fingerprint_error_unable_to_process" msgid="6107816084103552441">"Prøv igjen."</string> <string name="fingerprint_error_no_fingerprints" msgid="7654382120628334248">"Ingen fingeravtrykk er registrert."</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index fc05d2cf97d8..45ec2cfeafd5 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -1816,7 +1816,7 @@ <string name="conference_call" msgid="3751093130790472426">"ਕਾਨਫਰੰਸ ਕਾਲ"</string> <string name="tooltip_popup_title" msgid="5253721848739260181">"ਟੂਲ-ਟਿੱਪ"</string> <string name="app_category_game" msgid="5431836943981492993">"ਗੇਮਾਂ"</string> - <string name="app_category_audio" msgid="1659853108734301647">"ਸੰਗੀਤ ਅਤੇ ਆਡੀਓ"</string> + <string name="app_category_audio" msgid="1659853108734301647">"ਸੰਗੀਤ ਅਤੇ ਆਡੀਓ"</string> <string name="app_category_video" msgid="2728726078629384196">"ਮੂਵੀਆਂ ਅਤੇ ਵੀਡੀਓ"</string> <string name="app_category_image" msgid="4867854544519846048">"ਫ਼ੋਟੋਆਂ ਅਤੇ ਚਿੱਤਰ"</string> <string name="app_category_social" msgid="5842783057834965912">"ਸਮਾਜਕ ਅਤੇ ਸੰਚਾਰ"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 423da8d0e871..3013cb05b4fa 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -587,7 +587,7 @@ <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Pozwala aplikacji na odczyt i zmianę konfiguracji trybu Nie przeszkadzać."</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"Określ reguły hasła"</string> <string name="policydesc_limitPassword" msgid="2502021457917874968">"Kontrolowanie długości haseł blokady ekranu i kodów PIN oraz dozwolonych w nich znaków."</string> - <string name="policylab_watchLogin" msgid="5091404125971980158">"Monitoruj próby odblokowania ekranu"</string> + <string name="policylab_watchLogin" msgid="5091404125971980158">"Monitorowanie prób odblokowania ekranu"</string> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Przy odblokowywaniu ekranu monitoruj, ile razy wpisano nieprawidłowe hasło i blokuj tablet lub usuń z niego wszystkie dane, jeśli nieprawidłowe hasło podano zbyt wiele razy."</string> <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Monitorowanie, ile razy wpisano niepoprawne hasło podczas odblokowywania ekranu, oraz blokowanie telewizora albo kasowanie na nim wszystkich danych, gdy zbyt wiele razy wpisano niepoprawne hasło."</string> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Przy odblokowywaniu ekranu monitoruje, ile razy wpisano nieprawidłowe hasło, i blokuje telefon lub usuwa z niego wszystkie dane, jeśli nieprawidłowe hasło podano zbyt wiele razy"</string> @@ -608,11 +608,11 @@ <string name="policydesc_wipeData_secondaryUser" product="default" msgid="6787904546711590238">"Kasowanie danych tego użytkownika na tym telefonie bez ostrzeżenia."</string> <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Ustaw globalny serwer proxy urządzenia"</string> <string name="policydesc_setGlobalProxy" msgid="8459859731153370499">"Ustawianie globalnego serwera proxy urządzenia do użycia przy włączonych zasadach. Tylko właściciel urządzenia może ustawić globalny serwer proxy."</string> - <string name="policylab_expirePassword" msgid="5610055012328825874">"Ustaw czas ważności hasła blokady ekranu"</string> + <string name="policylab_expirePassword" msgid="5610055012328825874">"Ustawianie czasu ważności hasła blokady ekranu"</string> <string name="policydesc_expirePassword" msgid="5367525762204416046">"Zmiana częstotliwości, z jaką należy zmieniać hasło blokady ekranu, kod PIN lub wzór."</string> - <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Ustaw szyfrowanie pamięci"</string> + <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Ustawianie szyfrowania pamięci"</string> <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Wymaganie szyfrowania przechowywanych danych aplikacji"</string> - <string name="policylab_disableCamera" msgid="6395301023152297826">"Wyłącz aparaty"</string> + <string name="policylab_disableCamera" msgid="6395301023152297826">"Wyłączanie aparatów"</string> <string name="policydesc_disableCamera" msgid="2306349042834754597">"Zapobieganie używaniu wszystkich aparatów w urządzeniu"</string> <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Wył. funkcji blokady ekranu"</string> <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Zapobieganie użyciu niektórych funkcji blokady ekranu."</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 0fb095d66ff5..79433609c01c 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -1768,7 +1768,7 @@ <string name="usb_midi_peripheral_manufacturer_name" msgid="7176526170008970168">"Android"</string> <string name="usb_midi_peripheral_product_name" msgid="4971827859165280403">"Porta USB periférica"</string> <string name="floating_toolbar_open_overflow_description" msgid="4797287862999444631">"Mais opções"</string> - <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"Fechar barra flutuante"</string> + <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"Fechar menu flutuante"</string> <string name="maximize_button_text" msgid="7543285286182446254">"Maximizar"</string> <string name="close_button_text" msgid="3937902162644062866">"Fechar"</string> <string name="notification_messaging_title_template" msgid="3452480118762691020">"<xliff:g id="CONVERSATION_TITLE">%1$s</xliff:g>: <xliff:g id="SENDER_NAME">%2$s</xliff:g>"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 8cafd434828a..3c356669c2a9 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -1278,7 +1278,7 @@ <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="alert_windows_notification_channel_group_name" msgid="1463953341148606396">"Sobrepor a outras aplicações"</string> <string name="alert_windows_notification_channel_name" msgid="3116610965549449803">"A aplicação <xliff:g id="NAME">%s</xliff:g> sobrepõe-se a outras aplicações"</string> - <string name="alert_windows_notification_title" msgid="3697657294867638947">"O <xliff:g id="NAME">%s</xliff:g> sobrepõe-se a outras aplic."</string> + <string name="alert_windows_notification_title" msgid="3697657294867638947">"O <xliff:g id="NAME">%s</xliff:g> sobrepõe-se a outras app"</string> <string name="alert_windows_notification_message" msgid="8917232109522912560">"Se não pretende que a aplicação <xliff:g id="NAME">%s</xliff:g> utilize esta funcionalidade, toque para abrir as definições e desative-a."</string> <string name="alert_windows_notification_turn_off_action" msgid="2902891971380544651">"Desligar"</string> <string name="ext_media_checking_notification_title" msgid="4411133692439308924">"A verificar o <xliff:g id="NAME">%s</xliff:g>…"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 0fb095d66ff5..79433609c01c 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -1768,7 +1768,7 @@ <string name="usb_midi_peripheral_manufacturer_name" msgid="7176526170008970168">"Android"</string> <string name="usb_midi_peripheral_product_name" msgid="4971827859165280403">"Porta USB periférica"</string> <string name="floating_toolbar_open_overflow_description" msgid="4797287862999444631">"Mais opções"</string> - <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"Fechar barra flutuante"</string> + <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"Fechar menu flutuante"</string> <string name="maximize_button_text" msgid="7543285286182446254">"Maximizar"</string> <string name="close_button_text" msgid="3937902162644062866">"Fechar"</string> <string name="notification_messaging_title_template" msgid="3452480118762691020">"<xliff:g id="CONVERSATION_TITLE">%1$s</xliff:g>: <xliff:g id="SENDER_NAME">%2$s</xliff:g>"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 9610a93eec10..27897b3f7acb 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -582,9 +582,9 @@ <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"Permite aplicației să se conecteze la serviciile operatorului. Nu ar trebui să fie niciodată necesară pentru aplicațiile obișnuite."</string> <string name="permlab_access_notification_policy" msgid="4247510821662059671">"accesează Nu deranja"</string> <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Permite aplicației să citească și să scrie configurația Nu deranja."</string> - <string name="policylab_limitPassword" msgid="4497420728857585791">"Setați reguli pentru parolă"</string> + <string name="policylab_limitPassword" msgid="4497420728857585791">"Să seteze reguli pentru parolă"</string> <string name="policydesc_limitPassword" msgid="2502021457917874968">"Stabiliți lungimea și tipul de caractere permise pentru parolele și codurile PIN de blocare a ecranului."</string> - <string name="policylab_watchLogin" msgid="5091404125971980158">"Monitorizați încercările de deblocare a ecranului"</string> + <string name="policylab_watchLogin" msgid="5091404125971980158">"Să monitorizeze încercările de deblocare a ecranului"</string> <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Monitorizați numărul de parole incorecte introduse la deblocarea ecranului și blocați tableta sau ștergeți datele acesteia dacă sunt introduse prea multe parole incorecte."</string> <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Monitorizați numărul de parole incorecte introduse la deblocarea ecranului și blocați televizorul sau ștergeți toate datele acestuia dacă sunt introduse prea multe parole incorecte."</string> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Monitorizați numărul de parole incorecte introduse la deblocarea ecranului și blocați telefonul sau ștergeți toate datele acestuia dacă sunt introduse prea multe parole incorecte."</string> @@ -607,9 +607,9 @@ <string name="policydesc_setGlobalProxy" msgid="8459859731153370499">"Setați serverul proxy global pentru dispozitiv, care să fie utilizat cât timp politica este activă. Numai proprietarul dispozitivului poate seta serverul proxy global."</string> <string name="policylab_expirePassword" msgid="5610055012328825874">"Setați expirarea parolei pentru blocarea ecranului"</string> <string name="policydesc_expirePassword" msgid="5367525762204416046">"Modificați frecvența cu care trebuie să se schimbe parola, codul PIN sau modelul pentru blocarea ecranului."</string> - <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Setați criptarea stocării"</string> + <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Să seteze criptarea stocării"</string> <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Necesită ca datele aplicației stocate să fie criptate."</string> - <string name="policylab_disableCamera" msgid="6395301023152297826">"Dezactivați camerele foto"</string> + <string name="policylab_disableCamera" msgid="6395301023152297826">"Să dezactiveze camerele foto"</string> <string name="policydesc_disableCamera" msgid="2306349042834754597">"Împiedicați utilizarea camerelor foto de pe dispozitiv."</string> <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Să oprească funcții de blocare ecran"</string> <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Împiedicați folosirea unor funcții de blocare a ecranului."</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index cb9a019a7358..61987bb1bc89 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -72,7 +72,7 @@ <string name="ThreeWCMmi" msgid="9051047170321190368">"Konferencia troch účastníkov"</string> <string name="RuacMmi" msgid="7827887459138308886">"Odmietnutie nevyžiadaných obťažujúcich hovorov"</string> <string name="CndMmi" msgid="3116446237081575808">"Doručenie volaného čísla"</string> - <string name="DndMmi" msgid="1265478932418334331">"Nerušiť"</string> + <string name="DndMmi" msgid="1265478932418334331">"Režim bez vyrušení"</string> <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"V predvolenom nastavení je identifikácia volajúceho obmedzená. Ďalší hovor: Obmedzené"</string> <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"V predvolenom nastavení je identifikácia volajúceho obmedzená. Ďalší hovor: Bez obmedzenia"</string> <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"V predvolenom nastavení nie je identifikácia volajúceho obmedzená. Ďalší hovor: Obmedzené"</string> @@ -583,8 +583,8 @@ <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania služby na odosielanie správ SMS a MMS operátora. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string> <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"naviazať sa na služby operátora"</string> <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"Umožňuje držiteľovi povolenia naviazať sa na služby operátora. Bežné aplikácie by toto povolenie nemali nikdy nepotrebovať."</string> - <string name="permlab_access_notification_policy" msgid="4247510821662059671">"prístup k nastaveniu Nerušiť"</string> - <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Umožňuje aplikácii čítať a zapisovať konfiguráciu nastavenia Nerušiť."</string> + <string name="permlab_access_notification_policy" msgid="4247510821662059671">"prístup k režimu bez vyrušení"</string> + <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Umožňuje aplikácii čítať a zapisovať konfiguráciu režimu bez vyrušení."</string> <string name="policylab_limitPassword" msgid="4497420728857585791">"Nastaviť pravidlá pre heslo"</string> <string name="policydesc_limitPassword" msgid="2502021457917874968">"Nastavte dĺžku hesiel na odomknutie obrazovky aj kódov PIN a v nich používané znaky."</string> <string name="policylab_watchLogin" msgid="5091404125971980158">"Sledovanie pokusov o odomknutie obrazovky"</string> @@ -1806,10 +1806,10 @@ <string name="zen_mode_until" msgid="7336308492289875088">"Do <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string> <string name="zen_mode_alarm" msgid="9128205721301330797">"Do <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (ďalší budík)"</string> <string name="zen_mode_forever" msgid="931849471004038757">"Dokiaľ túto funkciu nevypnete"</string> - <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"Dokiaľ nevypnete režim Nerušiť"</string> + <string name="zen_mode_forever_dnd" msgid="3792132696572189081">"Dokiaľ nevypnete režim bez vyrušení"</string> <string name="zen_mode_rule_name_combination" msgid="191109939968076477">"<xliff:g id="FIRST">%1$s</xliff:g> / <xliff:g id="REST">%2$s</xliff:g>"</string> <string name="toolbar_collapse_description" msgid="2821479483960330739">"Zbaliť"</string> - <string name="zen_mode_feature_name" msgid="5254089399895895004">"Nerušiť"</string> + <string name="zen_mode_feature_name" msgid="5254089399895895004">"Režim bez vyrušení"</string> <string name="zen_mode_downtime_feature_name" msgid="2626974636779860146">"Doba pokoja"</string> <string name="zen_mode_default_weeknights_name" msgid="3081318299464998143">"Noc pracovného dňa"</string> <string name="zen_mode_default_weekends_name" msgid="2786495801019345244">"Víkend"</string> @@ -1949,10 +1949,10 @@ <string name="volume_dialog_ringer_guidance_vibrate" msgid="8902050240801159042">"Hovory a upozornenia budú vibrovať"</string> <string name="volume_dialog_ringer_guidance_silent" msgid="2128975224280276122">"Hovory a upozornenia budú stlmené"</string> <string name="notification_channel_system_changes" msgid="5072715579030948646">"Zmeny systému"</string> - <string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"Nerušiť"</string> - <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"Novinka: režim Nerušiť skrýva upozornenia"</string> + <string name="notification_channel_do_not_disturb" msgid="6766940333105743037">"Režim bez vyrušení"</string> + <string name="zen_upgrade_notification_visd_title" msgid="3288313883409759733">"Novinka: režim bez vyrušení skrýva upozornenia"</string> <string name="zen_upgrade_notification_visd_content" msgid="5533674060311631165">"Klepnutím získate ďalšie informácie a budete môcť vykonať zmeny."</string> - <string name="zen_upgrade_notification_title" msgid="3799603322910377294">"Nastavenie Nerušiť sa zmenilo"</string> + <string name="zen_upgrade_notification_title" msgid="3799603322910377294">"Režim bez vyrušení sa zmenil"</string> <string name="zen_upgrade_notification_content" msgid="1794994264692424562">"Klepnutím skontrolujete, čo je blokované."</string> <string name="notification_app_name_system" msgid="4205032194610042794">"Systém"</string> <string name="notification_app_name_settings" msgid="7751445616365753381">"Nastavenia"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 8e18f5a8797e..a60f9b6323aa 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -612,7 +612,7 @@ <string name="policydesc_expirePassword" msgid="5367525762204416046">"Spreminjanje tega, kako pogosto je treba spremeniti geslo, kodo PIN ali vzorec za zaklepanje zaslona."</string> <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Nastavitev šifriranja shrambe"</string> <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Shranjeni podatki aplikacije morajo biti šifrirani."</string> - <string name="policylab_disableCamera" msgid="6395301023152297826">"Onemogoči fotoaparate"</string> + <string name="policylab_disableCamera" msgid="6395301023152297826">"Onemogočanje fotoaparatov"</string> <string name="policydesc_disableCamera" msgid="2306349042834754597">"Prepreči uporabo vseh fotoaparatov v napravi."</string> <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Onemogočanje nekaterih funkcij zaklepanja zaslona"</string> <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Prepreči uporabo nekaterih funkcij zaklepanja zaslona."</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 012a5ad7ed1b..96b73e3aecba 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -213,7 +213,7 @@ <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Сат ће се угасити."</string> <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Телефон ће се искључити."</string> <string name="shutdown_confirm_question" msgid="2906544768881136183">"Да ли желите да искључите телефон?"</string> - <string name="reboot_safemode_title" msgid="7054509914500140361">"Поново покрени систем у безбедном режиму"</string> + <string name="reboot_safemode_title" msgid="7054509914500140361">"Рестартуј систем у безбедном режиму"</string> <string name="reboot_safemode_confirm" msgid="55293944502784668">"Да ли желите да поново покренете систем у безбедном режиму? Ово ће онемогућити све инсталиране апликације независних произвођача. Оне ће бити враћене када поново покренете систем."</string> <string name="recent_tasks_title" msgid="3691764623638127888">"Недавно"</string> <string name="no_recent_tasks" msgid="8794906658732193473">"Нема недавних апликација."</string> @@ -494,11 +494,11 @@ <string name="permlab_disableKeyguard" msgid="3598496301486439258">"онемогућавање закључавања екрана"</string> <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Дозвољава апликацији да онемогући закључавање тастатуре и све повезане безбедносне мере са лозинкама. На пример, телефон онемогућава закључавање тастатуре при пријему долазног телефонског позива, а затим га поново омогућава по завршетку позива."</string> <string name="permlab_useBiometric" msgid="8837753668509919318">"користи биометријски хардвер"</string> - <string name="permdesc_useBiometric" msgid="8389855232721612926">"Дозвољава апликацији да користи биометријски хардвер за потврду аутентичности"</string> + <string name="permdesc_useBiometric" msgid="8389855232721612926">"Дозвољава апликацији да користи биометријски хардвер за потврду идентитета"</string> <string name="permlab_manageFingerprint" msgid="5640858826254575638">"управљај хардвером за отиске прстију"</string> <string name="permdesc_manageFingerprint" msgid="178208705828055464">"Дозвољава апликацији да активира методе за додавање и брисање шаблона отисака прстију који ће се користити."</string> <string name="permlab_useFingerprint" msgid="3150478619915124905">"користи хардвер за отиске прстију"</string> - <string name="permdesc_useFingerprint" msgid="9165097460730684114">"Дозвољава апликацији да користи хардвер за отиске прстију ради потврде аутентичности"</string> + <string name="permdesc_useFingerprint" msgid="9165097460730684114">"Дозвољава апликацији да користи хардвер за отиске прстију ради потврде идентитета"</string> <string name="fingerprint_acquired_partial" msgid="735082772341716043">"Откривен је делимични отисак прста. Пробајте поново."</string> <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Није успела обрада отиска прста. Пробајте поново."</string> <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Сензор за отиске прстију је прљав. Очистите га и покушајте поново."</string> @@ -835,7 +835,7 @@ <string name="factorytest_failed" msgid="5410270329114212041">"Фабричко тестирање није успело"</string> <string name="factorytest_not_system" msgid="4435201656767276723">"Радња FACTORY_TEST је подржана само за пакете инсталиране у директоријуму /system/app."</string> <string name="factorytest_no_action" msgid="872991874799998561">"Није пронађен ниједан пакет који обезбеђује радњу FACTORY_TEST."</string> - <string name="factorytest_reboot" msgid="6320168203050791643">"Поново покрени"</string> + <string name="factorytest_reboot" msgid="6320168203050791643">"Рестартуј"</string> <string name="js_dialog_title" msgid="1987483977834603872">"На страници на адреси „<xliff:g id="TITLE">%s</xliff:g>“ пише:"</string> <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string> <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Потврда навигације"</string> @@ -1255,7 +1255,7 @@ <string name="sim_done_button" msgid="827949989369963775">"Готово"</string> <string name="sim_added_title" msgid="3719670512889674693">"SIM картица је додата"</string> <string name="sim_added_message" msgid="6599945301141050216">"Рестартујте уређај да бисте могли да приступите мобилној мрежи."</string> - <string name="sim_restart_button" msgid="4722407842815232347">"Поново покрени"</string> + <string name="sim_restart_button" msgid="4722407842815232347">"Рестартуј"</string> <string name="install_carrier_app_notification_title" msgid="9056007111024059888">"Активирајте мобилну услугу"</string> <string name="install_carrier_app_notification_text" msgid="3346681446158696001">"Преузмите апликацију мобилног оператера да бисте активирали нови SIM"</string> <string name="install_carrier_app_notification_text_app_name" msgid="1196505084835248137">"Преузмите апликацију <xliff:g id="APP_NAME">%1$s</xliff:g> да бисте активирали нову SIM картицу"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 9fe68eea2798..61223a45f2cf 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -1524,7 +1524,7 @@ </plurals> <string name="kg_pattern_instructions" msgid="398978611683075868">"Chora ruwaza yako"</string> <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ingiza PIN ya SIM"</string> - <string name="kg_pin_instructions" msgid="2377242233495111557">"Ingiza PIN"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Weka PIN"</string> <string name="kg_password_instructions" msgid="5753646556186936819">"Weka Nenosiri"</string> <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM sasa imelemazwa. Ingiza msimbo wa PUK ili kuendelea. Wasiliana na mtoa huduma kwa maelezo."</string> <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Weka nambari yako ya PIN"</string> @@ -1667,7 +1667,7 @@ <string name="print_service_installed_title" msgid="2246317169444081628">"Huduma ya <xliff:g id="NAME">%s</xliff:g> imesakinisha"</string> <string name="print_service_installed_message" msgid="5897362931070459152">"Gusa ili uwashe"</string> <string name="restr_pin_enter_admin_pin" msgid="8641662909467236832">"Weka PIN ya msimamizi"</string> - <string name="restr_pin_enter_pin" msgid="3395953421368476103">"Ingiza PIN"</string> + <string name="restr_pin_enter_pin" msgid="3395953421368476103">"Weka PIN"</string> <string name="restr_pin_incorrect" msgid="8571512003955077924">"Sio sahihi"</string> <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN ya sasa"</string> <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"PIN mpya"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 1569ccdbe815..5b586e2acade 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -499,7 +499,7 @@ <string name="fingerprint_acquired_partial" msgid="735082772341716043">"Hindi buo ang natukoy na fingerprint. Pakisubukang muli."</string> <string name="fingerprint_acquired_insufficient" msgid="4596546021310923214">"Hindi maproseso ang fingerprint. Pakisubukang muli."</string> <string name="fingerprint_acquired_imager_dirty" msgid="1087209702421076105">"Marumi ang sensor ng fingerprint. Pakilinis at subukang muli."</string> - <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Masyadong mabilis ang paggalaw ng daliri. Pakisubukang muli."</string> + <string name="fingerprint_acquired_too_fast" msgid="6470642383109155969">"Napakabilis ng paggalaw ng daliri. Pakisubukan ulit."</string> <string name="fingerprint_acquired_too_slow" msgid="59250885689661653">"Masyadong mabagal ang paggalaw ng daliri. Pakisubukang muli."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> @@ -510,7 +510,7 @@ <string name="fingerprint_error_timeout" msgid="3927186043737732875">"Nag-time out ang fingerprint. Subukang muli."</string> <string name="fingerprint_error_canceled" msgid="4402024612660774395">"Nakansela ang operasyong ginagamitan ng fingerprint."</string> <string name="fingerprint_error_user_canceled" msgid="7999639584615291494">"Kinansela ng user ang operasyon sa fingerprint."</string> - <string name="fingerprint_error_lockout" msgid="5536934748136933450">"Masyadong maraming beses sumubok. Subukang muli sa ibang pagkakataon."</string> + <string name="fingerprint_error_lockout" msgid="5536934748136933450">"Napakaraming pagtatangka. Subukan ulit sa ibang pagkakataon."</string> <string name="fingerprint_error_lockout_permanent" msgid="5033251797919508137">"Masyadong maraming beses sumubok. Na-disable ang sensor para sa fingerprint."</string> <string name="fingerprint_error_unable_to_process" msgid="6107816084103552441">"Subukang muli."</string> <string name="fingerprint_error_no_fingerprints" msgid="7654382120628334248">"Walang naka-enroll na fingerprint."</string> @@ -1353,7 +1353,7 @@ <string name="forward_intent_to_work" msgid="621480743856004612">"Ginagamit mo ang app na ito sa iyong profile sa trabaho"</string> <string name="input_method_binding_label" msgid="1283557179944992649">"Pamamaraan ng pag-input"</string> <string name="sync_binding_label" msgid="3687969138375092423">"I-sync"</string> - <string name="accessibility_binding_label" msgid="4148120742096474641">"Kakayahang Ma-access"</string> + <string name="accessibility_binding_label" msgid="4148120742096474641">"Pagiging Accessible"</string> <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string> <string name="chooser_wallpaper" msgid="7873476199295190279">"Baguhin ang wallpaper"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Notification listener"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 9e1e3431a9df..158e1a1757d8 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -1131,7 +1131,7 @@ <string name="dump_heap_title" msgid="5864292264307651673">"Yığın dökümü paylaşılsın mı?"</string> <string name="dump_heap_text" msgid="4809417337240334941">"<xliff:g id="PROC">%1$s</xliff:g>, <xliff:g id="SIZE">%2$s</xliff:g> olan işlem bellek sınırını aştı. İşlemin geliştiricisiyle paylaşabileceğiniz bir bellek yığını dökümü hazır. Dikkat: Bu bellek yığını dökümü, uygulamanın erişebildiği tüm kişisel bilgilerinizi içerebilir."</string> <string name="sendText" msgid="5209874571959469142">"Kısa mesaj için bir işlem seçin"</string> - <string name="volume_ringtone" msgid="6885421406845734650">"Zil sesi düzeyi"</string> + <string name="volume_ringtone" msgid="6885421406845734650">"Zil ses düzeyi"</string> <string name="volume_music" msgid="5421651157138628171">"Medya ses düzeyi"</string> <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Bluetooth üzerinden çalıyor"</string> <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Sessiz zil sesi ayarlandı"</string> @@ -1141,7 +1141,7 @@ <string name="volume_notification" msgid="2422265656744276715">"Bildirim ses düzeyi"</string> <string name="volume_unknown" msgid="1400219669770445902">"Ses"</string> <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth ses düzeyi"</string> - <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Zil sesi düzeyi"</string> + <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Zil ses düzeyi"</string> <string name="volume_icon_description_incall" msgid="8890073218154543397">"Çağrı ses düzeyi"</string> <string name="volume_icon_description_media" msgid="4217311719665194215">"Medya ses düzeyi"</string> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Bildirim ses düzeyi"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 0e2cf5c01ca6..e6c9421a82be 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -1277,7 +1277,7 @@ <string name="sim_done_button" msgid="827949989369963775">"Готово"</string> <string name="sim_added_title" msgid="3719670512889674693">"SIM-карту додано"</string> <string name="sim_added_message" msgid="6599945301141050216">"Перезапустіть пристрій, щоб отримати доступ до мобільної мережі."</string> - <string name="sim_restart_button" msgid="4722407842815232347">"Перезапуск"</string> + <string name="sim_restart_button" msgid="4722407842815232347">"Перезапустити"</string> <string name="install_carrier_app_notification_title" msgid="9056007111024059888">"Активувати мобільну службу"</string> <string name="install_carrier_app_notification_text" msgid="3346681446158696001">"Завантажити додаток оператора, щоб активувати нову SIM-карту"</string> <string name="install_carrier_app_notification_text_app_name" msgid="1196505084835248137">"Щоб активувати нову SIM-карту, завантажте додаток <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 87738513c0b9..b365297d991c 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -100,7 +100,7 @@ <string name="peerTtyModeVco" msgid="1742404978686538049">"Teng huquqli ishtirokchi teletayp rejimini VCO (gapiradi, eshitolmaydi) qilib o‘zgartirdi"</string> <string name="peerTtyModeOff" msgid="3280819717850602205">"Teng huquqli ishtirokchi teletayp rejimini OFF (o‘chirilgan) qilib o‘zgartirdi"</string> <string name="serviceClassVoice" msgid="1258393812335258019">"Ovozli aloqa"</string> - <string name="serviceClassData" msgid="872456782077937893">"Ma’lumot"</string> + <string name="serviceClassData" msgid="872456782077937893">"Internet"</string> <string name="serviceClassFAX" msgid="5566624998840486475">"FAKS"</string> <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string> <string name="serviceClassDataAsync" msgid="4523454783498551468">"Asinx"</string> 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/attrs.xml b/core/res/res/values/attrs.xml index b4d74af50149..3fe8689b8552 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -1423,7 +1423,7 @@ at {@link android.view.inputmethod.InputConnection#performEditorAction(int) InputConnection.performEditorAction(int)}. <p>Corresponds to - {@link android.view.inputmethod.EditorInfo#IME_FLAG_NO_FULLSCREEN}. --> + {@link android.view.inputmethod.EditorInfo#IME_FLAG_NAVIGATE_PREVIOUS}. --> <flag name="flagNavigatePrevious" value="0x4000000" /> <!-- Used to specify that there is something interesting that a forward navigation can focus on. This is like using @@ -4168,9 +4168,9 @@ row is full. The rowCount attribute may be used similarly in the vertical case. The default is horizontal. --> <attr name="orientation" /> - <!-- The maxmimum number of rows to create when automatically positioning children. --> + <!-- The maximum number of rows to create when automatically positioning children. --> <attr name="rowCount" format="integer" /> - <!-- The maxmimum number of columns to create when automatically positioning children. --> + <!-- The maximum number of columns to create when automatically positioning children. --> <attr name="columnCount" format="integer" /> <!-- When set to true, tells GridLayout to use default margins when none are specified in a view's layout parameters. 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 75879860b2c5..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> @@ -1870,6 +1864,10 @@ truncate it after committing the transaction. --> <integer name="db_journal_size_limit">524288</integer> + <!-- When opening a database with WAL enabled and if the wal file already exists and larger + than this size in bytes, we'll truncate it. --> + <integer name="db_wal_truncate_size">1048576</integer> + <!-- The database synchronization mode when using the default journal mode. FULL is safest and preserves durability at the cost of extra fsyncs. NORMAL also preserves durability in non-WAL modes and uses checksums to ensure @@ -2750,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.--> @@ -3191,6 +3181,10 @@ <!-- True if home app should be pinned via Pinner Service --> <bool name="config_pinnerHomeApp">false</bool> + <!-- List of files pinned by the Pinner Service with the apex boot image b/119800099 --> + <string-array translatable="false" name="config_apexBootImagePinnerServiceFiles"> + </string-array> + <!-- Number of days preloaded file cache should be preserved on a device before it can be deleted --> <integer name="config_keepPreloadsMinDays">7</integer> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 92fdd1db8ae4..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" /> @@ -2904,6 +2905,7 @@ <java-symbol type="array" name="config_defaultPinnerServiceFiles" /> <java-symbol type="bool" name="config_pinnerCameraApp" /> <java-symbol type="bool" name="config_pinnerHomeApp" /> + <java-symbol type="array" name="config_apexBootImagePinnerServiceFiles" /> <java-symbol type="string" name="config_doubleTouchGestureEnableFile" /> @@ -3418,6 +3420,8 @@ <java-symbol type="string" name="config_misprovisionedDeviceModel" /> <java-symbol type="string" name="config_misprovisionedBrandValue" /> + <java-symbol type="integer" name="db_wal_truncate_size" /> + <!-- For Bluetooth AbsoluteVolume --> <java-symbol type="fraction" name="config_prescaleAbsoluteVolume_index1" /> <java-symbol type="fraction" name="config_prescaleAbsoluteVolume_index2" /> 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/coretests/src/android/content/pm/AndroidTestBaseUpdaterTest.java b/core/tests/coretests/src/android/content/pm/AndroidTestBaseUpdaterTest.java index dce22ce6a6f2..0f78e92c5aea 100644 --- a/core/tests/coretests/src/android/content/pm/AndroidTestBaseUpdaterTest.java +++ b/core/tests/coretests/src/android/content/pm/AndroidTestBaseUpdaterTest.java @@ -35,37 +35,37 @@ public class AndroidTestBaseUpdaterTest extends PackageSharedLibraryUpdaterTest private static final String OTHER_LIBRARY = "other.library"; @Test - public void targeted_at_O() { + public void targeted_at_P() { PackageBuilder before = builder() - .targetSdkVersion(Build.VERSION_CODES.O); + .targetSdkVersion(Build.VERSION_CODES.P); // Should add org.apache.http.legacy. PackageBuilder after = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(ANDROID_TEST_BASE); checkBackwardsCompatibility(before, after); } @Test - public void targeted_at_O_not_empty_usesLibraries() { + public void targeted_at_P_not_empty_usesLibraries() { PackageBuilder before = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(OTHER_LIBRARY); // The org.apache.http.legacy jar should be added at the start of the list because it // is not on the bootclasspath and the package targets pre-P. PackageBuilder after = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(ANDROID_TEST_BASE, OTHER_LIBRARY); checkBackwardsCompatibility(before, after); } @Test - public void targeted_at_O_in_usesLibraries() { + public void targeted_at_P_in_usesLibraries() { PackageBuilder before = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .requiredLibraries(ANDROID_TEST_BASE); // No change is required because although org.apache.http.legacy has been removed from @@ -74,9 +74,9 @@ public class AndroidTestBaseUpdaterTest extends PackageSharedLibraryUpdaterTest } @Test - public void targeted_at_O_in_usesOptionalLibraries() { + public void targeted_at_P_in_usesOptionalLibraries() { PackageBuilder before = builder() - .targetSdkVersion(Build.VERSION_CODES.O) + .targetSdkVersion(Build.VERSION_CODES.P) .optionalLibraries(ANDROID_TEST_BASE); // No change is required because although org.apache.http.legacy has been removed from diff --git a/core/tests/coretests/src/android/database/sqlite/SQLiteCompatibilityWalFlagsTest.java b/core/tests/coretests/src/android/database/sqlite/SQLiteCompatibilityWalFlagsTest.java index 230655de8a00..551a58ed7cb5 100644 --- a/core/tests/coretests/src/android/database/sqlite/SQLiteCompatibilityWalFlagsTest.java +++ b/core/tests/coretests/src/android/database/sqlite/SQLiteCompatibilityWalFlagsTest.java @@ -62,18 +62,24 @@ public class SQLiteCompatibilityWalFlagsTest { assertTrue(SQLiteCompatibilityWalFlags.areFlagsSet()); assertFalse(SQLiteCompatibilityWalFlags.isCompatibilityWalSupported()); assertEquals("OFF", SQLiteCompatibilityWalFlags.getWALSyncMode()); + assertEquals(-1, SQLiteCompatibilityWalFlags.getTruncateSize()); SQLiteCompatibilityWalFlags.init("wal_syncmode=VALUE"); assertTrue(SQLiteCompatibilityWalFlags.areFlagsSet()); assertEquals(SQLiteGlobal.isCompatibilityWalSupported(), SQLiteCompatibilityWalFlags.isCompatibilityWalSupported()); assertEquals("VALUE", SQLiteCompatibilityWalFlags.getWALSyncMode()); + assertEquals(-1, SQLiteCompatibilityWalFlags.getTruncateSize()); SQLiteCompatibilityWalFlags.init("compatibility_wal_supported=true"); assertTrue(SQLiteCompatibilityWalFlags.areFlagsSet()); assertEquals(SQLiteGlobal.getWALSyncMode(), SQLiteCompatibilityWalFlags.getWALSyncMode()); assertTrue(SQLiteCompatibilityWalFlags.isCompatibilityWalSupported()); + assertEquals(-1, SQLiteCompatibilityWalFlags.getTruncateSize()); + + SQLiteCompatibilityWalFlags.init("truncate_size=1024"); + assertEquals(1024, SQLiteCompatibilityWalFlags.getTruncateSize()); SQLiteCompatibilityWalFlags.reset(); SQLiteCompatibilityWalFlags.init("Invalid value"); diff --git a/core/tests/coretests/src/android/net/UriTest.java b/core/tests/coretests/src/android/net/UriTest.java index ea0347d67ad7..f1d5600b9650 100644 --- a/core/tests/coretests/src/android/net/UriTest.java +++ b/core/tests/coretests/src/android/net/UriTest.java @@ -181,8 +181,7 @@ public class UriTest extends TestCase { uri = Uri.parse("http://bob%40lee%3ajr@local%68ost:4%32"); assertEquals("bob@lee:jr", uri.getUserInfo()); - assertEquals("localhost", uri.getHost()); - assertEquals(42, uri.getPort()); + assertEquals("localhost:42", uri.getHost()); uri = Uri.parse("http://localhost"); assertEquals("localhost", uri.getHost()); diff --git a/core/tests/coretests/src/android/os/SetPersistentVrThreadTest.java b/core/tests/coretests/src/android/os/SetPersistentVrThreadTest.java index 920988be2eb3..9e445541ad3a 100644 --- a/core/tests/coretests/src/android/os/SetPersistentVrThreadTest.java +++ b/core/tests/coretests/src/android/os/SetPersistentVrThreadTest.java @@ -24,7 +24,6 @@ import android.os.Process; import android.provider.Settings; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.SmallTest; -import android.util.Log; /** * Tests ActivityManager#setPersistentVrThread and ActivityManager#setVrThread's @@ -76,9 +75,11 @@ public class SetPersistentVrThreadTest extends ActivityInstrumentationTestCase2< } private void setPersistentVrModeEnabled(boolean enable) throws Throwable { - mVrManager.setPersistentVrModeEnabled(enable); - // Allow the system time to send out callbacks for persistent VR mode. - Thread.sleep(200); + if (mVrManager != null) { + mVrManager.setPersistentVrModeEnabled(enable); + // Allow the system time to send out callbacks for persistent VR mode. + Thread.sleep(200); + } } @SmallTest diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java index 94ba172fc676..af03aacc7a8a 100644 --- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java +++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java @@ -67,7 +67,6 @@ public class SettingsBackupTest { Settings.System.LOCKSCREEN_DISABLED, // ? Settings.System.MEDIA_BUTTON_RECEIVER, // candidate for backup? Settings.System.MUTE_STREAMS_AFFECTED, // candidate for backup? - Settings.System.NOTIFICATION_LIGHT_PULSE, // candidate for backup? Settings.System.NOTIFICATION_SOUND_CACHE, // internal cache Settings.System.POINTER_LOCATION, // backup candidate? Settings.System.DEBUG_ENABLE_ENHANCED_CALL_BLOCKING, // used for testing only @@ -567,10 +566,8 @@ public class SettingsBackupTest { Settings.Secure.LAST_SETUP_SHOWN, Settings.Secure.LOCATION_CHANGER, Settings.Secure.LOCATION_MODE, - Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, // Candidate? Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, // Candidate? Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, - Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, // Candidate? Settings.Secure.LOCK_TO_APP_EXIT_LOCKED, Settings.Secure.MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, Settings.Secure.MULTI_PRESS_TIMEOUT, diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java index 4de8155663f5..993378d8a4d0 100644 --- a/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java +++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityCacheTest.java @@ -300,6 +300,26 @@ public class AccessibilityCacheTest { } @Test + public void subTreeChangeEventFromUncachedNode_clearsNodeInCache() { + AccessibilityNodeInfo nodeInfo = getNodeWithA11yAndWindowId(CHILD_VIEW_ID, WINDOW_ID_1); + long id = nodeInfo.getSourceNodeId(); + mAccessibilityCache.add(nodeInfo); + nodeInfo.recycle(); + + AccessibilityEvent event = AccessibilityEvent + .obtain(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + event.setContentChangeTypes(AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE); + event.setSource(getMockViewWithA11yAndWindowIds(PARENT_VIEW_ID, WINDOW_ID_1)); + + mAccessibilityCache.onAccessibilityEvent(event); + AccessibilityNodeInfo shouldBeNull = mAccessibilityCache.getNode(WINDOW_ID_1, id); + if (shouldBeNull != null) { + shouldBeNull.recycle(); + } + assertNull(shouldBeNull); + } + + @Test public void scrollEvent_clearsNodeAndChild() { AccessibilityEvent event = AccessibilityEvent .obtain(AccessibilityEvent.TYPE_VIEW_SCROLLED); 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/keystore/java/android/security/Credentials.java b/keystore/java/android/security/Credentials.java index 072fe7321826..962ce512d949 100644 --- a/keystore/java/android/security/Credentials.java +++ b/keystore/java/android/security/Credentials.java @@ -131,6 +131,7 @@ public class Credentials { * Convert objects to a PEM format which is used for * CA_CERTIFICATE and USER_CERTIFICATE entries. */ + @UnsupportedAppUsage public static byte[] convertToPem(Certificate... objects) throws IOException, CertificateEncodingException { ByteArrayOutputStream bao = new ByteArrayOutputStream(); diff --git a/keystore/java/android/security/IKeyChainService.aidl b/keystore/java/android/security/IKeyChainService.aidl index 0d32075d20d2..b3cdff7eedf7 100644 --- a/keystore/java/android/security/IKeyChainService.aidl +++ b/keystore/java/android/security/IKeyChainService.aidl @@ -27,6 +27,7 @@ import android.security.keystore.ParcelableKeyGenParameterSpec; */ interface IKeyChainService { // APIs used by KeyChain + @UnsupportedAppUsage String requestPrivateKey(String alias); byte[] getCertificate(String alias); byte[] getCaCertificates(String alias); diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java index 030fa60abfd3..6155ae4f52b1 100644 --- a/keystore/java/android/security/KeyChain.java +++ b/keystore/java/android/security/KeyChain.java @@ -36,6 +36,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.security.keystore.AndroidKeyStoreProvider; +import android.security.keystore.KeyPermanentlyInvalidatedException; import android.security.keystore.KeyProperties; import java.io.ByteArrayInputStream; @@ -538,7 +539,7 @@ public final class KeyChain { try { return AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore( KeyStore.getInstance(), keyId, KeyStore.UID_SELF); - } catch (RuntimeException | UnrecoverableKeyException e) { + } catch (RuntimeException | UnrecoverableKeyException | KeyPermanentlyInvalidatedException e) { throw new KeyChainException(e); } } diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java index 25a6cdc4a7f4..6dfe1fd9cda5 100644 --- a/keystore/java/android/security/KeyStore.java +++ b/keystore/java/android/security/KeyStore.java @@ -97,6 +97,9 @@ public class KeyStore { */ public static final int OP_AUTH_NEEDED = 15; + // Used when a user changes their pin, invalidating old auth bound keys. + public static final int KEY_PERMANENTLY_INVALIDATED = 17; + // Used for UID field to indicate the calling UID. public static final int UID_SELF = -1; @@ -219,6 +222,15 @@ public class KeyStore { } public byte[] get(String key, int uid) { + return get(key, uid, false); + } + + @UnsupportedAppUsage + public byte[] get(String key) { + return get(key, UID_SELF); + } + + public byte[] get(String key, int uid, boolean suppressKeyNotFoundWarning) { try { key = key != null ? key : ""; return mBinder.get(key, uid); @@ -226,16 +238,18 @@ public class KeyStore { Log.w(TAG, "Cannot connect to keystore", e); return null; } catch (android.os.ServiceSpecificException e) { - Log.w(TAG, "KeyStore exception", e); + if (!suppressKeyNotFoundWarning || e.errorCode != KEY_NOT_FOUND) { + Log.w(TAG, "KeyStore exception", e); + } return null; } } - @UnsupportedAppUsage - public byte[] get(String key) { - return get(key, UID_SELF); + public byte[] get(String key, boolean suppressKeyNotFoundWarning) { + return get(key, UID_SELF, suppressKeyNotFoundWarning); } + public boolean put(String key, byte[] value, int uid, int flags) { return insert(key, value, uid, flags) == NO_ERROR; } @@ -1188,6 +1202,8 @@ public class KeyStore { return new KeyStoreException(errorCode, "Key blob corrupted"); case OP_AUTH_NEEDED: return new KeyStoreException(errorCode, "Operation requires authorization"); + case KEY_PERMANENTLY_INVALIDATED: + return new KeyStoreException(errorCode, "Key permanently invalidated"); default: return new KeyStoreException(errorCode, String.valueOf(errorCode)); } diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java index d44c894fa573..91aac8367976 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java @@ -526,7 +526,7 @@ public abstract class AndroidKeyStoreKeyPairGeneratorSpi extends KeyPairGenerato + result.getPrivate().getAlgorithm() + " vs " + mJcaKeyAlgorithm); } return result; - } catch (UnrecoverableKeyException e) { + } catch (UnrecoverableKeyException | KeyPermanentlyInvalidatedException e) { throw new ProviderException("Failed to load generated key pair from keystore", e); } } diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java index c7c9ee4a406a..234615d9c81d 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreProvider.java @@ -228,10 +228,16 @@ public class AndroidKeyStoreProvider extends Provider { @NonNull private static KeyCharacteristics getKeyCharacteristics(@NonNull KeyStore keyStore, @NonNull String alias, int uid) - throws UnrecoverableKeyException { + throws UnrecoverableKeyException, KeyPermanentlyInvalidatedException { KeyCharacteristics keyCharacteristics = new KeyCharacteristics(); int errorCode = keyStore.getKeyCharacteristics( alias, null, null, uid, keyCharacteristics); + if (errorCode == KeyStore.KEY_PERMANENTLY_INVALIDATED) { + throw (KeyPermanentlyInvalidatedException) + new KeyPermanentlyInvalidatedException( + "User changed or deleted their auth credentials", + KeyStore.getKeyStoreException(errorCode)); + } if (errorCode != KeyStore.NO_ERROR) { throw (UnrecoverableKeyException) new UnrecoverableKeyException("Failed to obtain information about key") @@ -276,7 +282,7 @@ public class AndroidKeyStoreProvider extends Provider { @NonNull public static AndroidKeyStorePublicKey loadAndroidKeyStorePublicKeyFromKeystore( @NonNull KeyStore keyStore, @NonNull String privateKeyAlias, int uid) - throws UnrecoverableKeyException { + throws UnrecoverableKeyException, KeyPermanentlyInvalidatedException { return loadAndroidKeyStorePublicKeyFromKeystore(keyStore, privateKeyAlias, uid, getKeyCharacteristics(keyStore, privateKeyAlias, uid)); } @@ -297,7 +303,7 @@ public class AndroidKeyStoreProvider extends Provider { @NonNull public static KeyPair loadAndroidKeyStoreKeyPairFromKeystore( @NonNull KeyStore keyStore, @NonNull String privateKeyAlias, int uid) - throws UnrecoverableKeyException { + throws UnrecoverableKeyException, KeyPermanentlyInvalidatedException { return loadAndroidKeyStoreKeyPairFromKeystore(keyStore, privateKeyAlias, uid, getKeyCharacteristics(keyStore, privateKeyAlias, uid)); } @@ -315,7 +321,7 @@ public class AndroidKeyStoreProvider extends Provider { @NonNull public static AndroidKeyStorePrivateKey loadAndroidKeyStorePrivateKeyFromKeystore( @NonNull KeyStore keyStore, @NonNull String privateKeyAlias, int uid) - throws UnrecoverableKeyException { + throws UnrecoverableKeyException, KeyPermanentlyInvalidatedException { return loadAndroidKeyStorePrivateKeyFromKeystore(keyStore, privateKeyAlias, uid, getKeyCharacteristics(keyStore, privateKeyAlias, uid)); } @@ -354,7 +360,7 @@ public class AndroidKeyStoreProvider extends Provider { @NonNull public static AndroidKeyStoreKey loadAndroidKeyStoreKeyFromKeystore( @NonNull KeyStore keyStore, @NonNull String userKeyAlias, int uid) - throws UnrecoverableKeyException { + throws UnrecoverableKeyException, KeyPermanentlyInvalidatedException { KeyCharacteristics keyCharacteristics = getKeyCharacteristics(keyStore, userKeyAlias, uid); Integer keymasterAlgorithm = keyCharacteristics.getEnum(KeymasterDefs.KM_TAG_ALGORITHM); diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java index 4c007cb70ba2..105af6e829f8 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java @@ -24,6 +24,7 @@ import android.security.KeyStoreParameter; import android.security.keymaster.KeyCharacteristics; import android.security.keymaster.KeymasterArguments; import android.security.keymaster.KeymasterDefs; +import android.security.keystore.KeyPermanentlyInvalidatedException; import android.security.keystore.KeyProperties; import android.security.keystore.KeyProtection; import android.security.keystore.SecureKeyImportUnavailableException; @@ -93,13 +94,20 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi { public Key engineGetKey(String alias, char[] password) throws NoSuchAlgorithmException, UnrecoverableKeyException { String userKeyAlias = Credentials.USER_PRIVATE_KEY + alias; + AndroidKeyStoreKey key; if (!mKeyStore.contains(userKeyAlias, mUid)) { // try legacy prefix for backward compatibility userKeyAlias = Credentials.USER_SECRET_KEY + alias; if (!mKeyStore.contains(userKeyAlias, mUid)) return null; } - return AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(mKeyStore, userKeyAlias, - mUid); + try { + key = AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(mKeyStore, + userKeyAlias, + mUid); + } catch (KeyPermanentlyInvalidatedException e) { + throw new UnrecoverableKeyException(e.getMessage()); + } + return key; } @Override diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp index 569de76f294e..c060740dc9a4 100644 --- a/libs/hwui/DeferredLayerUpdater.cpp +++ b/libs/hwui/DeferredLayerUpdater.cpp @@ -133,9 +133,10 @@ void DeferredLayerUpdater::doUpdateTexImage() { bool forceFilter = false; sp<GraphicBuffer> buffer = mSurfaceTexture->getCurrentBuffer(); if (buffer != nullptr) { + mLayer->setBufferSize(buffer->getWidth(), buffer->getHeight()); // force filtration if buffer size != layer size - forceFilter = mWidth != static_cast<int>(buffer->getWidth()) || - mHeight != static_cast<int>(buffer->getHeight()); + forceFilter = mWidth != static_cast<int>(mLayer->getBufferWidth()) || + mHeight != static_cast<int>(mLayer->getBufferHeight()); } #if DEBUG_RENDERER diff --git a/libs/hwui/GlLayer.cpp b/libs/hwui/GlLayer.cpp index 42ae29d76898..8357f8ebde2e 100644 --- a/libs/hwui/GlLayer.cpp +++ b/libs/hwui/GlLayer.cpp @@ -72,5 +72,13 @@ void GlLayer::generateTexture() { } } +SkBlendMode GlLayer::getMode() const { + if (texture.blend || mode != SkBlendMode::kSrcOver) { + return mode; + } else { + return SkBlendMode::kSrc; + } +} + }; // namespace uirenderer }; // namespace android diff --git a/libs/hwui/GlLayer.h b/libs/hwui/GlLayer.h index 28749a0d125c..4cf8f2522ff9 100644 --- a/libs/hwui/GlLayer.h +++ b/libs/hwui/GlLayer.h @@ -66,6 +66,8 @@ public: */ void onGlContextLost(); + SkBlendMode getMode() const override; + private: Caches& caches; diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp index fb8f0337c95e..b86ae121af55 100644 --- a/libs/hwui/Layer.cpp +++ b/libs/hwui/Layer.cpp @@ -27,10 +27,10 @@ Layer::Layer(RenderState& renderState, Api api, sk_sp<SkColorFilter> colorFilter SkBlendMode mode) : GpuMemoryTracker(GpuObjectType::Layer) , mRenderState(renderState) + , mode(mode) , mApi(api) , mColorFilter(colorFilter) - , alpha(alpha) - , mode(mode) { + , alpha(alpha) { // TODO: This is a violation of Android's typical ref counting, but it // preserves the old inc/dec ref locations. This should be changed... incStrong(nullptr); diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h index 89bcddcc96d0..d41c9703e908 100644 --- a/libs/hwui/Layer.h +++ b/libs/hwui/Layer.h @@ -72,7 +72,7 @@ public: inline int getAlpha() const { return alpha; } - inline SkBlendMode getMode() const { return mode; } + virtual SkBlendMode getMode() const { return mode; } inline SkColorFilter* getColorFilter() const { return mColorFilter.get(); } @@ -94,12 +94,26 @@ public: */ void postDecStrong(); + inline void setBufferSize(uint32_t width, uint32_t height) { + mBufferWidth = width; + mBufferHeight = height; + } + + inline uint32_t getBufferWidth() const { return mBufferWidth; } + + inline uint32_t getBufferHeight() const { return mBufferHeight; } + protected: Layer(RenderState& renderState, Api api, sk_sp<SkColorFilter>, int alpha, SkBlendMode mode); RenderState& mRenderState; + /** + * Blending mode of the layer. + */ + SkBlendMode mode; + private: void buildColorSpaceWithFilter(); @@ -131,11 +145,6 @@ private: int alpha; /** - * Blending mode of the layer. - */ - SkBlendMode mode; - - /** * Optional texture coordinates transform. */ mat4 texTransform; @@ -145,6 +154,9 @@ private: */ mat4 transform; + uint32_t mBufferWidth = 0; + + uint32_t mBufferHeight = 0; }; // struct Layer }; // namespace uirenderer diff --git a/libs/hwui/pipeline/skia/LayerDrawable.cpp b/libs/hwui/pipeline/skia/LayerDrawable.cpp index 6e7511da07ff..ab1d5c2546ed 100644 --- a/libs/hwui/pipeline/skia/LayerDrawable.cpp +++ b/libs/hwui/pipeline/skia/LayerDrawable.cpp @@ -46,6 +46,11 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer sk_sp<SkImage> layerImage; const int layerWidth = layer->getWidth(); const int layerHeight = layer->getHeight(); + const int bufferWidth = layer->getBufferWidth(); + const int bufferHeight = layer->getBufferHeight(); + if (bufferWidth <= 0 || bufferHeight <=0) { + return false; + } if (layer->getApi() == Layer::Api::OpenGL) { GlLayer* glLayer = static_cast<GlLayer*>(layer); GrGLTextureInfo externalTexture; @@ -57,7 +62,7 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer // this is anticipated to have is that for some format types if we are not bound as an OES // texture we may get invalid results for SKP capture if we read back the texture. externalTexture.fFormat = GL_RGBA8; - GrBackendTexture backendTexture(layerWidth, layerHeight, GrMipMapped::kNo, externalTexture); + GrBackendTexture backendTexture(bufferWidth, bufferHeight, GrMipMapped::kNo, externalTexture); layerImage = SkImage::MakeFromTexture(context, backendTexture, kTopLeft_GrSurfaceOrigin, kPremul_SkAlphaType, nullptr); } else { @@ -76,7 +81,7 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer flipV.setAll(1, 0, 0, 0, -1, 1, 0, 0, 1); textureMatrixInv.preConcat(flipV); textureMatrixInv.preScale(1.0f / layerWidth, 1.0f / layerHeight); - textureMatrixInv.postScale(layerWidth, layerHeight); + textureMatrixInv.postScale(bufferWidth, bufferHeight); SkMatrix textureMatrix; if (!textureMatrixInv.invert(&textureMatrix)) { textureMatrix = textureMatrixInv; @@ -101,6 +106,7 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer canvas->save(); canvas->concat(matrix); } + const SkMatrix& totalMatrix = canvas->getTotalMatrix(); if (dstRect) { SkMatrix matrixInv; if (!matrix.invert(&matrixInv)) { @@ -110,9 +116,28 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer matrixInv.mapRect(&srcRect); SkRect skiaDestRect = *dstRect; matrixInv.mapRect(&skiaDestRect); + // If (matrix is identity or an integer translation) and (src/dst buffers size match), + // then use nearest neighbor, otherwise use bilerp sampling. + // Integer translation is defined as when src rect and dst rect align fractionally. + // Skia TextureOp has the above logic build-in, but not NonAAFillRectOp. TextureOp works + // only for SrcOver blending and without color filter (readback uses Src blending). + bool isIntegerTranslate = totalMatrix.isTranslate() + && SkScalarFraction(skiaDestRect.fLeft + totalMatrix[SkMatrix::kMTransX]) + == SkScalarFraction(srcRect.fLeft) + && SkScalarFraction(skiaDestRect.fTop + totalMatrix[SkMatrix::kMTransY]) + == SkScalarFraction(srcRect.fTop); + if (layer->getForceFilter() || !isIntegerTranslate) { + paint.setFilterQuality(kLow_SkFilterQuality); + } canvas->drawImageRect(layerImage.get(), srcRect, skiaDestRect, &paint, SkCanvas::kFast_SrcRectConstraint); } else { + bool isIntegerTranslate = totalMatrix.isTranslate() + && SkScalarIsInt(totalMatrix[SkMatrix::kMTransX]) + && SkScalarIsInt(totalMatrix[SkMatrix::kMTransY]); + if (layer->getForceFilter() || !isIntegerTranslate) { + paint.setFilterQuality(kLow_SkFilterQuality); + } canvas->drawImage(layerImage.get(), 0, 0, &paint); } // restore the original matrix diff --git a/location/java/android/location/Address.java b/location/java/android/location/Address.java index 335ad5ebcde5..83f05c263f85 100644 --- a/location/java/android/location/Address.java +++ b/location/java/android/location/Address.java @@ -363,7 +363,7 @@ public class Address implements Parcelable { * or null if it is unknown. * * @throws IllegalStateException if this Address has not been assigned - * a latitude. + * a phone number. */ public String getPhone() { return mPhone; diff --git a/location/java/android/location/Criteria.java b/location/java/android/location/Criteria.java index a6099be60875..74eb4450d42c 100644 --- a/location/java/android/location/Criteria.java +++ b/location/java/android/location/Criteria.java @@ -21,9 +21,9 @@ import android.os.Parcelable; /** * A class indicating the application criteria for selecting a - * location provider. Providers maybe ordered according to accuracy, - * power usage, ability to report altitude, speed, - * and bearing, and monetary cost. + * location provider. Providers may be ordered according to accuracy, + * power usage, ability to report altitude, speed, bearing, and monetary + * cost. */ public class Criteria implements Parcelable { /** diff --git a/location/java/android/location/IGeocodeProvider.aidl b/location/java/android/location/IGeocodeProvider.aidl index aaa70c74778a..7eaf7b84c83a 100644 --- a/location/java/android/location/IGeocodeProvider.aidl +++ b/location/java/android/location/IGeocodeProvider.aidl @@ -26,9 +26,11 @@ import android.location.GeocoderParams; */ interface IGeocodeProvider { + @UnsupportedAppUsage String getFromLocation(double latitude, double longitude, int maxResults, in GeocoderParams params, out List<Address> addrs); + @UnsupportedAppUsage String getFromLocationName(String locationName, double lowerLeftLatitude, double lowerLeftLongitude, double upperRightLatitude, double upperRightLongitude, int maxResults, diff --git a/location/java/android/location/IGeofenceProvider.aidl b/location/java/android/location/IGeofenceProvider.aidl index d4ff0dd70bf2..426ebef86b96 100644 --- a/location/java/android/location/IGeofenceProvider.aidl +++ b/location/java/android/location/IGeofenceProvider.aidl @@ -24,5 +24,6 @@ import android.hardware.location.IGeofenceHardware; * {@hide} */ oneway interface IGeofenceProvider { + @UnsupportedAppUsage void setGeofenceHardware(in IGeofenceHardware proxy); } diff --git a/location/java/android/location/ILocationListener.aidl b/location/java/android/location/ILocationListener.aidl index 7627cf6920c1..e40b408e54e7 100644 --- a/location/java/android/location/ILocationListener.aidl +++ b/location/java/android/location/ILocationListener.aidl @@ -25,8 +25,12 @@ import android.os.Bundle; */ oneway interface ILocationListener { + @UnsupportedAppUsage void onLocationChanged(in Location location); + @UnsupportedAppUsage void onStatusChanged(String provider, int status, in Bundle extras); + @UnsupportedAppUsage void onProviderEnabled(String provider); + @UnsupportedAppUsage void onProviderDisabled(String provider); } diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl index 1276881704cf..0ba170056ca5 100644 --- a/location/java/android/location/ILocationManager.aidl +++ b/location/java/android/location/ILocationManager.aidl @@ -82,11 +82,13 @@ interface ILocationManager boolean injectLocation(in Location location); // --- deprecated --- + @UnsupportedAppUsage List<String> getAllProviders(); List<String> getProviders(in Criteria criteria, boolean enabledOnly); String getBestProvider(in Criteria criteria, boolean enabledOnly); boolean providerMeetsCriteria(String provider, in Criteria criteria); ProviderProperties getProviderProperties(String provider); + @UnsupportedAppUsage String getNetworkProviderPackage(); boolean isProviderEnabledForUser(String provider, int userId); @@ -110,6 +112,7 @@ interface ILocationManager // Used by location providers to tell the location manager when it has a new location. // Passive is true if the location is coming from the passive provider, in which case // it need not be shared with other providers. + @UnsupportedAppUsage void reportLocation(in Location location, boolean passive); // Used when a (initially Gnss) Location batch arrives diff --git a/location/java/android/location/INetInitiatedListener.aidl b/location/java/android/location/INetInitiatedListener.aidl index fc64dd67c116..a9e9136d3317 100644 --- a/location/java/android/location/INetInitiatedListener.aidl +++ b/location/java/android/location/INetInitiatedListener.aidl @@ -22,5 +22,6 @@ package android.location; */ interface INetInitiatedListener { + @UnsupportedAppUsage boolean sendNiResponse(int notifId, int userResponse); } 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/AudioManager.java b/media/java/android/media/AudioManager.java index aec45204ef08..4d9881e97b2b 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -4610,7 +4610,7 @@ public class AudioManager { /** * The message sent to apps when the contents of the device list changes if they provide - * a {#link Handler} object to addOnAudioDeviceConnectionListener(). + * a {@link Handler} object to addOnAudioDeviceConnectionListener(). */ private final static int MSG_DEVICES_CALLBACK_REGISTERED = 0; private final static int MSG_DEVICES_DEVICES_ADDED = 1; diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java index 452ba0f2e8ec..2a575b626a44 100644 --- a/media/java/android/media/AudioRecord.java +++ b/media/java/android/media/AudioRecord.java @@ -473,7 +473,7 @@ public class AudioRecord implements AudioRouting * .setSampleRate(32000) * .setChannelMask(AudioFormat.CHANNEL_IN_MONO) * .build()) - * .setBufferSize(2*minBuffSize) + * .setBufferSizeInBytes(2*minBuffSize) * .build(); * </pre> * <p> diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java index 1268c6f699be..7b7cc7797532 100644 --- a/media/java/android/media/AudioTrack.java +++ b/media/java/android/media/AudioTrack.java @@ -1656,7 +1656,7 @@ public class AudioTrack extends PlayerBase * @param timestamp a reference to a non-null AudioTimestamp instance allocated * and owned by caller. * @return true if a timestamp is available, or false if no timestamp is available. - * If a timestamp if available, + * If a timestamp is available, * the AudioTimestamp instance is filled in with a position in frame units, together * with the estimated time when that frame was presented or is committed to * be presented. diff --git a/media/java/android/media/IAudioFocusDispatcher.aidl b/media/java/android/media/IAudioFocusDispatcher.aidl index 3b33c5b7a46a..e3512fa58a7d 100644 --- a/media/java/android/media/IAudioFocusDispatcher.aidl +++ b/media/java/android/media/IAudioFocusDispatcher.aidl @@ -23,6 +23,7 @@ package android.media; */ oneway interface IAudioFocusDispatcher { + @UnsupportedAppUsage void dispatchAudioFocusChange(int focusChange, String clientId); void dispatchFocusResultFromExtPolicy(int requestResult, String clientId); diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index abd64119de61..1a44a83c3dd5 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -63,6 +63,7 @@ interface IAudioService { void adjustStreamVolume(int streamType, int direction, int flags, String callingPackage); + @UnsupportedAppUsage void setStreamVolume(int streamType, int index, int flags, String callingPackage); boolean isStreamMute(int streamType); @@ -73,10 +74,12 @@ interface IAudioService { void setMasterMute(boolean mute, int flags, String callingPackage, int userId); + @UnsupportedAppUsage int getStreamVolume(int streamType); int getStreamMinVolume(int streamType); + @UnsupportedAppUsage int getStreamMaxVolume(int streamType); int getLastAudibleStreamVolume(int streamType); @@ -155,6 +158,7 @@ interface IAudioService { void handleBluetoothA2dpDeviceConfigChange(in BluetoothDevice device); + @UnsupportedAppUsage AudioRoutesInfo startWatchingRoutes(in IAudioRoutesObserver observer); boolean isCameraSoundForced(); diff --git a/media/java/android/media/IMediaScannerService.aidl b/media/java/android/media/IMediaScannerService.aidl index c5316461ef1f..24b5595510f6 100644 --- a/media/java/android/media/IMediaScannerService.aidl +++ b/media/java/android/media/IMediaScannerService.aidl @@ -31,6 +31,7 @@ interface IMediaScannerService * @param listener an optional IMediaScannerListener. * If specified, the caller will be notified when scanning is complete via the listener. */ + @UnsupportedAppUsage void requestScanFile(String path, String mimeType, in IMediaScannerListener listener); /** @@ -40,5 +41,6 @@ interface IMediaScannerService * @param mimeType an optional mimeType for the file. * If mimeType is null, then the mimeType will be inferred from the file extension. */ + @UnsupportedAppUsage void scanFile(String path, String mimeType); } diff --git a/media/java/android/media/IRemoteDisplayCallback.aidl b/media/java/android/media/IRemoteDisplayCallback.aidl index 19cf070aa08e..584417d65121 100644 --- a/media/java/android/media/IRemoteDisplayCallback.aidl +++ b/media/java/android/media/IRemoteDisplayCallback.aidl @@ -22,5 +22,6 @@ import android.media.RemoteDisplayState; * {@hide} */ oneway interface IRemoteDisplayCallback { + @UnsupportedAppUsage void onStateChanged(in RemoteDisplayState state); } 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/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index ed4da22f69e7..18d36eb1f753 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -227,7 +227,7 @@ import java.util.Vector; * transfers the object to the <em>Prepared</em> state once the method call * returns, or a call to {@link #prepareAsync()} (asynchronous) which * first transfers the object to the <em>Preparing</em> state after the - * call returns (which occurs almost right way) while the internal + * call returns (which occurs almost right away) while the internal * player engine continues working on the rest of preparation work * until the preparation work completes. When the preparation completes or when {@link #prepare()} call returns, * the internal player engine then calls a user supplied callback method, @@ -336,7 +336,7 @@ import java.util.Vector; * * <table border="0" cellspacing="0" cellpadding="0"> * <tr><td>Method Name </p></td> - * <td>Valid Sates </p></td> + * <td>Valid States </p></td> * <td>Invalid States </p></td> * <td>Comments </p></td></tr> * <tr><td>attachAuxEffect </p></td> diff --git a/media/java/android/media/MediaPlayer2Impl.java b/media/java/android/media/MediaPlayer2Impl.java index 56423fda0404..828c673944cc 100644 --- a/media/java/android/media/MediaPlayer2Impl.java +++ b/media/java/android/media/MediaPlayer2Impl.java @@ -4781,7 +4781,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { private void sendCompleteNotification(int status) { // In {@link #notifyWhenCommandLabelReached} case, a separate callback - // {#link #onCommandLabelReached} is already called in {@code process()}. + // {@link #onCommandLabelReached} is already called in {@code process()}. if (mMediaCallType == CALL_COMPLETED_NOTIFY_WHEN_COMMAND_LABEL_REACHED) { return; } diff --git a/media/java/android/media/projection/IMediaProjectionManager.aidl b/media/java/android/media/projection/IMediaProjectionManager.aidl index 7e10c51fc5cd..d190fcec6c8c 100644 --- a/media/java/android/media/projection/IMediaProjectionManager.aidl +++ b/media/java/android/media/projection/IMediaProjectionManager.aidl @@ -24,6 +24,7 @@ import android.os.IBinder; /** {@hide} */ interface IMediaProjectionManager { + @UnsupportedAppUsage boolean hasProjectionPermission(int uid, String packageName); IMediaProjection createProjection(int uid, String packageName, int type, boolean permanentGrant); diff --git a/media/java/android/media/projection/MediaProjectionManager.java b/media/java/android/media/projection/MediaProjectionManager.java index aa0d0cc090bc..900e3bb62fcf 100644 --- a/media/java/android/media/projection/MediaProjectionManager.java +++ b/media/java/android/media/projection/MediaProjectionManager.java @@ -66,7 +66,7 @@ public final class MediaProjectionManager { } /** - * Returns an Intent that <b>must</b> passed to startActivityForResult() + * Returns an Intent that <b>must</b> be passed to startActivityForResult() * in order to start screen capture. The activity will prompt * the user whether to allow screen capture. The result of this * activity should be passed to getMediaProjection. 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/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureSource.java b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureSource.java index 6595baa594d2..7919723b80a8 100644 --- a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureSource.java +++ b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureSource.java @@ -38,7 +38,7 @@ import android.util.Log; * <p>To use, connect up the sourceListener callback, and then when executing * the graph, use the SurfaceTexture object passed to the callback to feed * frames into the filter graph. For example, pass the SurfaceTexture into - * {#link + * {@link * android.hardware.Camera.setPreviewTexture(android.graphics.SurfaceTexture)}. * This filter is intended for applications that need for flexibility than the * CameraSource and MediaSource provide. Note that the application needs to diff --git a/native/android/OWNERS b/native/android/OWNERS index b3f50aab7503..266764a6f607 100644 --- a/native/android/OWNERS +++ b/native/android/OWNERS @@ -1,4 +1,4 @@ set noparent -per-file libandroid_net.map.txt, net.c = codewiz@google.com, ek@google.com, jchalard@google.com +per-file libandroid_net.map.txt, net.c = codewiz@google.com, jchalard@google.com, junyulai@google.com per-file libandroid_net.map.txt, net.c = lorenzo@google.com, reminv@google.com, satk@google.com diff --git a/packages/BackupRestoreConfirmation/Android.bp b/packages/BackupRestoreConfirmation/Android.bp new file mode 100644 index 000000000000..b0222da9405b --- /dev/null +++ b/packages/BackupRestoreConfirmation/Android.bp @@ -0,0 +1,23 @@ +// +// Copyright (C) 2011 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_app { + name: "BackupRestoreConfirmation", + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + privileged: true, +} diff --git a/packages/BackupRestoreConfirmation/Android.mk b/packages/BackupRestoreConfirmation/Android.mk deleted file mode 100644 index 532d272f70f3..000000000000 --- a/packages/BackupRestoreConfirmation/Android.mk +++ /dev/null @@ -1,33 +0,0 @@ -# -# Copyright (C) 2011 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := BackupRestoreConfirmation -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRIVILEGED_MODULE := true - -include $(BUILD_PACKAGE) - -######################## -include $(call all-makefiles-under,$(LOCAL_PATH)) - diff --git a/packages/BackupRestoreConfirmation/res/values-mr/strings.xml b/packages/BackupRestoreConfirmation/res/values-mr/strings.xml index 4be28db10c3a..b3541717c96e 100644 --- a/packages/BackupRestoreConfirmation/res/values-mr/strings.xml +++ b/packages/BackupRestoreConfirmation/res/values-mr/strings.xml @@ -24,10 +24,10 @@ <string name="restore_confirm_text" msgid="7499866728030461776">"कनेक्ट केलेल्या डेस्कटॉप काँप्युटरवरील सर्व डेटाच्या पूर्ण पुनर्संचयनाची विनंती केली गेली आहे. तुम्ही असे होण्यासाठी अनुमती देऊ इच्छिता?\n\nतुम्ही स्वत: पुनर्संचयनाची विनंती केली नसल्यास, कार्य पुढे सुरु राहण्यास अनुमती देऊ नका. हे आपल्या डिव्हाइसवरील कोणत्याही वर्तमान डेटास पुनर्स्थित करेल!"</string> <string name="allow_restore_button_label" msgid="3081286752277127827">"माझा डेटा पुनर्संचयित करा"</string> <string name="deny_restore_button_label" msgid="1724367334453104378">"पुनर्संचयित करू नका"</string> - <string name="current_password_text" msgid="8268189555578298067">"कृपया आपला वर्तमान बॅकअप संकेतशब्द खाली प्रविष्ट करा:"</string> + <string name="current_password_text" msgid="8268189555578298067">"कृपया तुमचा वर्तमान बॅकअप संकेतशब्द खाली प्रविष्ट करा:"</string> <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया तुमचे डिव्हाइस एंक्रिप्शन पासवर्ड खाली एंटर करा."</string> <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया तुमचे डिव्हाइस एंक्रिप्शन पासवर्ड खाली एंटर करा. हा बॅकअप संग्रह एंक्रिप्ट करण्यासाठी देखील वापरला जाईल."</string> - <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया पूर्ण बॅकअप डेटा एंक्रिप्ट करण्यासाठी वापरण्याकरिता पासवर्ड एंटर करा. हे रिक्त सोडल्यास, आपला वर्तमान बॅकअप पासवर्ड वापरला जाईल:"</string> + <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया पूर्ण बॅकअप डेटा एंक्रिप्ट करण्यासाठी वापरण्याकरिता पासवर्ड एंटर करा. हे रिक्त सोडल्यास, तुमचा वर्तमान बॅकअप पासवर्ड वापरला जाईल:"</string> <string name="backup_enc_password_optional" msgid="1350137345907579306">"तुम्ही पूर्ण बॅकअप डेटा एंक्रिप्ट करू इच्छित असल्यास, खालील पासवर्ड एंटर करा:"</string> <string name="backup_enc_password_required" msgid="7889652203371654149">"तुमचे डिव्हाइस एंक्रिप्ट केले असल्यामुळे, तुम्हाला तुमचा बॅक अप एंक्रिप्ट करणे आवश्यक आहे. कृपया खाली एक पासवर्ड एंटर करा:"</string> <string name="restore_enc_password_text" msgid="6140898525580710823">"पुनर्स्टोअर केलेला डेटा एंक्रिप्ट केला असल्यास, कृपया पासवर्ड खाली एंटर करा:"</string> 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/CaptivePortalLogin/OWNERS b/packages/CaptivePortalLogin/OWNERS index 7311eee32a4c..d3836d4c6c57 100644 --- a/packages/CaptivePortalLogin/OWNERS +++ b/packages/CaptivePortalLogin/OWNERS @@ -1,8 +1,8 @@ set noparent codewiz@google.com -ek@google.com jchalard@google.com +junyulai@google.com lorenzo@google.com reminv@google.com satk@google.com diff --git a/packages/CarrierDefaultApp/Android.bp b/packages/CarrierDefaultApp/Android.bp new file mode 100644 index 000000000000..c1b0b2da2cb5 --- /dev/null +++ b/packages/CarrierDefaultApp/Android.bp @@ -0,0 +1,6 @@ +android_app { + name: "CarrierDefaultApp", + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", +} diff --git a/packages/CarrierDefaultApp/Android.mk b/packages/CarrierDefaultApp/Android.mk deleted file mode 100644 index df88afdcf041..000000000000 --- a/packages/CarrierDefaultApp/Android.mk +++ /dev/null @@ -1,15 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := CarrierDefaultApp -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) - -# This finds and builds the test apk as well, so a single make does both. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/packages/CarrierDefaultApp/res/values-mr/strings.xml b/packages/CarrierDefaultApp/res/values-mr/strings.xml index e1442c2ca48e..79cc4aa03cfc 100644 --- a/packages/CarrierDefaultApp/res/values-mr/strings.xml +++ b/packages/CarrierDefaultApp/res/values-mr/strings.xml @@ -4,7 +4,7 @@ <string name="app_name" msgid="5247871339820894594">"CarrierDefaultApp"</string> <string name="android_system_label" msgid="2797790869522345065">"मोबाइल वाहक"</string> <string name="portal_notification_id" msgid="5155057562457079297">"मोबाइल डेटा संपला आहे"</string> - <string name="no_data_notification_id" msgid="668400731803969521">"आपला मोबाइल डेटा निष्क्रिय केला गेला"</string> + <string name="no_data_notification_id" msgid="668400731803969521">"तुमचा मोबाइल डेटा निष्क्रिय केला गेला"</string> <string name="portal_notification_detail" msgid="2295729385924660881">"%s वेबसाइटला भेट देण्यासाठी टॅप करा"</string> <string name="no_data_notification_detail" msgid="3112125343857014825">"कृपया आपल्या %s सेवा प्रदात्याशी संपर्क साधा"</string> <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"मोबाइल डेटा कनेक्शन नाही"</string> diff --git a/packages/CarrierDefaultApp/tests/Android.mk b/packages/CarrierDefaultApp/tests/Android.mk deleted file mode 100644 index 6ebb57586ff6..000000000000 --- a/packages/CarrierDefaultApp/tests/Android.mk +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 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_CERTIFICATE := platform - -# Include all makefiles in subdirectories -include $(call all-makefiles-under,$(LOCAL_PATH)) - - - - diff --git a/packages/CarrierDefaultApp/tests/unit/Android.bp b/packages/CarrierDefaultApp/tests/unit/Android.bp new file mode 100644 index 000000000000..3d97a2b44823 --- /dev/null +++ b/packages/CarrierDefaultApp/tests/unit/Android.bp @@ -0,0 +1,31 @@ +// Copyright 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: "CarrierDefaultAppUnitTests", + certificate: "platform", + libs: [ + "android.test.runner", + "telephony-common", + "android.test.base", + ], + static_libs: [ + "android-support-test", + "mockito-target-minus-junit4", + ], + // Include all test java files. + srcs: ["src/**/*.java"], + platform_apis: true, + instrumentation_for: "CarrierDefaultApp", +} diff --git a/packages/CarrierDefaultApp/tests/unit/Android.mk b/packages/CarrierDefaultApp/tests/unit/Android.mk deleted file mode 100644 index 8e3785e7bda8..000000000000 --- a/packages/CarrierDefaultApp/tests/unit/Android.mk +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright 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) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests -LOCAL_CERTIFICATE := platform - -LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common android.test.base - -LOCAL_STATIC_JAVA_LIBRARIES := android-support-test mockito-target-minus-junit4 - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := CarrierDefaultAppUnitTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_INSTRUMENTATION_FOR := CarrierDefaultApp - -include $(BUILD_PACKAGE) - diff --git a/packages/CompanionDeviceManager/Android.bp b/packages/CompanionDeviceManager/Android.bp new file mode 100644 index 000000000000..a379bfccbe29 --- /dev/null +++ b/packages/CompanionDeviceManager/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. + +android_app { + name: "CompanionDeviceManager", + srcs: ["src/**/*.java"], + platform_apis: true, +} diff --git a/packages/CompanionDeviceManager/Android.mk b/packages/CompanionDeviceManager/Android.mk deleted file mode 100644 index 7ec6e1146060..000000000000 --- a/packages/CompanionDeviceManager/Android.mk +++ /dev/null @@ -1,28 +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 := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := CompanionDeviceManager -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under, $(LOCAL_PATH)) diff --git a/packages/DefaultContainerService/Android.bp b/packages/DefaultContainerService/Android.bp new file mode 100644 index 000000000000..d4ba6e8980e6 --- /dev/null +++ b/packages/DefaultContainerService/Android.bp @@ -0,0 +1,8 @@ +android_app { + name: "DefaultContainerService", + srcs: ["**/*.java"], + platform_apis: true, + jni_libs: ["libdefcontainer_jni"], + certificate: "platform", + privileged: true, +} diff --git a/packages/DefaultContainerService/Android.mk b/packages/DefaultContainerService/Android.mk deleted file mode 100644 index 10c35c07ccf9..000000000000 --- a/packages/DefaultContainerService/Android.mk +++ /dev/null @@ -1,17 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := DefaultContainerService -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_JNI_SHARED_LIBRARIES := libdefcontainer_jni - -LOCAL_CERTIFICATE := platform - -LOCAL_PRIVILEGED_MODULE := true - -include $(BUILD_PACKAGE) 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/FakeOemFeatures/Android.bp b/packages/FakeOemFeatures/Android.bp new file mode 100644 index 000000000000..b265158220da --- /dev/null +++ b/packages/FakeOemFeatures/Android.bp @@ -0,0 +1,9 @@ +android_app { + name: "FakeOemFeatures", + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + optimize: { + enabled: false, + }, +} diff --git a/packages/FakeOemFeatures/Android.mk b/packages/FakeOemFeatures/Android.mk deleted file mode 100644 index 43de8e5315cc..000000000000 --- a/packages/FakeOemFeatures/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := FakeOemFeatures -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/packages/FusedLocation/Android.bp b/packages/FusedLocation/Android.bp new file mode 100644 index 000000000000..e794f726dba6 --- /dev/null +++ b/packages/FusedLocation/Android.bp @@ -0,0 +1,22 @@ +// Copyright (C) 2012 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_app { + name: "FusedLocation", + srcs: ["**/*.java"], + libs: ["com.android.location.provider"], + platform_apis: true, + certificate: "platform", + privileged: true, +} diff --git a/packages/FusedLocation/Android.mk b/packages/FusedLocation/Android.mk deleted file mode 100644 index d795870251db..000000000000 --- a/packages/FusedLocation/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (C) 2012 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_JAVA_LIBRARIES := com.android.location.provider - -LOCAL_PACKAGE_NAME := FusedLocation -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRIVILEGED_MODULE := true - -include $(BUILD_PACKAGE) 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/OWNERS b/packages/NetworkStack/OWNERS index a395465e5f21..0e1e65df818f 100644 --- a/packages/NetworkStack/OWNERS +++ b/packages/NetworkStack/OWNERS @@ -1,5 +1,6 @@ codewiz@google.com jchalard@google.com +junyulai@google.com lorenzo@google.com reminv@google.com satk@google.com diff --git a/packages/NetworkStack/TEST_MAPPING b/packages/NetworkStack/TEST_MAPPING index 55ba5916b7d8..fe9731fe577e 100644 --- a/packages/NetworkStack/TEST_MAPPING +++ b/packages/NetworkStack/TEST_MAPPING @@ -1,5 +1,5 @@ { - "postsubmit": [ + "presubmit": [ { "name": "NetworkStackTests" } diff --git a/packages/NetworkStack/src/android/net/apf/ApfFilter.java b/packages/NetworkStack/src/android/net/apf/ApfFilter.java index 923f162c92a6..3dd90eeff767 100644 --- a/packages/NetworkStack/src/android/net/apf/ApfFilter.java +++ b/packages/NetworkStack/src/android/net/apf/ApfFilter.java @@ -475,7 +475,7 @@ public class ApfFilter { socket = Os.socket(AF_PACKET, SOCK_RAW, ETH_P_IPV6); SocketAddress addr = makePacketSocketAddress( (short) ETH_P_IPV6, mInterfaceParams.index); - SocketUtils.bindSocket(socket, addr); + Os.bind(socket, addr); SocketUtils.attachRaFilter(socket, mApfCapabilities.apfPacketFormat); } catch(SocketException|ErrnoException e) { Log.e(TAG, "Error starting filter", e); diff --git a/packages/NetworkStack/src/android/net/dhcp/DhcpClient.java b/packages/NetworkStack/src/android/net/dhcp/DhcpClient.java index b0e8da9a7fb7..0b7809e9f614 100644 --- a/packages/NetworkStack/src/android/net/dhcp/DhcpClient.java +++ b/packages/NetworkStack/src/android/net/dhcp/DhcpClient.java @@ -317,7 +317,7 @@ public class DhcpClient extends StateMachine { try { mPacketSock = Os.socket(AF_PACKET, SOCK_RAW, ETH_P_IP); SocketAddress addr = makePacketSocketAddress((short) ETH_P_IP, mIface.index); - SocketUtils.bindSocket(mPacketSock, addr); + Os.bind(mPacketSock, addr); SocketUtils.attachDhcpFilter(mPacketSock); } catch(SocketException|ErrnoException e) { Log.e(TAG, "Error creating packet socket", e); @@ -412,8 +412,7 @@ public class DhcpClient extends StateMachine { try { if (encap == DhcpPacket.ENCAP_L2) { if (DBG) Log.d(TAG, "Broadcasting " + description); - SocketUtils.sendTo( - mPacketSock, buf.array(), 0, buf.limit(), 0, mInterfaceBroadcastAddr); + Os.sendto(mPacketSock, buf.array(), 0, buf.limit(), 0, mInterfaceBroadcastAddr); } else if (encap == DhcpPacket.ENCAP_BOOTP && to.equals(INADDR_BROADCAST)) { if (DBG) Log.d(TAG, "Broadcasting " + description); // We only send L3-encapped broadcasts in DhcpRebindingState, diff --git a/packages/NetworkStack/src/android/net/ip/ConnectivityPacketTracker.java b/packages/NetworkStack/src/android/net/ip/ConnectivityPacketTracker.java index 649257ae3b5f..de548245447f 100644 --- a/packages/NetworkStack/src/android/net/ip/ConnectivityPacketTracker.java +++ b/packages/NetworkStack/src/android/net/ip/ConnectivityPacketTracker.java @@ -104,8 +104,7 @@ public class ConnectivityPacketTracker { try { s = Os.socket(AF_PACKET, SOCK_RAW | SOCK_NONBLOCK, 0); SocketUtils.attachControlPacketFilter(s, ARPHRD_ETHER); - SocketUtils.bindSocket( - s, makePacketSocketAddress((short) ETH_P_ALL, mInterface.index)); + Os.bind(s, makePacketSocketAddress((short) ETH_P_ALL, mInterface.index)); } catch (ErrnoException | IOException e) { logError("Failed to create packet tracking socket: ", e); closeFd(s); diff --git a/packages/NetworkStack/src/android/net/ip/IpNeighborMonitor.java b/packages/NetworkStack/src/android/net/ip/IpNeighborMonitor.java index b29d61793a61..6ae9a2b7f19b 100644 --- a/packages/NetworkStack/src/android/net/ip/IpNeighborMonitor.java +++ b/packages/NetworkStack/src/android/net/ip/IpNeighborMonitor.java @@ -34,7 +34,6 @@ import android.net.netlink.StructNdMsg; import android.net.util.NetworkStackUtils; import android.net.util.PacketReader; import android.net.util.SharedLog; -import android.net.util.SocketUtils; import android.os.Handler; import android.os.SystemClock; import android.system.ErrnoException; @@ -150,7 +149,7 @@ public class IpNeighborMonitor extends PacketReader { try { fd = Os.socket(AF_NETLINK, SOCK_DGRAM | SOCK_NONBLOCK, NETLINK_ROUTE); - SocketUtils.bindSocket(fd, makeNetlinkSocketAddress(0, OsConstants.RTMGRP_NEIGH)); + Os.bind(fd, makeNetlinkSocketAddress(0, OsConstants.RTMGRP_NEIGH)); NetlinkSocket.connectToKernel(fd); if (VDBG) { 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 ec4a47930fad..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). @@ -1318,26 +1396,28 @@ public class NetworkMonitor extends StateMachine { // is needed (i.e. can't browse a 204). This could be the result of an HTTP // proxy server. if (httpResponseCode == 200) { + long contentLength = urlConnection.getContentLengthLong(); if (probeType == ValidationProbeEvent.PROBE_PAC) { validationLog( probeType, url, "PAC fetch 200 response interpreted as 204 response."); httpResponseCode = CaptivePortalProbeResult.SUCCESS_CODE; - } else if (urlConnection.getContentLengthLong() == 0) { - // Consider 200 response with "Content-length=0" to not be a captive portal. - // There's no point in considering this a captive portal as the user cannot - // sign-in to an empty page. Probably the result of a broken transparent proxy. - // See http://b/9972012. - validationLog(probeType, url, - "200 response with Content-length=0 interpreted as 204 response."); - httpResponseCode = CaptivePortalProbeResult.SUCCESS_CODE; - } else if (urlConnection.getContentLengthLong() == -1) { - // When no Content-length (default value == -1), attempt to read a byte from the - // response. Do not use available() as it is unreliable. See http://b/33498325. + } else if (contentLength == -1) { + // When no Content-length (default value == -1), attempt to read a byte + // from the response. Do not use available() as it is unreliable. + // See http://b/33498325. if (urlConnection.getInputStream().read() == -1) { - validationLog( - probeType, url, "Empty 200 response interpreted as 204 response."); - httpResponseCode = CaptivePortalProbeResult.SUCCESS_CODE; + validationLog(probeType, url, + "Empty 200 response interpreted as failed response."); + httpResponseCode = CaptivePortalProbeResult.FAILED_CODE; } + } else if (contentLength <= 4) { + // Consider 200 response with "Content-length <= 4" to not be a captive + // portal. There's no point in considering this a captive portal as the + // user cannot sign-in to an empty page. Probably the result of a broken + // transparent proxy. See http://b/9972012 and http://b/122999481. + validationLog(probeType, url, "200 response with Content-length <= 4" + + " interpreted as failed response."); + httpResponseCode = CaptivePortalProbeResult.FAILED_CODE; } } } catch (IOException e) { @@ -1615,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; @@ -1693,7 +1772,7 @@ public class NetworkMonitor extends StateMachine { } private boolean dataStallEvaluateTypeEnabled(int type) { - return (mDataStallEvaluationType & (1 << type)) != 0; + return (mDataStallEvaluationType & type) != 0; } @VisibleForTesting @@ -1713,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/src/com/android/server/util/PermissionUtil.java b/packages/NetworkStack/src/com/android/server/util/PermissionUtil.java index f6eb900c4910..6fbeeadb7e72 100644 --- a/packages/NetworkStack/src/com/android/server/util/PermissionUtil.java +++ b/packages/NetworkStack/src/com/android/server/util/PermissionUtil.java @@ -33,7 +33,9 @@ public final class PermissionUtil { public static void checkNetworkStackCallingPermission() { // TODO: check that the calling PID is the system server. final int caller = getCallingUid(); - if (caller != Process.SYSTEM_UID && UserHandle.getAppId(caller) != Process.BLUETOOTH_UID) { + if (caller != Process.SYSTEM_UID + && UserHandle.getAppId(caller) != Process.BLUETOOTH_UID + && UserHandle.getAppId(caller) != Process.PHONE_UID) { throw new SecurityException("Invalid caller: " + caller); } } diff --git a/packages/NetworkStack/tests/Android.bp b/packages/NetworkStack/tests/Android.bp index 5c7b514834cb..e64f28481982 100644 --- a/packages/NetworkStack/tests/Android.bp +++ b/packages/NetworkStack/tests/Android.bp @@ -21,8 +21,7 @@ android_test { test_suites: ["device-tests"], resource_dirs: ["res"], static_libs: [ - "android-support-test", - "frameworks-base-testutils", + "androidx.test.rules", "mockito-target-extended-minus-junit4", "NetworkStackLib", "testables", 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..bd488ea4145f 100644 --- a/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java +++ b/packages/NetworkStack/tests/src/android/net/ip/IpClientTest.java @@ -34,6 +34,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.AlarmManager; +import android.content.ContentResolver; import android.content.Context; import android.content.res.Resources; import android.net.ConnectivityManager; @@ -46,13 +47,11 @@ import android.net.RouteInfo; 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; import com.android.server.NetworkObserverRegistry; @@ -93,7 +92,7 @@ public class IpClientTest { @Mock private IIpClientCallbacks mCb; @Mock private AlarmManager mAlarm; @Mock private IpClient.Dependencies mDependencies; - private MockContentResolver mContentResolver; + @Mock private ContentResolver mContentResolver; private NetworkObserver mObserver; private InterfaceParams mIfParams; @@ -108,9 +107,6 @@ public class IpClientTest { when(mDependencies.getNetd(any())).thenReturn(mNetd); when(mResources.getInteger(R.integer.config_networkAvoidBadWifi)) .thenReturn(DEFAULT_AVOIDBADWIFI_CONFIG_VALUE); - - mContentResolver = new MockContentResolver(); - mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); when(mContext.getContentResolver()).thenReturn(mContentResolver); mIfParams = null; 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..34ca6ac2ac20 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(makeEmptyDataStallDetectionStats(), 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(makeEmptyDataStallDetectionStats(), 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( @@ -519,6 +586,10 @@ public class NetworkMonitorTest { } } + private DataStallDetectionStats makeEmptyDataStallDetectionStats() { + return new DataStallDetectionStats.Builder().build(); + } + private void setDataStallEvaluationType(int type) { when(mDependencies.getSetting(any(), eq(Settings.Global.DATA_STALL_EVALUATION_TYPE), anyInt())).thenReturn(type); @@ -594,5 +665,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/PrintSpooler/res/values-b+sr+Latn/strings.xml b/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml index 9c29ff27d5e0..5f0322f1db4e 100644 --- a/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml +++ b/packages/PrintSpooler/res/values-b+sr+Latn/strings.xml @@ -86,7 +86,7 @@ <string name="failed_notification_title_template" msgid="2256217208186530973">"Greška štampača <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Štampač je blokirao <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="cancel" msgid="4373674107267141885">"Otkaži"</string> - <string name="restart" msgid="2472034227037808749">"Ponovo pokreni"</string> + <string name="restart" msgid="2472034227037808749">"Restartuj"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Nema veze sa štampačem"</string> <string name="reason_unknown" msgid="5507940196503246139">"nepoznato"</string> <string name="print_service_security_warning_title" msgid="2160752291246775320">"Želite li da koristite <xliff:g id="SERVICE">%1$s</xliff:g>?"</string> diff --git a/packages/PrintSpooler/res/values-mr/strings.xml b/packages/PrintSpooler/res/values-mr/strings.xml index 5593f66fa789..b055d82eea1d 100644 --- a/packages/PrintSpooler/res/values-mr/strings.xml +++ b/packages/PrintSpooler/res/values-mr/strings.xml @@ -88,7 +88,7 @@ <string name="no_connection_to_printer" msgid="2159246915977282728">"प्रिंटरवर कोणतेही कनेक्शन नाही"</string> <string name="reason_unknown" msgid="5507940196503246139">"अज्ञात"</string> <string name="print_service_security_warning_title" msgid="2160752291246775320">"<xliff:g id="SERVICE">%1$s</xliff:g> वापरायची?"</string> - <string name="print_service_security_warning_summary" msgid="1427434625361692006">"आपला दस्तऐवज प्रिंटरपर्यंत पोहचण्यापूर्वी एक किंवा अधिक सर्व्हरद्वारे जाऊ शकतो."</string> + <string name="print_service_security_warning_summary" msgid="1427434625361692006">"तुमचा दस्तऐवज प्रिंटरपर्यंत पोहचण्यापूर्वी एक किंवा अधिक सर्व्हरद्वारे जाऊ शकतो."</string> <string-array name="color_mode_labels"> <item msgid="7602948745415174937">"कृष्ण धवल"</item> <item msgid="2762241247228983754">"रंग"</item> diff --git a/packages/PrintSpooler/res/values-sr/strings.xml b/packages/PrintSpooler/res/values-sr/strings.xml index cb23c3cc4b81..c2f99d9efef6 100644 --- a/packages/PrintSpooler/res/values-sr/strings.xml +++ b/packages/PrintSpooler/res/values-sr/strings.xml @@ -86,7 +86,7 @@ <string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка штампача <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Штампач је блокирао <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="cancel" msgid="4373674107267141885">"Откажи"</string> - <string name="restart" msgid="2472034227037808749">"Поново покрени"</string> + <string name="restart" msgid="2472034227037808749">"Рестартуј"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Нема везе са штампачем"</string> <string name="reason_unknown" msgid="5507940196503246139">"непознато"</string> <string name="print_service_security_warning_title" msgid="2160752291246775320">"Желите ли да користите <xliff:g id="SERVICE">%1$s</xliff:g>?"</string> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index 6d01891d6206..51a7c22f208e 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -227,11 +227,11 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"اختيار برنامج ترميز LDAC\nلصوت مشغّل البلوتوث: جودة التشغيل"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"البث: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"نظام أسماء النطاقات الخاص"</string> - <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"اختر وضع نظام أسماء النطاقات الخاص"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"تحديد وضع \"نظام أسماء النطاقات الخاص\""</string> <string name="private_dns_mode_off" msgid="8236575187318721684">"غير مفعّل"</string> <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"تلقائي"</string> - <string name="private_dns_mode_provider" msgid="8354935160639360804">"اسم مضيف مزوّد نظام أسماء النطاقات الخاص"</string> - <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"أدخل اسم مضيف مزوّد نظام أسماء النطاقات"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"اسم مضيف مزوّد \"نظام أسماء النطاقات الخاص\""</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"يُرجى إدخال اسم مضيف \"مزوّد نظام أسماء النطاقات\""</string> <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"تعذّر الاتصال"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"عرض خيارات شهادة عرض شاشة لاسلكي"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"زيادة مستوى تسجيل Wi-Fi، وعرض لكل SSID RSSI في منتقي Wi-Fi"</string> @@ -240,7 +240,7 @@ <string name="wifi_unmetered_label" msgid="6124098729457992931">"بدون قياس"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"أحجام ذاكرة التخزين المؤقت للتسجيل"</string> <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"حدد أحجامًا أكبر لكل ذاكرة تخزين مؤقت للتسجيل"</string> - <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"هل تريد محو سعة التخزين الدائمة للمسجِّل؟"</string> + <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"هل تريد محو مساحة التخزين الدائمة للمسجِّل؟"</string> <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"عندما نتوقف عن رصد أي أخطاء باستخدام المسجِّل الدائم مرة أخرى، يتعين علينا محو بيانات المسجِّل الموجودة على جهازك."</string> <string name="select_logpersist_title" msgid="7530031344550073166">"تخزين بيانات المسجِّل باستمرار على الجهاز"</string> <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"تحديد مخازن السجلات المؤقتة المراد تخزينها باستمرار على الجهاز"</string> @@ -373,10 +373,10 @@ <string name="power_remaining_duration_only_enhanced" msgid="4189311599812296592">"يتبقى <xliff:g id="TIME_REMAINING">%1$s</xliff:g> تقريبًا، بناءً على استخدامك"</string> <string name="power_discharging_duration_enhanced" msgid="1992003260664804080">"يتبقى <xliff:g id="TIME_REMAINING">%1$s</xliff:g> تقريبًا، بناءً على استخدامك (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_duration_only_short" msgid="3463575350656389957">"الوقت المتبقي: <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string> - <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"من المفترض أن يستمر شحن البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> حسب استخدامك (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> - <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"من المفترض أن يستمر شحن البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> حسب استخدامك."</string> - <string name="power_discharge_by" msgid="6453537733650125582">"من المفترض أن يستمر شحن البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> - <string name="power_discharge_by_only" msgid="107616694963545745">"من المفترض أن يستمر شحن البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g>."</string> + <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> حسب استخدامك (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> + <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> حسب استخدامك."</string> + <string name="power_discharge_by" msgid="6453537733650125582">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> + <string name="power_discharge_by_only" msgid="107616694963545745">"قد تكفي طاقة البطارية حتى حوالي الساعة <xliff:g id="TIME">%1$s</xliff:g>."</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"يتبقى أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g>."</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"يتبقى أقل من <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"يتبقى أكثر من <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)."</string> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index c108b974b86f..8de47379e039 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -27,7 +27,7 @@ <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP konfiguracija je otkazala"</string> <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"Nije povezano zbog lošeg kvaliteta mreže"</string> <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi veza je otkazala"</string> - <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem sa potvrdom autentičnosti"</string> + <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem sa potvrdom identiteta"</string> <string name="wifi_cant_connect" msgid="5410016875644565884">"Povezivanje nije uspelo"</string> <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"Povezivanje sa „<xliff:g id="AP_NAME">%1$s</xliff:g>“ nije uspelo"</string> <string name="wifi_check_password_try_again" msgid="516958988102584767">"Proverite lozinku i probajte ponovo"</string> @@ -452,5 +452,5 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Trajanje"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Uvek pitaj"</string> - <string name="time_unit_just_now" msgid="6363336622778342422">"Upravo sada"</string> + <string name="time_unit_just_now" msgid="6363336622778342422">"Upravo"</string> </resources> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index 4c516eb13d56..c506ce0d7ad3 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -376,7 +376,7 @@ <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Следва да издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g> въз основа на използването (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Следва да издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g> въз основа на използването"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Следва да издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_discharge_by_only" msgid="107616694963545745">"Следва да издържи приблизително до <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only" msgid="107616694963545745">"Следва да издържи до около <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Остава/т по-малко от <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Остава/т по-малко от <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Остава/т повече от <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index c979ff5db2c9..0c8f48d94d1c 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -70,7 +70,7 @@ <string name="bluetooth_active_no_battery_level" msgid="8380223546730241956">"Actiu"</string> <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Àudio multimèdia"</string> <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Trucades telefòniques"</string> - <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Transferència del fitxer"</string> + <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Transferència de fitxers"</string> <string name="bluetooth_profile_hid" msgid="3680729023366986480">"Dispositiu d\'entrada"</string> <string name="bluetooth_profile_pan" msgid="3391606497945147673">"Accés a Internet"</string> <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"Compartir contactes"</string> @@ -395,7 +395,7 @@ <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"s\'està carregant"</string> <string name="battery_info_status_discharging" msgid="310932812698268588">"No s\'està carregant"</string> <string name="battery_info_status_not_charging" msgid="8523453668342598579">"El dispositiu està endollat però en aquests moments no es pot carregar"</string> - <string name="battery_info_status_full" msgid="2824614753861462808">"Plena"</string> + <string name="battery_info_status_full" msgid="2824614753861462808">"Completa"</string> <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlat per l\'administrador"</string> <string name="enabled_by_admin" msgid="5302986023578399263">"Activada per l\'administrador"</string> <string name="disabled_by_admin" msgid="8505398946020816620">"Desactivada per l\'administrador"</string> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 3b1d7f5e3736..e4485de2177b 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -231,7 +231,7 @@ <string name="private_dns_mode_off" msgid="8236575187318721684">"Aus"</string> <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"Automatisch"</string> <string name="private_dns_mode_provider" msgid="8354935160639360804">"Hostname des privaten DNS-Anbieters"</string> - <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Hostnamen des DNS-Anbieters eingeben"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Hostname des DNS-Anbieters eingeben"</string> <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Verbindung nicht möglich"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Optionen zur Zertifizierung für kabellose Übertragung anzeigen"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Level für WLAN-Protokollierung erhöhen, in WiFi Picker pro SSID-RSSI anzeigen"</string> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index 6b3841d06132..6f2c70617032 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -231,7 +231,7 @@ <string name="private_dns_mode_off" msgid="8236575187318721684">"Ανενεργή"</string> <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"Αυτόματα"</string> <string name="private_dns_mode_provider" msgid="8354935160639360804">"Όνομα κεντρικού υπολογιστή παρόχου DNS"</string> - <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Εισαγάγετε το όνομα κεντρικού υπολογιστή του παρόχου DNS"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Όνομα κεντρικού υπολογιστή του παρόχου DNS"</string> <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Δεν ήταν δυνατή η σύνδεση"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Εμφάνιση επιλογών για πιστοποίηση ασύρματης οθόνης"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Αύξηση επιπέδου καταγ. Wi-Fi, εμφάνιση ανά SSID RSSI στο εργαλείο επιλογής Wi-Fi"</string> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index 283dd2b72607..1c2f60eb1ff1 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -227,7 +227,7 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Déclencher le codec audio Bluetooth LDAC\nSélection : qualité de lecture"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Diffusion : <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS privé"</string> - <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Sélectionnez le mode DNS privé"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Sélectionner le mode DNS privé"</string> <string name="private_dns_mode_off" msgid="8236575187318721684">"Désactivé"</string> <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"Automatique"</string> <string name="private_dns_mode_provider" msgid="8354935160639360804">"Nom d\'hôte du fournisseur DNS privé"</string> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 6b0690e8af05..2eec15aac810 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -70,7 +70,7 @@ <string name="bluetooth_active_no_battery_level" msgid="8380223546730241956">"Actif"</string> <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Multimédia"</string> <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Appels téléphoniques"</string> - <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Transfert de fichier"</string> + <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Transfert de fichiers"</string> <string name="bluetooth_profile_hid" msgid="3680729023366986480">"Périphérique d\'entrée"</string> <string name="bluetooth_profile_pan" msgid="3391606497945147673">"Accès Internet"</string> <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"Partage de contacts"</string> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index 5a0a35f21f86..6ca400a24225 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -318,8 +318,8 @@ <string name="app_process_limit_title" msgid="4280600650253107163">"מגבלה של תהליכים ברקע"</string> <string name="show_all_anrs" msgid="4924885492787069007">"הצגת מקרי ANR ברקע"</string> <string name="show_all_anrs_summary" msgid="6636514318275139826">"הצגת תיבת דו-שיח של \'אפליקציה לא מגיבה\' עבור אפליקציות שפועלות ברקע"</string> - <string name="show_notification_channel_warnings" msgid="1399948193466922683">"אזהרות לגבי ערוץ הודעות"</string> - <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"הצגת אזהרה כשאפליקציה שולחת הודעה ללא ערוץ חוקי"</string> + <string name="show_notification_channel_warnings" msgid="1399948193466922683">"אזהרות לגבי ערוץ התראות"</string> + <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"הצגת אזהרה כשאפליקציה שולחת התראה ללא ערוץ חוקי"</string> <string name="force_allow_on_external" msgid="3215759785081916381">"אילוץ הרשאת אפליקציות באחסון חיצוני"</string> <string name="force_allow_on_external_summary" msgid="3640752408258034689">"מאפשר כתיבה של כל אפליקציה באחסון חיצוני, ללא התחשבות בערכי המניפסט"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"אלץ יכולת קביעת גודל של הפעילויות"</string> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 0ecb80101285..7416eee48f52 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -441,7 +441,7 @@ <string name="cancel" msgid="6859253417269739139">"キャンセル"</string> <string name="okay" msgid="1997666393121016642">"OK"</string> <string name="zen_mode_enable_dialog_turn_on" msgid="8287824809739581837">"ON にする"</string> - <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"マナーモードを ON にする"</string> + <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"サイレント モードを ON にする"</string> <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"なし"</string> <string name="zen_interruption_level_priority" msgid="2078370238113347720">"優先的な通知のみ"</string> <string name="zen_mode_and_condition" msgid="4927230238450354412">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index 548176f9df0f..29012a930f3c 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -227,7 +227,7 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Acionar seleção de codec de áudio\nBluetooth LDAC: qualidade de reprodução"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS particular"</string> - <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecione o modo DNS particular"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecione o modo de DNS particular"</string> <string name="private_dns_mode_off" msgid="8236575187318721684">"Desativado"</string> <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"Automático"</string> <string name="private_dns_mode_provider" msgid="8354935160639360804">"Nome do host do provedor de DNS particular"</string> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index daa259135644..af9edea67c16 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -278,7 +278,7 @@ <string name="media_category" msgid="4388305075496848353">"Multimédia"</string> <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitorização"</string> <string name="strict_mode" msgid="1938795874357830695">"Modo rigoroso ativado"</string> - <string name="strict_mode_summary" msgid="142834318897332338">"Piscar ecrã se aplic. fazem oper. prolong. no tópico princ."</string> + <string name="strict_mode_summary" msgid="142834318897332338">"Piscar ecrã se app fazem oper. prolong. no tópico princ."</string> <string name="pointer_location" msgid="6084434787496938001">"Localização do ponteiro"</string> <string name="pointer_location_summary" msgid="840819275172753713">"Apresentar dados atuais de toque"</string> <string name="show_touches" msgid="2642976305235070316">"Mostrar toques"</string> @@ -307,7 +307,7 @@ <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operações de clipe não retangulares"</string> <string name="track_frame_time" msgid="6146354853663863443">"Conversão GPU do perfil"</string> <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Ativar cam. depuração GPU"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permitir carreg. cam. depuração GPU p/ dep. aplic."</string> + <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Permitir carreg. cam. depuração GPU p/ dep. app"</string> <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de anim. da janela"</string> <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala de anim. de trans."</string> <string name="animator_duration_scale_title" msgid="3406722410819934083">"Esc. de duração do anim."</string> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index 548176f9df0f..29012a930f3c 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -227,7 +227,7 @@ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Acionar seleção de codec de áudio\nBluetooth LDAC: qualidade de reprodução"</string> <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"DNS particular"</string> - <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecione o modo DNS particular"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Selecione o modo de DNS particular"</string> <string name="private_dns_mode_off" msgid="8236575187318721684">"Desativado"</string> <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"Automático"</string> <string name="private_dns_mode_provider" msgid="8354935160639360804">"Nome do host do provedor de DNS particular"</string> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index 9f0a59d4edfe..37d8d472b156 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -443,7 +443,7 @@ <string name="cancel" msgid="6859253417269739139">"Zrušiť"</string> <string name="okay" msgid="1997666393121016642">"OK"</string> <string name="zen_mode_enable_dialog_turn_on" msgid="8287824809739581837">"Zapnúť"</string> - <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"Zapnite režim Nerušiť"</string> + <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"Zapnite režim bez vyrušení"</string> <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"Nikdy"</string> <string name="zen_interruption_level_priority" msgid="2078370238113347720">"Iba prioritné"</string> <string name="zen_mode_and_condition" msgid="4927230238450354412">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 7cfcdd190c6d..196612b46129 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -27,7 +27,7 @@ <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP конфигурација је отказала"</string> <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"Није повезано због лошег квалитета мреже"</string> <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Wi-Fi веза је отказала"</string> - <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем са потврдом аутентичности"</string> + <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем са потврдом идентитета"</string> <string name="wifi_cant_connect" msgid="5410016875644565884">"Повезивање није успело"</string> <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"Повезивање са „<xliff:g id="AP_NAME">%1$s</xliff:g>“ није успело"</string> <string name="wifi_check_password_try_again" msgid="516958988102584767">"Проверите лозинку и пробајте поново"</string> @@ -452,5 +452,5 @@ <string name="alarm_template_far" msgid="3779172822607461675">"<xliff:g id="WHEN">%1$s</xliff:g>"</string> <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Трајање"</string> <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Увек питај"</string> - <string name="time_unit_just_now" msgid="6363336622778342422">"Управо сада"</string> + <string name="time_unit_just_now" msgid="6363336622778342422">"Управо"</string> </resources> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index a6d7c6b3dd9e..9b27910bd70e 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -420,7 +420,7 @@ <string name="help_feedback_label" msgid="6815040660801785649">"Usaidizi na maoni"</string> <string name="content_description_menu_button" msgid="8182594799812351266">"Menyu"</string> <string name="retail_demo_reset_message" msgid="118771671364131297">"Weka nenosiri ili urejeshe mipangilio ya kiwandani ikiwa katika hali ya onyesho."</string> - <string name="retail_demo_reset_next" msgid="8356731459226304963">"Inayofuata"</string> + <string name="retail_demo_reset_next" msgid="8356731459226304963">"Endelea"</string> <string name="retail_demo_reset_title" msgid="696589204029930100">"Nenosiri linahitajika"</string> <string name="active_input_method_subtypes" msgid="3596398805424733238">"Mbinu zinazotumika"</string> <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Tumia lugha za mfumo"</string> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index a6242bf256c9..4038a42bbbde 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -376,7 +376,7 @@ <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Tatagal dapat nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> batay sa iyong paggamit (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Tatagal dapat nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> batay sa iyong paggamit"</string> <string name="power_discharge_by" msgid="6453537733650125582">"Tatagal dapat nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_discharge_by_only" msgid="107616694963545745">"Tatagal dapat nang hanggang humigit-kumulang <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only" msgid="107616694963545745">"Tatagal hanggang mga <xliff:g id="TIME">%1$s</xliff:g>"</string> <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Wala nang <xliff:g id="THRESHOLD">%1$s</xliff:g> ang natitira"</string> <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Wala nang <xliff:g id="THRESHOLD">%1$s</xliff:g> ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"Mahigit <xliff:g id="TIME_REMAINING">%1$s</xliff:g> pa ang natitira (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java index 6cd2f45213e3..cba823c15e62 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -110,10 +110,6 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> mHiSyncId = id; } - public boolean isHearingAidDevice() { - return mHiSyncId != BluetoothHearingAid.HI_SYNC_ID_INVALID; - } - /** * Last time a bt profile auto-connect was attempted. * If an ACTION_UUID intent comes in within @@ -229,6 +225,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> connectWithoutResettingTimer(connectAllProfiles); } + public boolean isHearingAidDevice() { + return mHiSyncId != BluetoothHearingAid.HI_SYNC_ID_INVALID; + } + void onBondingDockConnect() { // Attempt to connect if UUIDs are available. Otherwise, // we will connect when the ACTION_UUID intent arrives. @@ -1194,7 +1194,8 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> * @return {@code true} if {@code cachedBluetoothDevice} is a2dp device */ public boolean isA2dpDevice() { - return mProfileManager.getA2dpProfile().getConnectionStatus(mDevice) == + A2dpProfile a2dpProfile = mProfileManager.getA2dpProfile(); + return a2dpProfile != null && a2dpProfile.getConnectionStatus(mDevice) == BluetoothProfile.STATE_CONNECTED; } @@ -1202,7 +1203,17 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> * @return {@code true} if {@code cachedBluetoothDevice} is HFP device */ public boolean isHfpDevice() { - return mProfileManager.getHeadsetProfile().getConnectionStatus(mDevice) == + HeadsetProfile headsetProfile = mProfileManager.getHeadsetProfile(); + return headsetProfile != null && headsetProfile.getConnectionStatus(mDevice) == + BluetoothProfile.STATE_CONNECTED; + } + + /** + * @return {@code true} if {@code cachedBluetoothDevice} is Hearing Aid device + */ + public boolean isConnectedHearingAidDevice() { + HearingAidProfile hearingAidProfile = mProfileManager.getHearingAidProfile(); + return hearingAidProfile != null && hearingAidProfile.getConnectionStatus(mDevice) == BluetoothProfile.STATE_CONNECTED; } } diff --git a/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java b/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java index e5d97c9b4a7b..3c0f6fe8ccbb 100644 --- a/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java +++ b/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java @@ -256,11 +256,12 @@ public class DreamBackend { } } - public void launchSettings(DreamInfo dreamInfo) { + public void launchSettings(Context uiContext, DreamInfo dreamInfo) { logd("launchSettings(%s)", dreamInfo); - if (dreamInfo == null || dreamInfo.settingsComponentName == null) + if (dreamInfo == null || dreamInfo.settingsComponentName == null) { return; - mContext.startActivity(new Intent().setComponent(dreamInfo.settingsComponentName)); + } + uiContext.startActivity(new Intent().setComponent(dreamInfo.settingsComponentName)); } public void preview(DreamInfo dreamInfo) { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java index 16a292b06234..30da88245913 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java @@ -575,6 +575,45 @@ public class CachedBluetoothDeviceTest { } @Test + public void isConnectedHearingAidDevice_connected_returnTrue() { + when(mProfileManager.getHearingAidProfile()).thenReturn(mHearingAidProfile); + when(mHearingAidProfile.getConnectionStatus(mDevice)). + thenReturn(BluetoothProfile.STATE_CONNECTED); + + assertThat(mCachedDevice.isConnectedHearingAidDevice()).isTrue(); + } + + @Test + public void isConnectedHearingAidDevice_disconnected_returnFalse() { + when(mProfileManager.getHearingAidProfile()).thenReturn(mHearingAidProfile); + when(mHearingAidProfile.getConnectionStatus(mDevice)). + thenReturn(BluetoothProfile.STATE_DISCONNECTED); + + assertThat(mCachedDevice.isConnectedHearingAidDevice()).isFalse(); + } + + @Test + public void isConnectedHfpDevice_profileIsNull_returnFalse() { + when(mProfileManager.getHeadsetProfile()).thenReturn(null); + + assertThat(mCachedDevice.isHfpDevice()).isFalse(); + } + + @Test + public void isConnectedA2dpDevice_profileIsNull_returnFalse() { + when(mProfileManager.getA2dpProfile()).thenReturn(null); + + assertThat(mCachedDevice.isA2dpDevice()).isFalse(); + } + + @Test + public void isConnectedHearingAidDevice_profileIsNull_returnFalse() { + when(mProfileManager.getHearingAidProfile()).thenReturn(null); + + assertThat(mCachedDevice.isConnectedHearingAidDevice()).isFalse(); + } + + @Test public void testIsHearingAidDevice_isHearingAidDevice() { mCachedDevice.setHiSyncId(0x1234); assertThat(mCachedDevice.isHearingAidDevice()).isTrue(); diff --git a/packages/SettingsProvider/Android.bp b/packages/SettingsProvider/Android.bp new file mode 100644 index 000000000000..92954964278c --- /dev/null +++ b/packages/SettingsProvider/Android.bp @@ -0,0 +1,43 @@ +android_app { + name: "SettingsProvider", + resource_dirs: ["res"], + srcs: [ + "src/**/*.java", + "src/com/android/providers/settings/EventLogTags.logtags", + ], + libs: [ + "telephony-common", + "ims-common", + ], + static_libs: ["junit"], + platform_apis: true, + certificate: "platform", + privileged: true, +} + +android_test { + name: "SettingsProviderTest", + // Note we statically link several classes to do some unit tests. It's not accessible otherwise + // because this test is not an instrumentation test. (because the target runs in the system process.) + srcs: [ + "test/**/*.java", + "src/com/android/providers/settings/SettingsState.java", + "src/com/android/providers/settings/SettingsHelper.java", + ], + static_libs: [ + "android-support-test", + "truth-prebuilt", + ], + libs: ["android.test.base"], + resource_dirs: ["res"], + aaptflags: [ + "--auto-add-overlay", + "--extra-packages", + "com.android.providers.settings", + ], + platform_apis: true, + certificate: "platform", + test_suites: ["device-tests"], + manifest: "test/AndroidManifest.xml", + test_config: "test/AndroidTest.xml", +} diff --git a/packages/SettingsProvider/Android.mk b/packages/SettingsProvider/Android.mk deleted file mode 100644 index db57fd162362..000000000000 --- a/packages/SettingsProvider/Android.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) \ - src/com/android/providers/settings/EventLogTags.logtags - -LOCAL_JAVA_LIBRARIES := telephony-common ims-common -LOCAL_STATIC_JAVA_LIBRARIES := junit - -LOCAL_PACKAGE_NAME := SettingsProvider -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRIVILEGED_MODULE := true - -include $(BUILD_PACKAGE) - -######################## -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/packages/SettingsProvider/test/Android.mk b/packages/SettingsProvider/test/Android.mk deleted file mode 100644 index 1ca6afee6daf..000000000000 --- a/packages/SettingsProvider/test/Android.mk +++ /dev/null @@ -1,28 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Note we statically link several classes to do some unit tests. It's not accessible otherwise -# because this test is not an instrumentation test. (because the target runs in the system process.) -LOCAL_SRC_FILES := $(call all-subdir-java-files) \ - ../src/com/android/providers/settings/SettingsState.java \ - ../src/com/android/providers/settings/SettingsHelper.java - -LOCAL_STATIC_JAVA_LIBRARIES := \ - android-support-test \ - truth-prebuilt - -LOCAL_JAVA_LIBRARIES := android.test.base - -LOCAL_PACKAGE_NAME := SettingsProviderTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := tests - -LOCAL_CERTIFICATE := platform - -LOCAL_COMPATIBILITY_SUITE := device-tests - -include $(BUILD_PACKAGE) diff --git a/packages/SharedStorageBackup/Android.bp b/packages/SharedStorageBackup/Android.bp new file mode 100644 index 000000000000..5380832a17d4 --- /dev/null +++ b/packages/SharedStorageBackup/Android.bp @@ -0,0 +1,26 @@ +// +// Copyright (C) 2011 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_app { + name: "SharedStorageBackup", + srcs: ["src/**/*.java"], + optimize: { + proguard_flags_files: ["proguard.flags"], + }, + platform_apis: true, + certificate: "platform", + privileged: true, +} diff --git a/packages/SharedStorageBackup/Android.mk b/packages/SharedStorageBackup/Android.mk deleted file mode 100644 index 2e07ab18d71a..000000000000 --- a/packages/SharedStorageBackup/Android.mk +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright (C) 2011 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PROGUARD_FLAG_FILES := proguard.flags - -LOCAL_PACKAGE_NAME := SharedStorageBackup -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRIVILEGED_MODULE := true - -include $(BUILD_PACKAGE) - -######################## -include $(call all-makefiles-under,$(LOCAL_PATH)) - 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/Shell/res/values-mr/strings.xml b/packages/Shell/res/values-mr/strings.xml index aae84934346b..dc6a6126bc5d 100644 --- a/packages/Shell/res/values-mr/strings.xml +++ b/packages/Shell/res/values-mr/strings.xml @@ -23,12 +23,12 @@ <string name="bugreport_updating_title" msgid="4423539949559634214">"दोष अहवालामध्ये तपशील जोडत आहे"</string> <string name="bugreport_updating_wait" msgid="3322151947853929470">"कृपया प्रतीक्षा करा..."</string> <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"फोनवर बग रीपोर्ट लवकरच दिसेल"</string> - <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"आपला बग रीपोर्ट शेअर करण्यासाठी निवडा"</string> - <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"आपला बग रीपोर्ट शेअर करण्यासाठी टॅप करा"</string> - <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"आपला बग रीपोर्ट स्क्रीनशॉटशिवाय शेअर करण्यासाठी टॅप करा किंवा स्क्रीनशॉट पूर्ण होण्याची प्रतीक्षा करा"</string> - <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"स्क्रीनशॉट शिवाय आपला बग रीपोर्ट शेअर करण्यासाठी टॅप करा किंवा समाप्त करण्यासाठी स्क्रीनशॉटची प्रतीक्षा करा"</string> - <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"स्क्रीनशॉट शिवाय आपला बग रीपोर्ट शेअर करण्यासाठी टॅप करा किंवा समाप्त करण्यासाठी स्क्रीनशॉटची प्रतीक्षा करा"</string> - <string name="bugreport_confirm" msgid="5917407234515812495">"बग रीपोर्टांमध्ये तुम्ही संवेदनशील (अॅप-वापर आणि स्थान डेटा यासारखा) डेटा म्हणून विचार करता त्या डेटाच्या समावेशासह सिस्टीमच्या विविध लॉग फायलींमधील डेटा असतो. ज्या लोकांवर आणि अॅपवर आपला विश्वास आहे केवळ त्यांच्यासह हा बग रीपोर्ट शेअर करा."</string> + <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"तुमचा बग रीपोर्ट शेअर करण्यासाठी निवडा"</string> + <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"तुमचा बग रीपोर्ट शेअर करण्यासाठी टॅप करा"</string> + <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"तुमचा बग रीपोर्ट स्क्रीनशॉटशिवाय शेअर करण्यासाठी टॅप करा किंवा स्क्रीनशॉट पूर्ण होण्याची प्रतीक्षा करा"</string> + <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"स्क्रीनशॉट शिवाय तुमचा बग रीपोर्ट शेअर करण्यासाठी टॅप करा किंवा समाप्त करण्यासाठी स्क्रीनशॉटची प्रतीक्षा करा"</string> + <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"स्क्रीनशॉट शिवाय तुमचा बग रीपोर्ट शेअर करण्यासाठी टॅप करा किंवा समाप्त करण्यासाठी स्क्रीनशॉटची प्रतीक्षा करा"</string> + <string name="bugreport_confirm" msgid="5917407234515812495">"बग रीपोर्टांमध्ये तुम्ही संवेदनशील (अॅप-वापर आणि स्थान डेटा यासारखा) डेटा म्हणून विचार करता त्या डेटाच्या समावेशासह सिस्टीमच्या विविध लॉग फायलींमधील डेटा असतो. ज्या लोकांवर आणि अॅपवर तुमचा विश्वास आहे केवळ त्यांच्यासह हा बग रीपोर्ट शेअर करा."</string> <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"पुन्हा दर्शवू नका"</string> <string name="bugreport_storage_title" msgid="5332488144740527109">"बग रीपोर्ट"</string> <string name="bugreport_unreadable_text" msgid="586517851044535486">"बग रीपोर्ट फाईल वाचणे शक्य झाले नाही"</string> diff --git a/packages/StatementService/Android.bp b/packages/StatementService/Android.bp new file mode 100644 index 000000000000..586292efa20b --- /dev/null +++ b/packages/StatementService/Android.bp @@ -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. +android_app { + name: "StatementService", + srcs: ["src/**/*.java"], + optimize: { + proguard_flags_files: ["proguard.flags"], + }, + platform_apis: true, + privileged: true, + libs: ["org.apache.http.legacy"], + static_libs: [ + "libprotobuf-java-nano", + "volley", + ], +} diff --git a/packages/StatementService/Android.mk b/packages/StatementService/Android.mk deleted file mode 100644 index b9b29e752193..000000000000 --- a/packages/StatementService/Android.mk +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PROGUARD_FLAG_FILES := proguard.flags - -LOCAL_PACKAGE_NAME := StatementService -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_PRIVILEGED_MODULE := true - -LOCAL_JAVA_LIBRARIES += org.apache.http.legacy - -LOCAL_STATIC_JAVA_LIBRARIES := \ - libprotobuf-java-nano \ - volley - -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under,$(LOCAL_PATH)/src) diff --git a/packages/SystemUI/res-keyguard/values/attrs.xml b/packages/SystemUI/res-keyguard/values/attrs.xml index e2ce210efdcb..293b683497f8 100644 --- a/packages/SystemUI/res-keyguard/values/attrs.xml +++ b/packages/SystemUI/res-keyguard/values/attrs.xml @@ -38,9 +38,5 @@ <attr name="android:textColor" format="color" /> </declare-styleable> - <declare-styleable name="CarrierText"> - <attr name="allCaps" format="boolean" /> - </declare-styleable> - <attr name="passwordStyle" format="reference" /> </resources> diff --git a/packages/SystemUI/res/layout/keyguard_status_bar.xml b/packages/SystemUI/res/layout/keyguard_status_bar.xml index 8e491dc4728a..5b9816d91965 100644 --- a/packages/SystemUI/res/layout/keyguard_status_bar.xml +++ b/packages/SystemUI/res/layout/keyguard_status_bar.xml @@ -18,7 +18,7 @@ <!-- Extends RelativeLayout --> <com.android.systemui.statusbar.phone.KeyguardStatusBarView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui" + xmlns:systemui="http://schemas.android.com/apk/res-auto" android:id="@+id/keyguard_header" android:layout_width="match_parent" android:layout_height="@dimen/status_bar_header_height_keyguard" @@ -73,6 +73,8 @@ android:textDirection="locale" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="?attr/wallpaperTextColorSecondary" - android:singleLine="true" /> + android:singleLine="true" + systemui:showMissingSim="true" + systemui:showAirplaneMode="true" /> </com.android.systemui.statusbar.phone.KeyguardStatusBarView> diff --git a/packages/SystemUI/res/layout/qs_detail_buttons.xml b/packages/SystemUI/res/layout/qs_detail_buttons.xml index 03ed62b3e600..75f43f9a5808 100644 --- a/packages/SystemUI/res/layout/qs_detail_buttons.xml +++ b/packages/SystemUI/res/layout/qs_detail_buttons.xml @@ -26,6 +26,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="8dp" + android:minHeight="48dp" android:minWidth="132dp" android:textAppearance="@style/TextAppearance.QS.DetailButton" android:focusable="true" /> @@ -35,6 +36,7 @@ style="@style/QSBorderlessButton" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:minHeight="48dp" android:minWidth="88dp" android:textAppearance="@style/TextAppearance.QS.DetailButton" android:focusable="true"/> diff --git a/packages/SystemUI/res/layout/qs_paged_tile_layout.xml b/packages/SystemUI/res/layout/qs_paged_tile_layout.xml index e96a09baa9db..d1818447a798 100644 --- a/packages/SystemUI/res/layout/qs_paged_tile_layout.xml +++ b/packages/SystemUI/res/layout/qs_paged_tile_layout.xml @@ -19,7 +19,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" - android:clipChildren="false" + android:clipChildren="true" android:clipToPadding="false" android:paddingBottom="@dimen/qs_paged_tile_layout_padding_bottom"> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index e7748e1c21a7..acbd78659bab 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -320,7 +320,7 @@ <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"تم تشغيل Wi-Fi"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"لا تتوفر أي شبكة Wi-Fi"</string> <string name="quick_settings_wifi_secondary_label_transient" msgid="7748206246119760554">"جارٍ التفعيل…"</string> - <string name="quick_settings_cast_title" msgid="7709016546426454729">"إرسال"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"الإرسال"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"جارٍ الإرسال"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"جهاز لا يحمل اسمًا"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"جاهز للإرسال"</string> @@ -361,7 +361,7 @@ <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"حتى شروق الشمس"</string> <string name="quick_settings_night_secondary_label_on_at" msgid="6256314040368487637">"تفعيل الإعداد في <xliff:g id="TIME">%s</xliff:g>"</string> <string name="quick_settings_secondary_label_until" msgid="2749196569462600150">"حتى <xliff:g id="TIME">%s</xliff:g>"</string> - <string name="quick_settings_nfc_label" msgid="9012153754816969325">"الاتصال القريب المدى (NFC)"</string> + <string name="quick_settings_nfc_label" msgid="9012153754816969325">"الاتصالات قصيرة المدى (NFC)"</string> <string name="quick_settings_nfc_off" msgid="6883274004315134333">"تم إيقاف الاتصال القريب المدى"</string> <string name="quick_settings_nfc_on" msgid="6680317193676884311">"تم تفعيل الاتصال القريب المدى"</string> <string name="recents_empty_message" msgid="808480104164008572">"ليست هناك عناصر تم استخدامها مؤخرًا"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 69f838ebc02a..83451ba6743b 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -63,7 +63,7 @@ <string name="always_use_device" msgid="4015357883336738417">"Obre sempre <xliff:g id="APPLICATION">%1$s</xliff:g> quan es connecti <xliff:g id="USB_DEVICE">%2$s</xliff:g>"</string> <string name="always_use_accessory" msgid="3257892669444535154">"Obre sempre <xliff:g id="APPLICATION">%1$s</xliff:g> quan es connecti <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Vols permetre la depuració per USB?"</string> - <string name="usb_debugging_message" msgid="2220143855912376496">"L\'empremta digital de la clau RSA de l\'equip és:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> + <string name="usb_debugging_message" msgid="2220143855912376496">"L\'empremta digital de la clau de RSA de l\'equip és:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="303335496705863070">"Dona sempre permís des d\'aquest equip"</string> <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"No es permet la depuració per USB"</string> <string name="usb_debugging_secondary_user_message" msgid="6067122453571699801">"L\'usuari que té iniciada la sessió al dispositiu en aquest moment no pot activar la depuració per USB. Per utilitzar aquesta funció, cal canviar a l\'usuari principal."</string> @@ -652,7 +652,7 @@ <string name="keyboard_key_dpad_left" msgid="1346446024676962251">"Esquerra"</string> <string name="keyboard_key_dpad_right" msgid="3317323247127515341">"Dreta"</string> <string name="keyboard_key_dpad_center" msgid="2566737770049304658">"Centre"</string> - <string name="keyboard_key_tab" msgid="3871485650463164476">"Tabulador"</string> + <string name="keyboard_key_tab" msgid="3871485650463164476">"Pestanya"</string> <string name="keyboard_key_space" msgid="2499861316311153293">"Espai"</string> <string name="keyboard_key_enter" msgid="5739632123216118137">"Retorn"</string> <string name="keyboard_key_backspace" msgid="1559580097512385854">"Retrocés"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index f96243be2161..e4522bb87b6c 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -214,9 +214,9 @@ <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Der Flugmodus ist aktiviert."</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"lautlos"</string> <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"nur Wecker"</string> - <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Nicht stören."</string> - <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Nicht stören\" deaktiviert"</string> - <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Nicht stören\" aktiviert"</string> + <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Bitte nicht stören."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Bitte nicht stören\" deaktiviert"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Bitte nicht stören\" aktiviert"</string> <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth deaktiviert"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth aktiviert"</string> @@ -278,7 +278,7 @@ <string name="start_dreams" msgid="5640361424498338327">"Bildschirmschoner"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Halte die Symbole gedrückt, um weitere Optionen zu sehen"</string> - <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nicht stören"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Bitte nicht stören"</string> <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Nur wichtige Unterbrechungen"</string> <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Nur Wecker"</string> <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Lautlos"</string> @@ -691,9 +691,9 @@ <string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string> <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"Kalender"</string> <string name="tuner_full_zen_title" msgid="4540823317772234308">"Einschließlich Lautstärkeregler anzeigen"</string> - <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Nicht stören"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Bitte nicht stören"</string> <string name="volume_dnd_silent" msgid="4363882330723050727">"Tastenkombination für Lautstärketasten"</string> - <string name="volume_up_silent" msgid="7141255269783588286">"\"Nicht stören\" bei \"Lauter\" deaktivieren"</string> + <string name="volume_up_silent" msgid="7141255269783588286">"\"Bitte nicht stören\" bei \"Lauter\" deaktivieren"</string> <string name="battery" msgid="7498329822413202973">"Akku"</string> <string name="clock" msgid="7416090374234785905">"Uhr"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> @@ -830,10 +830,10 @@ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string> <string name="wifi_is_off" msgid="1838559392210456893">"WLAN ist deaktiviert"</string> <string name="bt_is_off" msgid="2640685272289706392">"Bluetooth ist deaktiviert"</string> - <string name="dnd_is_off" msgid="6167780215212497572">"\"Nicht stören\" ist deaktiviert"</string> - <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"\"Nicht stören\" wurde von einer automatischen Regel aktiviert (<xliff:g id="ID_1">%s</xliff:g>)."</string> - <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"\"Nicht stören\" wurde von einer App aktiviert (<xliff:g id="ID_1">%s</xliff:g>)."</string> - <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"\"Nicht stören\" wurde von einer automatischen Regel oder einer App aktiviert."</string> + <string name="dnd_is_off" msgid="6167780215212497572">"\"Bitte nicht stören\" ist deaktiviert"</string> + <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"\"Bitte nicht stören\" wurde von einer automatischen Regel aktiviert (<xliff:g id="ID_1">%s</xliff:g>)."</string> + <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"\"Bitte nicht stören\" wurde von einer App aktiviert (<xliff:g id="ID_1">%s</xliff:g>)."</string> + <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"\"Bitte nicht stören\" wurde von einer automatischen Regel oder einer App aktiviert."</string> <string name="qs_dnd_until" msgid="3469471136280079874">"Bis <xliff:g id="ID_1">%s</xliff:g>"</string> <string name="qs_dnd_keep" msgid="1825009164681928736">"Beibehalten"</string> <string name="qs_dnd_replace" msgid="8019520786644276623">"Ersetzen"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 156068b8b287..6b4a4b1ff4c4 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -137,7 +137,7 @@ <string name="accessibility_ethernet_disconnected" msgid="5896059303377589469">"Το Ethernet αποσυνδέθηκε."</string> <string name="accessibility_ethernet_connected" msgid="2692130313069182636">"Το Ethernet συνδέθηκε."</string> <string name="accessibility_no_signal" msgid="7064645320782585167">"Δεν υπάρχει σήμα."</string> - <string name="accessibility_not_connected" msgid="6395326276213402883">"Δεν έχει συνδεθεί."</string> + <string name="accessibility_not_connected" msgid="6395326276213402883">"Μη συνδεδεμένο"</string> <string name="accessibility_zero_bars" msgid="3806060224467027887">"Μηδέν γραμμές."</string> <string name="accessibility_one_bar" msgid="1685730113192081895">"Μία γραμμή."</string> <string name="accessibility_two_bars" msgid="6437363648385206679">"Δύο γραμμές."</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 7bbba8eb420c..1d64038ea4d6 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -299,7 +299,7 @@ <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokasi Nonaktif"</string> <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Perangkat media"</string> <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string> - <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Telepon urgen saja"</string> + <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Panggilan Darurat Saja"</string> <string name="quick_settings_settings_label" msgid="5326556592578065401">"Setelan"</string> <string name="quick_settings_time_label" msgid="4635969182239736408">"Waktu"</string> <string name="quick_settings_user_label" msgid="5238995632130897840">"Saya"</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index f9e41bb6cb6e..9a8281267127 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -271,7 +271,7 @@ <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"Ora lo schermo è bloccato nell\'orientamento orizzontale."</string> <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"Ora lo schermo è bloccato nell\'orientamento verticale."</string> <string name="dessert_case" msgid="1295161776223959221">"Vetrina di dolci"</string> - <string name="start_dreams" msgid="5640361424498338327">"Screensaver"</string> + <string name="start_dreams" msgid="5640361424498338327">"Salvaschermo"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Tocca e tieni premuta ciascuna icona per visualizzare altre opzioni"</string> <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Non disturbare"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index b48349c8fc58..42c5caee72cf 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -33,7 +33,7 @@ </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"אין הודעות"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"מתמשך"</string> - <string name="status_bar_latest_events_title" msgid="6594767438577593172">"התראות"</string> + <string name="status_bar_latest_events_title" msgid="6594767438577593172">"הודעות"</string> <string name="battery_low_title" msgid="9187898087363540349">"ייתכן שהסוללה תתרוקן בקרוב"</string> <string name="battery_low_percent_format" msgid="2900940511201380775">"נותרו <xliff:g id="PERCENTAGE">%s</xliff:g>"</string> <string name="battery_low_percent_format_hybrid" msgid="6838677459286775617">"נותרו <xliff:g id="PERCENTAGE">%s</xliff:g>, נשארו בערך <xliff:g id="TIME">%s</xliff:g> על סמך השימוש במכשיר"</string> @@ -51,7 +51,7 @@ <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"סיבוב אוטומטי של המסך"</string> <string name="status_bar_settings_mute_label" msgid="554682549917429396">"השתק"</string> <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"אוטומטי"</string> - <string name="status_bar_settings_notifications" msgid="397146176280905137">"התראות"</string> + <string name="status_bar_settings_notifications" msgid="397146176280905137">"הודעות"</string> <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth קשור"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"הגדר שיטות קלט"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"מקלדת פיזית"</string> @@ -174,9 +174,9 @@ <string name="carrier_network_change_mode" msgid="8149202439957837762">"רשת ספק משתנה"</string> <string name="accessibility_battery_details" msgid="7645516654955025422">"פתיחת פרטי סוללה"</string> <string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> אחוזים של סוללה."</string> - <string name="accessibility_battery_level_charging" msgid="1147587904439319646">"טעינת סוללה, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>%%."</string> + <string name="accessibility_battery_level_charging" msgid="1147587904439319646">"טעינת סוללה, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g> אחוז."</string> <string name="accessibility_settings_button" msgid="799583911231893380">"הגדרות מערכת"</string> - <string name="accessibility_notifications_button" msgid="4498000369779421892">"התראות"</string> + <string name="accessibility_notifications_button" msgid="4498000369779421892">"הודעות"</string> <string name="accessibility_overflow_action" msgid="5681882033274783311">"הצגת כל ההודעות"</string> <string name="accessibility_remove_notification" msgid="3603099514902182350">"מחיקת התראה"</string> <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS מופעל."</string> @@ -193,7 +193,7 @@ <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"כל האפליקציות האחרונות נסגרו."</string> <string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"פתח מידע על האפליקציה <xliff:g id="APP">%s</xliff:g>."</string> <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"מפעיל את <xliff:g id="APP">%s</xliff:g>."</string> - <string name="accessibility_notification_dismissed" msgid="854211387186306927">"התראה נדחתה."</string> + <string name="accessibility_notification_dismissed" msgid="854211387186306927">"הודעה נדחתה."</string> <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"לוח התראות."</string> <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"הגדרות מהירות."</string> <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"מסך נעילה."</string> @@ -340,7 +340,7 @@ <item quantity="other">%d מכשירים</item> <item quantity="one">מכשיר אחד</item> </plurals> - <string name="quick_settings_notifications_label" msgid="4818156442169154523">"התראות"</string> + <string name="quick_settings_notifications_label" msgid="4818156442169154523">"הודעות"</string> <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"פנס"</string> <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"חבילת גלישה"</string> <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"שימוש בנתונים"</string> @@ -605,8 +605,8 @@ <string name="tuner_full_importance_settings" msgid="3207312268609236827">"פקדים של הודעות הפעלה"</string> <string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"פועל"</string> <string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"כבוי"</string> - <string name="power_notification_controls_description" msgid="4372459941671353358">"בעזרת פקדים של התראות הפעלה, אפשר להגדיר רמת חשיבות מ-0 עד 5 להתראות אפליקציה. \n\n"<b>"רמה 5"</b>" \n- הצגה בראש רשימת ההודעות \n- אפשר הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 4"</b>" \n- מנע הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 3"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n\n"<b>"רמה 2"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n\n"<b>"רמה 1"</b>" \n- מניעת הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n- הסתרה ממסך הנעילה ומשורת הסטטוס \n- הצגה בתחתית רשימת ההתראות \n\n"<b>"רמה 0"</b>" \n- חסימה את כל ההתראות מהאפליקציה"</string> - <string name="notification_header_default_channel" msgid="7506845022070889909">"התראות"</string> + <string name="power_notification_controls_description" msgid="4372459941671353358">"בעזרת פקדים של הודעות הפעלה, תוכל להגדיר רמת חשיבות מ-0 עד 5 להודעות אפליקציה. \n\n"<b>"רמה 5"</b>" \n- הצג בראש רשימת ההודעות \n- אפשר הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 4"</b>" \n- מנע הפרעה במסך מלא \n- תמיד אפשר הצצה \n\n"<b>"רמה 3"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n\n"<b>"רמה 2"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n\n"<b>"רמה 1"</b>" \n- מנע הפרעה במסך מלא \n- אף פעם אל תאפשר הצצה \n- אף פעם אל תאפשר קול ורטט \n- הסתר ממסך הנעילה ומשורת הסטטוס \n- הצג בתחתית רשימת ההודעות \n\n"<b>"רמה 0"</b>" \n- חסום את כל ההודעות מהאפליקציה"</string> + <string name="notification_header_default_channel" msgid="7506845022070889909">"הודעות"</string> <string name="notification_channel_disabled" msgid="344536703863700565">"ההודעות האלה לא יוצגו לך יותר"</string> <string name="notification_channel_minimized" msgid="1664411570378910931">"ההודעות האלה ימוזערו"</string> <string name="inline_blocking_helper" msgid="3055064577771478591">"הודעות אלה בדרך כלל נדחות על ידיך. \nלהמשיך להציג אותן?"</string> @@ -633,7 +633,7 @@ <string name="notification_done" msgid="5279426047273930175">"סיום"</string> <string name="inline_undo" msgid="558916737624706010">"ביטול"</string> <string name="notification_menu_accessibility" msgid="2046162834248888553">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string> - <string name="notification_menu_gear_description" msgid="2204480013726775108">"בקרת התראות"</string> + <string name="notification_menu_gear_description" msgid="2204480013726775108">"בקרת הודעות"</string> <string name="notification_menu_snooze_description" msgid="3653669438131034525">"אפשרויות של דחיית הודעות לטיפול בהמשך"</string> <string name="notification_menu_snooze_action" msgid="1112254519029621372">"הפעלת נודניק"</string> <string name="snooze_undo" msgid="6074877317002985129">"ביטול"</string> @@ -684,7 +684,7 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"דף הבית"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"מהזמן האחרון"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"הקודם"</string> - <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"התראות"</string> + <string name="keyboard_shortcut_group_system_notifications" msgid="8366964080041773224">"הודעות"</string> <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4892255911160332762">"מקשי קיצור במקלדת"</string> <string name="keyboard_shortcut_group_system_switch_input" msgid="2334164096341310324">"החלפת שיטת קלט"</string> <string name="keyboard_shortcut_group_applications" msgid="9129465955073449206">"אפליקציות"</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 7c704ab22a45..3ee349c50fc6 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -210,9 +210,9 @@ <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"機内モードをONにしました。"</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"サイレント"</string> <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"アラームのみ"</string> - <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"マナーモード"</string> - <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"マナーモードを OFF にしました。"</string> - <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"マナーモードを ON にしました。"</string> + <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"サイレント モード"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"サイレント モードを OFF にしました。"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"サイレント モードを ON にしました。"</string> <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"BluetoothがOFFです。"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"BluetoothがONです。"</string> @@ -274,7 +274,7 @@ <string name="start_dreams" msgid="5640361424498338327">"スクリーン セーバー"</string> <string name="ethernet_label" msgid="7967563676324087464">"イーサネット"</string> <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"アイコンを押し続けると、その他の項目が表示されます"</string> - <string name="quick_settings_dnd_label" msgid="8735855737575028208">"マナーモード"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"サイレント モード"</string> <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"優先する通知のみ"</string> <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"アラームのみ"</string> <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"サイレント"</string> @@ -436,7 +436,7 @@ <string name="media_projection_remember_text" msgid="3103510882172746752">"次回から表示しない"</string> <string name="clear_all_notifications_text" msgid="814192889771462828">"すべて消去"</string> <string name="manage_notifications_text" msgid="8035284146227267681">"通知を管理する"</string> - <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"マナーモードにより通知は一時停止中です"</string> + <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"サイレント モードにより通知は一時停止中です"</string> <string name="media_projection_action_text" msgid="8470872969457985954">"今すぐ開始"</string> <string name="empty_shade_text" msgid="708135716272867002">"通知はありません"</string> <string name="profile_owned_footer" msgid="8021888108553696069">"プロファイルが監視されている可能性があります"</string> @@ -687,9 +687,9 @@ <string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string> <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"カレンダー"</string> <string name="tuner_full_zen_title" msgid="4540823317772234308">"音量調節を表示"</string> - <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"マナーモード"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"サイレント モード"</string> <string name="volume_dnd_silent" msgid="4363882330723050727">"音量ボタンのショートカット"</string> - <string name="volume_up_silent" msgid="7141255269783588286">"音量上げボタンでマナーモードを OFF にする"</string> + <string name="volume_up_silent" msgid="7141255269783588286">"音量上げボタンでサイレント モードを OFF にする"</string> <string name="battery" msgid="7498329822413202973">"電池"</string> <string name="clock" msgid="7416090374234785905">"時計"</string> <string name="headset" msgid="4534219457597457353">"ヘッドセット"</string> @@ -826,10 +826,10 @@ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> — <xliff:g id="ID_2">%s</xliff:g>"</string> <string name="wifi_is_off" msgid="1838559392210456893">"Wi-Fi は OFF です"</string> <string name="bt_is_off" msgid="2640685272289706392">"Bluetooth は OFF です"</string> - <string name="dnd_is_off" msgid="6167780215212497572">"マナーモードは OFF です"</string> - <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"マナーモードが自動ルール(<xliff:g id="ID_1">%s</xliff:g>)によって ON になりました。"</string> - <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"マナーモードがアプリ(<xliff:g id="ID_1">%s</xliff:g>)によって ON になりました。"</string> - <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"マナーモードが自動ルールまたはアプリによって ON になりました。"</string> + <string name="dnd_is_off" msgid="6167780215212497572">"サイレント モードは OFF です"</string> + <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"サイレント モードが自動ルール(<xliff:g id="ID_1">%s</xliff:g>)によって ON になりました。"</string> + <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"サイレント モードがアプリ(<xliff:g id="ID_1">%s</xliff:g>)によって ON になりました。"</string> + <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"サイレント モードが自動ルールまたはアプリによって ON になりました。"</string> <string name="qs_dnd_until" msgid="3469471136280079874">"終了時間: <xliff:g id="ID_1">%s</xliff:g>"</string> <string name="qs_dnd_keep" msgid="1825009164681928736">"設定を維持"</string> <string name="qs_dnd_replace" msgid="8019520786644276623">"設定を変更"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 1c256b009c9d..dad714c403eb 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -81,7 +81,7 @@ <string name="usb_preference_title" msgid="6551050377388882787">"Opções de transm. de fich. USB"</string> <string name="use_mtp_button_title" msgid="4333504413563023626">"Montar como leitor de multimédia (MTP)"</string> <string name="use_ptp_button_title" msgid="7517127540301625751">"Montar como câmara (PTP)"</string> - <string name="installer_cd_button_title" msgid="2312667578562201583">"Inst. aplic. Transf. Ficheiros do Android para Mac"</string> + <string name="installer_cd_button_title" msgid="2312667578562201583">"Inst. app Transf. Ficheiros do Android para Mac"</string> <string name="accessibility_back" msgid="567011538994429120">"Anterior"</string> <string name="accessibility_home" msgid="8217216074895377641">"Página inicial"</string> <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string> @@ -478,7 +478,7 @@ <string name="monitoring_description_personal_profile_named_vpn" msgid="3133980926929069283">"O seu perfil pessoal está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string> <string name="monitoring_description_do_header_generic" msgid="96588491028288691">"O seu dispositivo é gerido pelo <xliff:g id="DEVICE_OWNER_APP">%1$s</xliff:g>."</string> <string name="monitoring_description_do_header_with_name" msgid="5511133708978206460">"A <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> utiliza o <xliff:g id="DEVICE_OWNER_APP">%2$s</xliff:g> para gerir o seu dispositivo."</string> - <string name="monitoring_description_do_body" msgid="3639594537660975895">"O administ. pode monitorizar e gerir definições, acesso empresarial, aplic. e dados associados ao dispositivo, bem como inf. de localiz. do disp."</string> + <string name="monitoring_description_do_body" msgid="3639594537660975895">"O administ. pode monitorizar e gerir definições, acesso empresarial, app e dados associados ao dispositivo, bem como inf. de localiz. do disp."</string> <string name="monitoring_description_do_learn_more_separator" msgid="3785251953067436862">" "</string> <string name="monitoring_description_do_learn_more" msgid="1849514470437907421">"Saiba mais"</string> <string name="monitoring_description_do_body_vpn" msgid="8255218762488901796">"Está ligado à rede <xliff:g id="VPN_APP">%1$s</xliff:g>, que pode monitorizar a sua atividade de rede, incluindo emails, aplicações e Sites."</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 5b34eb6c8f16..063bef57ae96 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -212,9 +212,9 @@ <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Režim v lietadle je zapnutý."</string> <string name="accessibility_quick_settings_dnd_none_on" msgid="2960643943620637020">"úplné ticho"</string> <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3357131899365865386">"iba budíky"</string> - <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Nerušiť"</string> - <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Stav Nerušiť je vypnutý."</string> - <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Stav Nerušiť je zapnutý."</string> + <string name="accessibility_quick_settings_dnd" msgid="6607873236717185815">"Režim bez vyrušení"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Režim bez vyrušení je vypnutý."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Režim bez vyrušení je zapnutý."</string> <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Rozhranie Bluetooth je vypnuté."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Rozhranie Bluetooth je zapnuté."</string> @@ -278,7 +278,7 @@ <string name="start_dreams" msgid="5640361424498338327">"Šetrič obrazovky"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_header_onboarding_text" msgid="8030309023792936283">"Pridržaním ikon zobrazíte ďalšie možnosti"</string> - <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nerušiť"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Režim bez vyrušení"</string> <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Iba prioritné"</string> <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Iba budíky"</string> <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Úplné ticho"</string> @@ -442,7 +442,7 @@ <string name="media_projection_remember_text" msgid="3103510882172746752">"Nabudúce nezobrazovať"</string> <string name="clear_all_notifications_text" msgid="814192889771462828">"Vymazať všetko"</string> <string name="manage_notifications_text" msgid="8035284146227267681">"Spravovať upozornenia"</string> - <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"Upozornenia sú pozastavené režimom Nerušiť"</string> + <string name="dnd_suppressing_shade_text" msgid="1904574852846769301">"Upozornenia sú pozastavené režimom bez vyrušení"</string> <string name="media_projection_action_text" msgid="8470872969457985954">"Spustiť"</string> <string name="empty_shade_text" msgid="708135716272867002">"Žiadne upozornenia"</string> <string name="profile_owned_footer" msgid="8021888108553696069">"Profil môže byť monitorovaný"</string> @@ -697,9 +697,9 @@ <string name="keyboard_shortcut_group_applications_youtube" msgid="6555453761294723317">"YouTube"</string> <string name="keyboard_shortcut_group_applications_calendar" msgid="9043614299194991263">"Kalendár"</string> <string name="tuner_full_zen_title" msgid="4540823317772234308">"Zobrazovať s ovládacími prvkami hlasitosti"</string> - <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Nerušiť"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Režim bez vyrušení"</string> <string name="volume_dnd_silent" msgid="4363882330723050727">"Skratka tlačidiel hlasitosti"</string> - <string name="volume_up_silent" msgid="7141255269783588286">"Pri zvýšení hlasitosti ukončiť režim Nerušiť"</string> + <string name="volume_up_silent" msgid="7141255269783588286">"Pri zvýšení hlasitosti ukončiť režim bez vyrušení"</string> <string name="battery" msgid="7498329822413202973">"Batéria"</string> <string name="clock" msgid="7416090374234785905">"Hodiny"</string> <string name="headset" msgid="4534219457597457353">"Náhlavná súprava"</string> @@ -836,10 +836,10 @@ <string name="mobile_data_text_format" msgid="3526214522670876454">"<xliff:g id="ID_1">%s</xliff:g> – <xliff:g id="ID_2">%s</xliff:g>"</string> <string name="wifi_is_off" msgid="1838559392210456893">"Pripojenie Wi‑Fi je vypnuté"</string> <string name="bt_is_off" msgid="2640685272289706392">"Rozhranie Bluetooth je vypnuté"</string> - <string name="dnd_is_off" msgid="6167780215212497572">"Nastavenie Nerušiť je vypnuté"</string> - <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"Režim Nerušiť bol zapnutý automatickým pravidlom (<xliff:g id="ID_1">%s</xliff:g>)."</string> - <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"Režim Nerušiť bol zapnutý aplikáciou (<xliff:g id="ID_1">%s</xliff:g>)."</string> - <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"Režim Nerušiť bol zapnutý automatickým pravidlom alebo aplikáciou."</string> + <string name="dnd_is_off" msgid="6167780215212497572">"Režim bez vyrušení je vypnutý"</string> + <string name="qs_dnd_prompt_auto_rule" msgid="862559028345233052">"Režim bez vyrušení bol zapnutý automatickým pravidlom (<xliff:g id="ID_1">%s</xliff:g>)."</string> + <string name="qs_dnd_prompt_app" msgid="7978037419334156034">"Režim bez vyrušení bol zapnutý aplikáciou (<xliff:g id="ID_1">%s</xliff:g>)."</string> + <string name="qs_dnd_prompt_auto_rule_app" msgid="2599343675391111951">"Režim bez vyrušení bol zapnutý automatickým pravidlom alebo aplikáciou."</string> <string name="qs_dnd_until" msgid="3469471136280079874">"Do <xliff:g id="ID_1">%s</xliff:g>"</string> <string name="qs_dnd_keep" msgid="1825009164681928736">"Ponechať"</string> <string name="qs_dnd_replace" msgid="8019520786644276623">"Nahradiť"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 774b89b78380..2e6036661737 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -814,7 +814,7 @@ <string name="tuner_app" msgid="3507057938640108777">"Aplikacioni <xliff:g id="APP">%1$s</xliff:g>"</string> <string name="notification_channel_alerts" msgid="4496839309318519037">"Sinjalizimet"</string> <string name="notification_channel_battery" msgid="5786118169182888462">"Bateria"</string> - <string name="notification_channel_screenshot" msgid="6314080179230000938">"Pamjet e ekranit"</string> + <string name="notification_channel_screenshot" msgid="6314080179230000938">"Pamje ekrani"</string> <string name="notification_channel_general" msgid="4525309436693914482">"Mesazhe të përgjithshme"</string> <string name="notification_channel_storage" msgid="3077205683020695313">"Hapësira ruajtëse"</string> <string name="notification_channel_hints" msgid="7323870212489152689">"Sugjerimet"</string> diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 3f63f2283ba8..d639c434e2f4 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -143,5 +143,11 @@ <attr name="rotateButtonEndAngle" format="float" /> <attr name="rotateButtonScaleX" format="float" /> + <!-- Used display CarrierText in Keyguard or QS Footer --> + <declare-styleable name="CarrierText"> + <attr name="allCaps" format="boolean" /> + <attr name="showMissingSim" format="boolean" /> + <attr name="showAirplaneMode" format="boolean" /> + </declare-styleable> </resources> 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/keyguard/CarrierText.java b/packages/SystemUI/src/com/android/keyguard/CarrierText.java index 66475e29128d..a0a36878634a 100644 --- a/packages/SystemUI/src/com/android/keyguard/CarrierText.java +++ b/packages/SystemUI/src/com/android/keyguard/CarrierText.java @@ -43,11 +43,6 @@ import com.android.settingslib.WirelessUtils; import android.telephony.TelephonyManager; public class CarrierText extends TextView { - /** Do not show missing sim message. */ - public static final int FLAG_HIDE_MISSING_SIM = 1 << 0; - /** Do not show airplane mode message. */ - public static final int FLAG_HIDE_AIRPLANE_MODE = 1 << 1; - private static final boolean DEBUG = KeyguardConstants.DEBUG; private static final String TAG = "CarrierText"; @@ -55,17 +50,23 @@ public class CarrierText extends TextView { private final boolean mIsEmergencyCallCapable; + private boolean mTelephonyCapable; + + private boolean mShowMissingSim; + + private boolean mShowAirplaneMode; + private KeyguardUpdateMonitor mKeyguardUpdateMonitor; private WifiManager mWifiManager; private boolean[] mSimErrorState = new boolean[TelephonyManager.getDefault().getPhoneCount()]; - private int mFlags; - - private KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() { + private final KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() { @Override public void onRefreshCarrierInfo() { + if (DEBUG) Log.d(TAG, "onRefreshCarrierInfo(), mTelephonyCapable: " + + Boolean.toString(mTelephonyCapable)); updateCarrierText(); } @@ -77,9 +78,18 @@ public class CarrierText extends TextView { setSelected(true); }; + @Override + public void onTelephonyCapable(boolean capable) { + if (DEBUG) Log.d(TAG, "onTelephonyCapable() mTelephonyCapable: " + + Boolean.toString(capable)); + mTelephonyCapable = capable; + updateCarrierText(); + } + public void onSimStateChanged(int subId, int slotId, IccCardConstants.State simState) { if (slotId < 0) { - Log.d(TAG, "onSimStateChanged() - slotId invalid: " + slotId); + Log.d(TAG, "onSimStateChanged() - slotId invalid: " + slotId + + " mTelephonyCapable: " + Boolean.toString(mTelephonyCapable)); return; } @@ -91,13 +101,9 @@ public class CarrierText extends TextView { mSimErrorState[slotId] = false; updateCarrierText(); } - }; + } }; - public void setDisplayFlags(int flags) { - mFlags = flags; - } - /** * The status of this lock screen. Primarily used for widgets on LockScreen. */ @@ -110,7 +116,8 @@ public class CarrierText extends TextView { SimLocked, // SIM card is currently locked SimPermDisabled, // SIM card is permanently disabled due to PUK unlock failure SimNotReady, // SIM is not ready yet. May never be on devices w/o a SIM. - SimIoError; // SIM card is faulty + SimIoError, // SIM card is faulty + SimUnknown // SIM card is unknown } public CarrierText(Context context) { @@ -126,6 +133,8 @@ public class CarrierText extends TextView { attrs, R.styleable.CarrierText, 0, 0); try { useAllCaps = a.getBoolean(R.styleable.CarrierText_allCaps, false); + mShowAirplaneMode = a.getBoolean(R.styleable.CarrierText_showAirplaneMode, false); + mShowMissingSim = a.getBoolean(R.styleable.CarrierText_showMissingSim, false); } finally { a.recycle(); } @@ -249,12 +258,12 @@ public class CarrierText extends TextView { } private String getMissingSimMessage() { - return (mFlags & FLAG_HIDE_MISSING_SIM) == 0 + return mShowMissingSim && mTelephonyCapable ? getContext().getString(R.string.keyguard_missing_sim_message_short) : ""; } private String getAirplaneModeMessage() { - return (mFlags & FLAG_HIDE_AIRPLANE_MODE) == 0 + return mShowAirplaneMode ? getContext().getString(R.string.airplane_mode) : ""; } @@ -360,6 +369,9 @@ public class CarrierText extends TextView { getContext().getText(R.string.keyguard_sim_error_message_short), text); break; + case SimUnknown: + carrierText = null; + break; } return carrierText; @@ -408,11 +420,11 @@ public class CarrierText extends TextView { case PERM_DISABLED: return StatusMode.SimPermDisabled; case UNKNOWN: - return StatusMode.SimMissing; + return StatusMode.SimUnknown; case CARD_IO_ERROR: return StatusMode.SimIoError; } - return StatusMode.SimMissing; + return StatusMode.SimUnknown; } private static CharSequence concatenate(CharSequence plmn, CharSequence spn) { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java index f399667772d8..ba0eaea9728a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java @@ -144,6 +144,8 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit mLockPatternView = findViewById(R.id.lockPatternView); mLockPatternView.setSaveEnabled(false); mLockPatternView.setOnPatternListener(new UnlockPatternListener()); + mLockPatternView.setInStealthMode(!mLockPatternUtils.isVisiblePatternEnabled( + KeyguardUpdateMonitor.getCurrentUser())); // vibrate mode will be the same for the life of this screen mLockPatternView.setTactileFeedbackEnabled(mLockPatternUtils.isTactileFeedbackEnabled()); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 0e2181532630..6d5d1a38fd56 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -82,6 +82,7 @@ import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.util.Preconditions; import com.android.internal.widget.LockPatternUtils; +import com.android.settingslib.WirelessUtils; import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; import com.android.systemui.shared.system.ActivityManagerWrapper; @@ -146,6 +147,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private static final int MSG_ASSISTANT_STACK_CHANGED = 335; private static final int MSG_FINGERPRINT_AUTHENTICATION_CONTINUE = 336; private static final int MSG_DEVICE_POLICY_MANAGER_STATE_CHANGED = 337; + private static final int MSG_TELEPHONY_CAPABLE = 338; /** Fingerprint state: Not listening to fingerprint. */ private static final int FINGERPRINT_STATE_STOPPED = 0; @@ -202,6 +204,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private boolean mHasLockscreenWallpaper; private boolean mAssistantVisible; private boolean mKeyguardOccluded; + @VisibleForTesting + protected boolean mTelephonyCapable; // Device provisioning state private boolean mDeviceProvisioned; @@ -337,6 +341,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { case MSG_DEVICE_POLICY_MANAGER_STATE_CHANGED: updateLogoutEnabled(); break; + case MSG_TELEPHONY_CAPABLE: + updateTelephonyCapable((boolean)msg.obj); + break; default: super.handleMessage(msg); break; @@ -789,14 +796,18 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { maxChargingMicroWatt)); mHandler.sendMessage(msg); } else if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) { + SimData args = SimData.fromIntent(intent); // ACTION_SIM_STATE_CHANGED is rebroadcast after unlocking the device to // keep compatibility with apps that aren't direct boot aware. // SysUI should just ignore this broadcast because it was already received // and processed previously. if (intent.getBooleanExtra(TelephonyIntents.EXTRA_REBROADCAST_ON_UNLOCK, false)) { + // Guarantee mTelephonyCapable state after SysUI crash and restart + if (args.simState == State.ABSENT) { + mHandler.obtainMessage(MSG_TELEPHONY_CAPABLE, true).sendToTarget(); + } return; } - SimData args = SimData.fromIntent(intent); if (DEBUG_SIM_STATES) { Log.v(TAG, "action " + action + " state: " + intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE) @@ -1243,6 +1254,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mUserManager = context.getSystemService(UserManager.class); mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class); mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled(); + updateAirplaneModeState(); + } + + private void updateAirplaneModeState() { + // ACTION_AIRPLANE_MODE_CHANGED do not broadcast if device set AirplaneMode ON and boot + if (!WirelessUtils.isAirplaneModeOn(mContext) + || mHandler.hasMessages(MSG_AIRPLANE_MODE_CHANGED)) { + return; + } + mHandler.sendEmptyMessage(MSG_AIRPLANE_MODE_CHANGED); } private void updateFingerprintListeningState() { @@ -1525,6 +1546,23 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } /** + * Handle Telephony status during Boot for CarrierText display policy + */ + @VisibleForTesting + void updateTelephonyCapable(boolean capable){ + if (capable == mTelephonyCapable) { + return; + } + mTelephonyCapable = capable; + for (WeakReference<KeyguardUpdateMonitorCallback> ref : mCallbacks) { + KeyguardUpdateMonitorCallback cb = ref.get(); + if (cb != null) { + cb.onTelephonyCapable(mTelephonyCapable); + } + } + } + + /** * Handle {@link #MSG_SIM_STATE_CHANGE} */ @VisibleForTesting @@ -1537,6 +1575,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { if (!SubscriptionManager.isValidSubscriptionId(subId)) { Log.w(TAG, "invalid subId in handleSimStateChange()"); + /* Only handle No SIM(ABSENT) due to handleServiceStateChange() handle other case */ + if (state == State.ABSENT) { + updateTelephonyCapable(true); + } return; } @@ -1565,7 +1607,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { /** * Handle {@link #MSG_SERVICE_STATE_CHANGE} */ - private void handleServiceStateChange(int subId, ServiceState serviceState) { + @VisibleForTesting + void handleServiceStateChange(int subId, ServiceState serviceState) { if (DEBUG) { Log.d(TAG, "handleServiceStateChange(subId=" + subId + ", serviceState=" + serviceState); @@ -1574,6 +1617,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { if (!SubscriptionManager.isValidSubscriptionId(subId)) { Log.w(TAG, "invalid subId in handleServiceStateChange()"); return; + } else { + updateTelephonyCapable(true); } mServiceStates.put(subId, serviceState); @@ -1737,6 +1782,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { callback.onRefreshCarrierInfo(); callback.onClockVisibilityChanged(); callback.onKeyguardVisibilityChangedRaw(mKeyguardIsVisible); + callback.onTelephonyCapable(mTelephonyCapable); for (Entry<Integer, SimData> data : mSimDatas.entrySet()) { final SimData state = data.getValue(); callback.onSimStateChanged(state.subId, state.slotId, state.simState); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java index 67571bb2ab38..2cdd4a5886c5 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java @@ -117,6 +117,12 @@ public class KeyguardUpdateMonitorCallback { public void onUserSwitchComplete(int userId) { } /** + * Called when the Telephony capable + * @param capable + */ + public void onTelephonyCapable(boolean capable) { } + + /** * Called when the SIM state changes. * @param slotId * @param simState diff --git a/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java b/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java index 198a4e6cedb8..b1463a3c53ea 100644 --- a/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java +++ b/packages/SystemUI/src/com/android/systemui/HardwareUiLayout.java @@ -143,9 +143,6 @@ public class HardwareUiLayout extends LinearLayout implements Tunable { mSeparatedView.setBackground(mSeparatedViewBackground); updateEdgeMargin(mEdgeBleed ? 0 : getEdgePadding()); mOldHeight = mList.getMeasuredHeight(); - mList.addOnLayoutChangeListener( - (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> - updatePosition()); updateRotation(); } else { return; @@ -155,6 +152,8 @@ public class HardwareUiLayout extends LinearLayout implements Tunable { if (newHeight != mOldHeight) { animateChild(mOldHeight, newHeight); } + + post(() -> updatePaddingAndGravityIfTooTall()); post(() -> updatePosition()); } @@ -241,7 +240,7 @@ public class HardwareUiLayout extends LinearLayout implements Tunable { separatedViewLayoutParams.gravity = rotateGravityRight(separatedViewLayoutParams.gravity); mSeparatedView.setLayoutParams(separatedViewLayoutParams); - setGravity(p.gravity); + setGravity(rotateGravityRight(getGravity())); } private void swapDimens(View v) { @@ -299,7 +298,7 @@ public class HardwareUiLayout extends LinearLayout implements Tunable { separatedViewLayoutParams.gravity = rotateGravityLeft(separatedViewLayoutParams.gravity); mSeparatedView.setLayoutParams(separatedViewLayoutParams); - setGravity(p.gravity); + setGravity(rotateGravityLeft(getGravity())); } private int rotateGravityLeft(int gravity) { @@ -447,6 +446,46 @@ public class HardwareUiLayout extends LinearLayout implements Tunable { mAnimator.start(); } + // If current power menu height larger then screen height, remove padding to break power menu + // alignment and set menu center vertical within the screen. + private void updatePaddingAndGravityIfTooTall() { + int defaultTopPadding; + int viewsTotalHeight; + int separatedViewTopMargin; + int screenHeight; + int totalHeight; + int targetGravity; + MarginLayoutParams params = (MarginLayoutParams) mSeparatedView.getLayoutParams(); + switch (RotationUtils.getRotation(getContext())) { + case RotationUtils.ROTATION_LANDSCAPE: + defaultTopPadding = getPaddingLeft(); + viewsTotalHeight = mList.getMeasuredWidth() + mSeparatedView.getMeasuredWidth(); + separatedViewTopMargin = mHasSeparatedButton ? params.leftMargin : 0; + screenHeight = getMeasuredWidth(); + targetGravity = Gravity.CENTER_HORIZONTAL|Gravity.TOP; + break; + case RotationUtils.ROTATION_SEASCAPE: + defaultTopPadding = getPaddingRight(); + viewsTotalHeight = mList.getMeasuredWidth() + mSeparatedView.getMeasuredWidth(); + separatedViewTopMargin = mHasSeparatedButton ? params.leftMargin : 0; + screenHeight = getMeasuredWidth(); + targetGravity = Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM; + break; + default: // Portrait + defaultTopPadding = getPaddingTop(); + viewsTotalHeight = mList.getMeasuredHeight() + mSeparatedView.getMeasuredHeight(); + separatedViewTopMargin = mHasSeparatedButton ? params.topMargin : 0; + screenHeight = getMeasuredHeight(); + targetGravity = Gravity.CENTER_VERTICAL|Gravity.RIGHT; + break; + } + totalHeight = defaultTopPadding + viewsTotalHeight + separatedViewTopMargin; + if (totalHeight >= screenHeight) { + setPadding(0, 0, 0, 0); + setGravity(targetGravity); + } + } + @Override public ViewOutlineProvider getOutlineProvider() { return super.getOutlineProvider(); diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java index 28f86ec28626..a38838d3d86e 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java @@ -101,7 +101,7 @@ import java.util.List; * is provisioned. */ class GlobalActionsDialog implements DialogInterface.OnDismissListener, - DialogInterface.OnClickListener { + DialogInterface.OnClickListener, DialogInterface.OnShowListener { static public final String SYSTEM_DIALOG_REASON_KEY = "reason"; static public final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions"; @@ -397,6 +397,7 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, dialog.setKeyguardShowing(mKeyguardShowing); dialog.setOnDismissListener(this); + dialog.setOnShowListener(this); return dialog; } @@ -455,8 +456,11 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, @Override public void onPress() { + MetricsLogger.action(mContext, MetricsEvent.ACTION_EMERGENCY_DIALER_FROM_POWER_MENU); Intent intent = new Intent(EmergencyDialerConstants.ACTION_DIAL); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS + | Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra(EmergencyDialerConstants.EXTRA_ENTRY_TYPE, EmergencyDialerConstants.ENTRY_TYPE_POWER_MENU); mContext.startActivityAsUser(intent, UserHandle.CURRENT); @@ -861,6 +865,11 @@ class GlobalActionsDialog implements DialogInterface.OnDismissListener, item.onPress(); } + /** {@inheritDoc} */ + public void onShow(DialogInterface dialog) { + MetricsLogger.visible(mContext, MetricsEvent.POWER_MENU); + } + /** * The adapter used for the list within the global actions dialog, taking * into account whether the keyguard is showing via diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index 100751cce947..fdddefe39a8e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -10,6 +10,7 @@ import android.content.res.Configuration; import android.content.res.Resources; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; +import android.graphics.Rect; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; @@ -57,6 +58,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { private AnimatorSet mBounceAnimatorSet; private int mAnimatingToPage = -1; private float mLastExpansion; + private int mHorizontalClipBounds; public PagedTileLayout(Context context, AttributeSet attrs) { super(context, attrs); @@ -243,6 +245,8 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { public boolean updateResources() { // Update bottom padding, useful for removing extra space once the panel page indicator is // hidden. + mHorizontalClipBounds = getContext().getResources().getDimensionPixelSize( + R.dimen.notification_side_paddings); setPadding(0, 0, 0, getContext().getResources().getDimensionPixelSize( R.dimen.qs_paged_tile_layout_padding_bottom)); @@ -273,6 +277,15 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { setMeasuredDimension(getMeasuredWidth(), maxHeight + getPaddingBottom()); } + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + Rect clipBounds = new Rect(mHorizontalClipBounds, 0, + r - l - mHorizontalClipBounds, b - t); + setClipBounds(clipBounds); + } + + private final Runnable mDistribute = new Runnable() { @Override public void run() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java index 64b3904428f1..8ddc5b0a71d0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java @@ -123,8 +123,6 @@ public class QSFooterImpl extends FrameLayout implements QSFooter, mMobileSignal = findViewById(R.id.mobile_signal); mMobileRoaming = findViewById(R.id.mobile_roaming); mCarrierText = findViewById(R.id.qs_carrier_text); - mCarrierText.setDisplayFlags( - CarrierText.FLAG_HIDE_AIRPLANE_MODE | CarrierText.FLAG_HIDE_MISSING_SIM); mMultiUserSwitch = findViewById(R.id.multi_user_switch); mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index 29687228902f..602ee6b49b29 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -108,6 +108,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView private static final int COLORED_DIVIDER_ALPHA = 0x7B; private static final int MENU_VIEW_INDEX = 0; private static final String TAG = "ExpandableNotifRow"; + public static final float DEFAULT_HEADER_VISIBLE_AMOUNT = 1.0f; /** * Listener for when {@link ExpandableNotificationRow} is laid out. @@ -157,7 +158,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView private boolean mSensitiveHiddenInGeneral; private boolean mShowingPublicInitialized; private boolean mHideSensitiveForIntrinsicHeight; - private float mHeaderVisibleAmount = 1.0f; + private float mHeaderVisibleAmount = DEFAULT_HEADER_VISIBLE_AMOUNT; /** * Is this notification expanded by the system. The expansion state can be overridden by the diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java index 29e0edaf25cc..ac289d7d6262 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java @@ -21,6 +21,8 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Point; import android.graphics.Rect; +import android.os.Bundle; +import android.os.Parcelable; import android.util.AttributeSet; import android.view.Display; import android.view.DisplayCutout; @@ -38,6 +40,12 @@ import java.util.List; * The view in the statusBar that contains part of the heads-up information */ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout { + private static final String HEADS_UP_STATUS_BAR_VIEW_SUPER_PARCELABLE = + "heads_up_status_bar_view_super_parcelable"; + private static final String FIRST_LAYOUT = "first_layout"; + private static final String PUBLIC_MODE = "public_mode"; + private static final String VISIBILITY = "visibility"; + private static final String ALPHA = "alpha"; private int mAbsoluteStartPadding; private int mEndMargin; private View mIconPlaceholder; @@ -107,6 +115,39 @@ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout { updateMaxWidth(); } + @Override + public Bundle onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(HEADS_UP_STATUS_BAR_VIEW_SUPER_PARCELABLE, + super.onSaveInstanceState()); + bundle.putBoolean(FIRST_LAYOUT, mFirstLayout); + bundle.putBoolean(PUBLIC_MODE, mPublicMode); + bundle.putInt(VISIBILITY, getVisibility()); + bundle.putFloat(ALPHA, getAlpha()); + + return bundle; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + if (state == null || !(state instanceof Bundle)) { + super.onRestoreInstanceState(state); + return; + } + + Bundle bundle = (Bundle) state; + Parcelable superState = bundle.getParcelable(HEADS_UP_STATUS_BAR_VIEW_SUPER_PARCELABLE); + super.onRestoreInstanceState(superState); + mFirstLayout = bundle.getBoolean(FIRST_LAYOUT, true); + mPublicMode = bundle.getBoolean(PUBLIC_MODE, false); + if (bundle.containsKey(VISIBILITY)) { + setVisibility(bundle.getInt(VISIBILITY)); + } + if (bundle.containsKey(ALPHA)) { + setAlpha(bundle.getFloat(ALPHA)); + } + } + @VisibleForTesting public HeadsUpStatusBarView(Context context, View iconPlaceholder, TextView textView) { this(context); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java index e52829a088e1..4f29b31fd941 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java @@ -102,8 +102,15 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G }; private OnClickListener mOnStopOrMinimizeNotifications = v -> { - mExitReason = NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS; - swapContent(false); + Runnable saveImportance = () -> { + mExitReason = NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS; + swapContent(false); + }; + if (mCheckSaveListener != null) { + mCheckSaveListener.checkSave(saveImportance, mSbn); + } else { + saveImportance.run(); + } }; private OnClickListener mOnUndo = v -> { @@ -300,15 +307,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G private void saveImportance() { if (!mIsNonblockable) { - // Only go through the lock screen/bouncer if the user hit 'Stop notifications'. - // Otherwise, update the importance immediately. - if (mCheckSaveListener != null - && NotificationCounters.BLOCKING_HELPER_STOP_NOTIFICATIONS.equals( - mExitReason)) { - mCheckSaveListener.checkSave(this::updateImportance, mSbn); - } else { - updateImportance(); - } + updateImportance(); } } @@ -513,6 +512,11 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G return getHeight(); } + @VisibleForTesting + public boolean isAnimating() { + return mExpandAnimation != null && mExpandAnimation.isRunning(); + } + /** * Runnable to either update the given channel (with a new importance value) or, if no channel * is provided, update notifications enabled state for the package. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java index 2fc2cdbd5e33..ade27f9f3ad2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.notification; +import static com.android.systemui.statusbar.ExpandableNotificationRow + .DEFAULT_HEADER_VISIBLE_AMOUNT; import static com.android.systemui.statusbar.notification.TransformState.TRANSFORM_Y; import android.app.Notification; @@ -123,6 +125,9 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper { // Reinspect the notification. resolveHeaderViews(); + if (row.getHeaderVisibleAmount() != DEFAULT_HEADER_VISIBLE_AMOUNT) { + setHeaderVisibleAmount(row.getHeaderVisibleAmount()); + } updateTransformedTypes(); addRemainingTransformTypes(); updateCropToPaddingForImageViews(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java index f7b7eeb2ad88..a781be69c93e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java @@ -22,6 +22,8 @@ import android.annotation.Nullable; import android.app.Fragment; import android.app.StatusBarManager; import android.os.Bundle; +import android.os.Parcelable; +import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -89,7 +91,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue super.onViewCreated(view, savedInstanceState); mStatusBar = (PhoneStatusBarView) view; if (savedInstanceState != null && savedInstanceState.containsKey(EXTRA_PANEL_STATE)) { - mStatusBar.go(savedInstanceState.getInt(EXTRA_PANEL_STATE)); + mStatusBar.restoreHierarchyState( + savedInstanceState.getSparseParcelableArray(EXTRA_PANEL_STATE)); } mDarkIconManager = new DarkIconManager(view.findViewById(R.id.statusIcons)); mDarkIconManager.setShouldLog(true); @@ -105,7 +108,9 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putInt(EXTRA_PANEL_STATE, mStatusBar.getState()); + SparseArray<Parcelable> states = new SparseArray<>(); + mStatusBar.saveHierarchyState(states); + outState.putSparseParcelableArray(EXTRA_PANEL_STATE, states); } @Override @@ -184,6 +189,14 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue state |= DISABLE_SYSTEM_INFO; state |= DISABLE_CLOCK; } + + // In landscape, the heads up show but shouldHideNotificationIcons() return false + // because the visual icon is in notification icon area rather than heads up's space. + // whether the notification icon show or not, clock should hide when heads up show. + if (mStatusBarComponent.isHeadsUpShouldBeVisible()) { + state |= DISABLE_CLOCK; + } + if (mNetworkController != null && EncryptionHelper.IS_DATA_ENCRYPTED) { if (mNetworkController.hasEmergencyCryptKeeperText()) { state |= DISABLE_NOTIFICATION_ICONS; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java index c3be09a87e33..da41366dce85 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java @@ -55,9 +55,12 @@ public class HeadsUpAppearanceController implements OnHeadsUpChangedListener, mSetTrackingHeadsUp = this::setTrackingHeadsUp; private final Runnable mUpdatePanelTranslation = this::updatePanelTranslation; private final BiConsumer<Float, Float> mSetExpandedHeight = this::setExpandedHeight; - private float mExpandedHeight; - private boolean mIsExpanded; - private float mExpandFraction; + @VisibleForTesting + float mExpandedHeight; + @VisibleForTesting + boolean mIsExpanded; + @VisibleForTesting + float mExpandFraction; private ExpandableNotificationRow mTrackedChild; private boolean mShown; private final View.OnLayoutChangeListener mStackScrollLayoutChangeListener = @@ -106,6 +109,20 @@ public class HeadsUpAppearanceController implements OnHeadsUpChangedListener, mOperatorNameView = operatorNameView; mDarkIconDispatcher = Dependency.get(DarkIconDispatcher.class); mDarkIconDispatcher.addDarkReceiver(this); + + mHeadsUpStatusBarView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { + @Override + public void onLayoutChange(View v, int left, int top, int right, int bottom, + int oldLeft, int oldTop, int oldRight, int oldBottom) { + if (shouldBeVisible()) { + updateTopEntry(); + + // trigger scroller to notify the latest panel translation + mStackScroller.requestLayout(); + } + mHeadsUpStatusBarView.removeOnLayoutChangeListener(this); + } + }); } @@ -339,4 +356,13 @@ public class HeadsUpAppearanceController implements OnHeadsUpChangedListener, mHeadsUpStatusBarView.setPublicMode(publicMode); updateTopEntry(); } + + void readFrom(HeadsUpAppearanceController oldController) { + if (oldController != null) { + mTrackedChild = oldController.mTrackedChild; + mExpandedHeight = oldController.mExpandedHeight; + mIsExpanded = oldController.mIsExpanded; + mExpandFraction = oldController.mExpandFraction; + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java index 653471d8a220..a536f0479f83 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java @@ -536,7 +536,8 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { return 0; } - int translation = (int) (mLastVisibleIconState.xTranslation + mIconSize); + int translation = (int) (isLayoutRtl() ? getWidth() - mLastVisibleIconState.xTranslation + : mLastVisibleIconState.xTranslation + mIconSize); // There's a chance that last translation goes beyond the edge maybe return Math.min(getWidth(), translation); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index 5c18782727df..f217a0740ace 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -2532,7 +2532,8 @@ public class NotificationPanelView extends PanelView implements } private void updateStatusBarIcons() { - boolean showIconsWhenExpanded = isFullWidth() && getExpandedHeight() < getOpeningHeight(); + boolean showIconsWhenExpanded = (isPanelVisibleBecauseOfHeadsUp() || isFullWidth()) + && getExpandedHeight() < getOpeningHeight(); if (showIconsWhenExpanded && mNoVisibleNotifications && isOnKeyguard()) { showIconsWhenExpanded = false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java index 6f4a3cd82140..5d234947de29 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java @@ -17,6 +17,8 @@ package com.android.systemui.statusbar.phone; import android.content.Context; +import android.os.Bundle; +import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; @@ -27,6 +29,8 @@ public abstract class PanelBar extends FrameLayout { public static final boolean DEBUG = false; public static final String TAG = PanelBar.class.getSimpleName(); private static final boolean SPEW = false; + private static final String PANEL_BAR_SUPER_PARCELABLE = "panel_bar_super_parcelable"; + private static final String STATE = "state"; private boolean mBouncerShowing; private boolean mExpanded; protected float mPanelFraction; @@ -49,8 +53,26 @@ public abstract class PanelBar extends FrameLayout { mState = state; } - public int getState() { - return mState; + @Override + protected Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(PANEL_BAR_SUPER_PARCELABLE, super.onSaveInstanceState()); + bundle.putInt(STATE, mState); + return bundle; + } + + @Override + protected void onRestoreInstanceState(Parcelable state) { + if (state == null || !(state instanceof Bundle)) { + super.onRestoreInstanceState(state); + return; + } + + Bundle bundle = (Bundle) state; + super.onRestoreInstanceState(bundle.getParcelable(PANEL_BAR_SUPER_PARCELABLE)); + if (((Bundle) state).containsKey(STATE)) { + go(bundle.getInt(STATE, STATE_CLOSED)); + } } public PanelBar(Context context, AttributeSet attrs) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 61f0e1cb29c7..31e5305410e8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -892,6 +892,16 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo for (ScrimState state : ScrimState.values()) { state.setHasBackdrop(hasBackdrop); } + + // Backdrop event may arrive after state was already applied, + // in this case, back-scrim needs to be re-evaluated + if (mState == ScrimState.AOD || mState == ScrimState.PULSING) { + float newBehindAlpha = mState.getBehindAlpha(mNotificationDensity); + if (mCurrentBehindAlpha != newBehindAlpha) { + mCurrentBehindAlpha = newBehindAlpha; + updateScrims(); + } + } } public void setLaunchingAffordanceWithPreview(boolean launchingAffordanceWithPreview) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java index 19015fcdacf7..081ebfac5f1b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java @@ -105,7 +105,6 @@ public enum ScrimState { public void prepare(ScrimState previousState) { final boolean alwaysOnEnabled = mDozeParameters.getAlwaysOn(); mBlankScreen = mDisplayRequiresBlanking; - mCurrentBehindAlpha = mWallpaperSupportsAmbientMode && !mHasBackdrop ? 0f : 1f; mCurrentInFrontAlpha = alwaysOnEnabled ? mAodFrontScrimAlpha : 1f; mCurrentInFrontTint = Color.BLACK; mCurrentBehindTint = Color.BLACK; @@ -116,6 +115,11 @@ public enum ScrimState { } @Override + public float getBehindAlpha(float busyness) { + return mWallpaperSupportsAmbientMode && !mHasBackdrop ? 0f : 1f; + } + + @Override public boolean isLowPowerState() { return true; } @@ -129,10 +133,14 @@ public enum ScrimState { public void prepare(ScrimState previousState) { mCurrentInFrontAlpha = 0; mCurrentInFrontTint = Color.BLACK; - mCurrentBehindAlpha = mWallpaperSupportsAmbientMode && !mHasBackdrop ? 0f : 1f; mCurrentBehindTint = Color.BLACK; mBlankScreen = mDisplayRequiresBlanking; } + + @Override + public float getBehindAlpha(float busyness) { + return mWallpaperSupportsAmbientMode && !mHasBackdrop ? 0f : 1f; + } }, /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 78634656d866..70bca8d41094 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -759,10 +759,12 @@ public class StatusBar extends SystemUI implements DemoMode, IVrManager vrManager = IVrManager.Stub.asInterface(ServiceManager.getService( Context.VR_SERVICE)); - try { - vrManager.registerListener(mVrStateCallbacks); - } catch (RemoteException e) { - Slog.e(TAG, "Failed to register VR mode state listener: " + e); + if (vrManager != null) { + try { + vrManager.registerListener(mVrStateCallbacks); + } catch (RemoteException e) { + Slog.e(TAG, "Failed to register VR mode state listener: " + e); + } } IWallpaperManager wallpaperManager = IWallpaperManager.Stub.asInterface( @@ -848,12 +850,25 @@ public class StatusBar extends SystemUI implements DemoMode, mStatusBarView.setBar(this); mStatusBarView.setPanel(mNotificationPanel); mStatusBarView.setScrimController(mScrimController); + + // CollapsedStatusBarFragment re-inflated PhoneStatusBarView and both of + // mStatusBarView.mExpanded and mStatusBarView.mBouncerShowing are false. + // PhoneStatusBarView's new instance will set to be gone in + // PanelBar.updateVisibility after calling mStatusBarView.setBouncerShowing + // that will trigger PanelBar.updateVisibility. If there is a heads up showing, + // it needs to notify PhoneStatusBarView's new instance to update the correct + // status by calling mNotificationPanel.notifyBarPanelExpansionChanged(). + if (mHeadsUpManager.hasPinnedHeadsUp()) { + mNotificationPanel.notifyBarPanelExpansionChanged(); + } mStatusBarView.setBouncerShowing(mBouncerShowing); if (oldStatusBarView != null) { float fraction = oldStatusBarView.getExpansionFraction(); boolean expanded = oldStatusBarView.isExpanded(); mStatusBarView.panelExpansionChanged(fraction, expanded); } + + HeadsUpAppearanceController oldController = mHeadsUpAppearanceController; if (mHeadsUpAppearanceController != null) { // This view is being recreated, let's destroy the old one mHeadsUpAppearanceController.destroy(); @@ -861,6 +876,7 @@ public class StatusBar extends SystemUI implements DemoMode, mHeadsUpAppearanceController = new HeadsUpAppearanceController( mNotificationIconAreaController, mHeadsUpManager, mStatusBarWindow); mStatusBarWindow.setStatusBarView(mStatusBarView); + mHeadsUpAppearanceController.readFrom(oldController); setAreThereNotifications(); checkBarModes(); }).getFragmentManager() @@ -2154,6 +2170,10 @@ public class StatusBar extends SystemUI implements DemoMode, } } + public boolean isHeadsUpShouldBeVisible() { + return mHeadsUpAppearanceController.shouldBeVisible(); + } + /** * All changes to the status bar and notifications funnel through here and are batched. */ 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/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java index 9aa804484716..8517d9086fc7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java @@ -25,6 +25,7 @@ import android.content.res.TypedArray; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; +import android.os.Parcelable; import android.os.SystemClock; import android.os.UserHandle; import android.text.Spannable; @@ -65,6 +66,12 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C DarkReceiver, ConfigurationListener { public static final String CLOCK_SECONDS = "clock_seconds"; + private static final String CLOCK_SUPER_PARCELABLE = "clock_super_parcelable"; + private static final String CURRENT_USER_ID = "current_user_id"; + private static final String VISIBLE_BY_POLICY = "visible_by_policy"; + private static final String VISIBLE_BY_USER = "visible_by_user"; + private static final String SHOW_SECONDS = "show_seconds"; + private static final String VISIBILITY = "visibility"; private final CurrentUserTracker mCurrentUserTracker; private int mCurrentUserId; @@ -129,6 +136,40 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C } @Override + public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(CLOCK_SUPER_PARCELABLE, super.onSaveInstanceState()); + bundle.putInt(CURRENT_USER_ID, mCurrentUserId); + bundle.putBoolean(VISIBLE_BY_POLICY, mClockVisibleByPolicy); + bundle.putBoolean(VISIBLE_BY_USER, mClockVisibleByUser); + bundle.putBoolean(SHOW_SECONDS, mShowSeconds); + bundle.putInt(VISIBILITY, getVisibility()); + + return bundle; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + if (state == null || !(state instanceof Bundle)) { + super.onRestoreInstanceState(state); + return; + } + + Bundle bundle = (Bundle) state; + Parcelable superState = bundle.getParcelable(CLOCK_SUPER_PARCELABLE); + super.onRestoreInstanceState(superState); + if (bundle.containsKey(CURRENT_USER_ID)) { + mCurrentUserId = bundle.getInt(CURRENT_USER_ID); + } + mClockVisibleByPolicy = bundle.getBoolean(VISIBLE_BY_POLICY, true); + mClockVisibleByUser = bundle.getBoolean(VISIBLE_BY_USER, true); + mShowSeconds = bundle.getBoolean(SHOW_SECONDS, false); + if (bundle.containsKey(VISIBILITY)) { + setVisibility(bundle.getInt(VISIBILITY)); + } + } + + @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java index 3c16329e6f19..c44b385f5057 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java @@ -17,10 +17,7 @@ package com.android.systemui.statusbar.policy; import android.app.ActivityManager; -import android.content.BroadcastReceiver; import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.os.UserManager; @@ -38,14 +35,13 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private final ArrayList<Callback> mCallbacks = new ArrayList<>(); - private final WifiStateReceiver mWifiStateReceiver = new WifiStateReceiver(); private final ConnectivityManager mConnectivityManager; private final WifiManager mWifiManager; private final Context mContext; private int mHotspotState; private int mNumConnectedDevices; - private boolean mWaitingForCallback; + private boolean mWaitingForTerminalState; public HotspotControllerImpl(Context context) { mContext = context; @@ -63,7 +59,9 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("HotspotController state:"); - pw.print(" mHotspotEnabled="); pw.println(stateToString(mHotspotState)); + pw.print(" mHotspotState="); pw.println(stateToString(mHotspotState)); + pw.print(" mNumConnectedDevices="); pw.println(mNumConnectedDevices); + pw.print(" mWaitingForTerminalState="); pw.println(mWaitingForTerminalState); } private static String stateToString(int hotspotState) { @@ -99,7 +97,6 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof if (DEBUG) Log.d(TAG, "removeCallback " + callback); synchronized (mCallbacks) { mCallbacks.remove(callback); - updateWifiStateListeners(!mCallbacks.isEmpty()); } } @@ -112,7 +109,6 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof * @param shouldListen whether we should start listening to various wifi statuses */ private void updateWifiStateListeners(boolean shouldListen) { - mWifiStateReceiver.setListening(shouldListen); if (shouldListen) { mWifiManager.registerSoftApCallback( this, @@ -129,21 +125,27 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof @Override public boolean isHotspotTransient() { - return mWaitingForCallback || (mHotspotState == WifiManager.WIFI_AP_STATE_ENABLING); + return mWaitingForTerminalState || (mHotspotState == WifiManager.WIFI_AP_STATE_ENABLING); } @Override public void setHotspotEnabled(boolean enabled) { - if (mWaitingForCallback) { - if (DEBUG) Log.d(TAG, "Ignoring setHotspotEnabled; waiting for callback."); + if (mWaitingForTerminalState) { + if (DEBUG) Log.d(TAG, "Ignoring setHotspotEnabled; waiting for terminal state."); return; } if (enabled) { - OnStartTetheringCallback callback = new OnStartTetheringCallback(); - mWaitingForCallback = true; + mWaitingForTerminalState = true; if (DEBUG) Log.d(TAG, "Starting tethering"); - mConnectivityManager.startTethering( - ConnectivityManager.TETHERING_WIFI, false, callback); + mConnectivityManager.startTethering(ConnectivityManager.TETHERING_WIFI, false, + new ConnectivityManager.OnStartTetheringCallback() { + @Override + public void onTetheringFailed() { + if (DEBUG) Log.d(TAG, "onTetheringFailed"); + maybeResetSoftApState(); + fireHotspotChangedCallback(); + } + }); } else { mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI); } @@ -155,97 +157,57 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof } /** - * Sends a hotspot changed callback with the new enabled status. Wraps - * {@link #fireHotspotChangedCallback(boolean, int)} and assumes that the number of devices has - * not changed. - * - * @param enabled whether the hotspot is enabled - */ - private void fireHotspotChangedCallback(boolean enabled) { - fireHotspotChangedCallback(enabled, mNumConnectedDevices); - } - - /** - * Sends a hotspot changed callback with the new enabled status & the number of devices - * connected to the hotspot. Be careful when calling over multiple threads, especially if one of - * them is the main thread (as it can be blocked). - * - * @param enabled whether the hotspot is enabled - * @param numConnectedDevices number of devices connected to the hotspot + * Sends a hotspot changed callback. + * Be careful when calling over multiple threads, especially if one of them is the main thread + * (as it can be blocked). */ - private void fireHotspotChangedCallback(boolean enabled, int numConnectedDevices) { + private void fireHotspotChangedCallback() { synchronized (mCallbacks) { for (Callback callback : mCallbacks) { - callback.onHotspotChanged(enabled, numConnectedDevices); + callback.onHotspotChanged(isHotspotEnabled(), mNumConnectedDevices); } } } @Override public void onStateChanged(int state, int failureReason) { - // Do nothing - we don't care about changing anything here. - } + // Update internal hotspot state for tracking before using any enabled/callback methods. + mHotspotState = state; + + maybeResetSoftApState(); + if (!isHotspotEnabled()) { + // Reset num devices if the hotspot is no longer enabled so we don't get ghost + // counters. + mNumConnectedDevices = 0; + } - @Override - public void onNumClientsChanged(int numConnectedDevices) { - mNumConnectedDevices = numConnectedDevices; - fireHotspotChangedCallback(isHotspotEnabled(), numConnectedDevices); + fireHotspotChangedCallback(); } - private final class OnStartTetheringCallback extends - ConnectivityManager.OnStartTetheringCallback { - @Override - public void onTetheringStarted() { - if (DEBUG) Log.d(TAG, "onTetheringStarted"); - mWaitingForCallback = false; - // Don't fire a callback here, instead wait for the next update from wifi. + private void maybeResetSoftApState() { + if (!mWaitingForTerminalState) { + return; // Only reset soft AP state if enabled from this controller. } - @Override - public void onTetheringFailed() { - if (DEBUG) Log.d(TAG, "onTetheringFailed"); - mWaitingForCallback = false; - fireHotspotChangedCallback(isHotspotEnabled()); - // TODO: Show error. + switch (mHotspotState) { + case WifiManager.WIFI_AP_STATE_FAILED: + // TODO(b/110697252): must be called to reset soft ap state after failure + mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI); + // Fall through + case WifiManager.WIFI_AP_STATE_ENABLED: + case WifiManager.WIFI_AP_STATE_DISABLED: + mWaitingForTerminalState = false; + break; + case WifiManager.WIFI_AP_STATE_ENABLING: + case WifiManager.WIFI_AP_STATE_DISABLING: + default: + break; } } - /** - * Class to listen in on wifi state and update the hotspot state - */ - private final class WifiStateReceiver extends BroadcastReceiver { - private boolean mRegistered; - - public void setListening(boolean listening) { - if (listening && !mRegistered) { - if (DEBUG) Log.d(TAG, "Registering receiver"); - final IntentFilter filter = new IntentFilter(); - filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); - mContext.registerReceiver(this, filter); - mRegistered = true; - } else if (!listening && mRegistered) { - if (DEBUG) Log.d(TAG, "Unregistering receiver"); - mContext.unregisterReceiver(this); - mRegistered = false; - } - } - - @Override - public void onReceive(Context context, Intent intent) { - int state = intent.getIntExtra( - WifiManager.EXTRA_WIFI_AP_STATE, WifiManager.WIFI_AP_STATE_FAILED); - if (DEBUG) Log.d(TAG, "onReceive " + state); - - // Update internal hotspot state for tracking before using any enabled/callback methods. - mHotspotState = state; - - if (!isHotspotEnabled()) { - // Reset num devices if the hotspot is no longer enabled so we don't get ghost - // counters. - mNumConnectedDevices = 0; - } - - fireHotspotChangedCallback(isHotspotEnabled()); - } + @Override + public void onNumClientsChanged(int numConnectedDevices) { + mNumConnectedDevices = numConnectedDevices; + fireHotspotChangedCallback(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 54811f5783ae..4c241bd18c3c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -1421,7 +1421,8 @@ public class NotificationStackScrollLayout extends ViewGroup */ private int targetScrollForView(ExpandableView v, int positionInLinearLayout) { return positionInLinearLayout + v.getIntrinsicHeight() + - getImeInset() - getHeight() + getTopPadding(); + getImeInset() - getHeight() + + ((!isExpanded() && isPinnedHeadsUp(v)) ? mHeadsUpInset : getTopPadding()); } @Override @@ -2052,9 +2053,15 @@ public class NotificationStackScrollLayout extends ViewGroup } private int getScrollRange() { - int scrollRange = Math.max(0, mContentHeight - mMaxLayoutHeight); + // In current design, it only use the top HUN to treat all of HUNs + // although there are more than one HUNs + int contentHeight = mContentHeight; + if (!isExpanded() && mHeadsUpManager.hasPinnedHeadsUp()) { + contentHeight = mHeadsUpInset + getTopHeadsUpPinnedHeight(); + } + int scrollRange = Math.max(0, contentHeight - mMaxLayoutHeight); int imeInset = getImeInset(); - scrollRange += Math.min(imeInset, Math.max(0, mContentHeight - (getHeight() - imeInset))); + scrollRange += Math.min(imeInset, Math.max(0, contentHeight - (getHeight() - imeInset))); return scrollRange; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java index 0d50f5a9eef7..05870e851d14 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java @@ -473,6 +473,15 @@ public class StackScrollAlgorithm { childState.yTranslation = topState.yTranslation + topState.height - childState.height; } + + // heads up notification show and this row is the top entry of heads up + // notifications. i.e. this row should be the only one row that has input field + // To check if the row need to do translation according to scroll Y + // heads up show full of row's content and any scroll y indicate that the + // translationY need to move up the HUN. + if (!mIsExpanded && isTopEntry && ambientState.getScrollY() > 0) { + childState.yTranslation -= ambientState.getScrollY(); + } } if (row.isHeadsUpAnimatingAway()) { childState.hidden = false; 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/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java index d46a9747ac24..2055519a1622 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -16,14 +16,22 @@ package com.android.keyguard; +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.truth.Truth.*; + import android.content.Context; import android.content.Intent; +import android.os.Bundle; +import android.telephony.ServiceState; +import android.telephony.SubscriptionManager; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; import com.android.internal.telephony.IccCardConstants; +import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.systemui.SysuiTestCase; @@ -70,6 +78,184 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { keyguardUpdateMonitor.hasSimStateJustChanged()); } + @Test + public void testTelephonyCapable_BootInitState() { + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isFalse(); + } + + @Test + public void testTelephonyCapable_SimState_Absent() { + Intent intent = new Intent(TelephonyIntents.ACTION_SIM_STATE_CHANGED); + intent.putExtra(IccCardConstants.INTENT_KEY_ICC_STATE + , IccCardConstants.INTENT_VALUE_ICC_ABSENT); + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intent,null, false)); + mTestableLooper.processAllMessages(); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isTrue(); + } + + @Test + public void testTelephonyCapable_SimInvalid_ServiceState_InService() { + // SERVICE_STATE - IN_SERVICE, but SIM_STATE is invalid TelephonyCapable should be False + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); + Bundle data = new Bundle(); + ServiceState state = new ServiceState(); + state.setState(ServiceState.STATE_IN_SERVICE); + state.fillInNotifierBundle(data); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intent, data, false)); + mTestableLooper.processAllMessages(); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isFalse(); + } + + @Test + public void testTelephonyCapable_SimValid_ServiceState_PowerOff() { + // Simulate AirplaneMode case, SERVICE_STATE - POWER_OFF, check TelephonyCapable False + // Only receive ServiceState callback IN_SERVICE -> OUT_OF_SERVICE -> POWER_OFF + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); + intent.putExtra(IccCardConstants.INTENT_KEY_ICC_STATE + , IccCardConstants.INTENT_VALUE_ICC_LOADED); + Bundle data = new Bundle(); + ServiceState state = new ServiceState(); + state.setState(ServiceState.STATE_POWER_OFF); + state.fillInNotifierBundle(data); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intent, data, true)); + mTestableLooper.processAllMessages(); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isTrue(); + } + + /* Normal SIM inserted flow + * ServiceState: ---OutOfServie----->PowerOff->OutOfServie--->InService + * SimState: ----NOT_READY---->READY----------------------LOADED>>> + * Subscription: --------null---->null--->"Chunghwa Telecom"-------->>> + * System: -------------------------------BOOT_COMPLETED------>>> + * TelephonyCapable:(F)-(F)-(F)-(F)-(F)-(F)-(F)-(F)-(F)-(F)------(T)-(T)>> + */ + @Test + public void testTelephonyCapable_BootInitState_ServiceState_OutOfService() { + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); + Bundle data = new Bundle(); + ServiceState state = new ServiceState(); + state.setState(ServiceState.STATE_OUT_OF_SERVICE); + state.fillInNotifierBundle(data); + intent.putExtras(data); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intent, data, false)); + mTestableLooper.processAllMessages(); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isFalse(); + } + + @Test + public void testTelephonyCapable_BootInitState_SimState_NotReady() { + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + Bundle data = new Bundle(); + ServiceState state = new ServiceState(); + state.setState(ServiceState.STATE_OUT_OF_SERVICE); + state.fillInNotifierBundle(data); + Intent intent = new Intent(TelephonyIntents.ACTION_SIM_STATE_CHANGED); + intent.putExtra(IccCardConstants.INTENT_KEY_ICC_STATE + , IccCardConstants.INTENT_VALUE_ICC_NOT_READY); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intent, data, false)); + mTestableLooper.processAllMessages(); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isFalse(); + } + + @Test + public void testTelephonyCapable_BootInitState_SimState_Ready() { + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + Bundle data = new Bundle(); + ServiceState state = new ServiceState(); + state.setState(ServiceState.STATE_OUT_OF_SERVICE); + state.fillInNotifierBundle(data); + Intent intent = new Intent(TelephonyIntents.ACTION_SIM_STATE_CHANGED); + intent.putExtra(IccCardConstants.INTENT_KEY_ICC_STATE + , IccCardConstants.INTENT_VALUE_ICC_READY); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intent, data, false)); + mTestableLooper.processAllMessages(); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isFalse(); + } + + @Test + public void testTelephonyCapable_BootInitState_ServiceState_PowerOff() { + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); + Bundle data = new Bundle(); + ServiceState state = new ServiceState(); + state.setState(ServiceState.STATE_POWER_OFF); + state.fillInNotifierBundle(data); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intent, data, false)); + mTestableLooper.processAllMessages(); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isFalse(); + } + + @Test + public void testTelephonyCapable_SimValid_ServiceState_InService() { + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); + Bundle data = new Bundle(); + ServiceState state = new ServiceState(); + state.setState(ServiceState.STATE_IN_SERVICE); + state.fillInNotifierBundle(data); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intent, data, true)); + mTestableLooper.processAllMessages(); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isTrue(); + } + + @Test + public void testTelephonyCapable_SimValid_SimState_Loaded() { + TestableKeyguardUpdateMonitor keyguardUpdateMonitor = + new TestableKeyguardUpdateMonitor(getContext()); + Bundle data = new Bundle(); + ServiceState state = new ServiceState(); + state.setState(ServiceState.STATE_IN_SERVICE); + state.fillInNotifierBundle(data); + Intent intentSimState = new Intent(TelephonyIntents.ACTION_SIM_STATE_CHANGED); + intentSimState.putExtra(IccCardConstants.INTENT_KEY_ICC_STATE + , IccCardConstants.INTENT_VALUE_ICC_LOADED); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intentSimState, data, true)); + mTestableLooper.processAllMessages(); + // Even SimState Loaded, still need ACTION_SERVICE_STATE_CHANGED turn on mTelephonyCapable + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isFalse(); + + Intent intentServiceState = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); + intentSimState.putExtra(IccCardConstants.INTENT_KEY_ICC_STATE + , IccCardConstants.INTENT_VALUE_ICC_LOADED); + keyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext() + , putPhoneInfo(intentServiceState, data, true)); + mTestableLooper.processAllMessages(); + assertThat(keyguardUpdateMonitor.mTelephonyCapable).isTrue(); + } + + private Intent putPhoneInfo(Intent intent, Bundle data, Boolean simInited) { + int subscription = simInited + ? 1/* mock subid=1 */ : SubscriptionManager.DUMMY_SUBSCRIPTION_ID_BASE; + if (data != null) intent.putExtras(data); + intent.putExtra(PhoneConstants.PHONE_NAME_KEY, "Phone"); + intent.putExtra("subscription", subscription); + intent.putExtra("slot", 0/* SLOT 1 */); + return intent; + } + private class TestableKeyguardUpdateMonitor extends KeyguardUpdateMonitor { AtomicBoolean mSimStateChanged = new AtomicBoolean(false); 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/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java index a72fed4a2b41..0017943cfc98 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java @@ -158,6 +158,11 @@ public class NotificationInfoTest extends SysuiTestCase { PollingCheck.waitFor(1000, () -> VISIBLE == mNotificationInfo.findViewById(R.id.confirmation).getVisibility()); } + private void ensureNoUndoButton() { + PollingCheck.waitFor(1000, + () -> GONE == mNotificationInfo.findViewById(R.id.confirmation).getVisibility() + && !mNotificationInfo.isAnimating()); + } private void waitForStopButton() { PollingCheck.waitFor(1000, () -> VISIBLE == mNotificationInfo.findViewById(R.id.prompt).getVisibility()); @@ -567,9 +572,6 @@ public class NotificationInfoTest extends SysuiTestCase { true /* isUserSentimentNegative */); mNotificationInfo.findViewById(R.id.block).performClick(); - waitForUndoButton(); - mNotificationInfo.handleCloseControls(true /* save */, false /* force */); - mTestableLooper.processAllMessages(); verify(listener).checkSave(any(Runnable.class), eq(mSbn)); } @@ -787,7 +789,7 @@ public class NotificationInfoTest extends SysuiTestCase { } @Test - public void testCloseControlsDoesNotUpdateIfCheckSaveListenerIsNoOp() throws Exception { + public void testBlockDoesNothingIfCheckSaveListenerIsNoOp() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, @@ -795,10 +797,10 @@ public class NotificationInfoTest extends SysuiTestCase { }, null, null, true); mNotificationInfo.findViewById(R.id.block).performClick(); - waitForUndoButton(); + mTestableLooper.processAllMessages(); + ensureNoUndoButton(); mNotificationInfo.handleCloseControls(true, false); - mTestableLooper.processAllMessages(); verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( eq(TEST_PACKAGE_NAME), eq(TEST_UID), eq(mNotificationChannel)); } @@ -813,6 +815,10 @@ public class NotificationInfoTest extends SysuiTestCase { }, null, null, false); mNotificationInfo.findViewById(R.id.block).performClick(); + mTestableLooper.processAllMessages(); + verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( + eq(TEST_PACKAGE_NAME), eq(TEST_UID), eq(mNotificationChannel)); + waitForUndoButton(); mNotificationInfo.handleCloseControls(true, false); 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 3c5c0b883e08..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) @@ -156,4 +149,26 @@ public class HeadsUpAppearanceControllerTest extends SysuiTestCase { verify(mStackScroller).removeOnExpandedHeightListener(any()); verify(mStackScroller).removeOnLayoutChangeListener(any()); } + + @Test + public void testHeaderReadFromOldController() { + mHeadsUpAppearanceController.setExpandedHeight(1.0f, 1.0f); + + HeadsUpAppearanceController newController = new HeadsUpAppearanceController( + mock(NotificationIconAreaController.class), + mHeadsUpManager, + mHeadsUpStatusBarView, + mStackScroller, + mPanelView, + new View(mContext), + new View(mContext)); + newController.readFrom(mHeadsUpAppearanceController); + + Assert.assertEquals(mHeadsUpAppearanceController.mExpandedHeight, + newController.mExpandedHeight, 0.0f); + Assert.assertEquals(mHeadsUpAppearanceController.mExpandFraction, + newController.mExpandFraction, 0.0f); + Assert.assertEquals(mHeadsUpAppearanceController.mIsExpanded, + newController.mIsExpanded); + } } 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 89d562a2099c..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; @@ -152,6 +153,20 @@ public class ScrimControllerTest extends SysuiTestCase { } @Test + public void setHasBackdrop_withAodWallpaperAndAlbumArt() { + mScrimController.setWallpaperSupportsAmbientMode(true); + mScrimController.transitionTo(ScrimState.AOD); + mScrimController.finishAnimationsImmediately(); + mScrimController.setHasBackdrop(true); + mScrimController.finishAnimationsImmediately(); + // Front scrim should be transparent + // Back scrim should be visible with tint + assertScrimVisibility(VISIBILITY_FULLY_TRANSPARENT, VISIBILITY_FULLY_OPAQUE); + assertScrimTint(mScrimBehind, true /* tinted */); + assertScrimTint(mScrimInFront, true /* tinted */); + } + + @Test public void transitionToAod_withFrontAlphaUpdates() { // Assert that setting the AOD front scrim alpha doesn't take effect in a non-AOD state. mScrimController.transitionTo(ScrimState.KEYGUARD); 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/packages/VpnDialogs/Android.bp b/packages/VpnDialogs/Android.bp new file mode 100644 index 000000000000..6f2f50c0ddd4 --- /dev/null +++ b/packages/VpnDialogs/Android.bp @@ -0,0 +1,23 @@ +// +// Copyright (C) 2011 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_app { + name: "VpnDialogs", + certificate: "platform", + privileged: true, + srcs: ["src/**/*.java"], + platform_apis: true, +} diff --git a/packages/VpnDialogs/Android.mk b/packages/VpnDialogs/Android.mk deleted file mode 100644 index 850764645644..000000000000 --- a/packages/VpnDialogs/Android.mk +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (C) 2011 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_CERTIFICATE := platform - -LOCAL_PRIVILEGED_MODULE := true - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := VpnDialogs -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) diff --git a/packages/VpnDialogs/res/values-de/strings.xml b/packages/VpnDialogs/res/values-de/strings.xml index d901104759c4..0f1e00980439 100644 --- a/packages/VpnDialogs/res/values-de/strings.xml +++ b/packages/VpnDialogs/res/values-de/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="prompt" msgid="3183836924226407828">"Verbindungsanfrage"</string> - <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> möchte eine VPN-Verbindung herstellen, über die der Netzwerkverkehr überwacht werden kann. Lass die Verbindung nur zu, wenn die App vertrauenswürdig ist. <br /> <br /> <img src=vpn_icon /> wird oben am Display angezeigt, wenn VPN aktiv ist."</string> + <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> möchte eine VPN-Verbindung herstellen, über die der Netzwerkverkehr überwacht werden kann. Lass die Verbindung nur zu, wenn die App vertrauenswürdig ist. Wenn VPN aktiv ist, wird oben im Display <br /> <br /> <img src=vpn_icon /> angezeigt."</string> <string name="legacy_title" msgid="192936250066580964">"VPN ist verbunden"</string> <string name="session" msgid="6470628549473641030">"Sitzung:"</string> <string name="duration" msgid="3584782459928719435">"Dauer:"</string> diff --git a/packages/VpnDialogs/res/values-hi/strings.xml b/packages/VpnDialogs/res/values-hi/strings.xml index b866e5cdba5c..5560a855627f 100644 --- a/packages/VpnDialogs/res/values-hi/strings.xml +++ b/packages/VpnDialogs/res/values-hi/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="prompt" msgid="3183836924226407828">"कनेक्शन अनुरोध"</string> - <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> वीपीएन कनेक्शन सेट अप करना चाहता है, जिससे वह नेटवर्क ट्रैफ़िक पर नज़र रख पाएगा. इसकी मंज़ूरी तभी दें जब आपको इस पर भरोसा हो. वीपीएन चालू होने पर आपकी स्क्रीन के सबसे ऊपर <br /> <br /> <img src=vpn_icon /> दिखाई देता है."</string> + <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> वीपीएन कनेक्शन सेट अप करना चाहता है, जिससे वह नेटवर्क ट्रैफ़िक पर नज़र रख पाएगा. इसकी मंज़ूरी तभी दें जब आपको इस पर भरोसा हो. वीपीएन चालू होने पर <br /> <br /> <img src=vpn_icon /> आपकी स्क्रीन के सबसे ऊपर दिखाई देता है."</string> <string name="legacy_title" msgid="192936250066580964">"VPN कनेक्ट है"</string> <string name="session" msgid="6470628549473641030">"सत्र:"</string> <string name="duration" msgid="3584782459928719435">"अवधि:"</string> diff --git a/packages/VpnDialogs/res/values-mr/strings.xml b/packages/VpnDialogs/res/values-mr/strings.xml index 129b7b15c2c8..318f854340e2 100644 --- a/packages/VpnDialogs/res/values-mr/strings.xml +++ b/packages/VpnDialogs/res/values-mr/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="prompt" msgid="3183836924226407828">"कनेक्शन विनंती"</string> - <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> नेटवर्क रहदारीचे परीक्षण करण्यासाठी त्यास अनुमती देणारे VPN कनेक्शन सेट करू इच्छितो. आपल्याला स्त्रोत विश्वसनीय वाटत असेल तरच स्वीकार करा. <br /> <br /> <img src=vpn_icon /> VPN सक्रिय असताना आपल्या स्क्रीनच्या शीर्षावर दिसते."</string> + <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> नेटवर्क रहदारीचे परीक्षण करण्यासाठी त्यास अनुमती देणारे VPN कनेक्शन सेट करू इच्छितो. तुम्हाला स्त्रोत विश्वसनीय वाटत असेल तरच स्वीकार करा. <br /> <br /> <img src=vpn_icon /> VPN सक्रिय असताना आपल्या स्क्रीनच्या शीर्षावर दिसते."</string> <string name="legacy_title" msgid="192936250066580964">"VPN कनेक्ट केले"</string> <string name="session" msgid="6470628549473641030">"सत्र:"</string> <string name="duration" msgid="3584782459928719435">"कालावधी:"</string> diff --git a/packages/WAPPushManager/Android.bp b/packages/WAPPushManager/Android.bp new file mode 100644 index 000000000000..1bec49234b6a --- /dev/null +++ b/packages/WAPPushManager/Android.bp @@ -0,0 +1,12 @@ +// Copyright 2007-2008 The Android Open Source Project + +android_app { + name: "WAPPushManager", + srcs: ["src/**/*.java"], + platform_apis: true, + libs: ["telephony-common"], + static_libs: ["android-common"], + optimize: { + proguard_flags_files: ["proguard.flags"], + }, +} diff --git a/packages/WAPPushManager/Android.mk b/packages/WAPPushManager/Android.mk deleted file mode 100644 index 91526dd19ce0..000000000000 --- a/packages/WAPPushManager/Android.mk +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 2007-2008 The Android Open Source Project - - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := WAPPushManager -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_JAVA_LIBRARIES += telephony-common -LOCAL_STATIC_JAVA_LIBRARIES += android-common - -LOCAL_PROGUARD_FLAG_FILES := proguard.flags - -include $(BUILD_PACKAGE) - -# This finds and builds the test apk as well, so a single make does both. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/packages/WAPPushManager/tests/Android.bp b/packages/WAPPushManager/tests/Android.bp new file mode 100644 index 000000000000..25c6121324ea --- /dev/null +++ b/packages/WAPPushManager/tests/Android.bp @@ -0,0 +1,34 @@ +// Copyright 2008, 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: "WAPPushManagerTests", + libs: [ + "android.test.runner", + "telephony-common", + "android.test.base", + ], + static_libs: ["junit"], + // Include all test java files. + srcs: [ + "src/**/*.java", + "src/com/android/smspush/unitTests/IDataVerify.aidl", + ], + // Notice that we don't have to include the src files of Email + // because running the tests using an instrumentation targeting + // Email, we automatically get all of its classes loaded into + // our environment. + platform_apis: true, + instrumentation_for: "WAPPushManager", +} diff --git a/packages/WAPPushManager/tests/Android.mk b/packages/WAPPushManager/tests/Android.mk deleted file mode 100644 index c4c2240f102c..000000000000 --- a/packages/WAPPushManager/tests/Android.mk +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright 2008, The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common android.test.base -LOCAL_STATIC_JAVA_LIBRARIES := junit - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_SRC_FILES += \ - src/com/android/smspush/unitTests/IDataVerify.aidl - - -# Notice that we don't have to include the src files of Email because, by -# running the tests using an instrumentation targeting Eamil, we -# automatically get all of its classes loaded into our environment. - -LOCAL_PACKAGE_NAME := WAPPushManagerTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_INSTRUMENTATION_FOR := WAPPushManager - -include $(BUILD_PACKAGE) - diff --git a/packages/WallpaperBackup/Android.bp b/packages/WallpaperBackup/Android.bp new file mode 100644 index 000000000000..56020cd573b1 --- /dev/null +++ b/packages/WallpaperBackup/Android.bp @@ -0,0 +1,26 @@ +// +// 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_app { + name: "WallpaperBackup", + srcs: ["src/**/*.java"], + optimize: { + proguard_flags_files: ["proguard.flags"], + }, + platform_apis: true, + certificate: "platform", + privileged: false, +} diff --git a/packages/WallpaperBackup/Android.mk b/packages/WallpaperBackup/Android.mk deleted file mode 100644 index a6426a6ce217..000000000000 --- a/packages/WallpaperBackup/Android.mk +++ /dev/null @@ -1,35 +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 := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PROGUARD_FLAG_FILES := proguard.flags - -LOCAL_PACKAGE_NAME := WallpaperBackup -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRIVILEGED_MODULE := false - -include $(BUILD_PACKAGE) - -######################## -include $(call all-makefiles-under,$(LOCAL_PATH)) - diff --git a/packages/WallpaperCropper/Android.bp b/packages/WallpaperCropper/Android.bp new file mode 100644 index 000000000000..40c423520081 --- /dev/null +++ b/packages/WallpaperCropper/Android.bp @@ -0,0 +1,11 @@ +android_app { + name: "WallpaperCropper", + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + product_specific: true, + privileged: true, + optimize: { + proguard_flags_files: ["proguard.flags"], + }, +} diff --git a/packages/WallpaperCropper/Android.mk b/packages/WallpaperCropper/Android.mk deleted file mode 100644 index 2fa1ddee0fd9..000000000000 --- a/packages/WallpaperCropper/Android.mk +++ /dev/null @@ -1,18 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := WallpaperCropper -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRODUCT_MODULE := true -LOCAL_PRIVILEGED_MODULE := true - -LOCAL_PROGUARD_FLAG_FILES := proguard.flags - -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-af/strings.xml index 3eca94ed389c..981113377e3e 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-af/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-af/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Hoekskermuitsnede"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Hoekuitsnede"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-am/strings.xml index b6c4de109c08..26261951d7bc 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-am/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-am/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"የማዕዘን ማሳያ ቅርጽ"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"የማዕዘን ቅርጽ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ar/strings.xml index 9517eb2805e0..c01732d7fef3 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ar/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ar/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"صورة مقطوعة لشاشة جانبية"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"صورة مقطوعة جانبية"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-az/strings.xml index abb42472f50b..4b089a4d98ea 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-az/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-az/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Künc ekran kəsimi"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Künc kəsimi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-b+sr+Latn/strings.xml index 41dfd3adb366..5393410cffb6 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-b+sr+Latn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-b+sr+Latn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Izrezana slika u uglu ekrana"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Izrezana slika u uglu ekrana"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-be/strings.xml index edd9e6599bf1..26c0b18b5b29 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-be/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-be/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Зрабіць выраз у кутку экрана"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Выраз у кутку"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bg/strings.xml index 681a9b9f1bf1..849bf5799ae5 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bg/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bg/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ъглов прорез на екрана"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Ъглов прорез"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bn/strings.xml index 194949d8f086..41aa8045b4cf 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"কর্নার ডিসপ্লে কাট-আউট"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"কর্নার কাট-আউট"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bs/strings.xml index e79efe6f92df..9ff0218af31b 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-bs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Urez ekrana u uglu"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Urez u uglu"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ca/strings.xml index 627ef2427d00..34325023badf 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ca/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ca/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Retall de l\'extrem de la pantalla"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Retall de l\'extrem"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-cs/strings.xml index fd439957136b..7edff6fac02d 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-cs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-cs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Rohový výřez displeje"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Rohový výřez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-da/strings.xml index ec274197edc7..31b537c645d3 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-da/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-da/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Udskæring i hjørnet af skærmen"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Hak i hjørnet"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-de/strings.xml index da7c237f9f5b..2e142efc12ab 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-de/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-de/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Display-Ausschnitt in der Ecke"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Aussparung in der Ecke"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-el/strings.xml index 460a8b631aa0..0cf91ddbb6b6 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-el/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-el/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Διακοπή γωνιακής οθόνης"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Γωνιακή εγκοπή"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rAU/strings.xml index 105883238c84..69230060f92c 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rAU/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rAU/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Corner display cut out"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Corner cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rGB/strings.xml index 105883238c84..69230060f92c 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rGB/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rGB/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Corner display cut out"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Corner cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rIN/strings.xml index 105883238c84..69230060f92c 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rIN/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-en-rIN/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Corner display cut out"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Corner cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es-rUS/strings.xml index a4d8e64922e3..6d41bc0fb958 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es-rUS/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es-rUS/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Recorte de la esquina de la pantalla"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Corte de la esquina"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es/strings.xml index a4d8e64922e3..d6d3a1eec1b1 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-es/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Recorte de la esquina de la pantalla"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Recorte de la esquina"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-et/strings.xml index 1dec9709ad14..6626787c8013 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-et/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-et/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ekraani nurga väljalõige"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Nurga väljalõige"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-eu/strings.xml index a82e8eab7253..fd2f6460097a 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-eu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-eu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Pantailaren izkinako mozketa"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Izkinako mozketa"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fa/strings.xml index bfbaa5c379ca..0d33978901da 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fa/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"نمایشگر با گوشههای بریده"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"نمایشگر با لبه بریده"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fi/strings.xml index 4803b54e17b1..2acb9827f70c 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Aukko näytön kulmassa"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Nurkkalovi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr-rCA/strings.xml index 4110d5186659..ecf4e936c885 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr-rCA/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr-rCA/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Découpe d\'écran en coin"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Encoche de coin"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr/strings.xml index ff341a28b3d0..05c5c2ba9638 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Encoche d\'angle pour écran"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Encoche d\'angle"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gl/strings.xml index 7838d69b610a..ae77dbda4d6f 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Recorte de pantalla na esquina"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Recorte na esquina"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gu/strings.xml index 0680f7f2843c..3c8c4e695d4b 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-gu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ખૂણાનું ડિસ્પ્લે કટઆઉટ"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"કોર્નર કટઆઉટ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hi/strings.xml index 01b8d6901911..435b6646e5ef 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"कॉर्नर डिसप्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"कॉर्नर कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hr/strings.xml index f8b2f79de3de..e783abecd0b1 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Obrezana slika za kut zaslona"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Obrezana slika"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hu/strings.xml index 7658edcb9b43..099267da85e3 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Sarokban található képernyőkivágás"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Sarokkivágás"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hy/strings.xml index 656ae24ad589..7eb880313b99 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hy/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hy/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Էկրանի անկյունի կտրվածք"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Անկյունի կտրվածք"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-in/strings.xml index 78247f66432f..0dc0bfb84b61 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-in/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-in/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Potongan tampilan sudut"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Potongan sudut"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-is/strings.xml index 755360f64c73..56ba1b97fa43 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-is/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-is/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Hornskjáskurður"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Hornskurður"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-it/strings.xml index 3eadd5fe999c..b28243715057 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-it/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-it/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ritaglio display angolo"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Ritaglio angolo"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-iw/strings.xml index bfb4797a7dd8..1b46b50a530e 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-iw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-iw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"חיתוך פינות התצוגה"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"מגרעת בפינה"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ja/strings.xml index fee2d70cbf34..4d8ee7377abf 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ja/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ja/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"画面隅のディスプレイ カットアウト"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"画面隅のカットアウト"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ka/strings.xml index 6cea242e06a8..a0b6aef852c7 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ka/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ka/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ეკრანის კუთხის ამოჭრა"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"კუთხის ამოჭრა"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kk/strings.xml index a2a69482c118..0f4bc3ad8c03 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Экран бұрышындағы ойық"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Бұрышынан ойық жасау"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-km/strings.xml index bbf23c65da1e..fb0d88efb0ac 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-km/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-km/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ស្នាមចោះផ្ទាំងអេក្រង់នៅជ្រុង"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"សក់សេះនៅជ្រុង"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kn/strings.xml index 7b9879aa1887..50daf0908545 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-kn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ಮೂಲೆಯ ಪ್ರದರ್ಶನ ಕಟೌಟ್"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"ಮೂಲೆಯ ಕಟೌಟ್"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ko/strings.xml index 8fafcfad2525..e56d2d632d6a 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ko/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ko/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"모서리 디스플레이 컷아웃"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"모서리 컷아웃"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ky/strings.xml index 4d8c9463f0aa..98499a159ecd 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ky/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ky/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Бурчтагы дисплей кесиндиси"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Бурчтагы кесинди"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lo/strings.xml index 257839db7097..833f20fa38d6 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lo/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lo/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ແຜ່ນສະແດງມຸມ"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"ຮອຍບາກມຸມ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lt/strings.xml index e4b01ba900e4..e257b8a14a69 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Kampinė ekrano išpjova"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Kampinė išpjova"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lv/strings.xml index 3087b637f1bd..a37d95c90e64 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Stūra ekrāna izgriezums"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Stūra izgriezums"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mk/strings.xml index 2d0babf7681d..9be5d7ac5e06 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Исечок на аголот на екранот"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Исечок на аголот"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ml/strings.xml index 6adb3ec31a90..a8baf40024bb 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ml/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ml/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"കോർണർ ഡിസ്പ്ലേ കട്ടൗട്ട്"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"കോർണർ കട്ട്ഔട്ട്"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mn/strings.xml index 7998f155c166..b49b48154e1e 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Булангийн дэлгэцийг таслах"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Булан гаргаж таслах"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mr/strings.xml index a5d21338b7d7..435b6646e5ef 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-mr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"कॉर्नर डिस्प्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"कॉर्नर कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ms/strings.xml index 9fccad6fff68..94e2a23ce7b9 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ms/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ms/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Potongan paparan penjuru"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Potongan penjuru"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-my/strings.xml index c56ea8bca6e5..82282268e37c 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-my/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-my/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"မျက်နှာပြင်ထောင့် ဖြတ်ညှပ်ပြသမှု"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"ထောင့် ဖြတ်ညှပ်ပြသမှု"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nb/strings.xml index 731668fe059f..1d61bf2fddac 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nb/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nb/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Hjørneskjermutklipp"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Hjørneutklipp"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ne/strings.xml index e024d2a6b9e1..8765aebe9e13 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ne/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ne/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"कुनाको प्रदर्शनसम्बन्धी कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"कुनाको कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nl/strings.xml index 149041e3139a..5c43d2efe5d2 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-nl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Hoekdisplay-cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Hoek-cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pa/strings.xml index 274e791ad64a..5b91ea9cb135 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pa/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"ਕਿਨਾਰਿਆਂ ਤੱਕ ਜੁੜੀ ਡਿਸਪਲੇ"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"ਕੋਨਾ ਕੱਟਆਊਟ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pl/strings.xml index dd68d59b56c6..ef2714cdd108 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Wycięcie w ekranie z narożnikami"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Wycięcie narożne"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rBR/strings.xml index ed7e2b5f45c5..2c800c29a297 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rBR/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rBR/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Corte de tela de canto"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Corte de canto"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rPT/strings.xml index e4ed794b111b..a03955fc8a10 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rPT/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt-rPT/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ecrã com recorte nos cantos"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Recorte nos cantos"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt/strings.xml index ed7e2b5f45c5..2c800c29a297 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-pt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Corte de tela de canto"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Corte de canto"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ro/strings.xml index eebfe6a44516..28db495f6869 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ro/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ro/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Decupare ecran pe colț"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Decupajul colțului"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ru/strings.xml index fa8fefb51360..dc77981e6c95 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ru/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ru/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Сделать вырез в углу экрана"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Сделать вырез в углу"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-si/strings.xml index ae833f2f4a02..bdecdf4134d9 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-si/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-si/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"කොණ් තිර කට්අවුට්"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"කොණ් කට්අවුට්"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sk/strings.xml index 5b40d71661b8..f42bbe868d58 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Rohový výrez obrazovky"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Rohový výrez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sl/strings.xml index 52c5aa1ff674..867700ccbc92 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Kotni izrez prikaza"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Kotna zareza"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sq/strings.xml index cb39653a9356..aa562e37695b 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sq/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sq/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Prerje e ekranit në qoshe"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Prerje këndore"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sr/strings.xml index 4c5701a3e038..0adf1dda219f 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Изрезана слика у углу екрана"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Изрезана слика у углу екрана"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sv/strings.xml index ccc72fd1b1f3..9e24a43a3c2d 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Urklipp av skärmens hörn"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Kantutskärning"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sw/strings.xml index 6066426a2c60..bf105c46251e 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Mwonekano wenye pengo pembeni"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Mkato kwenye kona"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ta/strings.xml index a0a30cfb7fde..4c5757863403 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ta/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ta/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"மூலை கட்அவுட் காட்சி"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"மூலை கட்அவுட்"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-te/strings.xml index 6c10a1302cf0..4a310063ee87 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-te/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-te/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"మూల డిస్ప్లే కట్అవుట్"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"మూల కట్అవుట్"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-th/strings.xml index 57f49d48dcc8..714abb655ba7 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-th/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-th/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"คัตเอาท์ดิสเพลย์แบบมุม"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"คัตเอาท์แบบมุม"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tl/strings.xml index 3d4552e8664c..a325ca17fed6 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Display cutout sa sulok"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Cutout sa sulok"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tr/strings.xml index a0659788927f..e781320b00e1 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Köşe ekran kesimi"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Köşe kesimi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uk/strings.xml index 0b6a774c0ba3..324e154d1d53 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Відключення кутового дисплея"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Відрізання кутів"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ur/strings.xml index 2aeecc6b694c..e7c51524db87 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ur/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ur/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"کارنر ڈسپلے کٹ آؤٹ"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"کارنر کٹ آؤٹ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uz/strings.xml index 249ff2e019e7..0d19b66b1928 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uz/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-uz/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Burchak ekran kesimi"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Burchak kesimi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-vi/strings.xml index a217bf819ac3..15a66e34fffc 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-vi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-vi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Cắt hiển thị ở góc"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Vết cắt ở góc"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rHK/strings.xml index 5fcfbc35d1c8..997ebac42fc4 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rHK/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rHK/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"邊角顯示屏凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"邊角凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rTW/strings.xml index e6c75b56d114..997ebac42fc4 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rTW/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rTW/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"邊角螢幕凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"邊角凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zu/strings.xml index 961d0361a7c8..489908737722 100644 --- a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4967302169856689448">"Ukusikwa kwekhona lesiboniso"</string> + <string name="display_cutout_emulation_overlay" msgid="1677693377327336341">"Ukusikwa kwekhona"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-af/strings.xml index af108e80c7e5..2815df2d6372 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-af/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-af/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dubbelskermuitsnede"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dubbeluitsnede"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-am/strings.xml index 8b03bdeb4252..f41eadc24eae 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-am/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-am/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"የድርብ ማሳያ ቅርጽ"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ድርብ ቅርጽ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ar/strings.xml index 34065f89bb77..106ce3dc4a7f 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ar/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ar/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"صورة مقطوعة لشاشة مزدوجة"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"صورة مقطوعة مزدوجة"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-az/strings.xml index 732ebe5fa296..612a84983628 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-az/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-az/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"İkiqat ekran kəsimi"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"İkiqat kəsim"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-b+sr+Latn/strings.xml index 089f20b8be02..d2eb7db9fc50 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-b+sr+Latn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-b+sr+Latn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Izrezana slika za duple ekrane"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Izrezana slika za duple ekrane"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-be/strings.xml index 1763bd46f049..1a398c82df46 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-be/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-be/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Павялічыць выраз на экране ўдвая"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Двайны выраз"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bg/strings.xml index 8952d12223d3..09b597561030 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bg/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bg/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Двоен прорез на екрана"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Двоен прорез"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bn/strings.xml index d1eee2f33d22..d08874c3565f 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ডবল ডিসপ্লে কাট-আউট"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ডবল কাট-আউট"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bs/strings.xml index 3c40f984a72b..655db3317c75 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-bs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dvostruki urez ekrana"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dvostruki urez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ca/strings.xml index 096a62dbbc22..10d5ae70ad3b 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ca/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ca/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Retall de pantalla doble"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Retall doble"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-cs/strings.xml index e979511f046a..2f3aab9fd71a 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-cs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-cs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dvojitý výřez displeje"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dvojitý výřez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-da/strings.xml index 27dc82ebced8..3f9bae15fbb0 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-da/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-da/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dobbelt udskæring på skærmen"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dobbelt hak"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-de/strings.xml index c73fa2db0af2..5fc917605ac4 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-de/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-de/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Doppelter Display-Ausschnitt"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Doppelte Aussparung"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-el/strings.xml index c744a4503853..f3cc09360ea5 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-el/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-el/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Διακοπή διπλής οθόνης"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Διπλή εγκοπή"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rAU/strings.xml index 648edfe3740a..31f2a5adc0c4 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rAU/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rAU/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Double display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Double cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rGB/strings.xml index 648edfe3740a..31f2a5adc0c4 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rGB/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rGB/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Double display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Double cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rIN/strings.xml index 648edfe3740a..31f2a5adc0c4 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rIN/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-en-rIN/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Double display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Double cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-es-rUS/strings.xml index 44cd9bea6b25..d57c2fca9ce2 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-es-rUS/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-es-rUS/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Recorte de pantalla doble"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Corte doble"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-es/strings.xml index 44cd9bea6b25..e5d1bff2a653 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-es/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-es/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Recorte de pantalla doble"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Recorte doble"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-et/strings.xml index 9edaf8efecc2..1e75a92d4f38 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-et/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-et/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Topeltekraani väljalõige"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Topeltväljalõige"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-eu/strings.xml index 18000bdf9f98..bd7f8d56a3f4 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-eu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-eu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Pantailaren mozketa bikoitza"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Mozketa bikoitza"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fa/strings.xml index d350822ce4e6..0b38e68c6fdd 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fa/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"نمایشگر با لبه دوتایی"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"نمایشگر با لبه بریده دوتایی"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fi/strings.xml index 33766fd85c26..5d850647857e 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Kaksoisaukko näytössä"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Kaksoislovi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fr-rCA/strings.xml index 8fa31c4980d1..2ee79176dfe0 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fr-rCA/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fr-rCA/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Découpe d\'affichage double"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Encoche double"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fr/strings.xml index 9f55c9c82e20..2ee79176dfe0 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-fr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Encoche pour écran double"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Encoche double"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gl/strings.xml index 92832daa4b72..8d854c86bcfe 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Recorte de pantalla dobre"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Recorte dobre"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gu/strings.xml index 43e67a0abf42..b1ca50bb8a35 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-gu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ડબલ ડિસ્પ્લે કટઆઉટ"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ડબલ કટઆઉટ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hi/strings.xml index 8412c147ef52..d574f6c37890 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"डबल डिसप्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"डबल कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hr/strings.xml index 9d7a8ce8b520..655db3317c75 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Obrezana slika za dvostruke zaslone"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dvostruki urez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hu/strings.xml index 0af2ad3d2ac0..acf4f4d4b963 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dupla képernyőkivágás"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dupla kivágás"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hy/strings.xml index 7907d0aa66ad..9994cf9eb35e 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hy/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-hy/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Էկրանի կրկնակի կտրվածք"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Կրկնակի կտրվածք"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-in/strings.xml index 45f59524acc1..78343e8130f2 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-in/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-in/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Potongan tampilan ganda"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Potongan ganda"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-is/strings.xml index 910948915e7d..fe2eefce24c8 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-is/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-is/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Tvöfaldur skjáskurður"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Tvöfaldur skurður"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-it/strings.xml index 4aa869e08c01..a1126cca5a99 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-it/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-it/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Ritaglio display doppio"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Ritaglio doppio"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-iw/strings.xml index eff8a8d46940..2e7aeb033e01 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-iw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-iw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"חיתוך תצוגה כפול"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"מגרעת כפולה"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ja/strings.xml index 5346e977d776..dadc8a8887c9 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ja/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ja/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ダブル ディスプレイ カットアウト"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ダブル カットアウト"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ka/strings.xml index 515ac25003c2..4ec33c9fd485 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ka/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ka/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ეკრანის ორმაგი ამოჭრა"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ორმაგი ამოჭრა"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kk/strings.xml index c812d0cf5cdb..6592e24a55ec 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Қос дисплейді өшіру"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Ойықты екі есе ұлғайту"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-km/strings.xml index 0a52444fe007..15535946f05b 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-km/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-km/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ស្នាមចោះផ្ទាំងអេក្រង់ភ្លោះ"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"សក់សេះភ្លោះ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kn/strings.xml index 02500db6943a..e88e0453cf2e 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-kn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ಡಬಲ್ ಡಿಸ್ಪ್ಲೇ ಕಟೌಟ್"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ಡಬಲ್ ಕಟೌಟ್"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ko/strings.xml index 5505f579db20..fa114f01b5d9 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ko/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ko/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"더블 디스플레이 컷아웃"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"이중 컷아웃"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ky/strings.xml index baf2f4d74dd9..3fc744627b2a 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ky/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ky/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Кош дисплей кесиндиси"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Кош кесинди"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lo/strings.xml index 5823a8238d0d..f65b1ef3e2a0 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lo/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lo/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ກ່ອງຂໍ້ຄວາມສະແດງຜົນຄູ່"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ຮອຍບາກຄູ່"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lt/strings.xml index 7c1ba7d9e262..f47d060ff643 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dviguba ekrano išpjova"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dviguba išpjova"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lv/strings.xml index 5452e9cecbd1..a2810a303dcb 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-lv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Divkāršs ekrāna izgriezums"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Divkāršs izgriezums"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mk/strings.xml index d23283832470..7b83881cfaa5 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Двоен исечок на екранот"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Двоен исечок"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ml/strings.xml index 9aff47df9804..21b5ec74ad98 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ml/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ml/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ഇരട്ട ഡിസ്പ്ലേ കട്ടൗട്ട്"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ഇരട്ട കട്ട്ഔട്ട്"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mn/strings.xml index c43f18a56df8..be8e6a592fa8 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Давхар дэлгэцийг таслах"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Давхар болгож таслах"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mr/strings.xml index e2065acffc0c..d574f6c37890 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-mr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"दुहेरी डिस्प्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"डबल कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ms/strings.xml index b3085ef0a4b4..82197a3135e4 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ms/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ms/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Potongan paparan berganda"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Potongan berganda"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-my/strings.xml index 0744f120c7ee..2249d6e72796 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-my/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-my/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"မျက်နှာပြင် အထက်အောက် ဖြတ်ညှပ်ပြသမှု"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"နှစ်ဆင့် ဖြတ်ညှပ်ပြသမှု"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-nb/strings.xml index e4b6c762ca08..b44b117e7116 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-nb/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-nb/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dobbelt skjermutklipp"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dobbelt utklipp"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ne/strings.xml index 49f82b973b7f..91ebb8c4e62e 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ne/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ne/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"दोहोरो प्रदर्शनसम्बन्धी कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"दोहोरो कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-nl/strings.xml index d46f770ad1f8..078829f47699 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-nl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-nl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dubbele display-cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dubbele cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pa/strings.xml index da57fde0b41a..afd4eab109a3 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pa/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ਡਿਸਪਲੇ ਦੀ ਦੋਹਰੀ ਵੰਡ"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ਦੋਹਰਾ ਕੱਟਆਊਟ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pl/strings.xml index 95344126ec96..66c20f783393 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Podwójne wycięcie w ekranie"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Wycięcie podwójne"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt-rBR/strings.xml index 8c05472dcc3c..fbce009efaeb 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt-rBR/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt-rBR/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Corte de tela duplo"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Corte duplo"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt-rPT/strings.xml index b9c30c6c44ff..585c31f743ba 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt-rPT/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt-rPT/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Ecrã duplo com recorte"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Recorte duplo"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt/strings.xml index 8c05472dcc3c..fbce009efaeb 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-pt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Corte de tela duplo"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Corte duplo"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ro/strings.xml index a22afe6c2b17..04d85f014e95 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ro/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ro/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Decupare dublă pe ecran"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Decupaj dublu"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ru/strings.xml index 14dd6067c491..a02eaf7bdc26 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ru/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ru/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Увеличить вырез на экране вдвое"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Увеличить вырез вдвое"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-si/strings.xml index c15208f08ff8..274924b29602 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-si/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-si/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ද්විත්ව තිර කට්අවුට්"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"ද්විත්ව කට්අවුට්"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sk/strings.xml index 98a74c1592d6..8d654279f255 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dvojitý výrez obrazovky"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dvojitý výrez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sl/strings.xml index 4f12711c44ba..66de901fbcf1 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Izrez dvojnega prikaza"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dvojna zareza"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sq/strings.xml index 96a68d5970fa..73222ab2163c 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sq/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sq/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Prerje e dyfishtë e ekranit"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Prerje e dyfishtë"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sr/strings.xml index 8930813b272e..99b89a2fdc74 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Изрезана слика за дупле екране"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Изрезана слика за дупле екране"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sv/strings.xml index 42b7aed8f488..aaa69711ee9d 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dubbelt urklipp av skärm"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dubbel utskärning"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sw/strings.xml index a39f77ddecad..486e9461bbaf 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-sw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Mwonekano wenye mapengo mawili"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Mikato miwili"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ta/strings.xml index b3c19b6e37a1..e4f96f921227 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ta/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ta/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"இரட்டை கட்அவுட் காட்சி"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"இரட்டை கட்அவுட்"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-te/strings.xml index b8573db2420d..e32415c6216b 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-te/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-te/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"డబుల్ డిస్ప్లే కట్అవుట్"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"డబుల్ కట్అవుట్"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-th/strings.xml index 8fdd6935e1fd..0423e86ab31e 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-th/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-th/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"ตัดหน้าจอสองด้าน"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"คัตเอาท์แบบคู่"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-tl/strings.xml index e68b5ec5c686..cd959da41aaf 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-tl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-tl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Dobleng display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Dobleng cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-tr/strings.xml index 3ae92f0f4964..df91cc82c05f 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-tr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-tr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Çift ekran kesimi"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Çift kesim"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uk/strings.xml index cf6df69d04c0..f551429552f7 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Відключення подвійного дисплея"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Подвійне відрізання"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ur/strings.xml index 3c9666dd8619..f1e44e3f354d 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ur/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-ur/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"دوہرا ڈسپلے کٹ آؤٹ"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"دوہرا کٹ آؤٹ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uz/strings.xml index 9e741922800c..b307ac7bbe9c 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uz/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-uz/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Ekran kesimini ikki marta kattalashtirish"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Kesimni ikkilantirish"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-vi/strings.xml index 442805a12b29..96096c297b2d 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-vi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-vi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Cắt hiển thị kép"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Vết cắt kép"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zh-rHK/strings.xml index 6da1a7fc50e9..9d3371c6442e 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zh-rHK/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zh-rHK/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"雙顯示屏凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"雙凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zh-rTW/strings.xml index 72932b551d9b..9d3371c6442e 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zh-rTW/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zh-rTW/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"雙螢幕凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"雙凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zu/strings.xml index 2e0a5bdcddb7..31e57f0bc7c9 100644 --- a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-zu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="5659433562878674546">"Ukusikwa kokuboniswa okukabili"</string> + <string name="display_cutout_emulation_overlay" msgid="5323179900047630217">"Ukusika kabiliDouble cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-af/strings.xml index 98b43037aed9..09316bc9cd9d 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-af/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-af/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Uitsnede vir smal vertoonskerm"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Smal uitsnede"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-am/strings.xml index 2fc0dbe0a381..25cb2cfce1f7 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-am/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-am/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"የጠባብ ማሳያ ቅርጽ"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"ጠባብ ቅርጽ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ar/strings.xml index aae2adafa27e..3294bc842fc0 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ar/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ar/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"صورة مقطوعة لشاشة ضيقة"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"صورة مقطوعة ضيقة"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-az/strings.xml index f5b856b3d4ae..7939aea8b2cb 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-az/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-az/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Dar ekran profili"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Dar kəsim"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-b+sr+Latn/strings.xml index 0a9aaafa3b14..d78d344d4057 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-b+sr+Latn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-b+sr+Latn/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Izrezana slika za uske ekrane"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Izrezana slika za uske ekrane"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-be/strings.xml index 189f1ccdc290..d21b0f7c1115 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-be/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-be/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Зрабіць выраз на экране больш вузкім"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Вузкі выраз"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bg/strings.xml index d2367101729c..61d90b4cf9f2 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bg/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bg/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Тесен прорез на екрана"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Тесен прорез"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bn/strings.xml index 301d686cae1a..27f8290b4fd9 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bn/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"ন্যারো ডিসপ্লে কাট-আউট"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"ন্যারো কাট-আউট"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bs/strings.xml index 8ceaac5787a4..8fe6f2d893aa 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bs/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Uski urez ekrana"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Uski urez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ca/strings.xml index ab9061e62057..106b75c53095 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ca/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ca/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Retall de pantalla estret"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Retall estret"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-cs/strings.xml index 440a2f08740d..5e56a7b55f34 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-cs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-cs/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Úzký výřez displeje"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Úzký výřez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-da/strings.xml index 4372d56b420e..6681a1297077 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-da/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-da/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Smal udskæring på skærmen"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Smalt hak"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-de/strings.xml index a92a24a72e47..3dd023a18b79 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-de/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-de/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Schmaler Display-Ausschnitt"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Schmale Aussparung"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-el/strings.xml index 69adde331ec8..21fb5b709dde 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-el/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-el/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Διακοπή στενής οθόνης"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Στενή εγκοπή"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rAU/strings.xml index bf2624ffaa05..2716eae6b95f 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rAU/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rAU/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Narrow display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Narrow cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rGB/strings.xml index bf2624ffaa05..2716eae6b95f 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rGB/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rGB/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Narrow display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Narrow cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rIN/strings.xml index bf2624ffaa05..2716eae6b95f 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rIN/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rIN/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Narrow display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Narrow cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es-rUS/strings.xml index f1d3348f690d..2723d1b5c35e 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es-rUS/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es-rUS/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Recorte de pantalla estrecho"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Corte estrecho"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es/strings.xml index a17a32c9d735..89ec75fdf3a7 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Recorte estrecho de la pantalla"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Recorte estrecho"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-et/strings.xml index 367b2219ab2f..272280f33432 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-et/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-et/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Kitsas ekraani väljalõige"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Kitsas väljalõige"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-eu/strings.xml index 0fd9d9bfc237..accdac739aff 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-eu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-eu/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Pantailaren mozketa estua"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Mozketa estua"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fa/strings.xml index 43bfb2e8f76e..f3a11857a7b2 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fa/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"نمایشگری با لبه باریک"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"لبه باریک"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fi/strings.xml index 540fbaebe795..292d5decb71e 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fi/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Kapea aukko näytössä"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Kapea lovi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr-rCA/strings.xml index d78f8b89d9ec..577a9488e668 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr-rCA/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr-rCA/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Découpe d\'affichage étroit"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Encoche étroite"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr/strings.xml index 4ee1b4f57576..577a9488e668 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Encoche pour écran étroit"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Encoche étroite"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gl/strings.xml index 9d01afddd3f5..0d1247c4381c 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gl/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Recorte de pantalla estreito"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Recorte estreito"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gu/strings.xml index 7d9987e81576..869842cb2530 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gu/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"સાંકડું ડિસ્પ્લે કટઆઉટ"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"સાંકડું કટઆઉટ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hi/strings.xml index 32d61396adfd..39747d1ab525 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hi/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"कम जगह वाला डिसप्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"नैराे कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hr/strings.xml index 00eca5bf135e..8fe6f2d893aa 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hr/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Obrezana slika za uske zaslone"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Uski urez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hu/strings.xml index bfd29448d0b6..18b0722fc82a 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hu/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Keskeny képernyőkivágás"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Keskeny kivágás"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hy/strings.xml index 2afecc879999..a07a1bd2de33 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hy/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hy/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Էկրանի նեղ կտրվածք"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Նեղ կտրվածք"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-in/strings.xml index 7728ab637a23..717449c57fb2 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-in/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-in/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Potongan tampilan sempit"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Potongan sempit"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-is/strings.xml index 3d86080c88c6..a353cef83dc4 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-is/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-is/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Mjór skjáskurður"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Mjór skurður"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-it/strings.xml index 419c12be06ff..ab96ff6527d6 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-it/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-it/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Ritaglio display stretto"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Ritaglio stretto"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-iw/strings.xml index ffde4930e79b..a805dcc00959 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-iw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-iw/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"חיתוך תצוגה צר"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"מגרעת צרה"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ja/strings.xml index 2b6a89754029..fe836394cdcb 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ja/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ja/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"幅狭のディスプレイ カットアウト"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"幅狭のカットアウト"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ka/strings.xml index e52a32f63321..6e23255bfc46 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ka/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ka/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"ეკრანის ვიწრო ამოჭრა"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"ვიწრო ამოჭრა"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kk/strings.xml index ee0d72deac2d..b5da77d8854e 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kk/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Жіңішке экран ойығы"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Тар ойық"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-km/strings.xml index c1faaa3c0084..97e867f3f8f9 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-km/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-km/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"ស្នាមចោះផ្ទាំងអេក្រង់តូច"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"សក់សេះតូច"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kn/strings.xml index b356b314cbc8..87b390c586b8 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kn/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"ಕಿರಿದಾದ ಪ್ರದರ್ಶನ ಕಟೌಟ್"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"ಕಿರಿದಾದ ಕಟೌಟ್"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ko/strings.xml index 7175d5265c44..20091a5a13a0 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ko/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ko/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"좁은 디스플레이 컷아웃"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"좁은 컷아웃"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ky/strings.xml index 97308ca56bc5..6d49807a9e44 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ky/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ky/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Ичке дисплей кесиндиси"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Ичке кесинди"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lo/strings.xml index 6a0251bc75fe..7e6ee123584c 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lo/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lo/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"ກ່ອງຂໍ້ຄວາມສະແດງຜົນແບບແຄບ"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"ຮອຍບາກແຄບ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lt/strings.xml index cb8a54b66ba4..d62db1e5e0bb 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lt/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Siaura ekrano išpjova"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Siaura išpjova"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lv/strings.xml index c87bc3f903c6..b352a22116da 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lv/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Šaurs ekrāna izgriezums"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Šaurs izgriezums"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mk/strings.xml index dd93e83691b1..a75c2971500f 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mk/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Тесен исечок на екранот"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Тесен исечок"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ml/strings.xml index 3e12f0542a00..cd7e3b9815fc 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ml/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ml/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"ഇടുങ്ങിയ ഡിസ്പ്ലേ കട്ടൗട്ട്"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"ഇടുങ്ങിയ കട്ട്ഔട്ട്"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mn/strings.xml index 087ed4ab8322..aa2fb6c8fe2b 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mn/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Дэлгэцийг нарийн болгож таслах"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Нарийн болгож таслах"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mr/strings.xml index 14a35da85a85..a86cbeb33a36 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mr/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"अरुंद डिस्प्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"नॅरो कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ms/strings.xml index 20edbd7be03f..717449c57fb2 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ms/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ms/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Potongan paparan sempit"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Potongan sempit"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-my/strings.xml index 4f84f2c7d062..287b535f8ab0 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-my/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-my/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"ကျဉ်းမြောင်းသည့် မျက်နှာပြင် ဖြတ်ညှပ်ပြသမှု"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"ကျဉ်းမြောင်းစွာ ဖြတ်ညှပ်ပြသမှု"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nb/strings.xml index 300e988d20db..dbb4c27359d2 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nb/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nb/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Smalt skjermutklipp"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Smalt utklipp"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ne/strings.xml index 902741411f4b..0a68f0d4ace2 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ne/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ne/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"साँघुरो प्रदर्शनसम्बन्धी कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"साँघुरो कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nl/strings.xml index b6f7f02c8585..5783f5c34ffc 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nl/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Smalle display-cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Smalle cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pa/strings.xml index ddc0b11f1156..83d3c02d501b 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pa/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"ਤੰਗ ਡਿਸਪਲੇ ਕੱਟਆਊਟ"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"ਤੰਗ ਕੱਟਆਊਟ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pl/strings.xml index 1e0b3ff5d9c7..624e2242a66c 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pl/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Wąskie wycięcie w ekranie"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Wycięcie wąskie"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rBR/strings.xml index 3af25e85e70a..60aa0e796062 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rBR/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rBR/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Corte da tela estreito"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Corte estreito"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rPT/strings.xml index 257c974024db..0d1247c4381c 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rPT/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rPT/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Ecrã estreito com recorte"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Recorte estreito"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt/strings.xml index 3af25e85e70a..60aa0e796062 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Corte da tela estreito"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Corte estreito"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ro/strings.xml index 26d544842f43..ca6720375c2f 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ro/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ro/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Decupare ecran îngustă"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Decupaj îngust"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ru/strings.xml index 0b8693c4374c..207268c90267 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ru/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ru/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Сделать вырез на экране уже"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Сузить вырез"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-si/strings.xml index 0f4a8ff440cc..7cca5b920f1f 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-si/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-si/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"පටු සංදර්ශක කටවුට්"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"පටු කට්අවුට්"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sk/strings.xml index 4cda8d5aef20..72a714e7759a 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sk/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Úzky výrez obrazovky"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Úzky výrez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sl/strings.xml index 290df41cdaaf..a2f3a43374d8 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sl/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Ozek izrez prikaza"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Ozka zareza"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sq/strings.xml index be0a1e4ba184..14ad99df3df6 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sq/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sq/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Prerje e ngushtë ekrani"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Prerje e ngushtë"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sr/strings.xml index d0710ac61c5d..9026c367e19d 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sr/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Изрезана слика за уске екране"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Изрезана слика за уске екране"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sv/strings.xml index f8c4bc33b3ab..3dc875375ccb 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sv/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Smalt urklipp av skärm"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Smal utskärning"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sw/strings.xml index 1aa301434c61..6032125e3808 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sw/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Mwonekeno wenye pengo jembamba"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Mkato mwembamba"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ta/strings.xml index 8481f2914577..79c3186c4444 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ta/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ta/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"குறுகிய கட்அவுட் காட்சி"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"குறுகிய கட்அவுட்"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-te/strings.xml index 4e71bac95e39..9bde419541f7 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-te/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-te/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"సన్నని డిస్ప్లే కట్అవుట్"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"సన్నని కట్అవుట్"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-th/strings.xml index 4989e86e161c..6506ef9a0a4b 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-th/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-th/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"คัตเอาท์ดิสเพลย์แบบแคบ"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"คัตเอาท์แบบแคบ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tl/strings.xml index 3c88b3f570e9..fe34b9ac99fa 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tl/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Manipis na display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Manipis na cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tr/strings.xml index d84b75871784..022f1e381c36 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tr/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Dar ekran kesimi"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Dar kesim"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uk/strings.xml index b5109dee013b..15ebc5dd99cd 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uk/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Відключення вузького дисплея"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Вузьке відрізання"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ur/strings.xml index 5dba37206699..9dda24e7d469 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ur/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ur/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"تنگ ڈسپلے کٹ آؤٹ"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"تنگ کٹ آؤٹ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uz/strings.xml index 64bf6296bee6..d9f0ca07abb5 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uz/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uz/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Ekrandagi kesimni qisqartirish"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Kesimni qisqartirish"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-vi/strings.xml index 0cf0602b4388..c205a7dd9662 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-vi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-vi/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Cắt hiển thị hẹp"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Vết cắt hẹp"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rHK/strings.xml index c1878135b2e8..505693f3ef46 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rHK/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rHK/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"幼身顯示屏凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"幼身凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rTW/strings.xml index 5799fed07bfe..ae50b4a35ad9 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rTW/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rTW/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"窄型螢幕凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"窄型凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zu/strings.xml index 785ec6f0c958..7a77583f6ed2 100644 --- a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zu/strings.xml @@ -19,5 +19,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="6129374114103110395">"Ukusikwa kwesiboniso esimcingo"</string> + <string name="display_cutout_emulation_overlay" msgid="3947428012427075896">"Ukusika okucijile"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-af/strings.xml index e5613298f63f..6018ef467ccb 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-af/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-af/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Uitsnede vir lang vertoonskerm"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Lang uitsnede"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-am/strings.xml index 16a82a1ca90e..2b299cfdc636 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-am/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-am/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"የረጅም ማሳያ ቅርጽ"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"ረዥም ቅርጽ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ar/strings.xml index 06cab99b4346..4bec886c6fe0 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ar/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ar/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"صورة مقطوعة لشاشة طويلة"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"صورة مقطوعة طويلة"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-az/strings.xml index a14afc4805c8..84af1e258ce6 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-az/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-az/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Uzun ekran profili"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Hündür kəsim"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-b+sr+Latn/strings.xml index 2212e820cb5a..46d30c6be8b2 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-b+sr+Latn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-b+sr+Latn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Izrezana slika za visoke ekrane"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Izrezana slika za visoke ekrane"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-be/strings.xml index 53bb4874723b..45dc1db0257c 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-be/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-be/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Зрабіць выраз на экране больш высокім"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Высокі выраз"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bg/strings.xml index a33cc3988827..b657d587629b 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bg/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bg/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Голям прорез на екрана"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Голям прорез"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bn/strings.xml index 851376167b5a..a2825df8e872 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"টল ডিসপ্লে কাট-আউট"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"টল কাট-আউট"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bs/strings.xml index 4f0ed6182f36..c7b35b66585c 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Dugačak urez ekrana"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Dugačak urez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ca/strings.xml index d264e3426899..4d5c5d34e6db 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ca/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ca/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Retall de pantalla alt"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Retall alt"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-cs/strings.xml index fa5ceeebd608..07ad2bc2f15b 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-cs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-cs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Vysoký výřez displeje"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Vysoký výřez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-da/strings.xml index 75e2d5d54a68..b4f65d1961dd 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-da/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-da/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Stor udskæring på skærmen"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Højt hak"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-de/strings.xml index 6c65b16840e6..f14479c43fdf 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-de/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-de/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Hoher Display-Ausschnitt"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Hohe Aussparung"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-el/strings.xml index 1167237b8f76..a4815d43e3af 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-el/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-el/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Διακοπή ψηλής οθόνης"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Ψηλή εγκοπή"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rAU/strings.xml index 3a41cbe0091e..fce927cd0d9c 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rAU/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rAU/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Tall display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Tall cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rGB/strings.xml index 3a41cbe0091e..fce927cd0d9c 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rGB/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rGB/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Tall display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Tall cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rIN/strings.xml index 3a41cbe0091e..fce927cd0d9c 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rIN/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rIN/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Tall display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Tall cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es-rUS/strings.xml index 3223601c4735..5ecec17bcd0e 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es-rUS/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es-rUS/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Recorte de pantalla alto"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Corte alto"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es/strings.xml index 1a73f18ed0da..ad06990ae86d 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Recorte alto de la pantalla"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Recorte alto"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-et/strings.xml index ec8406993097..cdb23cc58d84 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-et/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-et/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Pikk ekraani väljalõige"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Pikk väljalõige"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-eu/strings.xml index 7445925ed531..e1419064344d 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-eu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-eu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Pantailaren mozketa altua"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Mozketa altua"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fa/strings.xml index 57990e86d159..0aece541ec5b 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fa/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"نمایشگر با لبه بلند"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"لبه بلند"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fi/strings.xml index 4add28046fd0..fe4f59b32463 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Korkea aukko näytössä"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Korkea lovi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr-rCA/strings.xml index cf15b145c446..da3705ec834d 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr-rCA/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr-rCA/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Découpe d\'affichage haut"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Encoche grande"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr/strings.xml index f5db3289fbb2..5f4d72994f2c 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Encoche pour écran haut"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Encoche haute"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gl/strings.xml index 3223601c4735..ad06990ae86d 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Recorte de pantalla alto"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Recorte alto"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gu/strings.xml index a9a1f4a0951c..1081d69bad45 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"ઊંચું ડિસ્પ્લે કટઆઉટ"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"ઊંચું કટઆઉટ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hi/strings.xml index dbd3e84f8b13..a8bdf0528723 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"लंबा डिसप्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"टॉल कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hr/strings.xml index 34082f8b610a..5da0b463ddd9 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Obrezana slika za visoke zaslone"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Visoki urez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hu/strings.xml index 7b871c560e1c..2b0008319b99 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Magas képernyőkivágás"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Magas kivágás"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hy/strings.xml index ebff54c6a5f7..be9492226a99 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hy/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hy/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Էկրանի բարձր կտրվածք"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Բարձր կտրվածք"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-in/strings.xml index 9740135a1e64..e74f283bbfbc 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-in/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-in/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Potongan tampilan tinggi"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Potongan tinggi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-is/strings.xml index f039cb9e63dc..dbeaadebbe8b 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-is/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-is/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Hár skjáskurður"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Hár skurður"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-it/strings.xml index af09afd69cf1..cd3419746f65 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-it/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-it/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Ritaglio display alto"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Ritaglio alto"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-iw/strings.xml index faf3630ba29e..4034ccd25daa 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-iw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-iw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"חיתוך תצוגה גבוה"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"מגרעת גבוהה"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ja/strings.xml index 86974bc82403..185c69f045f1 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ja/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ja/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"縦長のディスプレイ カットアウト"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"縦長のカットアウト"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ka/strings.xml index f84faba73da9..f117b948f2d0 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ka/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ka/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"ეკრანის მაღალი ამოჭრა"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"მაღალი ამოჭრა"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kk/strings.xml index 8747ff062847..cf89e6ca8b72 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Ұзын экран ойығы"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Тігінен ойық жасау"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-km/strings.xml index 1741d586cf48..5a01a6206111 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-km/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-km/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"ស្នាមចោះផ្ទាំងអេក្រង់ជ្រៅ"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"សក់សេះវែង"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kn/strings.xml index ce1beb424831..17298df4a3fb 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"ಎತ್ತರದ ಪ್ರದರ್ಶನ ಕಟೌಟ್"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"ಎತ್ತರದ ಕಟೌಟ್"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ko/strings.xml index c91015c6d951..f81a53382db9 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ko/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ko/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"세로로 긴 디스플레이 컷아웃"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"세로로 긴 컷아웃"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ky/strings.xml index 0fbf92032bd0..c5aa62cccb0f 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ky/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ky/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Узун дисплей кесиндиси"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Узун кесинди"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lo/strings.xml index f5ed0a8490dd..83ba31350139 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lo/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lo/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"ກ່ອງຂໍ້ຄວາມສະແດງຜົນແບບສູງ"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"ຮອຍບາກສູງ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lt/strings.xml index 9afa5bd8161f..5c0eb8fa1241 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Ilga ekrano išpjova"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Ilga išpjova"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lv/strings.xml index ec80989df855..4087f99292d3 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Augsts ekrāna izgriezums"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Augsts izgriezums"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mk/strings.xml index b58b8ffefe33..fcfe2d62a740 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Висок исечок на екранот"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Висок исечок"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ml/strings.xml index 561ac16cdcd5..c582ddf5ba3a 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ml/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ml/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"ഉയരമുളള ഡിസ്പ്ലേ കട്ടൗട്ട്"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"ഉയരമുളള കട്ട്ഔട്ട്"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mn/strings.xml index f45a11ca8e74..d42a3daf2591 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Дэлгэцийг өндөр болгож таслах"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Урт болгож таслах"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mr/strings.xml index 6f19f2780f18..a8bdf0528723 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"उंच डिस्प्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"टॉल कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ms/strings.xml index 1847595c25bf..e74f283bbfbc 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ms/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ms/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Potongan paparan tinggi"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Potongan tinggi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-my/strings.xml index 353d766cc518..71b73978fbcb 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-my/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-my/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"ရှည်လျားသည့် မျက်နှာပြင် ဖြတ်ညှပ်ပြသမှု"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"ရှည်လျားစွာ ဖြတ်ညှပ်ပြသမှု"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nb/strings.xml index ab1c4c690b26..ac5dcefde4e9 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nb/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nb/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Høyt skjermutklipp"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Høyt utklipp"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ne/strings.xml index c969172d6dfa..c83f6b4d4755 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ne/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ne/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"अग्लो प्रदर्शनसम्बन्धी कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"अग्लो कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nl/strings.xml index d7db4a9eba03..06aa9e8adf9c 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Grote display-cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Hoge cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pa/strings.xml index b10a5d06a28e..02abc7f7384b 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pa/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"ਲੰਮਾ ਡਿਸਪਲੇ ਕੱਟਆਊਟ"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"ਲੰਮਾ ਕੱਟਆਊਟ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pl/strings.xml index 4bd3c4816c5b..d98fe686a49e 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Wysokie wycięcie w ekranie"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Wycięcie wysokie"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rBR/strings.xml index 893dd760255a..5ecec17bcd0e 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rBR/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rBR/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Corte da tela alto"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Corte alto"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rPT/strings.xml index 817dfec41562..d801d277cd68 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rPT/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rPT/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Ecrã grande com recorte"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Recorte grande"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt/strings.xml index 893dd760255a..5ecec17bcd0e 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Corte da tela alto"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Corte alto"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ro/strings.xml index 32d771c9060d..3f6264e1116c 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ro/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ro/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Decupare ecran înaltă"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Decupaj înalt"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ru/strings.xml index ef1a690e363a..1d1656d2862e 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ru/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ru/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Сделать вырез на экране выше"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Сделать вырез выше"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-si/strings.xml index 6d34b5bd9808..756ddc3b1c83 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-si/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-si/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"උස සංදර්ශක කටවුට්"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"උස කට්අවුට්"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sk/strings.xml index 553e08d3cc56..6e427f69d1e0 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Vysoký výrez obrazovky"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Vysoký výrez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sl/strings.xml index 9ad38ca25153..2e0246a22a8a 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Visok izrez prikaza"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Visoka zareza"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sq/strings.xml index ab6fd63f132c..4586e999c0a3 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sq/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sq/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Prerje e lartë ekrani"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Prerje e gjatë"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sr/strings.xml index 4f457f6d55f3..8ee39b8a88e5 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Изрезана слика за високе екране"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Изрезана слика за високе екране"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sv/strings.xml index d0be3c3982ce..f64addda2891 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Avlångt urklipp av skärm"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Avlång utskärning"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sw/strings.xml index 463a703a87f8..ff53ff01340d 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Mwonekeno wenye pengo ndefu"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Mkato mrefu"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ta/strings.xml index d7ccc7836a30..2ac88fdcd895 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ta/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ta/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"உயரமான கட்அவுட் காட்சி"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"உயரமான கட்அவுட்"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-te/strings.xml index 7de7e934c8e8..2e6233da0c6b 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-te/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-te/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"పొడవైన డిస్ప్లే కట్అవుట్"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"పొడవైన కట్అవుట్"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-th/strings.xml index ad6256ed01be..edbd672560f7 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-th/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-th/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"คัตเอาท์ดิสเพลย์แบบสูง"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"คัตเอาท์แบบสูง"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tl/strings.xml index e9568bec0344..8cf7058ded55 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Mataas na display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Mataas na cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tr/strings.xml index 1e75a40ac53e..54216d36f329 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Uzun ekran kesimi"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Uzun kesim"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uk/strings.xml index 94a936917a7b..46747b2d81a8 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Відключення високого дисплея"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Відрізання по висоті"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ur/strings.xml index f45451cd6251..e7186c767e50 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ur/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ur/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"لمبا ڈسپلے کٹ آؤٹ"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"لمبا کٹ آؤٹ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uz/strings.xml index 6d0978589004..f2e080aa9f35 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uz/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uz/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Ekrandagi kesimni balandroq qilish"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Kesimni balandlatish"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-vi/strings.xml index 650a30b55b03..d84734f9b7d1 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-vi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-vi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Cắt hiển thị cao"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Vết cắt cao"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rHK/strings.xml index 3aa87e07e4ea..dfabd42cd377 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rHK/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rHK/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"長身顯示屏凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"長身凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rTW/strings.xml index cde32db34039..41b3770a2b40 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rTW/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rTW/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"長型螢幕凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"長型凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zu/strings.xml index ff1b63395957..d1f424a7fc08 100644 --- a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="4955013674374634273">"Ukusikwa kwesiboniso esinde"</string> + <string name="display_cutout_emulation_overlay" msgid="6424539415439220018">"Ukusika okude"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-af/strings.xml index eda1e7678c2d..cb133ac1c214 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-af/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-af/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Uitsnede vir wye vertoonskerm"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Wye uitsnede"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-am/strings.xml index c1345dc1b290..63291b971fce 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-am/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-am/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"የሰፊ ማሳያ ቅርጽ"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"ሰፊ ቅርጽ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ar/strings.xml index 0a7bfac1d6e2..144f17413182 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ar/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ar/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"صورة مقطوعة لشاشة عريضة"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"صورة مقطوعة عريضة"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-az/strings.xml index 3a78dfe66fc2..5ea06b2afe41 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-az/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-az/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Geniş ekran profili"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Geniş kəsim"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-b+sr+Latn/strings.xml index b67afb9ca1d8..d4160f41128d 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-b+sr+Latn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-b+sr+Latn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Izrezana slika za široke ekrane"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Izrezana slika za široke ekrane"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-be/strings.xml index a3a76f5c96a5..7b05ae0d59fb 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-be/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-be/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Зрабіць выраз на экране больш шырокім"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Шырокі выраз"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bg/strings.xml index d0cf01d75faf..7f52701899b7 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bg/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bg/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Широк прорез на екрана"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Широк прорез"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bn/strings.xml index 9ef473954118..4492290afe26 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"ওয়াইড ডিসপ্লে কাট-আউট"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"ওয়াইড কাট-আউট"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bs/strings.xml index 0aaf27faf21e..233d9a9735b1 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Široki urez ekrana"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Široki urez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ca/strings.xml index c9aa251720ca..ce85abaebed5 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ca/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ca/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Retall de pantalla ample"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Retall ample"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-cs/strings.xml index dcbb256e6c9f..da6f83a5b0dd 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-cs/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-cs/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Široký výřez displeje"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Široký výřez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-da/strings.xml index b73b6ae502ea..c5f06c19aa01 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-da/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-da/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Bred udskæring på skærmen"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Bredt hak"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-de/strings.xml index 20537dcd1be7..80562974d1b0 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-de/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-de/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Breiter Display-Ausschnitt"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Breite Aussparung"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-el/strings.xml index 04c5e3871ae2..ce140ec345d6 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-el/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-el/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Διακοπή πλατιάς οθόνης"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Πλατιά εγκοπή"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rAU/strings.xml index cc0e6c785318..8eb5da0d2fa4 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rAU/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rAU/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Wide display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Wide cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rGB/strings.xml index cc0e6c785318..8eb5da0d2fa4 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rGB/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rGB/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Wide display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Wide cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rIN/strings.xml index cc0e6c785318..8eb5da0d2fa4 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rIN/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rIN/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Wide display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Wide cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es-rUS/strings.xml index c88e12d9f148..d840fce75744 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es-rUS/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es-rUS/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Recorte de pantalla ancho"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Corte ancho"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es/strings.xml index f63e42754f0d..155fa5324dcb 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Recorte ancho de la pantalla"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Recorte ancho"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-et/strings.xml index f3643a9165da..ad54c9fea17d 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-et/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-et/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Lai ekraani väljalõige"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Lai väljalõige"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-eu/strings.xml index f13d7f69ddfc..21935510c5a9 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-eu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-eu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Pantailaren mozketa zabala"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Mozketa zabala"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fa/strings.xml index 13cbe2fabfcd..d4c57b18c6a1 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fa/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"نمایشگر با لبه پهن"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"لبه پهن"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fi/strings.xml index 2568605f476c..1ec42640561c 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Leveä aukko näytössä"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Leveä lovi"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr-rCA/strings.xml index 92faa6c497ac..f9b15cf5d26d 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr-rCA/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr-rCA/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Découpe d\'affichage large"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Encoche large"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr/strings.xml index 3e104bec748c..f9b15cf5d26d 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Encoche pour écran large"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Encoche large"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gl/strings.xml index deafd408c407..bfef77d3b3c6 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Recorte de pantalla amplo"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Recorte amplo"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gu/strings.xml index fc08278b1953..0c9f6a738641 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"પહોળું ડિસ્પ્લે કટઆઉટ"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"પહોળું કટઆઉટ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hi/strings.xml index cdea4bbb8827..8f97495f9d28 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"चौड़ा डिसप्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"वाइड कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hr/strings.xml index fbb08586ede8..233d9a9735b1 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Obrezana slika za široke zaslone"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Široki urez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hu/strings.xml index b9a47293f04c..997f2795fdb0 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Széles képernyőkivágás"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Széles kivágás"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hy/strings.xml index cfe4dbf1af3a..e93676c930d5 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hy/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hy/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Էկրանի լայն կտրվածք"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Լայն կտրվածք"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-in/strings.xml index 91440fc0acaf..11c5a5fbdefd 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-in/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-in/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Potongan tampilan lebar"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Potongan lebar"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-is/strings.xml index 367219bda589..b24825672b61 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-is/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-is/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Breiður skjáskurður"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Breiður skurður"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-it/strings.xml index 5349c40731a5..e0c2c126a0ce 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-it/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-it/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Ritaglio display largo"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Ritaglio largo"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-iw/strings.xml index 1a2fdd7164ff..ae100e6a282f 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-iw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-iw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"חיתוך תצוגה רחב"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"מגרעת רחבה"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ja/strings.xml index f0fc0a23b1ff..126cf58e6034 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ja/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ja/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"幅広のディスプレイ カットアウト"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"幅広のカットアウト"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ka/strings.xml index 8a6b89f88613..87e6129a11af 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ka/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ka/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"ეკრანის ფართო ამოჭრა"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"ფართო ამოჭრა"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kk/strings.xml index f3124de5ec95..e50f34c41ca4 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Жалпақ экран ойығы"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Көлденеңінен ойық жасау"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-km/strings.xml index 6fc8643cee17..7325a731fe88 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-km/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-km/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"ស្នាមចោះផ្ទាំងអេក្រង់ធំ"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"សក់សេះធំ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kn/strings.xml index f95180d05ca2..65730c5114b9 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"ವಿಶಾಲ ಪ್ರದರ್ಶನ ಕಟೌಟ್"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"ವಿಶಾಲವಾದ ಕಟೌಟ್"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ko/strings.xml index ea4f6388f8e1..19350ac698a1 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ko/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ko/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"넓은 디스플레이 컷아웃"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"넓은 컷아웃"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ky/strings.xml index 735034ded661..dafd16ebb75b 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ky/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ky/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Жазы дисплей кесиндиси"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Жазы кесинди"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lo/strings.xml index 8282319d3dd8..942f9be5c20c 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lo/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lo/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"ກ່ອງຂໍ້ຄວາມສະແດງຜົນແບບກວ້າງ"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"ຮອຍບາກກວ້າງ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lt/strings.xml index a46ae3d393a9..46251b7bca5a 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Plati ekrano išpjova"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Plati išpjova"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lv/strings.xml index 9789d8c873f7..50e394779269 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Plats ekrāna izgriezums"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Plats izgriezums"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mk/strings.xml index 025c46e1b947..dbcae0e81aac 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Широк исечок на екранот"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Широк исечок"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ml/strings.xml index 9a4756510ca6..ba30add888c1 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ml/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ml/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"വിസ്തൃതമായ ഡിസ്പ്ലേ കട്ടൗട്ട്"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"വിസ്തൃതമായ കട്ട്ഔട്ട്"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mn/strings.xml index a7d8b5a4fbe1..a6eb6664fc19 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mn/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mn/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Дэлгэцийг өргөн болгож таслах"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Өргөн болгож таслах"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mr/strings.xml index 50542af8060f..8f97495f9d28 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"रुंद डिस्प्ले कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"वाइड कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ms/strings.xml index ad702b7a1576..11c5a5fbdefd 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ms/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ms/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Potongan paparan lebar"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Potongan lebar"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-my/strings.xml index 94566da8d975..79b9ce361cf5 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-my/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-my/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"မြင်ကွင်းကျယ် မျက်နှာပြင် ဖြတ်ညှပ်ပြသမှု"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"မြင်ကွင်းကျယ် ဖြတ်ညှပ်ပြသမှု"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nb/strings.xml index c84fc8b00933..a7d8e6349e73 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nb/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nb/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Bredt skjermutklipp"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Bredt utklipp"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ne/strings.xml index 718ca438f393..7a94507a6990 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ne/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ne/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"फराकिलो प्रदर्शनसम्बन्धी कटआउट"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"फराकिलो कटआउट"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nl/strings.xml index b57cac726122..50800e7380a9 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Brede display-cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Brede cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pa/strings.xml index c86889ff4f4f..b425aba74507 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pa/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pa/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"ਚੌੜਾ ਡਿਸਪਲੇ ਕੱਟਆਊਟ"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"ਚੌੜਾ ਕੱਟਆਊਟ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pl/strings.xml index f406c72d28ec..9c6deeb6d187 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Szerokie wycięcie w ekranie"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Wycięcie szerokie"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rBR/strings.xml index 16491f81ee45..c6dccb6c6d55 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rBR/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rBR/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Corte da tela largo"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Corte largo"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rPT/strings.xml index 03d36312b826..1a363478ac69 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rPT/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rPT/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Ecrã largo com recorte"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Recorte largo"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt/strings.xml index 16491f81ee45..c6dccb6c6d55 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Corte da tela largo"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Corte largo"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ro/strings.xml index a1140a89c6a8..ebfeafd7ce88 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ro/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ro/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Decupare ecran lată"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Decupaj lat"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ru/strings.xml index f7d5ec607ec0..1a3e8ef2900f 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ru/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ru/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Сделать вырез на экране шире"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Расширить вырез"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-si/strings.xml index 1be117bcbb9b..6adca7748d06 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-si/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-si/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"පුළුල් සංදර්ශක කටවුට්"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"පුළුල් කට්අවුට්"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sk/strings.xml index 059e58450e35..e50b31fe977c 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Široký výrez obrazovky"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Široký výrez"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sl/strings.xml index 5c5b5a2565ab..b93b5ffe200d 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Širok izrez prikaza"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Široka zareza"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sq/strings.xml index 76271acf4d5d..f9c295c54c28 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sq/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sq/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Prerje e gjerë ekrani"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Prerje e gjerë"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sr/strings.xml index 66705124fb68..6087dd77b2e5 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Изрезана слика за широке екране"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Изрезана слика за широке екране"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sv/strings.xml index c624c052bd8e..47a06e13534a 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sv/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sv/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Brett urklipp av skärm"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Bred utskärning"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sw/strings.xml index 0414e8ac35c6..206f6f7ce84e 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sw/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sw/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Mwonekeno wenye pengo pana"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Mkato mpana"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ta/strings.xml index 122a8b216d71..e62e14b92e61 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ta/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ta/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"அகலமான கட்அவுட் காட்சி"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"அகலமான கட்அவுட்"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-te/strings.xml index 1a0a3bf61e0c..4da4f951604a 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-te/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-te/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"వెడల్పైన డిస్ప్లే కట్అవుట్"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"వెడల్పైన కట్అవుట్"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-th/strings.xml index f91a7b636673..40841d866fae 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-th/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-th/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"คัตเอาท์ดิสเพลย์แบบกว้าง"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"คัตเอาท์แบบกว้าง"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tl/strings.xml index 2f82c4bb9757..7501a22bb8b9 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tl/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tl/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Malapad na display cutout"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Malapad na cutout"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tr/strings.xml index 01d77d581073..a3b1f39c8b36 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tr/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tr/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Geniş ekran kesimi"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Geniş kesim"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uk/strings.xml index 40b5c9d81e8d..5c07ce29b96b 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uk/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uk/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Відключення широкого дисплея"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Відрізання по ширині"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ur/strings.xml index 3bed22a70e6e..ad9fe8b0216c 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ur/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ur/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"چوڑا ڈسپلے کٹ آؤٹ"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"چوڑا کٹ آؤٹ"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uz/strings.xml index c67c8ca99748..5aa5fa5725c8 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uz/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uz/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Ekrandagi kesimni uzaytirish"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Kesimni uzaytirish"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-vi/strings.xml index c811af0280f9..3ffb81cd9cfd 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-vi/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-vi/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Cắt hiển thị rộng"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Vết cắt rộng"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rHK/strings.xml index 8a2313678073..87ba61b8b5b1 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rHK/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rHK/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"闊身顯示屏凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"闊身凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rTW/strings.xml index 9d2921b69cf7..f5a57f515cea 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rTW/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rTW/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"寬型螢幕凹口"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"寬型凹口"</string> </resources> diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zu/strings.xml index 4a9628196a6f..ccf0040e0652 100644 --- a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zu/strings.xml +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zu/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="display_cutout_emulation_overlay" msgid="3249818092477753587">"Ukusikwa kwesiboniso esibanzi"</string> + <string name="display_cutout_emulation_overlay" msgid="4043478945358357737">"Ukusika okubanzi"</string> </resources> diff --git a/packages/services/PacProcessor/Android.bp b/packages/services/PacProcessor/Android.bp new file mode 100644 index 000000000000..93b2d956cf6f --- /dev/null +++ b/packages/services/PacProcessor/Android.bp @@ -0,0 +1,23 @@ +// +// 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_app { + name: "PacProcessor", + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + jni_libs: ["libjni_pacprocessor"], +} diff --git a/packages/services/PacProcessor/Android.mk b/packages/services/PacProcessor/Android.mk deleted file mode 100644 index be9ba4351056..000000000000 --- a/packages/services/PacProcessor/Android.mk +++ /dev/null @@ -1,31 +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_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := PacProcessor -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform - -LOCAL_JNI_SHARED_LIBRARIES := libjni_pacprocessor - -include $(BUILD_PACKAGE) diff --git a/packages/services/Proxy/Android.bp b/packages/services/Proxy/Android.bp new file mode 100644 index 000000000000..87aa7637df8e --- /dev/null +++ b/packages/services/Proxy/Android.bp @@ -0,0 +1,7 @@ +android_app { + name: "ProxyHandler", + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + privileged: true, +} diff --git a/packages/services/Proxy/Android.mk b/packages/services/Proxy/Android.mk deleted file mode 100644 index ce1715f08be5..000000000000 --- a/packages/services/Proxy/Android.mk +++ /dev/null @@ -1,15 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := ProxyHandler -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRIVILEGED_MODULE := true - -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/proto/Android.bp b/proto/Android.bp index 9b7a1c15cf97..e924a4dcd201 100644 --- a/proto/Android.bp +++ b/proto/Android.bp @@ -27,14 +27,4 @@ java_library_static { srcs: ["src/metrics_constants.proto"], no_framework_libs: true, sdk_version: "system_current", - // Pin java_version until jarjar is certified to support later versions. http://b/72703434 - java_version: "1.8", - target: { - android: { - jarjar_rules: "jarjar-rules.txt", - }, - host: { - static_libs: ["libprotobuf-java-nano"], - }, - }, } diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index b990175fd616..d79d833f2233 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -6482,6 +6482,16 @@ message MetricsEvent { // OS: Q FIELD_EMERGENCY_DIALER_SHORTCUT_TAPS_INTERVAL = 1567; + // OPEN: Power menu is opened + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: Q + POWER_MENU = 1568; + + // ACTION: User tapped emergency dialer icon in the power menu. + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: Q + ACTION_EMERGENCY_DIALER_FROM_POWER_MENU = 1569; + // ---- End Q Constants, all Q constants go above this line ---- // Add new aosp constants above this line. diff --git a/proto/src/wifi.proto b/proto/src/wifi.proto index b29c992120d4..927e74a92f24 100644 --- a/proto/src/wifi.proto +++ b/proto/src/wifi.proto @@ -462,6 +462,9 @@ message WifiLog { // Hardware revision (EVT, DVT, PVT etc.) optional string hardware_revision = 124; + + // Total wifi link layer usage data over the logging duration in ms. + optional WifiLinkLayerUsageStats wifi_link_layer_usage_stats = 125; } // Information that gets logged for every WiFi connection. @@ -781,6 +784,12 @@ message StaEvent { // Framework changed Sta interface MAC address TYPE_MAC_CHANGE = 17; + + // Wifi is turned on + TYPE_WIFI_ENABLED = 18; + + // Wifi is turned off + TYPE_WIFI_DISABLED = 19; } enum FrameworkDisconnectReason { @@ -1536,3 +1545,20 @@ message PasspointProfileTypeCount { // Num of installed Passpoint profile with same eap method optional int32 count = 2; } + +message WifiLinkLayerUsageStats { + // Total logging duration in ms. + optional int64 logging_duration_ms = 1; + + // Total time the wifi radio is on in ms over the logging duration. + optional int64 radio_on_time_ms = 2; + + // Total time the wifi radio is doing tx in ms over the logging duration. + optional int64 radio_tx_time_ms = 3; + + // Total time the wifi radio is doing rx in ms over the logging duration. + optional int64 radio_rx_time_ms = 4; + + // Total time the wifi radio is scanning in ms over the logging duration. + optional int64 radio_scan_time_ms = 5; +}
\ No newline at end of file diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index b71d7a726b28..da52d408e125 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -1834,7 +1834,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku if (provider.widgets.isEmpty()) { // cancel the future updates - cancelBroadcasts(provider); + cancelBroadcastsLocked(provider); // send the broacast saying that the provider is not in use any more sendDisabledIntentLocked(provider); @@ -1843,18 +1843,16 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } } - private void cancelBroadcasts(Provider provider) { + private void cancelBroadcastsLocked(Provider provider) { if (DEBUG) { - Slog.i(TAG, "cancelBroadcasts() for " + provider); + Slog.i(TAG, "cancelBroadcastsLocked() for " + provider); } if (provider.broadcast != null) { - mAlarmManager.cancel(provider.broadcast); - long token = Binder.clearCallingIdentity(); - try { - provider.broadcast.cancel(); - } finally { - Binder.restoreCallingIdentity(token); - } + final PendingIntent broadcast = provider.broadcast; + mSaveStateHandler.post(() -> { + mAlarmManager.cancel(broadcast); + broadcast.cancel(); + }); provider.broadcast = null; } } @@ -2315,7 +2313,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku mProviders.remove(provider); // no need to send the DISABLE broadcast, since the receiver is gone anyway - cancelBroadcasts(provider); + cancelBroadcastsLocked(provider); } private void sendEnableIntentLocked(Provider p) { @@ -2369,17 +2367,14 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku Binder.restoreCallingIdentity(token); } if (!alreadyRegistered) { - long period = provider.info.updatePeriodMillis; - if (period < MIN_UPDATE_PERIOD) { - period = MIN_UPDATE_PERIOD; - } - final long oldId = Binder.clearCallingIdentity(); - try { + // Set the alarm outside of our locks; we've latched the first-time + // invariant and established the PendingIntent safely. + final long period = Math.max(provider.info.updatePeriodMillis, MIN_UPDATE_PERIOD); + final PendingIntent broadcast = provider.broadcast; + mSaveStateHandler.post(() -> mAlarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, - SystemClock.elapsedRealtime() + period, period, provider.broadcast); - } finally { - Binder.restoreCallingIdentity(oldId); - } + SystemClock.elapsedRealtime() + period, period, broadcast) + ); } } } @@ -3382,7 +3377,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku // Reschedule for the new updatePeriodMillis (don't worry about handling // it specially if updatePeriodMillis didn't change because we just sent // an update, and the next one will be updatePeriodMillis from now). - cancelBroadcasts(provider); + cancelBroadcastsLocked(provider); registerForBroadcastsLocked(provider, appWidgetIds); // If it's currently showing, call back with the new // AppWidgetProviderInfo. 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 b5fcde4bf203..8390263dbd06 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 @@ -2373,6 +2380,11 @@ public class ConnectivityService extends IConnectivityManager.Stub pw.decreaseIndent(); } + + pw.println(); + pw.println("NetworkStackClient logs:"); + pw.increaseIndent(); + NetworkStackClient.getInstance().dump(pw); } private void dumpNetworks(IndentingPrintWriter pw) { @@ -2762,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. @@ -2877,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. @@ -3723,10 +3758,10 @@ public class ConnectivityService extends IConnectivityManager.Stub * if it's really needed. */ @Override - public void getLatestTetheringEntitlementValue(int type, ResultReceiver receiver, + public void getLatestTetheringEntitlementResult(int type, ResultReceiver receiver, boolean showEntitlementUi, String callerPkg) { ConnectivityManager.enforceTetherChangePermission(mContext, callerPkg); - mTethering.getLatestTetheringEntitlementValue(type, receiver, showEntitlementUi); + mTethering.getLatestTetheringEntitlementResult(type, receiver, showEntitlementUi); } // Called when we lose the default network and have no replacement yet. @@ -4060,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]; @@ -5185,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); @@ -5219,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 { @@ -5528,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; @@ -6362,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()) { @@ -6377,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/DynamicAndroidService.java b/services/core/java/com/android/server/DynamicAndroidService.java index 12a3f02325d2..8488941587fb 100644 --- a/services/core/java/com/android/server/DynamicAndroidService.java +++ b/services/core/java/com/android/server/DynamicAndroidService.java @@ -118,7 +118,9 @@ public class DynamicAndroidService extends IDynamicAndroidService.Stub implement if (gsiService.isGsiRunning()) { return gsiService.disableGsiInstall(); } else { - return gsiService.setGsiBootable() == 0; + final int status = gsiService.getGsiBootStatus(); + final boolean singleBoot = (status == IGsiService.BOOT_STATUS_SINGLE_BOOT); + return gsiService.setGsiBootable(singleBoot) == 0; } } @@ -129,6 +131,6 @@ public class DynamicAndroidService extends IDynamicAndroidService.Stub implement @Override public boolean commit() throws RemoteException { - return getGsiService().setGsiBootable() == 0; + return getGsiService().setGsiBootable(true) == 0; } } diff --git a/services/core/java/com/android/server/HardwarePropertiesManagerService.java b/services/core/java/com/android/server/HardwarePropertiesManagerService.java index 4016d29fd2e6..e21a3d7917d1 100644 --- a/services/core/java/com/android/server/HardwarePropertiesManagerService.java +++ b/services/core/java/com/android/server/HardwarePropertiesManagerService.java @@ -26,7 +26,6 @@ import static android.os.HardwarePropertiesManager.TEMPERATURE_THROTTLING; import static android.os.HardwarePropertiesManager.TEMPERATURE_THROTTLING_BELOW_VR_MIN; import android.Manifest; -import android.app.ActivityManager; import android.app.AppOpsManager; import android.app.admin.DevicePolicyManager; import android.content.Context; @@ -34,8 +33,8 @@ import android.content.pm.PackageManager; import android.os.Binder; import android.os.CpuUsageInfo; import android.os.IHardwarePropertiesManager; -import android.os.Process; import android.os.UserHandle; + import com.android.internal.util.DumpUtils; import com.android.server.vr.VrManagerInternal; @@ -166,11 +165,11 @@ public class HardwarePropertiesManagerService extends IHardwarePropertiesManager final VrManagerInternal vrService = LocalServices.getService(VrManagerInternal.class); final DevicePolicyManager dpm = mContext.getSystemService(DevicePolicyManager.class); if (!dpm.isDeviceOwnerApp(callingPackage) - && !vrService.isCurrentVrListener(callingPackage, userId) && mContext.checkCallingOrSelfPermission(Manifest.permission.DEVICE_POWER) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException("The caller is not a device owner, bound VrListenerService" - + ", or holding the DEVICE_POWER permission."); + != PackageManager.PERMISSION_GRANTED + && (vrService == null || !vrService.isCurrentVrListener(callingPackage, userId))) { + throw new SecurityException("The caller is neither a device owner" + + ", nor holding the DEVICE_POWER permission, nor the current VrListener."); } } } diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index a4fda8e9f57b..a9645c419108 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -2506,6 +2506,10 @@ public class NetworkManagementService extends INetworkManagementService.Stub modifyRoute(MODIFY_OPERATION_ADD, INetd.LOCAL_NET_ID, route); } } + + // IPv6 link local should be activated always. + modifyRoute(MODIFY_OPERATION_ADD, INetd.LOCAL_NET_ID, + new RouteInfo(new IpPrefix("fe80::/64"), null, iface)); } @Override diff --git a/services/core/java/com/android/server/PinnerService.java b/services/core/java/com/android/server/PinnerService.java index 0deaee7f7878..54a98cedccff 100644 --- a/services/core/java/com/android/server/PinnerService.java +++ b/services/core/java/com/android/server/PinnerService.java @@ -42,6 +42,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.RemoteException; +import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.provider.MediaStore; @@ -232,9 +233,17 @@ public final class PinnerService extends SystemService { * Handler for on start pinning message */ private void handlePinOnStart() { - // Files to pin come from the overlay and can be specified per-device config - String[] filesToPin = mContext.getResources().getStringArray( - com.android.internal.R.array.config_defaultPinnerServiceFiles); + final String bootImage = SystemProperties.get("dalvik.vm.boot-image", ""); + String[] filesToPin = null; + if (bootImage.endsWith("apex.art")) { + // Use the files listed for that specific boot image + filesToPin = mContext.getResources().getStringArray( + com.android.internal.R.array.config_apexBootImagePinnerServiceFiles); + } else { + // Files to pin come from the overlay and can be specified per-device config + filesToPin = mContext.getResources().getStringArray( + com.android.internal.R.array.config_defaultPinnerServiceFiles); + } // Continue trying to pin each file even if we fail to pin some of them for (String fileToPin : filesToPin) { PinnedFile pf = pinFile(fileToPin, diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index 3b5c9f53d9a1..e78ae5547b5a 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; @@ -237,6 +238,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { private PhoneCapability mPhoneCapability = null; + private int mActiveDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; + @TelephonyManager.RadioPowerState private int mRadioPowerState = TelephonyManager.RADIO_POWER_UNAVAILABLE; @@ -257,7 +260,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { static final int ENFORCE_PHONE_STATE_PERMISSION_MASK = PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR | PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR - | PhoneStateListener.LISTEN_EMERGENCY_NUMBER_LIST; + | PhoneStateListener.LISTEN_EMERGENCY_NUMBER_LIST + | PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE; static final int PRECISE_PHONE_STATE_PERMISSION_MASK = PhoneStateListener.LISTEN_PRECISE_CALL_STATE | @@ -374,7 +378,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 +398,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; @@ -819,9 +821,10 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { remove(r.binder); } } - if ((events & PhoneStateListener.LISTEN_PREFERRED_DATA_SUBID_CHANGE) != 0) { + if ((events & PhoneStateListener + .LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE) != 0) { try { - r.callback.onPreferredDataSubIdChanged(mPreferredDataSubId); + r.callback.onActiveDataSubIdChanged(mActiveDataSubId); } catch (RemoteException ex) { remove(r.binder); } @@ -997,21 +1000,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 +1027,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 +1458,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 +1474,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 +1553,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { log("notifyPreciseCallState: mCallQuality is null, skipping call attributes"); notifyCallAttributes = false; } else { - mCallAttributes = new CallAttributes(mPreciseCallState, mNetworkType[phoneId], + // If the precise call state is no longer active, reset the call network type and + // call quality. + if (mPreciseCallState.getForegroundCallState() + != PreciseCallState.PRECISE_CALL_STATE_ACTIVE) { + mCallNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN; + mCallQuality = new CallQuality(); + } + mCallAttributes = new CallAttributes(mPreciseCallState, mCallNetworkType, mCallQuality); } @@ -1757,23 +1744,23 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } } - public void notifyPreferredDataSubIdChanged(int preferredSubId) { - if (!checkNotifyPermission("notifyPreferredDataSubIdChanged()")) { + public void notifyActiveDataSubIdChanged(int activeDataSubId) { + if (!checkNotifyPermission("notifyActiveDataSubIdChanged()")) { return; } if (VDBG) { - log("notifyPreferredDataSubIdChanged: preferredSubId=" + preferredSubId); + log("notifyActiveDataSubIdChanged: activeDataSubId=" + activeDataSubId); } synchronized (mRecords) { - mPreferredDataSubId = preferredSubId; + mActiveDataSubId = activeDataSubId; for (Record r : mRecords) { if (r.matchPhoneStateListenerEvent( - PhoneStateListener.LISTEN_PREFERRED_DATA_SUBID_CHANGE)) { + PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE)) { try { - r.callback.onPreferredDataSubIdChanged(preferredSubId); + r.callback.onActiveDataSubIdChanged(activeDataSubId); } catch (RemoteException ex) { mRemoveList.add(r.binder); } @@ -1840,16 +1827,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 +1873,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 +1886,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); @@ -1910,7 +1897,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { pw.println("mBackgroundCallState=" + mBackgroundCallState); pw.println("mSrvccState=" + mSrvccState); pw.println("mPhoneCapability=" + mPhoneCapability); - pw.println("mPreferredDataSubId=" + mPreferredDataSubId); + pw.println("mActiveDataSubId=" + mActiveDataSubId); pw.println("mRadioPowerState=" + mRadioPowerState); pw.println("mEmergencyNumberList=" + mEmergencyNumberList); pw.println("mCallQuality=" + mCallQuality); @@ -2182,14 +2169,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, null); } - if ((events & PhoneStateListener.LISTEN_PREFERRED_DATA_SUBID_CHANGE) != 0) { - // It can have either READ_PHONE_STATE or READ_PRIVILEGED_PHONE_STATE. - TelephonyPermissions.checkReadPhoneState(mContext, - SubscriptionManager.INVALID_SUBSCRIPTION_ID, Binder.getCallingPid(), - Binder.getCallingUid(), callingPackage, "listen to " - + "LISTEN_PREFERRED_DATA_SUBID_CHANGE"); - } - if ((events & PhoneStateListener.LISTEN_CALL_DISCONNECT_CAUSES) != 0) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.READ_PRECISE_PHONE_STATE, null); diff --git a/services/core/java/com/android/server/TestNetworkService.java b/services/core/java/com/android/server/TestNetworkService.java new file mode 100644 index 000000000000..e64ab78d1ed2 --- /dev/null +++ b/services/core/java/com/android/server/TestNetworkService.java @@ -0,0 +1,338 @@ +/* + * 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. + */ + +package com.android.server; + +import static com.android.internal.util.Preconditions.checkNotNull; + +import android.annotation.NonNull; +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.INetd; +import android.net.ITestNetworkManager; +import android.net.IpPrefix; +import android.net.LinkAddress; +import android.net.LinkProperties; +import android.net.NetworkAgent; +import android.net.NetworkCapabilities; +import android.net.NetworkInfo; +import android.net.NetworkInfo.DetailedState; +import android.net.RouteInfo; +import android.net.StringNetworkSpecifier; +import android.net.TestNetworkInterface; +import android.net.util.NetdService; +import android.os.Binder; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.IBinder; +import android.os.INetworkManagementService; +import android.os.Looper; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; +import android.util.SparseArray; + +import com.android.internal.annotations.GuardedBy; +import com.android.internal.annotations.VisibleForTesting; + +import java.io.UncheckedIOException; +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.net.InterfaceAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.concurrent.atomic.AtomicInteger; + +/** @hide */ +class TestNetworkService extends ITestNetworkManager.Stub { + @NonNull private static final String TAG = TestNetworkService.class.getSimpleName(); + @NonNull private static final String TEST_NETWORK_TYPE = "TEST_NETWORK"; + @NonNull private static final String TEST_TUN_PREFIX = "testtun"; + @NonNull private static final AtomicInteger sTestTunIndex = new AtomicInteger(); + + @NonNull private final Context mContext; + @NonNull private final INetworkManagementService mNMS; + @NonNull private final INetd mNetd; + + @NonNull private final HandlerThread mHandlerThread; + @NonNull private final Handler mHandler; + + // Native method stubs + private static native int jniCreateTun(@NonNull String iface); + + @VisibleForTesting + protected TestNetworkService( + @NonNull Context context, @NonNull INetworkManagementService netManager) { + mHandlerThread = new HandlerThread("TestNetworkServiceThread"); + mHandlerThread.start(); + mHandler = new Handler(mHandlerThread.getLooper()); + + mContext = checkNotNull(context, "missing Context"); + mNMS = checkNotNull(netManager, "missing INetworkManagementService"); + mNetd = checkNotNull(NetdService.getInstance(), "could not get netd instance"); + } + + /** + * Create a TUN interface with the given interface name and link addresses + * + * <p>This method will return the FileDescriptor to the TUN interface. Close it to tear down the + * TUN interface. + */ + @Override + public TestNetworkInterface createTunInterface(@NonNull LinkAddress[] linkAddrs) { + enforceTestNetworkPermissions(mContext); + + checkNotNull(linkAddrs, "missing linkAddrs"); + + String iface = TEST_TUN_PREFIX + sTestTunIndex.getAndIncrement(); + return Binder.withCleanCallingIdentity( + () -> { + try { + ParcelFileDescriptor tunIntf = + ParcelFileDescriptor.adoptFd(jniCreateTun(iface)); + for (LinkAddress addr : linkAddrs) { + mNetd.interfaceAddAddress( + iface, + addr.getAddress().getHostAddress(), + addr.getPrefixLength()); + } + + return new TestNetworkInterface(tunIntf, iface); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + }); + } + + // Tracker for TestNetworkAgents + @GuardedBy("mTestNetworkTracker") + @NonNull + private final SparseArray<TestNetworkAgent> mTestNetworkTracker = new SparseArray<>(); + + public class TestNetworkAgent extends NetworkAgent implements IBinder.DeathRecipient { + private static final int NETWORK_SCORE = 1; // Use a low, non-zero score. + + private final int mUid; + @NonNull private final NetworkInfo mNi; + @NonNull private final NetworkCapabilities mNc; + @NonNull private final LinkProperties mLp; + + @GuardedBy("mBinderLock") + @NonNull + private IBinder mBinder; + + @NonNull private final Object mBinderLock = new Object(); + + private TestNetworkAgent( + @NonNull Looper looper, + @NonNull Context context, + @NonNull NetworkInfo ni, + @NonNull NetworkCapabilities nc, + @NonNull LinkProperties lp, + int uid, + @NonNull IBinder binder) + throws RemoteException { + super(looper, context, TEST_NETWORK_TYPE, ni, nc, lp, NETWORK_SCORE); + + mUid = uid; + mNi = ni; + mNc = nc; + mLp = lp; + + synchronized (mBinderLock) { + mBinder = binder; // Binder null-checks in create() + + try { + mBinder.linkToDeath(this, 0); + } catch (RemoteException e) { + binderDied(); + throw e; // Abort, signal failure up the stack. + } + } + } + + /** + * If the Binder object dies, this function is called to free the resources of this + * TestNetworkAgent + */ + @Override + public void binderDied() { + teardown(); + } + + @Override + protected void unwanted() { + teardown(); + } + + private void teardown() { + mNi.setDetailedState(DetailedState.DISCONNECTED, null, null); + mNi.setIsAvailable(false); + sendNetworkInfo(mNi); + + // Synchronize on mBinderLock to ensure that unlinkToDeath is never called more than + // once (otherwise it could throw an exception) + synchronized (mBinderLock) { + // If mBinder is null, this Test Network has already been cleaned up. + if (mBinder == null) return; + mBinder.unlinkToDeath(this, 0); + mBinder = null; + } + + // Has to be in TestNetworkAgent to ensure all teardown codepaths properly clean up + // resources, even for binder death or unwanted calls. + synchronized (mTestNetworkTracker) { + mTestNetworkTracker.remove(netId); + } + } + } + + private TestNetworkAgent registerTestNetworkAgent( + @NonNull Looper looper, + @NonNull Context context, + @NonNull String iface, + int callingUid, + @NonNull IBinder binder) + throws RemoteException, SocketException { + checkNotNull(looper, "missing Looper"); + checkNotNull(context, "missing Context"); + // iface and binder validity checked by caller + + // Build network info with special testing type + NetworkInfo ni = new NetworkInfo(ConnectivityManager.TYPE_TEST, 0, TEST_NETWORK_TYPE, ""); + ni.setDetailedState(DetailedState.CONNECTED, null, null); + ni.setIsAvailable(true); + + // Build narrow set of NetworkCapabilities, useful only for testing + NetworkCapabilities nc = new NetworkCapabilities(); + nc.clearAll(); // Remove default capabilities. + nc.addTransportType(NetworkCapabilities.TRANSPORT_TEST); + nc.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED); + nc.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); + nc.setNetworkSpecifier(new StringNetworkSpecifier(iface)); + + // Build LinkProperties + LinkProperties lp = new LinkProperties(); + lp.setInterfaceName(iface); + + // Find the currently assigned addresses, and add them to LinkProperties + boolean allowIPv4 = false, allowIPv6 = false; + NetworkInterface netIntf = NetworkInterface.getByName(iface); + checkNotNull(netIntf, "No such network interface found: " + netIntf); + + for (InterfaceAddress intfAddr : netIntf.getInterfaceAddresses()) { + lp.addLinkAddress( + new LinkAddress(intfAddr.getAddress(), intfAddr.getNetworkPrefixLength())); + + if (intfAddr.getAddress() instanceof Inet6Address) { + allowIPv6 |= !intfAddr.getAddress().isLinkLocalAddress(); + } else if (intfAddr.getAddress() instanceof Inet4Address) { + allowIPv4 = true; + } + } + + // Add global routes (but as non-default, non-internet providing network) + if (allowIPv4) { + lp.addRoute(new RouteInfo(new IpPrefix(Inet4Address.ANY, 0), null, iface)); + } + if (allowIPv6) { + lp.addRoute(new RouteInfo(new IpPrefix(Inet6Address.ANY, 0), null, iface)); + } + + return new TestNetworkAgent(looper, context, ni, nc, lp, callingUid, binder); + } + + /** + * Sets up a Network with extremely limited privileges, guarded by the MANAGE_TEST_NETWORKS + * permission. + * + * <p>This method provides a Network that is useful only for testing. + */ + @Override + public void setupTestNetwork(@NonNull String iface, @NonNull IBinder binder) { + enforceTestNetworkPermissions(mContext); + + checkNotNull(iface, "missing Iface"); + checkNotNull(binder, "missing IBinder"); + + if (!(iface.startsWith(INetd.IPSEC_INTERFACE_PREFIX) + || iface.startsWith(TEST_TUN_PREFIX))) { + throw new IllegalArgumentException( + "Cannot create network for non ipsec, non-testtun interface"); + } + + // Setup needs to be done with NETWORK_STACK privileges. + int callingUid = Binder.getCallingUid(); + Binder.withCleanCallingIdentity( + () -> { + try { + mNMS.setInterfaceUp(iface); + + // Synchronize all accesses to mTestNetworkTracker to prevent the case + // where: + // 1. TestNetworkAgent successfully binds to death of binder + // 2. Before it is added to the mTestNetworkTracker, binder dies, + // binderDied() is called (on a different thread) + // 3. This thread is pre-empted, put() is called after remove() + synchronized (mTestNetworkTracker) { + TestNetworkAgent agent = + registerTestNetworkAgent( + mHandler.getLooper(), + mContext, + iface, + callingUid, + binder); + + mTestNetworkTracker.put(agent.netId, agent); + } + } catch (SocketException e) { + throw new UncheckedIOException(e); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + }); + } + + /** Teardown a test network */ + @Override + public void teardownTestNetwork(int netId) { + enforceTestNetworkPermissions(mContext); + + TestNetworkAgent agent; + synchronized (mTestNetworkTracker) { + agent = mTestNetworkTracker.get(netId); + } + + if (agent == null) { + return; // Already torn down + } else if (agent.mUid != Binder.getCallingUid()) { + throw new SecurityException("Attempted to modify other user's test networks"); + } + + // Safe to be called multiple times. + agent.teardown(); + } + + // STOPSHIP: Change this back to android.Manifest.permission.MANAGE_TEST_NETWORKS + private static final String PERMISSION_NAME = "dummy"; + + public static void enforceTestNetworkPermissions(@NonNull Context context) { + // STOPSHIP: Re-enable these checks. Disabled until adoptShellPermissionIdentity() can be + // called from CTS test code. + if (false) { + context.enforceCallingOrSelfPermission(PERMISSION_NAME, "TestNetworkService"); + } + } +} diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 426a0c157aec..d313c5e82544 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -241,9 +241,6 @@ public class AccountManagerService private final HashMap<Account, AtomicReference<String>> previousNameCache = new HashMap<Account, AtomicReference<String>>(); - private int debugDbInsertionPoint = -1; - private SQLiteStatement statementForLogging; // TODO Move to AccountsDb - UserAccounts(Context context, int userId, File preNDbFile, File deDbFile) { this.userId = userId; synchronized (dbLock) { @@ -1299,7 +1296,6 @@ public class AccountManagerService File preNDbFile = new File(mInjector.getPreNDatabaseName(userId)); File deDbFile = new File(mInjector.getDeDatabaseName(userId)); accounts = new UserAccounts(mContext, userId, preNDbFile, deDbFile); - initializeDebugDbSizeAndCompileSqlStatementForLogging(accounts); mUsers.append(userId, accounts); purgeOldGrants(accounts); validateAccounts = true; @@ -1399,7 +1395,7 @@ public class AccountManagerService if (accounts != null) { synchronized (accounts.dbLock) { synchronized (accounts.cacheLock) { - accounts.statementForLogging.close(); + accounts.accountsDb.closeDebugStatement(); accounts.accountsDb.close(); } } @@ -5121,41 +5117,36 @@ public class AccountManagerService @Override public void run() { - SQLiteStatement logStatement = userAccount.statementForLogging; - logStatement.bindLong(1, accountId); - logStatement.bindString(2, action); - logStatement.bindString(3, mDateFormat.format(new Date())); - logStatement.bindLong(4, callingUid); - logStatement.bindString(5, tableName); - logStatement.bindLong(6, userDebugDbInsertionPoint); - try { - logStatement.execute(); - } catch (IllegalStateException e) { - // Guard against crash, DB can already be closed - // since this statement is executed on a handler thread - Slog.w(TAG, "Failed to insert a log record. accountId=" + accountId - + " action=" + action + " tableName=" + tableName + " Error: " + e); - } finally { - logStatement.clearBindings(); + synchronized (userAccount.accountsDb.mDebugStatementLock) { + SQLiteStatement logStatement = userAccount.accountsDb.getStatementForLogging(); + if (logStatement == null) { + return; // Can't log. + } + logStatement.bindLong(1, accountId); + logStatement.bindString(2, action); + logStatement.bindString(3, mDateFormat.format(new Date())); + logStatement.bindLong(4, callingUid); + logStatement.bindString(5, tableName); + logStatement.bindLong(6, userDebugDbInsertionPoint); + try { + logStatement.execute(); + } catch (IllegalStateException e) { + // Guard against crash, DB can already be closed + // since this statement is executed on a handler thread + Slog.w(TAG, "Failed to insert a log record. accountId=" + accountId + + " action=" + action + " tableName=" + tableName + " Error: " + e); + } finally { + logStatement.clearBindings(); + } } } } - - LogRecordTask logTask = new LogRecordTask(action, tableName, accountId, userAccount, - callingUid, userAccount.debugDbInsertionPoint); - userAccount.debugDbInsertionPoint = (userAccount.debugDbInsertionPoint + 1) - % AccountsDb.MAX_DEBUG_DB_SIZE; - mHandler.post(logTask); - } - - /* - * This should only be called once to compile the sql statement for logging - * and to find the insertion point. - */ - private void initializeDebugDbSizeAndCompileSqlStatementForLogging(UserAccounts userAccount) { - userAccount.debugDbInsertionPoint = userAccount.accountsDb - .calculateDebugTableInsertionPoint(); - userAccount.statementForLogging = userAccount.accountsDb.compileSqlStatementForLogging(); + long insertionPoint = userAccount.accountsDb.reserveDebugDbInsertionPoint(); + if (insertionPoint != -1) { + LogRecordTask logTask = new LogRecordTask(action, tableName, accountId, userAccount, + callingUid, insertionPoint); + mHandler.post(logTask); + } } public IBinder onBind(@SuppressWarnings("unused") Intent intent) { diff --git a/services/core/java/com/android/server/accounts/AccountsDb.java b/services/core/java/com/android/server/accounts/AccountsDb.java index 0c3d268f4b0f..9fffc619cc64 100644 --- a/services/core/java/com/android/server/accounts/AccountsDb.java +++ b/services/core/java/com/android/server/accounts/AccountsDb.java @@ -17,11 +17,13 @@ package com.android.server.accounts; import android.accounts.Account; +import android.annotation.Nullable; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.DatabaseUtils; import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteStatement; import android.os.FileUtils; @@ -56,7 +58,6 @@ class AccountsDb implements AutoCloseable { private static final int CE_DATABASE_VERSION = 10; private static final int DE_DATABASE_VERSION = 3; // Added visibility support in O - static final String TABLE_ACCOUNTS = "accounts"; private static final String ACCOUNTS_ID = "_id"; private static final String ACCOUNTS_NAME = "name"; @@ -183,6 +184,10 @@ class AccountsDb implements AutoCloseable { private final Context mContext; private final File mPreNDatabaseFile; + final Object mDebugStatementLock = new Object(); + private volatile long mDebugDbInsertionPoint = -1; + private volatile SQLiteStatement mDebugStatementForLogging; // not thread safe. + AccountsDb(DeDatabaseHelper deDatabase, Context context, File preNDatabaseFile) { mDeDatabase = deDatabase; mContext = context; @@ -1278,31 +1283,72 @@ class AccountsDb implements AutoCloseable { * Finds the row key where the next insertion should take place. Returns number of rows * if it is less {@link #MAX_DEBUG_DB_SIZE}, otherwise finds the lowest number available. */ - int calculateDebugTableInsertionPoint() { - SQLiteDatabase db = mDeDatabase.getReadableDatabase(); - String queryCountDebugDbRows = "SELECT COUNT(*) FROM " + TABLE_DEBUG; - int size = (int) DatabaseUtils.longForQuery(db, queryCountDebugDbRows, null); - if (size < MAX_DEBUG_DB_SIZE) { - return size; - } + long calculateDebugTableInsertionPoint() { + try { + SQLiteDatabase db = mDeDatabase.getReadableDatabase(); + String queryCountDebugDbRows = "SELECT COUNT(*) FROM " + TABLE_DEBUG; + int size = (int) DatabaseUtils.longForQuery(db, queryCountDebugDbRows, null); + if (size < MAX_DEBUG_DB_SIZE) { + return size; + } - // This query finds the smallest timestamp value (and if 2 records have - // same timestamp, the choose the lower id). - queryCountDebugDbRows = "SELECT " + DEBUG_TABLE_KEY + - " FROM " + TABLE_DEBUG + - " ORDER BY " + DEBUG_TABLE_TIMESTAMP + "," + DEBUG_TABLE_KEY + - " LIMIT 1"; - return (int) DatabaseUtils.longForQuery(db, queryCountDebugDbRows, null); + // This query finds the smallest timestamp value (and if 2 records have + // same timestamp, the choose the lower id). + queryCountDebugDbRows = + "SELECT " + DEBUG_TABLE_KEY + + " FROM " + TABLE_DEBUG + + " ORDER BY " + DEBUG_TABLE_TIMESTAMP + "," + + DEBUG_TABLE_KEY + + " LIMIT 1"; + return DatabaseUtils.longForQuery(db, queryCountDebugDbRows, null); + } catch (SQLiteException e) { + Log.e(TAG, "Failed to open debug table" + e); + return -1; + } } SQLiteStatement compileSqlStatementForLogging() { - // TODO b/31708085 Fix debug logging - it eagerly opens database for write without a need SQLiteDatabase db = mDeDatabase.getWritableDatabase(); String sql = "INSERT OR REPLACE INTO " + AccountsDb.TABLE_DEBUG + " VALUES (?,?,?,?,?,?)"; return db.compileStatement(sql); } + /** + * Returns statement for logging or {@code null} on database open failure. + * Returned value must be guarded by {link #debugStatementLock} + */ + @Nullable SQLiteStatement getStatementForLogging() { + if (mDebugStatementForLogging != null) { + return mDebugStatementForLogging; + } + try { + mDebugStatementForLogging = compileSqlStatementForLogging(); + return mDebugStatementForLogging; + } catch (SQLiteException e) { + Log.e(TAG, "Failed to open debug table" + e); + return null; + } + } + + void closeDebugStatement() { + synchronized (mDebugStatementLock) { + if (mDebugStatementForLogging != null) { + mDebugStatementForLogging.close(); + mDebugStatementForLogging = null; + } + } + } + + long reserveDebugDbInsertionPoint() { + if (mDebugDbInsertionPoint == -1) { + mDebugDbInsertionPoint = calculateDebugTableInsertionPoint(); + return mDebugDbInsertionPoint; + } + mDebugDbInsertionPoint = (mDebugDbInsertionPoint + 1) % MAX_DEBUG_DB_SIZE; + return mDebugDbInsertionPoint; + } + void dumpDebugTable(PrintWriter pw) { SQLiteDatabase db = mDeDatabase.getReadableDatabase(); Cursor cursor = db.query(TABLE_DEBUG, null, diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 06d1ca632363..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 { @@ -584,6 +589,12 @@ public class ActivityManagerService extends IActivityManager.Stub // before we decide it must be hung. static final int CONTENT_PROVIDER_PUBLISH_TIMEOUT = 10*1000; + /** + * How long we wait for an provider to be published. Should be longer than + * {@link #CONTENT_PROVIDER_PUBLISH_TIMEOUT}. + */ + static final int CONTENT_PROVIDER_WAIT_TIMEOUT = 20 * 1000; + // How long we wait for a launched process to attach to the activity manager // before we decide it's never going to come up for real, when the process was // started with a wrapper for instrumentation (such as Valgrind) because it @@ -2653,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) { @@ -5867,7 +5878,6 @@ public class ActivityManagerService extends IActivityManager.Stub private final void handleAppDiedLocked(ProcessRecord app, boolean restarting, boolean allowRestart) { int pid = app.pid; - final boolean clearLaunchStartTime = !restarting && app.removed && app.foregroundActivities; boolean kept = cleanUpApplicationRecordLocked(app, restarting, allowRestart, -1, false /*replacingPid*/); if (!kept && !restarting) { @@ -5909,18 +5919,6 @@ public class ActivityManagerService extends IActivityManager.Stub mWindowManager.continueSurfaceLayout(); } - // TODO (b/67683350) - // When an app process is removed, activities from the process may be relaunched. In the - // case of forceStopPackageLocked the activities are finished before any window is drawn, - // and the launch time is not cleared. This will be incorrectly used to calculate launch - // time for the next launched activity launched in the same windowing mode. - if (clearLaunchStartTime) { - final LaunchTimeTracker.Entry entry = mStackSupervisor - .getLaunchTimeTracker().getEntry(mStackSupervisor.getWindowingMode()); - if (entry != null) { - entry.mLaunchStartTime = 0; - } - } } private final int getLRURecordIndexForAppLocked(IApplicationThread thread) { @@ -7964,7 +7962,7 @@ public class ActivityManagerService extends IActivityManager.Stub // And trigger dev.bootcomplete if we are not showing encryption progress if (!"trigger_restart_min_framework".equals(VoldProperties.decrypt().orElse("")) - || "".equals(VoldProperties.encrypt_progress().orElse(""))){ + || "".equals(VoldProperties.encrypt_progress().orElse(""))) { SystemProperties.set("dev.bootcomplete", "1"); } mUserController.sendBootCompleted( @@ -8636,6 +8634,14 @@ public class ActivityManagerService extends IActivityManager.Stub @Override public boolean isAppForeground(int uid) { + int callerUid = Binder.getCallingUid(); + if (UserHandle.isCore(callerUid) || callerUid == uid) { + return isAppForegroundInternal(uid); + } + return false; + } + + private boolean isAppForegroundInternal(int uid) { synchronized (this) { UidRecord uidRec = mActiveUids.get(uid); if (uidRec == null || uidRec.idle) { @@ -12035,6 +12041,7 @@ public class ActivityManagerService extends IActivityManager.Stub ContentProviderRecord cpr; ContentProviderConnection conn = null; ProviderInfo cpi = null; + boolean providerRunning = false; synchronized(this) { long startTime = SystemClock.uptimeMillis(); @@ -12074,7 +12081,26 @@ public class ActivityManagerService extends IActivityManager.Stub } } - boolean providerRunning = cpr != null && cpr.proc != null && !cpr.proc.killed; + if (cpr != null && cpr.proc != null) { + providerRunning = !cpr.proc.killed; + + // Note if killedByAm is also set, this means the provider process has just been + // killed by AM (in ProcessRecord.kill()), but appDiedLocked() hasn't been called + // yet. So we need to call appDiedLocked() here and let it clean up. + // (See the commit message on I2c4ba1e87c2d47f2013befff10c49b3dc337a9a7 to see + // how to test this case.) + if (cpr.proc.killed && cpr.proc.killedByAm) { + checkTime(startTime, "getContentProviderImpl: before appDied (killedByAm)"); + final long iden = Binder.clearCallingIdentity(); + try { + appDiedLocked(cpr.proc); + } finally { + Binder.restoreCallingIdentity(iden); + } + checkTime(startTime, "getContentProviderImpl: after appDied (killedByAm)"); + } + } + if (providerRunning) { cpi = cpr.info; String msg; @@ -12367,6 +12393,7 @@ public class ActivityManagerService extends IActivityManager.Stub } // Wait for the provider to be published... + final long timeout = SystemClock.uptimeMillis() + CONTENT_PROVIDER_WAIT_TIMEOUT; synchronized (cpr) { while (cpr.provider == null) { if (cpr.launchingApp == null) { @@ -12381,13 +12408,22 @@ public class ActivityManagerService extends IActivityManager.Stub return null; } try { + final long wait = Math.max(0L, timeout - SystemClock.uptimeMillis()); if (DEBUG_MU) Slog.v(TAG_MU, "Waiting to start provider " + cpr - + " launchingApp=" + cpr.launchingApp); + + " launchingApp=" + cpr.launchingApp + " for " + wait + " ms"); if (conn != null) { conn.waiting = true; } - cpr.wait(); + cpr.wait(wait); + if (cpr.provider == null) { + Slog.wtf(TAG, "Timeout waiting for provider " + + cpi.applicationInfo.packageName + "/" + + cpi.applicationInfo.uid + " for provider " + + name + + " providerRunning=" + providerRunning); + return null; + } } catch (InterruptedException ex) { } finally { if (conn != null) { @@ -22146,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(); } @@ -27158,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/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 843699ccf191..b03628930dd6 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -558,9 +558,6 @@ final class ActivityManagerShellCommand extends ShellCommand { if (result.who != null) { pw.println("Activity: " + result.who.flattenToShortString()); } - if (result.thisTime >= 0) { - pw.println("ThisTime: " + result.thisTime); - } if (result.totalTime >= 0) { pw.println("TotalTime: " + result.totalTime); } diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java index 9ffa6627836f..5cbd8fd1cd60 100644 --- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java @@ -4,12 +4,13 @@ import static android.app.ActivityManager.START_SUCCESS; import static android.app.ActivityManager.START_TASK_TO_FRONT; import static android.app.ActivityManager.processStateAmToProto; import static android.app.ActivityManagerInternal.APP_TRANSITION_TIMEOUT; -import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; 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 static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; + import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_ACTIVITY_START; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_BIND_APPLICATION_DELAY_MS; @@ -28,9 +29,9 @@ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_IS_NO_DISPLAY; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_IS_VISIBLE; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_IS_VISIBLE_IGNORING_KEYGUARD; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_LAUNCH_MODE; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_MILLIS_SINCE_LAST_LAUNCH; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_MILLIS_SINCE_LAST_VISIBLE; -import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_LAUNCH_MODE; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_PROCESS_NAME; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_REAL_ACTIVITY; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ACTIVITY_RECORD_RESULT_TO_PKG_NAME; @@ -57,16 +58,16 @@ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_PROCESS_RECORD_PENDING_UI_CLEAN; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_PROCESS_RECORD_PROCESS_NAME; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_REAL_CALLING_UID; -import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_REAL_CALLING_UID_PROC_STATE; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_REAL_CALLING_UID_HAS_ANY_VISIBLE_WINDOW; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_REAL_CALLING_UID_PROC_STATE; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TARGET_PACKAGE_NAME; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TARGET_SHORT_COMPONENT_NAME; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TARGET_UID; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TARGET_UID_HAS_ANY_VISIBLE_WINDOW; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TARGET_UID_PROC_STATE; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_TARGET_WHITELIST_TAG; -import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.PACKAGE_OPTIMIZATION_COMPILATION_REASON; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.PACKAGE_OPTIMIZATION_COMPILATION_FILTER; +import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.PACKAGE_OPTIMIZATION_COMPILATION_REASON; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_COLD_LAUNCH; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_HOT_LAUNCH; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_REPORTED_DRAWN_NO_BUNDLE; @@ -75,6 +76,7 @@ import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_T import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_METRICS; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME; +import static com.android.server.am.EventLogTags.AM_ACTIVITY_LAUNCH_TIME; import static com.android.server.am.MemoryStatUtil.MemoryStat; import static com.android.server.am.MemoryStatUtil.readMemoryStatFromFilesystem; @@ -88,10 +90,14 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.SystemClock; +import android.os.Trace; +import android.util.EventLog; +import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.util.SparseIntArray; import android.util.StatsLog; +import android.util.TimeUtils; import com.android.internal.logging.MetricsLogger; import com.android.internal.os.BackgroundThread; @@ -101,7 +107,12 @@ import com.android.server.LocalServices; import java.util.ArrayList; /** - * Handles logging into Tron. + * Listens to activity launches, transitions, visibility changes and window drawn callbacks to + * determine app launch times and draw delays. Source of truth for activity metrics and provides + * data for Tron, logcat, event logs and {@link android.app.WaitResult}. + * + * Tests: + * atest CtsActivityManagerDeviceTestCases:ActivityMetricsLoggerTests */ class ActivityMetricsLogger { @@ -116,6 +127,8 @@ class ActivityMetricsLogger { private static final int WINDOW_STATE_INVALID = -1; private static final long INVALID_START_TIME = -1; + private static final int INVALID_DELAY = -1; + private static final int INVALID_TRANSITION_TYPE = -1; private static final int MSG_CHECK_VISIBILITY = 0; @@ -144,6 +157,8 @@ class ActivityMetricsLogger { private final H mHandler; private ArtManagerInternal mArtManagerInternal; + private boolean mDrawingTraceActive; + private final StringBuilder mStringBuilder = new StringBuilder(); private final class H extends Handler { @@ -166,45 +181,69 @@ class ActivityMetricsLogger { private ActivityRecord launchedActivity; private int startResult; private boolean currentTransitionProcessRunning; + /** Elapsed time from when we launch an activity to when its windows are drawn. */ private int windowsDrawnDelayMs; - private int startingWindowDelayMs = -1; - private int bindApplicationDelayMs = -1; + private int startingWindowDelayMs = INVALID_DELAY; + private int bindApplicationDelayMs = INVALID_DELAY; private int reason = APP_TRANSITION_TIMEOUT; private boolean loggedWindowsDrawn; private boolean loggedStartingWindowDrawn; + private boolean launchTraceActive; } - private final class WindowingModeTransitionInfoSnapshot { + final class WindowingModeTransitionInfoSnapshot { final private ApplicationInfo applicationInfo; final private ProcessRecord processRecord; - final private String packageName; - final private String launchedActivityName; + final String packageName; + final String launchedActivityName; final private String launchedActivityLaunchedFromPackage; final private String launchedActivityLaunchToken; final private String launchedActivityAppRecordRequiredAbi; + final String launchedActivityShortComponentName; final private String processName; final private int reason; final private int startingWindowDelayMs; final private int bindApplicationDelayMs; - final private int windowsDrawnDelayMs; - final private int type; + final int windowsDrawnDelayMs; + final int type; + final int userId; + /** + * Elapsed time from when we launch an activity to when the app reported it was + * fully drawn. If this is not reported then the value is set to INVALID_DELAY. + */ + final int windowsFullyDrawnDelayMs; + final int activityRecordIdHashCode; private WindowingModeTransitionInfoSnapshot(WindowingModeTransitionInfo info) { - applicationInfo = info.launchedActivity.appInfo; - packageName = info.launchedActivity.packageName; - launchedActivityName = info.launchedActivity.info.name; - launchedActivityLaunchedFromPackage = info.launchedActivity.launchedFromPackage; - launchedActivityLaunchToken = info.launchedActivity.info.launchToken; - launchedActivityAppRecordRequiredAbi = info.launchedActivity.app == null + this(info, info.launchedActivity); + } + + private WindowingModeTransitionInfoSnapshot(WindowingModeTransitionInfo info, + ActivityRecord launchedActivity) { + this(info, launchedActivity, INVALID_DELAY); + } + + private WindowingModeTransitionInfoSnapshot(WindowingModeTransitionInfo info, + ActivityRecord launchedActivity, int windowsFullyDrawnDelayMs) { + applicationInfo = launchedActivity.appInfo; + packageName = launchedActivity.packageName; + launchedActivityName = launchedActivity.info.name; + launchedActivityLaunchedFromPackage = launchedActivity.launchedFromPackage; + launchedActivityLaunchToken = launchedActivity.info.launchToken; + launchedActivityAppRecordRequiredAbi = launchedActivity.app == null ? null - : info.launchedActivity.app.requiredAbi; + : launchedActivity.app.requiredAbi; reason = info.reason; startingWindowDelayMs = info.startingWindowDelayMs; bindApplicationDelayMs = info.bindApplicationDelayMs; windowsDrawnDelayMs = info.windowsDrawnDelayMs; type = getTransitionType(info); - processRecord = findProcessForActivity(info.launchedActivity); - processName = info.launchedActivity.processName; + processRecord = findProcessForActivity(launchedActivity); + processName = launchedActivity.processName; + userId = launchedActivity.userId; + launchedActivityShortComponentName = launchedActivity.shortComponentName; + activityRecordIdHashCode = System.identityHashCode(launchedActivity); + this.windowsFullyDrawnDelayMs = windowsFullyDrawnDelayMs; } } @@ -324,18 +363,24 @@ class ActivityMetricsLogger { + " processRunning=" + processRunning + " processSwitch=" + processSwitch); - // If we are already in an existing transition, only update the activity name, but not the - // other attributes. final int windowingMode = launchedActivity != null ? launchedActivity.getWindowingMode() : WINDOWING_MODE_UNDEFINED; - + final WindowingModeTransitionInfo info = mWindowingModeTransitionInfo.get(windowingMode); if (mCurrentTransitionStartTime == INVALID_START_TIME) { + // No transition is active ignore this launch. + return; + } + + if (launchedActivity != null && launchedActivity.drawn) { + // Launched activity is already visible. We cannot measure windows drawn delay. + reset(true /* abort */, info); return; } - final WindowingModeTransitionInfo info = mWindowingModeTransitionInfo.get(windowingMode); if (launchedActivity != null && info != null) { + // If we are already in an existing transition, only update the activity name, but not + // the other attributes. info.launchedActivity = launchedActivity; return; } @@ -344,9 +389,8 @@ class ActivityMetricsLogger { mWindowingModeTransitionInfo.size() > 0 && info == null; if ((!isLoggableResultCode(resultCode) || launchedActivity == null || !processSwitch || windowingMode == WINDOWING_MODE_UNDEFINED) && !otherWindowModesLaunching) { - // Failed to launch or it was not a process switch, so we don't care about the timing. - reset(true /* abort */); + reset(true /* abort */, info); return; } else if (otherWindowModesLaunching) { // Don't log this windowing mode but continue with the other windowing modes. @@ -362,6 +406,7 @@ class ActivityMetricsLogger { mWindowingModeTransitionInfo.put(windowingMode, newInfo); mLastWindowingModeTransitionInfo.put(windowingMode, newInfo); mCurrentTransitionDeviceUptime = (int) (SystemClock.uptimeMillis() / 1000); + startTraces(newInfo); } /** @@ -375,18 +420,21 @@ class ActivityMetricsLogger { /** * Notifies the tracker that all windows of the app have been drawn. */ - void notifyWindowsDrawn(int windowingMode, long timestamp) { + WindowingModeTransitionInfoSnapshot notifyWindowsDrawn(int windowingMode, long timestamp) { if (DEBUG_METRICS) Slog.i(TAG, "notifyWindowsDrawn windowingMode=" + windowingMode); final WindowingModeTransitionInfo info = mWindowingModeTransitionInfo.get(windowingMode); if (info == null || info.loggedWindowsDrawn) { - return; + return null; } info.windowsDrawnDelayMs = calculateDelay(timestamp); info.loggedWindowsDrawn = true; + final WindowingModeTransitionInfoSnapshot infoSnapshot = + new WindowingModeTransitionInfoSnapshot(info); if (allWindowsDrawn() && mLoggedTransitionStarting) { - reset(false /* abort */); + reset(false /* abort */, info); } + return infoSnapshot; } /** @@ -405,7 +453,7 @@ class ActivityMetricsLogger { * Notifies the tracker that the app transition is starting. * * @param windowingModeToReason A map from windowing mode to a reason integer, which must be on - * of ActivityManagerInternal.APP_TRANSITION_* reasons. + * of ActivityTaskManagerInternal.APP_TRANSITION_* reasons. */ void notifyTransitionStarting(SparseIntArray windowingModeToReason, long timestamp) { if (!isAnyTransitionActive() || mLoggedTransitionStarting) { @@ -424,7 +472,7 @@ class ActivityMetricsLogger { info.reason = windowingModeToReason.valueAt(index); } if (allWindowsDrawn()) { - reset(false /* abort */); + reset(false /* abort */, null /* WindowingModeTransitionInfo */); } } @@ -463,8 +511,9 @@ class ActivityMetricsLogger { logAppTransitionCancel(info); mWindowingModeTransitionInfo.remove(r.getWindowingMode()); if (mWindowingModeTransitionInfo.size() == 0) { - reset(true /* abort */); + reset(true /* abort */, info); } + stopFullyDrawnTraceIfNeeded(); } } } @@ -499,19 +548,19 @@ class ActivityMetricsLogger { && mWindowingModeTransitionInfo.size() > 0; } - private void reset(boolean abort) { + private void reset(boolean abort, WindowingModeTransitionInfo info) { if (DEBUG_METRICS) Slog.i(TAG, "reset abort=" + abort); if (!abort && isAnyTransitionActive()) { logAppTransitionMultiEvents(); } + stopLaunchTrace(info); mCurrentTransitionStartTime = INVALID_START_TIME; - mCurrentTransitionDelayMs = -1; + mCurrentTransitionDelayMs = INVALID_DELAY; mLoggedTransitionStarting = false; mWindowingModeTransitionInfo.clear(); } private int calculateCurrentDelay() { - // Shouldn't take more than 25 days to launch an app, so int is fine here. return (int) (SystemClock.uptimeMillis() - mCurrentTransitionStartTime); } @@ -523,7 +572,7 @@ class ActivityMetricsLogger { private void logAppTransitionCancel(WindowingModeTransitionInfo info) { final int type = getTransitionType(info); - if (type == -1) { + if (type == INVALID_TRANSITION_TYPE) { return; } final LogMaker builder = new LogMaker(APP_TRANSITION_CANCELLED); @@ -544,7 +593,7 @@ class ActivityMetricsLogger { for (int index = mWindowingModeTransitionInfo.size() - 1; index >= 0; index--) { final WindowingModeTransitionInfo info = mWindowingModeTransitionInfo.valueAt(index); final int type = getTransitionType(info); - if (type == -1) { + if (type == INVALID_TRANSITION_TYPE) { return; } @@ -556,6 +605,7 @@ class ActivityMetricsLogger { final int currentTransitionDelayMs = mCurrentTransitionDelayMs; BackgroundThread.getHandler().post(() -> logAppTransition( currentTransitionDeviceUptime, currentTransitionDelayMs, infoSnapshot)); + BackgroundThread.getHandler().post(() -> logAppDisplayed(infoSnapshot)); info.launchedActivity.info.launchToken = null; } @@ -582,11 +632,11 @@ class ActivityMetricsLogger { currentTransitionDeviceUptime); builder.addTaggedData(APP_TRANSITION_DELAY_MS, currentTransitionDelayMs); builder.setSubtype(info.reason); - if (info.startingWindowDelayMs != -1) { + if (info.startingWindowDelayMs != INVALID_DELAY) { builder.addTaggedData(APP_TRANSITION_STARTING_WINDOW_DELAY_MS, info.startingWindowDelayMs); } - if (info.bindApplicationDelayMs != -1) { + if (info.bindApplicationDelayMs != INVALID_DELAY) { builder.addTaggedData(APP_TRANSITION_BIND_APPLICATION_DELAY_MS, info.bindApplicationDelayMs); } @@ -623,6 +673,24 @@ class ActivityMetricsLogger { logAppStartMemoryStateCapture(info); } + private void logAppDisplayed(WindowingModeTransitionInfoSnapshot info) { + if (info.type != TYPE_TRANSITION_WARM_LAUNCH && info.type != TYPE_TRANSITION_COLD_LAUNCH) { + return; + } + + EventLog.writeEvent(AM_ACTIVITY_LAUNCH_TIME, + info.userId, info.activityRecordIdHashCode, info.launchedActivityShortComponentName, + info.windowsDrawnDelayMs); + + StringBuilder sb = mStringBuilder; + sb.setLength(0); + sb.append("Displayed "); + sb.append(info.launchedActivityShortComponentName); + sb.append(": "); + TimeUtils.formatDuration(info.windowsDrawnDelayMs, sb); + Log.i(TAG, sb.toString()); + } + private int convertAppStartTransitionType(int tronType) { if (tronType == TYPE_TRANSITION_COLD_LAUNCH) { return StatsLog.APP_START_OCCURRED__TYPE__COLD; @@ -636,11 +704,12 @@ class ActivityMetricsLogger { return StatsLog.APP_START_OCCURRED__TYPE__UNKNOWN; } - void logAppTransitionReportedDrawn(ActivityRecord r, boolean restoredFromBundle) { + WindowingModeTransitionInfoSnapshot logAppTransitionReportedDrawn(ActivityRecord r, + boolean restoredFromBundle) { final WindowingModeTransitionInfo info = mLastWindowingModeTransitionInfo.get( r.getWindowingMode()); if (info == null) { - return; + return null; } final LogMaker builder = new LogMaker(APP_TRANSITION_REPORTED_DRAWN); builder.setPackageName(r.packageName); @@ -663,6 +732,25 @@ class ActivityMetricsLogger { info.launchedActivity.info.name, info.currentTransitionProcessRunning, startupTimeMs); + stopFullyDrawnTraceIfNeeded(); + final WindowingModeTransitionInfoSnapshot infoSnapshot = + new WindowingModeTransitionInfoSnapshot(info, r, (int) startupTimeMs); + BackgroundThread.getHandler().post(() -> logAppFullyDrawn(infoSnapshot)); + return infoSnapshot; + } + + private void logAppFullyDrawn(WindowingModeTransitionInfoSnapshot info) { + if (info.type != TYPE_TRANSITION_WARM_LAUNCH && info.type != TYPE_TRANSITION_COLD_LAUNCH) { + return; + } + + StringBuilder sb = mStringBuilder; + sb.setLength(0); + sb.append("Fully drawn "); + sb.append(info.launchedActivityShortComponentName); + sb.append(": "); + TimeUtils.formatDuration(info.windowsFullyDrawnDelayMs, sb); + Log.i(TAG, sb.toString()); } void logActivityStart(Intent intent, ProcessRecord callerApp, ActivityRecord r, @@ -764,7 +852,7 @@ class ActivityMetricsLogger { } else if (info.startResult == START_SUCCESS) { return TYPE_TRANSITION_COLD_LAUNCH; } - return -1; + return INVALID_TRANSITION_TYPE; } private void logAppStartMemoryStateCapture(WindowingModeTransitionInfoSnapshot info) { @@ -809,4 +897,46 @@ class ActivityMetricsLogger { } return mArtManagerInternal; } + + /** + * Starts traces for app launch and draw times. We stop the fully drawn trace if its already + * active since the app may not have reported fully drawn in the previous launch. + * + * See {@link android.app.Activity#reportFullyDrawn()} + * + * @param info + * */ + private void startTraces(WindowingModeTransitionInfo info) { + if (info == null) { + return; + } + stopFullyDrawnTraceIfNeeded(); + int transitionType = getTransitionType(info); + if (!info.launchTraceActive && transitionType == TYPE_TRANSITION_WARM_LAUNCH + || transitionType == TYPE_TRANSITION_COLD_LAUNCH) { + Trace.asyncTraceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "launching: " + + info.launchedActivity.packageName, 0); + Trace.asyncTraceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "drawing", 0); + mDrawingTraceActive = true; + info.launchTraceActive = true; + } + } + + private void stopLaunchTrace(WindowingModeTransitionInfo info) { + if (info == null) { + return; + } + if (info.launchTraceActive) { + Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, "launching: " + + info.launchedActivity.packageName, 0); + info.launchTraceActive = false; + } + } + + void stopFullyDrawnTraceIfNeeded() { + if (mDrawingTraceActive) { + Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, "drawing", 0); + mDrawingTraceActive = false; + } + } } diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 60f79f720242..97ae3772ca3a 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -31,6 +31,7 @@ import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN; import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE; +import static android.app.WaitResult.INVALID_DELAY; import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; @@ -80,7 +81,6 @@ import static android.content.res.Configuration.UI_MODE_TYPE_VR_HEADSET; import static android.os.Build.VERSION_CODES.HONEYCOMB; import static android.os.Build.VERSION_CODES.O; import static android.os.Process.SYSTEM_UID; -import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONFIGURATION; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SAVED_STATE; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_STATES; @@ -103,8 +103,6 @@ import static com.android.server.am.ActivityStack.LAUNCH_TICK; import static com.android.server.am.ActivityStack.LAUNCH_TICK_MSG; import static com.android.server.am.ActivityStack.PAUSE_TIMEOUT_MSG; import static com.android.server.am.ActivityStack.STOP_TIMEOUT_MSG; -import static com.android.server.am.EventLogTags.AM_ACTIVITY_FULLY_DRAWN_TIME; -import static com.android.server.am.EventLogTags.AM_ACTIVITY_LAUNCH_TIME; import static com.android.server.am.EventLogTags.AM_RELAUNCH_ACTIVITY; import static com.android.server.am.EventLogTags.AM_RELAUNCH_RESUME_ACTIVITY; import static com.android.server.am.TaskPersister.DEBUG; @@ -163,7 +161,6 @@ import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; -import android.os.Trace; import android.os.UserHandle; import android.os.storage.StorageManager; import android.service.voice.IVoiceInteractionSession; @@ -185,6 +182,7 @@ import com.android.internal.content.ReferrerIntent; import com.android.internal.util.XmlUtils; import com.android.server.AttributeCache; import com.android.server.AttributeCache.Entry; +import com.android.server.am.ActivityMetricsLogger.WindowingModeTransitionInfoSnapshot; import com.android.server.am.ActivityStack.ActivityState; import com.android.server.wm.AppWindowContainerController; import com.android.server.wm.AppWindowContainerListener; @@ -264,9 +262,6 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo private int windowFlags; // custom window flags for preview window. private TaskRecord task; // the task this is in. private long createTime = System.currentTimeMillis(); - long displayStartTime; // when we started launching this activity - long fullyDrawnStartTime; // when we started launching this activity - private long startTime; // last time this activity was started long lastVisibleTime; // last time this activity became visible long cpuTimeAtResume; // the cpu time of host process at the time of resuming activity long pauseTime; // last time we started pausing the activity @@ -313,6 +308,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo // process that it is hidden. boolean sleeping; // have we told the activity to sleep? boolean nowVisible; // is this activity's window visible? + boolean drawn; // is this activity's window drawn? boolean mClientVisibilityDeferred;// was the visibility change message to client deferred? boolean idle; // has the activity gone idle? boolean hasBeenLaunched;// has this activity ever been launched? @@ -523,15 +519,6 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo pw.print("requestedVrComponent="); pw.println(requestedVrComponent); } - if (displayStartTime != 0 || startTime != 0) { - pw.print(prefix); pw.print("displayStartTime="); - if (displayStartTime == 0) pw.print("0"); - else TimeUtils.formatDuration(displayStartTime, now, pw); - pw.print(" startTime="); - if (startTime == 0) pw.print("0"); - else TimeUtils.formatDuration(startTime, now, pw); - pw.println(); - } final boolean waitingVisible = mStackSupervisor.mActivitiesWaitingForVisibleActivity.contains(this); if (lastVisibleTime != 0 || waitingVisible || nowVisible) { @@ -885,6 +872,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo inHistory = false; visible = false; nowVisible = false; + drawn = false; idle = false; hasBeenLaunched = false; mStackSupervisor = supervisor; @@ -1995,79 +1983,13 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo } public void reportFullyDrawnLocked(boolean restoredFromBundle) { - final long curTime = SystemClock.uptimeMillis(); - if (displayStartTime != 0) { - reportLaunchTimeLocked(curTime); - } - final LaunchTimeTracker.Entry entry = mStackSupervisor.getLaunchTimeTracker().getEntry( - getWindowingMode()); - if (fullyDrawnStartTime != 0 && entry != null) { - final long thisTime = curTime - fullyDrawnStartTime; - final long totalTime = entry.mFullyDrawnStartTime != 0 - ? (curTime - entry.mFullyDrawnStartTime) : thisTime; - if (SHOW_ACTIVITY_START_TIME) { - Trace.asyncTraceEnd(TRACE_TAG_ACTIVITY_MANAGER, "drawing", 0); - EventLog.writeEvent(AM_ACTIVITY_FULLY_DRAWN_TIME, - userId, System.identityHashCode(this), shortComponentName, - thisTime, totalTime); - StringBuilder sb = service.mStringBuilder; - sb.setLength(0); - sb.append("Fully drawn "); - sb.append(shortComponentName); - sb.append(": "); - TimeUtils.formatDuration(thisTime, sb); - if (thisTime != totalTime) { - sb.append(" (total "); - TimeUtils.formatDuration(totalTime, sb); - sb.append(")"); - } - Log.i(TAG, sb.toString()); - } - if (totalTime > 0) { - //service.mUsageStatsService.noteFullyDrawnTime(realActivity, (int) totalTime); - } - entry.mFullyDrawnStartTime = 0; - } - mStackSupervisor.getActivityMetricsLogger().logAppTransitionReportedDrawn(this, - restoredFromBundle); - fullyDrawnStartTime = 0; - } - - private void reportLaunchTimeLocked(final long curTime) { - final LaunchTimeTracker.Entry entry = mStackSupervisor.getLaunchTimeTracker().getEntry( - getWindowingMode()); - if (entry == null) { - return; - } - final long thisTime = curTime - displayStartTime; - final long totalTime = entry.mLaunchStartTime != 0 - ? (curTime - entry.mLaunchStartTime) : thisTime; - if (SHOW_ACTIVITY_START_TIME) { - Trace.asyncTraceEnd(TRACE_TAG_ACTIVITY_MANAGER, "launching: " + packageName, 0); - EventLog.writeEvent(AM_ACTIVITY_LAUNCH_TIME, - userId, System.identityHashCode(this), shortComponentName, - thisTime, totalTime); - StringBuilder sb = service.mStringBuilder; - sb.setLength(0); - sb.append("Displayed "); - sb.append(shortComponentName); - sb.append(": "); - TimeUtils.formatDuration(thisTime, sb); - if (thisTime != totalTime) { - sb.append(" (total "); - TimeUtils.formatDuration(totalTime, sb); - sb.append(")"); - } - Log.i(TAG, sb.toString()); - } - mStackSupervisor.reportActivityLaunchedLocked(false, this, thisTime, totalTime); - if (totalTime > 0) { - //service.mUsageStatsService.noteLaunchTime(realActivity, (int)totalTime); + final WindowingModeTransitionInfoSnapshot info = mStackSupervisor + .getActivityMetricsLogger().logAppTransitionReportedDrawn(this, restoredFromBundle); + if (info != null) { + mStackSupervisor.reportActivityLaunchedLocked(false /* timeout */, this, + info.windowsFullyDrawnDelayMs); } - displayStartTime = 0; - entry.mLaunchStartTime = 0; } - @Override public void onStartingWindowDrawn(long timestamp) { synchronized (service) { @@ -2079,13 +2001,13 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo @Override public void onWindowsDrawn(long timestamp) { synchronized (service) { - mStackSupervisor.getActivityMetricsLogger().notifyWindowsDrawn(getWindowingMode(), - timestamp); - if (displayStartTime != 0) { - reportLaunchTimeLocked(timestamp); - } + drawn = true; + final WindowingModeTransitionInfoSnapshot info = mStackSupervisor + .getActivityMetricsLogger().notifyWindowsDrawn(getWindowingMode(), timestamp); + final int windowsDrawnDelayMs = info != null ? info.windowsDrawnDelayMs : INVALID_DELAY; + mStackSupervisor.reportActivityLaunchedLocked(false /* timeout */, this, + windowsDrawnDelayMs); mStackSupervisor.sendWaitingVisibleReportLocked(this); - startTime = 0; finishLaunchTickingLocked(); if (task != null) { task.hasBeenVisible = true; @@ -2094,6 +2016,13 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo } @Override + public void onWindowsNotDrawn(long timestamp) { + synchronized (service) { + drawn = false; + } + } + + @Override public void onWindowsVisible() { synchronized (service) { mStackSupervisor.reportActivityVisibleLocked(this); diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index f58f717878f1..aa5aa70b2e56 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1254,16 +1254,13 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai + " callers=" + Debug.getCallers(5)); r.setState(RESUMED, "minimalResumeActivityLocked"); r.completeResumeLocked(); - mStackSupervisor.getLaunchTimeTracker().setLaunchTime(r); if (DEBUG_SAVED_STATE) Slog.i(TAG_SAVED_STATE, "Launch completed; removing icicle of " + r.icicle); } private void clearLaunchTime(ActivityRecord r) { // Make sure that there is no activity waiting for this to launch. - if (mStackSupervisor.mWaitingActivityLaunched.isEmpty()) { - r.displayStartTime = r.fullyDrawnStartTime = 0; - } else { + if (!mStackSupervisor.mWaitingActivityLaunched.isEmpty()) { mStackSupervisor.removeTimeoutsForActivityLocked(r); mStackSupervisor.scheduleIdleTimeoutLocked(r); } @@ -1449,7 +1446,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai prev.getTask().touchActiveTime(); clearLaunchTime(prev); - mStackSupervisor.getLaunchTimeTracker().stopFullyDrawnTraceIfNeeded(getWindowingMode()); + mStackSupervisor.getActivityMetricsLogger().stopFullyDrawnTraceIfNeeded(); mService.updateCpuStats(); diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 2ae056fe18a5..f08a3b97dcf3 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -27,6 +27,7 @@ import static android.app.ActivityManager.START_TASK_TO_FRONT; import static android.app.ActivityManager.StackId.INVALID_STACK_ID; import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SECONDARY_DISPLAY; import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SPLIT_SCREEN; +import static android.app.WaitResult.INVALID_DELAY; import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; @@ -445,7 +446,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D private boolean mTaskLayersChanged = true; private ActivityMetricsLogger mActivityMetricsLogger; - private LaunchTimeTracker mLaunchTimeTracker = new LaunchTimeTracker(); private final ArrayList<ActivityRecord> mTmpActivityList = new ArrayList<>(); @@ -630,10 +630,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D return mActivityMetricsLogger; } - LaunchTimeTracker getLaunchTimeTracker() { - return mLaunchTimeTracker; - } - public KeyguardController getKeyguardController() { return mKeyguardController; } @@ -1121,8 +1117,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } } - void waitActivityVisible(ComponentName name, WaitResult result) { - final WaitInfo waitInfo = new WaitInfo(name, result); + void waitActivityVisible(ComponentName name, WaitResult result, long startTimeMs) { + final WaitInfo waitInfo = new WaitInfo(name, result, startTimeMs); mWaitingForActivityVisible.add(waitInfo); } @@ -1153,8 +1149,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D changed = true; result.timeout = false; result.who = w.getComponent(); - result.totalTime = SystemClock.uptimeMillis() - result.thisTime; - result.thisTime = result.totalTime; + result.totalTime = SystemClock.uptimeMillis() - w.getStartTime(); mWaitingForActivityVisible.remove(w); } } @@ -1193,8 +1188,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } } - void reportActivityLaunchedLocked(boolean timeout, ActivityRecord r, - long thisTime, long totalTime) { + void reportActivityLaunchedLocked(boolean timeout, ActivityRecord r, long totalTime) { boolean changed = false; for (int i = mWaitingActivityLaunched.size() - 1; i >= 0; i--) { WaitResult w = mWaitingActivityLaunched.remove(i); @@ -1204,7 +1198,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D if (r != null) { w.who = new ComponentName(r.info.packageName, r.info.name); } - w.thisTime = thisTime; w.totalTime = totalTime; // Do not modify w.result. } @@ -1688,8 +1681,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D ProcessRecord app = mService.getProcessRecordLocked(r.processName, r.info.applicationInfo.uid, true); - getLaunchTimeTracker().setLaunchTime(r); - if (app != null && app.thread != null) { try { if ((r.info.flags&ActivityInfo.FLAG_MULTIPROCESS) == 0 @@ -2027,7 +2018,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D mHandler.removeMessages(IDLE_TIMEOUT_MSG, r); r.finishLaunchTickingLocked(); if (fromTimeout) { - reportActivityLaunchedLocked(fromTimeout, r, -1, -1); + reportActivityLaunchedLocked(fromTimeout, r, INVALID_DELAY); } // This is a hack to semi-deal with a race condition @@ -4916,10 +4907,13 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D static class WaitInfo { private final ComponentName mTargetComponent; private final WaitResult mResult; + /** Time stamp when we started to wait for {@link WaitResult}. */ + private final long mStartTimeMs; - public WaitInfo(ComponentName targetComponent, WaitResult result) { + WaitInfo(ComponentName targetComponent, WaitResult result, long startTimeMs) { this.mTargetComponent = targetComponent; this.mResult = result; + this.mStartTimeMs = startTimeMs; } public boolean matches(ComponentName targetComponent) { @@ -4930,6 +4924,10 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D return mResult; } + public long getStartTime() { + return mStartTimeMs; + } + public ComponentName getComponent() { return mTargetComponent; } diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 00ba3a61d1d6..a739af91318a 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1174,6 +1174,9 @@ class ActivityStarter { mService.updateConfigurationLocked(globalConfig, null, false); } + // Notify ActivityMetricsLogger that the activity has launched. ActivityMetricsLogger + // will then wait for the windows to be drawn and populate WaitResult. + mSupervisor.getActivityMetricsLogger().notifyActivityLaunched(res, outRecord[0]); if (outResult != null) { outResult.result = res; @@ -1198,7 +1201,6 @@ class ActivityStarter { outResult.timeout = false; outResult.who = r.realActivity; outResult.totalTime = 0; - outResult.thisTime = 0; break; } case START_TASK_TO_FRONT: { @@ -1208,10 +1210,9 @@ class ActivityStarter { outResult.timeout = false; outResult.who = r.realActivity; outResult.totalTime = 0; - outResult.thisTime = 0; } else { - outResult.thisTime = SystemClock.uptimeMillis(); - mSupervisor.waitActivityVisible(r.realActivity, outResult); + final long startTimeMs = SystemClock.uptimeMillis(); + mSupervisor.waitActivityVisible(r.realActivity, outResult, startTimeMs); // Note: the timeout variable is not currently not ever set. do { try { @@ -1225,7 +1226,6 @@ class ActivityStarter { } } - mSupervisor.getActivityMetricsLogger().notifyActivityLaunched(res, outRecord[0]); return res; } } diff --git a/services/core/java/com/android/server/am/EventLogTags.logtags b/services/core/java/com/android/server/am/EventLogTags.logtags index ed891dfb0e70..0ef2a0a90e13 100644 --- a/services/core/java/com/android/server/am/EventLogTags.logtags +++ b/services/core/java/com/android/server/am/EventLogTags.logtags @@ -87,9 +87,6 @@ option java_package com.android.server.am # User switched 30041 am_switch_user (id|1|5) -# Activity fully drawn time -30042 am_activity_fully_drawn_time (User|1|5),(Token|1|5),(Component Name|3),(time|2|3) - # Activity set to resumed 30043 am_set_resumed_activity (User|1|5),(Component Name|3),(Reason|3) diff --git a/services/core/java/com/android/server/am/LaunchTimeTracker.java b/services/core/java/com/android/server/am/LaunchTimeTracker.java deleted file mode 100644 index ee869691f7ca..000000000000 --- a/services/core/java/com/android/server/am/LaunchTimeTracker.java +++ /dev/null @@ -1,86 +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 - */ - -package com.android.server.am; - -import android.app.WaitResult; -import android.os.SystemClock; -import android.os.Trace; -import android.util.SparseArray; - -/** - * Tracks launch time of apps to be reported by {@link WaitResult}. Note that this is slightly - * different from {@link ActivityMetricsLogger}, but should eventually merged with it. - */ -class LaunchTimeTracker { - - private final SparseArray<Entry> mWindowingModeLaunchTime = new SparseArray<>(); - - void setLaunchTime(ActivityRecord r) { - Entry entry = mWindowingModeLaunchTime.get(r.getWindowingMode()); - if (entry == null){ - entry = new Entry(); - mWindowingModeLaunchTime.append(r.getWindowingMode(), entry); - } - entry.setLaunchTime(r); - } - - void stopFullyDrawnTraceIfNeeded(int windowingMode) { - final Entry entry = mWindowingModeLaunchTime.get(windowingMode); - if (entry == null) { - return; - } - entry.stopFullyDrawnTraceIfNeeded(); - } - - Entry getEntry(int windowingMode) { - return mWindowingModeLaunchTime.get(windowingMode); - } - - static class Entry { - - long mLaunchStartTime; - long mFullyDrawnStartTime; - - void setLaunchTime(ActivityRecord r) { - if (r.displayStartTime == 0) { - r.fullyDrawnStartTime = r.displayStartTime = SystemClock.uptimeMillis(); - if (mLaunchStartTime == 0) { - startLaunchTraces(r.packageName); - mLaunchStartTime = mFullyDrawnStartTime = r.displayStartTime; - } - } else if (mLaunchStartTime == 0) { - startLaunchTraces(r.packageName); - mLaunchStartTime = mFullyDrawnStartTime = SystemClock.uptimeMillis(); - } - } - - private void startLaunchTraces(String packageName) { - if (mFullyDrawnStartTime != 0) { - Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, "drawing", 0); - } - Trace.asyncTraceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "launching: " + packageName, 0); - Trace.asyncTraceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "drawing", 0); - } - - private void stopFullyDrawnTraceIfNeeded() { - if (mFullyDrawnStartTime != 0 && mLaunchStartTime == 0) { - Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, "drawing", 0); - mFullyDrawnStartTime = 0; - } - } - } -} diff --git a/services/core/java/com/android/server/am/MemoryStatUtil.java b/services/core/java/com/android/server/am/MemoryStatUtil.java index f9dccea0d34c..aad890b8bd74 100644 --- a/services/core/java/com/android/server/am/MemoryStatUtil.java +++ b/services/core/java/com/android/server/am/MemoryStatUtil.java @@ -22,6 +22,7 @@ import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NA import android.annotation.Nullable; import android.os.FileUtils; +import android.os.SystemProperties; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; @@ -38,6 +39,10 @@ import java.util.regex.Pattern; final class MemoryStatUtil { private static final String TAG = TAG_WITH_CLASS_NAME ? "MemoryStatUtil" : TAG_AM; + /** True if device has per-app memcg */ + private static final Boolean DEVICE_HAS_PER_APP_MEMCG = + SystemProperties.getBoolean("ro.config.per_app_memcg", false); + /** Path to check if device has memcg */ private static final String MEMCG_TEST_PATH = "/dev/memcg/apps/memory.stat"; /** Path to memory stat file for logging app start memory state */ @@ -55,15 +60,12 @@ final class MemoryStatUtil { private static final int PGMAJFAULT_INDEX = 11; private static final int RSS_IN_BYTES_INDEX = 23; - /** True if device has memcg */ - private static volatile Boolean sDeviceHasMemCg; - private MemoryStatUtil() {} /** * Reads memory stat for a process. * - * Reads from memcg if available on device, else fallback to procfs. + * Reads from per-app memcg if available on device, else fallback to procfs. * Returns null if no stats can be read. */ @Nullable @@ -156,15 +158,10 @@ final class MemoryStatUtil { } /** - * Checks if memcg is available on device. - * - * Touches the filesystem to do the check. + * Returns whether per-app memcg is available on device. */ static boolean hasMemcg() { - if (sDeviceHasMemCg == null) { - sDeviceHasMemCg = (new File(MEMCG_TEST_PATH)).exists(); - } - return sDeviceHasMemCg; + return DEVICE_HAS_PER_APP_MEMCG; } static final class MemoryStat { diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 415a822e3160..4746e12e2838 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -845,10 +845,16 @@ class UserController implements Handler.Callback { } void scheduleStartProfiles() { - if (!mHandler.hasMessages(START_PROFILES_MSG)) { - mHandler.sendMessageDelayed(mHandler.obtainMessage(START_PROFILES_MSG), - DateUtils.SECOND_IN_MILLIS); - } + // Parent user transition to RUNNING_UNLOCKING happens on FgThread, so it is busy, there is + // a chance the profile will reach RUNNING_LOCKED while parent is still locked, so no + // attempt will be made to unlock the profile. If we go via FgThread, this will be executed + // after the parent had chance to unlock fully. + FgThread.getHandler().post(() -> { + if (!mHandler.hasMessages(START_PROFILES_MSG)) { + mHandler.sendMessageDelayed(mHandler.obtainMessage(START_PROFILES_MSG), + DateUtils.SECOND_IN_MILLIS); + } + }); } void startProfiles() { 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/PermissionMonitor.java b/services/core/java/com/android/server/connectivity/PermissionMonitor.java index 420b23e6a39f..d84a4d2db993 100644 --- a/services/core/java/com/android/server/connectivity/PermissionMonitor.java +++ b/services/core/java/com/android/server/connectivity/PermissionMonitor.java @@ -19,10 +19,11 @@ package com.android.server.connectivity; import static android.Manifest.permission.CHANGE_NETWORK_STATE; import static android.Manifest.permission.CONNECTIVITY_INTERNAL; import static android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS; +import static android.Manifest.permission.INTERNET; import static android.Manifest.permission.NETWORK_STACK; -import static android.content.pm.ApplicationInfo.FLAG_SYSTEM; -import static android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP; +import static android.Manifest.permission.UPDATE_DEVICE_STATS; import static android.content.pm.PackageManager.GET_PERMISSIONS; +import static android.content.pm.PackageManager.MATCH_ANY_USER; import static android.os.Process.INVALID_UID; import static android.os.Process.SYSTEM_UID; @@ -32,23 +33,31 @@ import android.content.pm.ApplicationInfo; 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.UserInfo; -import android.net.Uri; +import android.net.INetd; +import android.net.util.NetdService; import android.os.Build; import android.os.INetworkManagementService; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.util.Log; +import android.util.Slog; +import android.util.SparseIntArray; +import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.ArrayUtils; +import com.android.server.LocalServices; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map.Entry; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; /** @@ -75,6 +84,59 @@ public class PermissionMonitor { // Keys are App IDs. Values are true for SYSTEM permission and false for NETWORK permission. private final Map<Integer, Boolean> mApps = new HashMap<>(); + // Keys are App packageNames, Values are app uids. . We need to keep track of this information + // because PackageListObserver#onPackageRemoved does not pass the UID. + @GuardedBy("mPackageNameUidMap") + private final Map<String, Integer> mPackageNameUidMap = new HashMap<>(); + + private class PackageListObserver implements PackageManagerInternal.PackageListObserver { + @Override + public void onPackageAdded(String packageName) { + final PackageInfo app = getPackageInfo(packageName); + if (app == null) { + Slog.wtf(TAG, "Failed to get information of installed package: " + packageName); + return; + } + int uid = (app.applicationInfo != null) ? app.applicationInfo.uid : INVALID_UID; + if (uid == INVALID_UID) { + Slog.wtf(TAG, "Failed to get the uid of installed package: " + packageName + + "uid: " + uid); + return; + } + if (app.requestedPermissions == null) { + return; + } + sendPackagePermissionsForUid(uid, + filterPermission(Arrays.asList(app.requestedPermissions))); + synchronized (mPackageNameUidMap) { + mPackageNameUidMap.put(packageName, uid); + } + } + + @Override + public void onPackageRemoved(String packageName) { + int uid; + synchronized (mPackageNameUidMap) { + if (!mPackageNameUidMap.containsKey(packageName)) { + return; + } + uid = mPackageNameUidMap.get(packageName); + mPackageNameUidMap.remove(packageName); + } + int permission = 0; + String[] packages = mPackageManager.getPackagesForUid(uid); + if (packages != null && packages.length > 0) { + for (String name : packages) { + final PackageInfo app = getPackageInfo(name); + if (app != null && app.requestedPermissions != null) { + permission |= filterPermission(Arrays.asList(app.requestedPermissions)); + } + } + } + sendPackagePermissionsForUid(uid, permission); + } + } + public PermissionMonitor(Context context, INetworkManagementService netd) { mContext = context; mPackageManager = context.getPackageManager(); @@ -87,12 +149,21 @@ public class PermissionMonitor { public synchronized void startMonitoring() { log("Monitoring"); - List<PackageInfo> apps = mPackageManager.getInstalledPackages(GET_PERMISSIONS); + PackageManagerInternal pmi = LocalServices.getService(PackageManagerInternal.class); + if (pmi != null) { + pmi.getPackageList(new PackageListObserver()); + } else { + loge("failed to get the PackageManagerInternal service"); + } + List<PackageInfo> apps = mPackageManager.getInstalledPackages(GET_PERMISSIONS + | MATCH_ANY_USER); if (apps == null) { loge("No apps"); return; } + SparseIntArray netdPermsUids = new SparseIntArray(); + for (PackageInfo app : apps) { int uid = app.applicationInfo != null ? app.applicationInfo.uid : INVALID_UID; if (uid < 0) { @@ -110,6 +181,17 @@ public class PermissionMonitor { mApps.put(uid, hasRestrictedPermission); } } + + //TODO: unify the management of the permissions into one codepath. + if (app.requestedPermissions != null) { + int otherNetdPerms = filterPermission(Arrays.asList(app.requestedPermissions)); + if (otherNetdPerms != 0) { + netdPermsUids.put(uid, netdPermsUids.get(uid) | otherNetdPerms); + synchronized (mPackageNameUidMap) { + mPackageNameUidMap.put(app.applicationInfo.packageName, uid); + } + } + } } List<UserInfo> users = mUserManager.getUsers(true); // exclude dying users @@ -121,6 +203,7 @@ public class PermissionMonitor { log("Users: " + mUsers.size() + ", Apps: " + mApps.size()); update(mUsers, mApps, true); + sendPackagePermissionsToNetd(netdPermsUids); } @VisibleForTesting @@ -339,6 +422,107 @@ public class PermissionMonitor { } } + private static int filterPermission(List<String> requestedPermissions) { + int permissions = 0; + if (requestedPermissions.contains(INTERNET)) { + permissions |= INetd.PERMISSION_INTERNET; + } + if (requestedPermissions.contains(UPDATE_DEVICE_STATS)) { + permissions |= INetd.PERMISSION_UPDATE_DEVICE_STATS; + } + return permissions; + } + + private PackageInfo getPackageInfo(String packageName) { + try { + PackageInfo app = mPackageManager.getPackageInfo(packageName, GET_PERMISSIONS + | MATCH_ANY_USER); + return app; + } catch (NameNotFoundException e) { + // App not found. + loge("NameNotFoundException " + packageName); + return null; + } + } + + /** + * Called by PackageListObserver when a package is installed/uninstalled. Send the updated + * permission information to netd. + * + * @param uid the app uid of the package installed + * @param permissions the permissions the app requested and netd cares about. + * + * @hide + */ + private void sendPackagePermissionsForUid(int uid, int permissions) { + SparseIntArray netdPermissionsAppIds = new SparseIntArray(); + netdPermissionsAppIds.put(uid, permissions); + sendPackagePermissionsToNetd(netdPermissionsAppIds); + } + + /** + * Called by packageManagerService to send IPC to netd. Grant or revoke the INTERNET + * and/or UPDATE_DEVICE_STATS permission of the uids in array. + * + * @param netdPermissionsAppIds integer pairs of uids and the permission granted to it. If the + * permission is 0, revoke all permissions of that uid. + * + * @hide + */ + private void sendPackagePermissionsToNetd(SparseIntArray netdPermissionsAppIds) { + INetd netdService = NetdService.getInstance(); + if (netdService == null) { + Log.e(TAG, "Failed to get the netd service"); + return; + } + ArrayList<Integer> allPermissionAppIds = new ArrayList<>(); + ArrayList<Integer> internetPermissionAppIds = new ArrayList<>(); + ArrayList<Integer> updateStatsPermissionAppIds = new ArrayList<>(); + ArrayList<Integer> uninstalledAppIds = new ArrayList<>(); + for (int i = 0; i < netdPermissionsAppIds.size(); i++) { + int permissions = netdPermissionsAppIds.valueAt(i); + switch(permissions) { + case (INetd.PERMISSION_INTERNET | INetd.PERMISSION_UPDATE_DEVICE_STATS): + allPermissionAppIds.add(netdPermissionsAppIds.keyAt(i)); + break; + case INetd.PERMISSION_INTERNET: + internetPermissionAppIds.add(netdPermissionsAppIds.keyAt(i)); + break; + case INetd.PERMISSION_UPDATE_DEVICE_STATS: + updateStatsPermissionAppIds.add(netdPermissionsAppIds.keyAt(i)); + break; + case INetd.NO_PERMISSIONS: + uninstalledAppIds.add(netdPermissionsAppIds.keyAt(i)); + break; + default: + Log.e(TAG, "unknown permission type: " + permissions + "for uid: " + + netdPermissionsAppIds.keyAt(i)); + } + } + try { + // TODO: add a lock inside netd to protect IPC trafficSetNetPermForUids() + if (allPermissionAppIds.size() != 0) { + netdService.trafficSetNetPermForUids( + INetd.PERMISSION_INTERNET | INetd.PERMISSION_UPDATE_DEVICE_STATS, + ArrayUtils.convertToIntArray(allPermissionAppIds)); + } + if (internetPermissionAppIds.size() != 0) { + netdService.trafficSetNetPermForUids(INetd.PERMISSION_INTERNET, + ArrayUtils.convertToIntArray(internetPermissionAppIds)); + } + if (updateStatsPermissionAppIds.size() != 0) { + netdService.trafficSetNetPermForUids(INetd.PERMISSION_UPDATE_DEVICE_STATS, + ArrayUtils.convertToIntArray(updateStatsPermissionAppIds)); + } + if (uninstalledAppIds.size() != 0) { + netdService.trafficSetNetPermForUids(INetd.NO_PERMISSIONS, + ArrayUtils.convertToIntArray(uninstalledAppIds)); + } + } catch (RemoteException e) { + Log.e(TAG, "Pass appId list of special permission failed." + e); + } + } + private static void log(String s) { if (DBG) { Log.d(TAG, s); 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..3b4b6f85372b 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(); } @@ -1677,10 +1677,10 @@ public class Tethering extends BaseNetworkObserver { } /** Get the latest value of the tethering entitlement check. */ - public void getLatestTetheringEntitlementValue(int type, ResultReceiver receiver, + public void getLatestTetheringEntitlementResult(int type, ResultReceiver receiver, boolean showEntitlementUi) { if (receiver != null) { - mEntitlementMgr.getLatestTetheringEntitlementValue(type, receiver, showEntitlementUi); + mEntitlementMgr.getLatestTetheringEntitlementResult(type, receiver, showEntitlementUi); } } diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index a7d16d8cd6ec..1b44f79e02a6 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -917,6 +917,7 @@ public class Vpn { TreeSet<IpPrefix> ipv4Prefixes = new TreeSet<>(prefixLengthComparator); TreeSet<IpPrefix> ipv6Prefixes = new TreeSet<>(prefixLengthComparator); for (final RouteInfo route : routes) { + if (route.getType() == RouteInfo.RTN_UNREACHABLE) continue; IpPrefix destination = route.getDestination(); if (destination.isIPv4()) { ipv4Prefixes.add(destination); @@ -1839,6 +1840,7 @@ public class Vpn { config.interfaze = iface; config.session = profile.name; config.isMetered = false; + config.proxyInfo = profile.proxy; config.addLegacyRoutes(profile.routes); if (!profile.dnsServers.isEmpty()) { diff --git a/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java b/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java index 75aac106e0e0..65cc51610e72 100644 --- a/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java +++ b/services/core/java/com/android/server/connectivity/tethering/EntitlementManager.java @@ -291,7 +291,7 @@ public class EntitlementManager { } /** Get the last value of the tethering entitlement check. */ - public void getLatestTetheringEntitlementValue(int downstream, ResultReceiver receiver, + public void getLatestTetheringEntitlementResult(int downstream, ResultReceiver receiver, boolean showEntitlementUi) { if (!isTetherProvisioningRequired()) { receiver.send(TETHER_ERROR_NO_ERROR, null); 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/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java index 64641b3ab8b5..6608cad19d61 100644 --- a/services/core/java/com/android/server/job/JobSchedulerService.java +++ b/services/core/java/com/android/server/job/JobSchedulerService.java @@ -876,14 +876,17 @@ public class JobSchedulerService extends com.android.server.SystemService // This may throw a SecurityException. jobStatus.prepareLocked(ActivityManager.getService()); - if (toCancel != null) { - cancelJobImplLocked(toCancel, jobStatus, "job rescheduled by app"); - } if (work != null) { // If work has been supplied, enqueue it into the new job. jobStatus.enqueueWorkLocked(ActivityManager.getService(), work); } - startTrackingJobLocked(jobStatus, toCancel); + + if (toCancel != null) { + // Implicitly replaces the existing job record with the new instance + cancelJobImplLocked(toCancel, jobStatus, "job rescheduled by app"); + } else { + startTrackingJobLocked(jobStatus, null); + } StatsLog.write_non_chained(StatsLog.SCHEDULED_JOB_STATE_CHANGED, uId, null, jobStatus.getBatteryName(), StatsLog.SCHEDULED_JOB_STATE_CHANGED__STATE__SCHEDULED, @@ -1012,6 +1015,12 @@ public class JobSchedulerService extends com.android.server.SystemService } } + /** + * Cancel the given job, stopping it if it's currently executing. If {@code incomingJob} + * is null, the cancelled job is removed outright from the system. If + * {@code incomingJob} is non-null, it replaces {@code cancelled} in the store of + * currently scheduled jobs. + */ private void cancelJobImplLocked(JobStatus cancelled, JobStatus incomingJob, String reason) { if (DEBUG) Slog.d(TAG, "CANCEL: " + cancelled.toShortString()); cancelled.unprepareLocked(ActivityManager.getService()); @@ -1022,6 +1031,11 @@ public class JobSchedulerService extends com.android.server.SystemService } // Cancel if running. stopJobOnServiceContextLocked(cancelled, JobParameters.REASON_CANCELED, reason); + // If this is a replacement, bring in the new version of the job + if (incomingJob != null) { + if (DEBUG) Slog.i(TAG, "Tracking replacement job " + incomingJob.toShortString()); + startTrackingJobLocked(incomingJob, cancelled); + } reportActiveLocked(); } 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/net/OWNERS b/services/core/java/com/android/server/net/OWNERS index 2e91f998076d..28ae6a417bd3 100644 --- a/services/core/java/com/android/server/net/OWNERS +++ b/services/core/java/com/android/server/net/OWNERS @@ -1,12 +1,11 @@ set noparent codewiz@google.com -ek@google.com jchalard@google.com jsharkey@android.com +junyulai@google.com lorenzo@google.com reminv@google.com satk@google.com -silberst@google.com sudheersai@google.com yamasani@google.com diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index bca3f5d7c59f..ef468617bd6a 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -2302,8 +2302,9 @@ public class NotificationManagerService extends SystemService { public ParceledListSlice<NotificationChannelGroup> getNotificationChannelGroups( String pkg) { checkCallerIsSystemOrSameApp(pkg); + return mRankingHelper.getNotificationChannelGroups( - pkg, Binder.getCallingUid(), false, false); + pkg, Binder.getCallingUid(), false, false, true); } @Override @@ -2379,7 +2380,9 @@ public class NotificationManagerService extends SystemService { public ParceledListSlice<NotificationChannelGroup> getNotificationChannelGroupsForPackage( String pkg, int uid, boolean includeDeleted) { checkCallerIsSystem(); - return mRankingHelper.getNotificationChannelGroups(pkg, uid, includeDeleted, true); + + return mRankingHelper.getNotificationChannelGroups( + pkg, uid, includeDeleted, true, false); } @Override @@ -4258,13 +4261,6 @@ public class NotificationManagerService extends SystemService { final String pkg = r.sbn.getPackageName(); final int callingUid = r.sbn.getUid(); - final boolean isPackageSuspended = isPackageSuspendedForUser(pkg, callingUid); - if (isPackageSuspended) { - Slog.e(TAG, "Suppressing notification from package due to package " - + "suspended by administrator."); - usageStats.registerSuspendedByAdmin(r); - return isPackageSuspended; - } final boolean isBlocked = mRankingHelper.isGroupBlocked(pkg, callingUid, r.getChannel().getGroup()) || mRankingHelper.getImportance(pkg, callingUid) @@ -4273,8 +4269,9 @@ public class NotificationManagerService extends SystemService { if (isBlocked) { Slog.e(TAG, "Suppressing notification from package by user request."); usageStats.registerBlocked(r); + return true; } - return isBlocked; + return false; } protected class SnoozeNotificationRunnable implements Runnable { @@ -4452,7 +4449,11 @@ public class NotificationManagerService extends SystemService { return; } - r.setHidden(isPackageSuspendedLocked(r)); + final boolean isPackageSuspended = isPackageSuspendedLocked(r); + r.setHidden(isPackageSuspended); + if (isPackageSuspended) { + mUsageStats.registerSuspendedByAdmin(r); + } NotificationRecord old = mNotificationsByKey.get(key); final StatusBarNotification n = r.sbn; final Notification notification = n.getNotification(); @@ -6630,7 +6631,6 @@ public class NotificationManagerService extends SystemService { if (!oldSbnVisible && !sbnVisible) { continue; } - // If the notification is hidden, don't notifyPosted listeners targeting < P. // Instead, those listeners will receive notifyPosted when the notification is // unhidden. @@ -7064,7 +7064,7 @@ public class NotificationManagerService extends SystemService { new String[]{pkg}); final String action = suspend ? Intent.ACTION_PACKAGES_SUSPENDED - : Intent.ACTION_PACKAGES_UNSUSPENDED; + : Intent.ACTION_PACKAGES_UNSUSPENDED; final Intent intent = new Intent(action); intent.putExtras(extras); diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java index af6468333ba0..605348b4d52d 100644 --- a/services/core/java/com/android/server/notification/RankingConfig.java +++ b/services/core/java/com/android/server/notification/RankingConfig.java @@ -36,7 +36,7 @@ public interface RankingConfig { void createNotificationChannelGroup(String pkg, int uid, NotificationChannelGroup group, boolean fromTargetApp); ParceledListSlice<NotificationChannelGroup> getNotificationChannelGroups(String pkg, - int uid, boolean includeDeleted, boolean includeNonGrouped); + int uid, boolean includeDeleted, boolean includeNonGrouped, boolean includeEmpty); void createNotificationChannel(String pkg, int uid, NotificationChannel channel, boolean fromTargetApp, boolean hasDndAccess); void updateNotificationChannel(String pkg, int uid, NotificationChannel channel, boolean fromUser); diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java index 61b5415ec7a3..da6e9c02c96a 100644 --- a/services/core/java/com/android/server/notification/RankingHelper.java +++ b/services/core/java/com/android/server/notification/RankingHelper.java @@ -830,7 +830,7 @@ public class RankingHelper implements RankingConfig { @Override public ParceledListSlice<NotificationChannelGroup> getNotificationChannelGroups(String pkg, - int uid, boolean includeDeleted, boolean includeNonGrouped) { + int uid, boolean includeDeleted, boolean includeNonGrouped, boolean includeEmpty) { Preconditions.checkNotNull(pkg); Map<String, NotificationChannelGroup> groups = new ArrayMap<>(); Record r = getRecord(pkg, uid); @@ -861,6 +861,13 @@ public class RankingHelper implements RankingConfig { if (includeNonGrouped && nonGrouped.getChannels().size() > 0) { groups.put(null, nonGrouped); } + if (includeEmpty) { + for (NotificationChannelGroup group : r.groups.values()) { + if (!groups.containsKey(group.getId())) { + groups.put(group.getId(), group); + } + } + } return new ParceledListSlice<>(new ArrayList<>(groups.values())); } @@ -1244,7 +1251,7 @@ public class RankingHelper implements RankingConfig { /** * Dump only the ban information as structured JSON for the stats collector. * - * This is intentionally redundant with {#link dumpJson} because the old + * This is intentionally redundant with {@link dumpJson} because the old * scraper will expect this format. * * @param filter @@ -1288,7 +1295,7 @@ public class RankingHelper implements RankingConfig { /** * Dump only the channel information as structured JSON for the stats collector. * - * This is intentionally redundant with {#link dumpJson} because the old + * This is intentionally redundant with {@link dumpJson} because the old * scraper will expect this format. * * @param filter 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 640b155e69d5..3c1ee3ece7ad 100644 --- a/services/core/java/com/android/server/pm/OWNERS +++ b/services/core/java/com/android/server/pm/OWNERS @@ -9,73 +9,77 @@ svetoslavganov@google.com toddke@android.com toddke@google.com +# apex support +per-file ApexManager.java = dariofreni@google.com, narayan@google.com, toddke@android.com, toddke@google.com +per-file StagingManager.java = dariofreni@google.com, narayan@google.com, toddke@android.com, toddke@google.com + # 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 894897705d44..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(); } } @@ -13696,7 +13731,9 @@ public class PackageManagerService extends IPackageManager.Stub if (mPackageListObservers.size() == 0) { return; } - observers = (PackageListObserver[]) mPackageListObservers.toArray(); + final PackageListObserver[] observerArray = + new PackageListObserver[mPackageListObservers.size()]; + observers = mPackageListObservers.toArray(observerArray); } for (int i = observers.length - 1; i >= 0; --i) { observers[i].onPackageAdded(packageName); @@ -13710,7 +13747,9 @@ public class PackageManagerService extends IPackageManager.Stub if (mPackageListObservers.size() == 0) { return; } - observers = (PackageListObserver[]) mPackageListObservers.toArray(); + final PackageListObserver[] observerArray = + new PackageListObserver[mPackageListObservers.size()]; + observers = mPackageListObservers.toArray(observerArray); } for (int i = observers.length - 1; i >= 0; --i) { observers[i].onPackageRemoved(packageName); @@ -17761,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), @@ -24511,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/slice/SliceManagerService.java b/services/core/java/com/android/server/slice/SliceManagerService.java index c3b984172802..e8f255f4dfc1 100644 --- a/services/core/java/com/android/server/slice/SliceManagerService.java +++ b/services/core/java/com/android/server/slice/SliceManagerService.java @@ -42,6 +42,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; +import android.content.pm.ProviderInfo; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Binder; @@ -395,30 +396,11 @@ public class SliceManagerService extends ISliceManager.Stub { private String getProviderPkg(Uri uri, int user) { long ident = Binder.clearCallingIdentity(); try { - IBinder token = new Binder(); - IActivityManager activityManager = ActivityManager.getService(); - ContentProviderHolder holder = null; String providerName = getUriWithoutUserId(uri).getAuthority(); - try { - try { - holder = activityManager.getContentProviderExternal( - providerName, getUserIdFromUri(uri, user), token); - if (holder != null && holder.info != null) { - return holder.info.packageName; - } else { - return null; - } - } finally { - if (holder != null && holder.provider != null) { - activityManager.removeContentProviderExternal(providerName, token); - } - } - } catch (RemoteException e) { - // Can't happen. - throw e.rethrowAsRuntimeException(); - } + ProviderInfo provider = mContext.getPackageManager().resolveContentProviderAsUser( + providerName, 0, getUserIdFromUri(uri, user)); + return provider.packageName; } finally { - // I know, the double finally seems ugly, but seems safest for the identity. Binder.restoreCallingIdentity(ident); } } diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java index 37984163e4a9..bf349efba11f 100644 --- a/services/core/java/com/android/server/stats/StatsCompanionService.java +++ b/services/core/java/com/android/server/stats/StatsCompanionService.java @@ -43,6 +43,8 @@ import android.os.FileUtils; import android.os.IBinder; import android.os.IStatsCompanionService; import android.os.IStatsManager; +import android.os.IThermalEventListener; +import android.os.IThermalService; import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; @@ -52,6 +54,7 @@ import android.os.StatsDimensionsValue; import android.os.StatsLogEventWrapper; import android.os.SynchronousResultReceiver; import android.os.SystemClock; +import android.os.Temperature; import android.os.UserHandle; import android.os.UserManager; import android.telephony.ModemActivityInfo; @@ -153,6 +156,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { private KernelUidCpuClusterTimeReader mKernelUidCpuClusterTimeReader = new KernelUidCpuClusterTimeReader(); + private static IThermalService sThermalService; + public StatsCompanionService(Context context) { super(); mContext = context; @@ -203,6 +208,24 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { long[] freqs = mKernelUidCpuFreqTimeReader.readFreqs(powerProfile); mKernelUidCpuClusterTimeReader.setThrottleInterval(0); mKernelUidCpuActiveTimeReader.setThrottleInterval(0); + + // Enable push notifications of throttling from vendor thermal + // management subsystem via thermalservice. + IBinder b = ServiceManager.getService("thermalservice"); + + if (b != null) { + sThermalService = IThermalService.Stub.asInterface(b); + try { + sThermalService.registerThermalEventListener( + new ThermalEventListener()); + Slog.i(TAG, "register thermal listener successfully"); + } catch (RemoteException e) { + // Should never happen. + Slog.e(TAG, "register thermal listener error"); + } + } else { + Slog.e(TAG, "cannot find thermalservice, no throttling push notifications"); + } } @Override @@ -1181,4 +1204,14 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } } + // Thermal event received from vendor thermal management subsystem + private static final class ThermalEventListener extends IThermalEventListener.Stub { + @Override public void notifyThrottling(boolean isThrottling, Temperature temp) { + StatsLog.write(StatsLog.THERMAL_THROTTLING, temp.getType(), + isThrottling ? + StatsLog.THERMAL_THROTTLING_STATE_CHANGED__STATE__START : + StatsLog.THERMAL_THROTTLING_STATE_CHANGED__STATE__STOP, + temp.getValue()); + } + } } 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/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index a6ec3cff1b2c..0190e15d7fdc 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -71,7 +71,7 @@ import java.util.List; import java.util.Set; /** - * This class contains the accessibility related logic of the window manger. + * This class contains the accessibility related logic of the window manager. */ final class AccessibilityController { diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java index 4f15c5d149ff..2e2993142189 100644 --- a/services/core/java/com/android/server/wm/AppWindowContainerController.java +++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java @@ -18,9 +18,9 @@ package com.android.server.wm; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; - import static android.view.WindowManager.TRANSIT_DOCK_TASK_FROM_RECENTS; import static android.view.WindowManager.TRANSIT_UNSET; + import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION; @@ -65,6 +65,7 @@ public class AppWindowContainerController private final class H extends Handler { public static final int NOTIFY_WINDOWS_DRAWN = 1; public static final int NOTIFY_STARTING_WINDOW_DRAWN = 2; + public static final int NOTIFY_WINDOWS_NOTDRAWN = 3; public H(Looper looper) { super(looper); @@ -85,10 +86,18 @@ public class AppWindowContainerController if (mListener == null) { return; } - if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting drawn in " + if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting starting window drawn in " + AppWindowContainerController.this.mToken); mListener.onStartingWindowDrawn(msg.getWhen()); break; + case NOTIFY_WINDOWS_NOTDRAWN: + if (mListener == null) { + return; + } + if (DEBUG_VISIBILITY) Slog.v(TAG_WM, "Reporting undrawn in " + + AppWindowContainerController.this.mToken); + mListener.onWindowsNotDrawn(msg.getWhen()); + break; default: break; } @@ -740,6 +749,10 @@ public class AppWindowContainerController mHandler.sendMessage(mHandler.obtainMessage(H.NOTIFY_WINDOWS_DRAWN)); } + void reportWindowsNotDrawn() { + mHandler.sendMessage(mHandler.obtainMessage(H.NOTIFY_WINDOWS_NOTDRAWN)); + } + void reportWindowsVisible() { mHandler.post(mOnWindowsVisible); } diff --git a/services/core/java/com/android/server/wm/AppWindowContainerListener.java b/services/core/java/com/android/server/wm/AppWindowContainerListener.java index 8a39a7408058..9d2758a6b9e2 100644 --- a/services/core/java/com/android/server/wm/AppWindowContainerListener.java +++ b/services/core/java/com/android/server/wm/AppWindowContainerListener.java @@ -20,6 +20,8 @@ package com.android.server.wm; public interface AppWindowContainerListener extends WindowContainerListener { /** Called when the windows associated app window container are drawn. */ void onWindowsDrawn(long timestamp); + /** Called when the windows associated app window container are no longer drawn. */ + default void onWindowsNotDrawn(long timestamp) {} /** Called when the windows associated app window container are visible. */ void onWindowsVisible(); /** Called when the windows associated app window container are no longer visible. */ diff --git a/services/core/java/com/android/server/wm/AppWindowThumbnail.java b/services/core/java/com/android/server/wm/AppWindowThumbnail.java index bef974ae1081..ad92f81f4dde 100644 --- a/services/core/java/com/android/server/wm/AppWindowThumbnail.java +++ b/services/core/java/com/android/server/wm/AppWindowThumbnail.java @@ -69,7 +69,6 @@ class AppWindowThumbnail implements Animatable { .setFormat(PixelFormat.TRANSLUCENT) .setMetadata(appToken.windowType, window != null ? window.mOwnerUid : Binder.getCallingUid()) - .setBufferLayer() .build(); if (SHOW_TRANSACTIONS) { diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index fa6079c51906..bd5d35eae77d 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -354,6 +354,10 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree if (controller != null) { controller.reportWindowsDrawn(); } + } else { + if (controller != null) { + controller.reportWindowsNotDrawn(); + } } reportedDrawn = nowDrawn; } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 6700a123e043..22ac65df4337 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -400,6 +400,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo private MagnificationSpec mMagnificationSpec; + /** Caches the value whether told display manager that we have content. */ + private boolean mLastHasContent; + private final Consumer<WindowState> mUpdateWindowsForAnimator = w -> { WindowStateAnimator winAnimator = w.mWinAnimator; final AppWindowToken atoken = w.mAppToken; @@ -773,8 +776,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final SurfaceControl.Builder b = mService.makeSurfaceBuilder(mSession) .setSize(mSurfaceSize, mSurfaceSize) - .setOpaque(true) - .setContainerLayer(true); + .setOpaque(true); mWindowingLayer = b.setName("Display Root").build(); mOverlayLayer = b.setName("Display Overlays").build(); @@ -2917,8 +2919,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo forAllWindows(mApplySurfaceChangesTransaction, true /* traverseTopToBottom */); prepareSurfaces(); + mLastHasContent = mTmpApplySurfaceChangesTransactionState.displayHasContent; mService.mDisplayManagerInternal.setDisplayProperties(mDisplayId, - mTmpApplySurfaceChangesTransactionState.displayHasContent, + mLastHasContent, mTmpApplySurfaceChangesTransactionState.preferredRefreshRate, mTmpApplySurfaceChangesTransactionState.preferredModeId, true /* inTraversal, must call performTraversalInTrans... below */); @@ -3891,7 +3894,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo SurfaceSession s = child != null ? child.getSession() : getSession(); final SurfaceControl.Builder b = mService.makeSurfaceBuilder(s); b.setSize(mSurfaceSize, mSurfaceSize); - b.setContainerLayer(true); + if (child == null) { return b; } @@ -4053,4 +4056,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo private boolean canUpdateImeTarget() { return mDeferUpdateImeTargetCount == 0; } + + /** + * @return Cached value whether we told display manager that we have content. + */ + boolean getLastHasContent() { + return mLastHasContent; + } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 8b4a2dd36e6c..3f91bb1ff8bd 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -225,7 +225,6 @@ import android.view.WindowManagerPolicyConstants.PointerEventListener; import android.view.inputmethod.InputMethodManagerInternal; import com.android.internal.R; -import com.android.internal.graphics.SfVsyncFrameCallbackProvider; import com.android.internal.os.IResultReceiver; import com.android.internal.policy.IKeyguardDismissCallback; import com.android.internal.policy.IShortcutService; @@ -6692,6 +6691,9 @@ public class WindowManagerService extends IWindowManager.Stub mRoot.forAllWindows(w -> {pw.println(w);}, true /* traverseTopToBottom */); } return; + } else if ("trace".equals(cmd)) { + // do nothing + return; } else { // Dumping a single name? if (!dumpWindows(pw, cmd, args, opti, dumpAll)) { diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 1ae680f793ca..087bd6a80c73 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -85,6 +85,7 @@ import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_INPUT_METHOD; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT; +import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT_REPEATS; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_POWER; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_RESIZE; @@ -4248,10 +4249,15 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } if (!mWinAnimator.mLastHidden || wasDeferred) { mWinAnimator.hide(reason); + getDisplayContent().mWallpaperController.mDeferredHideWallpaper = null; dispatchWallpaperVisibility(false); final DisplayContent displayContent = getDisplayContent(); if (displayContent != null) { displayContent.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER; + if (DEBUG_LAYOUT_REPEATS) { + mService.mWindowPlacerLocked.debugLayoutRepeats("hideWallpaperWindow " + this, + displayContent.pendingLayoutChanges); + } } } } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index a05e04dd6c7c..c56c3035e127 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1126,7 +1126,7 @@ class WindowStateAnimator { setSurfaceBoundariesLocked(recoveringMemory); - if (mIsWallpaper && !mWin.mWallpaperVisible) { + if (mIsWallpaper && !w.mWallpaperVisible) { // Wallpaper is no longer visible and there is no wp target => hide it. hide("prepareSurfaceLocked"); } else if (w.isParentWindowHidden() || !w.isOnScreen()) { @@ -1185,11 +1185,18 @@ class WindowStateAnimator { if (mIsWallpaper) { w.dispatchWallpaperVisibility(true); } - // This draw means the difference between unique content and mirroring. - // Run another pass through performLayout to set mHasContent in the - // LogicalDisplay. - mAnimator.setPendingLayoutChanges(w.getDisplayId(), - FINISH_LAYOUT_REDO_ANIM); + if (!w.getDisplayContent().getLastHasContent()) { + // This draw means the difference between unique content and mirroring. + // Run another pass through performLayout to set mHasContent in the + // LogicalDisplay. + mAnimator.setPendingLayoutChanges(w.getDisplayId(), + FINISH_LAYOUT_REDO_ANIM); + if (DEBUG_LAYOUT_REPEATS) { + mService.mWindowPlacerLocked.debugLayoutRepeats( + "showSurfaceRobustlyLocked " + w, + mAnimator.getPendingLayoutChanges(w.getDisplayId())); + } + } } else { w.setOrientationChanging(false); } diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java index 4548cec88e7e..66c8cca8f0e0 100644 --- a/services/core/java/com/android/server/wm/WindowSurfaceController.java +++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java @@ -104,7 +104,6 @@ class WindowSurfaceController { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "new SurfaceControl"); final SurfaceControl.Builder b = win.makeSurface() - .setBufferLayer() .setParent(win.getSurfaceControl()) .setName(name) .setSize(w, h) diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp index 6735ab4d9ce2..07a6c70befd6 100644 --- a/services/core/jni/Android.bp +++ b/services/core/jni/Android.bp @@ -38,6 +38,7 @@ cc_library_static { "com_android_server_SerialService.cpp", "com_android_server_storage_AppFuseBridge.cpp", "com_android_server_SystemServer.cpp", + "com_android_server_TestNetworkService.cpp", "com_android_server_tv_TvUinputBridge.cpp", "com_android_server_tv_TvInputHal.cpp", "com_android_server_vr_VrManagerService.cpp", diff --git a/services/core/jni/com_android_server_TestNetworkService.cpp b/services/core/jni/com_android_server_TestNetworkService.cpp new file mode 100644 index 000000000000..b90ff233c1ac --- /dev/null +++ b/services/core/jni/com_android_server_TestNetworkService.cpp @@ -0,0 +1,107 @@ +/* + * 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. + */ + +#define LOG_NDEBUG 0 + +#define LOG_TAG "TestNetworkServiceJni" + +#include <arpa/inet.h> +#include <errno.h> +#include <fcntl.h> +#include <linux/if.h> +#include <linux/if_tun.h> +#include <linux/ipv6_route.h> +#include <linux/route.h> +#include <netinet/in.h> +#include <stdio.h> +#include <string.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <sys/stat.h> +#include <sys/types.h> + +#include <log/log.h> + +#include "netutils/ifc.h" + +#include "jni.h" +#include <android-base/stringprintf.h> +#include <android-base/unique_fd.h> +#include <nativehelper/JNIHelp.h> +#include <nativehelper/ScopedUtfChars.h> + +namespace android { + +//------------------------------------------------------------------------------ + +static void throwException(JNIEnv* env, int error, const char* action, const char* iface) { + const std::string& msg = + android::base::StringPrintf("Error %s %s: %s", action, iface, strerror(error)); + + jniThrowException(env, "java/lang/IllegalStateException", msg.c_str()); +} + +static int createTunInterface(JNIEnv* env, const char* iface) { + base::unique_fd tun(open("/dev/tun", O_RDWR | O_NONBLOCK)); + ifreq ifr{}; + + // Allocate interface. + ifr.ifr_flags = IFF_TUN | IFF_NO_PI; + strlcpy(ifr.ifr_name, iface, IFNAMSIZ); + if (ioctl(tun.get(), TUNSETIFF, &ifr)) { + throwException(env, errno, "allocating", ifr.ifr_name); + return -1; + } + + // Activate interface using an unconnected datagram socket. + base::unique_fd inet6CtrlSock(socket(AF_INET6, SOCK_DGRAM, 0)); + ifr.ifr_flags = IFF_UP; + + if (ioctl(inet6CtrlSock.get(), SIOCSIFFLAGS, &ifr)) { + throwException(env, errno, "activating", ifr.ifr_name); + return -1; + } + + return tun.release(); +} + +//------------------------------------------------------------------------------ + +static jint create(JNIEnv* env, jobject /* thiz */, jstring jIface) { + ScopedUtfChars iface(env, jIface); + if (!iface.c_str()) { + jniThrowNullPointerException(env, "iface"); + return -1; + } + + int tun = createTunInterface(env, iface.c_str()); + + // Any exceptions will be thrown from the createTunInterface call + return tun; +} + +//------------------------------------------------------------------------------ + +static const JNINativeMethod gMethods[] = { + {"jniCreateTun", "(Ljava/lang/String;)I", (void*)create}, +}; + +int register_android_server_TestNetworkService(JNIEnv* env) { + return jniRegisterNativeMethods(env, "com/android/server/TestNetworkService", gMethods, + NELEM(gMethods)); +} + +}; // namespace android diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp index bb6e6840f3b4..83347bb68e49 100644 --- a/services/core/jni/onload.cpp +++ b/services/core/jni/onload.cpp @@ -43,6 +43,7 @@ int register_android_server_VibratorService(JNIEnv* env); int register_android_server_location_GnssLocationProvider(JNIEnv* env); int register_android_server_connectivity_Vpn(JNIEnv* env); int register_android_server_connectivity_tethering_OffloadHardwareInterface(JNIEnv*); +int register_android_server_TestNetworkService(JNIEnv* env); int register_android_server_devicepolicy_CryptoTestHelper(JNIEnv*); int register_android_server_hdmi_HdmiCecController(JNIEnv* env); int register_android_server_tv_TvUinputBridge(JNIEnv* env); @@ -88,6 +89,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) register_android_server_location_GnssLocationProvider(env); register_android_server_connectivity_Vpn(env); register_android_server_connectivity_tethering_OffloadHardwareInterface(env); + register_android_server_TestNetworkService(env); register_android_server_devicepolicy_CryptoTestHelper(env); register_android_server_ConsumerIrService(env); register_android_server_BatteryStatsService(env); 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 406822c774ca..d288910871bc 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -786,6 +786,9 @@ public final class SystemServer { boolean isWatch = context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_WATCH); + boolean enableVrService = context.getPackageManager().hasSystemFeature( + PackageManager.FEATURE_VR_MODE_HIGH_PERFORMANCE); + // For debugging RescueParty if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean("debug.crash_system", false)) { throw new RuntimeException(); @@ -924,7 +927,7 @@ public final class SystemServer { traceLog.traceEnd(); }, START_HIDL_SERVICES); - if (!isWatch) { + if (!isWatch && enableVrService) { traceBeginAndSlog("StartVrManagerService"); mSystemServiceManager.startService(VrManagerService.class); traceEnd(); @@ -1232,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); @@ -1680,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/OWNERS b/services/net/OWNERS index 7311eee32a4c..d3836d4c6c57 100644 --- a/services/net/OWNERS +++ b/services/net/OWNERS @@ -1,8 +1,8 @@ set noparent codewiz@google.com -ek@google.com jchalard@google.com +junyulai@google.com lorenzo@google.com reminv@google.com satk@google.com diff --git a/services/net/java/android/net/NetworkStackClient.java b/services/net/java/android/net/NetworkStackClient.java index 1eb7b98d801a..eed01aecf0e2 100644 --- a/services/net/java/android/net/NetworkStackClient.java +++ b/services/net/java/android/net/NetworkStackClient.java @@ -30,6 +30,7 @@ import android.content.pm.PackageManager; import android.net.dhcp.DhcpServingParamsParcel; import android.net.dhcp.IDhcpServerCallbacks; import android.net.ip.IIpClientCallbacks; +import android.net.util.SharedLog; import android.os.Binder; import android.os.IBinder; import android.os.Process; @@ -40,6 +41,7 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; +import java.io.PrintWriter; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -61,6 +63,9 @@ public class NetworkStackClient { @GuardedBy("mPendingNetStackRequests") private INetworkStackConnector mConnector; + @GuardedBy("mLog") + private final SharedLog mLog = new SharedLog(TAG); + private volatile boolean mNetworkStackStartRequested = false; private interface NetworkStackCallback { @@ -129,13 +134,14 @@ public class NetworkStackClient { private class NetworkStackConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { + log("Network stack service connected"); registerNetworkStackService(service); } @Override public void onServiceDisconnected(ComponentName name) { // TODO: crash/reboot the system ? - Slog.wtf(TAG, "Lost network stack connector"); + logWtf("Lost network stack connector", null); } }; @@ -144,6 +150,7 @@ public class NetworkStackClient { ServiceManager.addService(Context.NETWORK_STACK_SERVICE, service, false /* allowIsolated */, DUMP_FLAG_PRIORITY_HIGH | DUMP_FLAG_PRIORITY_NORMAL); + log("Network stack service registered"); final ArrayList<NetworkStackCallback> requests; synchronized (mPendingNetStackRequests) { @@ -166,6 +173,7 @@ public class NetworkStackClient { * started. */ public void start(Context context) { + log("Starting network stack"); mNetworkStackStartRequested = true; // Try to bind in-process if the library is available IBinder connector = null; @@ -177,7 +185,7 @@ public class NetworkStackClient { connector = (IBinder) service.getMethod("makeConnector", Context.class) .invoke(null, context); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - Slog.wtf(TAG, "Could not create network stack connector from NetworkStackService"); + logWtf("Could not create network stack connector from NetworkStackService", e); // TODO: crash/reboot system here ? return; } catch (ClassNotFoundException e) { @@ -186,26 +194,28 @@ public class NetworkStackClient { // In-process network stack. Add the service to the service manager here. if (connector != null) { + log("Registering in-process network stack connector"); registerNetworkStackService(connector); return; } // Start the network stack process. The service will be added to the service manager in // NetworkStackConnection.onServiceConnected(). + log("Starting network stack process"); final Intent intent = new Intent(INetworkStackConnector.class.getName()); final ComponentName comp = intent.resolveSystemService(context.getPackageManager(), 0); intent.setComponent(comp); if (comp == null) { - Slog.wtf(TAG, "Could not resolve the network stack with " + intent); + logWtf("Could not resolve the network stack with " + intent, null); // TODO: crash/reboot system server ? return; } final PackageManager pm = context.getPackageManager(); int uid = -1; try { - uid = pm.getPackageUid(comp.getPackageName(), UserHandle.USER_SYSTEM); + uid = pm.getPackageUidAsUser(comp.getPackageName(), UserHandle.USER_SYSTEM); } catch (PackageManager.NameNotFoundException e) { - Slog.wtf("Network stack package not found", e); + logWtf("Network stack package not found", e); // Fall through } if (uid != Process.NETWORK_STACK_UID) { @@ -221,10 +231,31 @@ public class NetworkStackClient { if (!context.bindServiceAsUser(intent, new NetworkStackConnection(), Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT, UserHandle.SYSTEM)) { - Slog.wtf(TAG, - "Could not bind to network stack in-process, or in app with " + intent); + logWtf("Could not bind to network stack in-process, or in app with " + intent, null); + return; // TODO: crash/reboot system server if no network stack after a timeout ? } + + log("Network stack service start requested"); + } + + private void log(@NonNull String message) { + synchronized (mLog) { + mLog.log(message); + } + } + + private void logWtf(@NonNull String message, @Nullable Throwable e) { + Slog.wtf(TAG, message); + synchronized (mLog) { + mLog.e(message, e); + } + } + + private void loge(@NonNull String message, @Nullable Throwable e) { + synchronized (mLog) { + mLog.e(message, e); + } } /** @@ -243,12 +274,12 @@ public class NetworkStackClient { while ((connector = ServiceManager.getService(Context.NETWORK_STACK_SERVICE)) == null) { Thread.sleep(20); if (System.currentTimeMillis() - before > NETWORKSTACK_TIMEOUT_MS) { - Slog.e(TAG, "Timeout waiting for NetworkStack connector"); + loge("Timeout waiting for NetworkStack connector", null); return null; } } } catch (InterruptedException e) { - Slog.e(TAG, "Error waiting for NetworkStack connector", e); + loge("Error waiting for NetworkStack connector", e); return null; } @@ -258,7 +289,8 @@ public class NetworkStackClient { private void requestConnector(@NonNull NetworkStackCallback request) { // TODO: PID check. final int caller = Binder.getCallingUid(); - if (caller != Process.SYSTEM_UID && !UserHandle.isSameApp(caller, Process.BLUETOOTH_UID)) { + if (caller != Process.SYSTEM_UID && !UserHandle.isSameApp(caller, Process.BLUETOOTH_UID) + && !UserHandle.isSameApp(caller, Process.PHONE_UID)) { // Don't even attempt to obtain the connector and give a nice error message throw new SecurityException( "Only the system server should try to bind to the network stack."); @@ -286,4 +318,20 @@ public class NetworkStackClient { request.onNetworkStackConnected(connector); } + + /** + * Dump NetworkStackClient logs to the specified {@link PrintWriter}. + */ + public void dump(PrintWriter pw) { + // dump is thread-safe on SharedLog + mLog.dump(null, pw, null); + + final int requestsQueueLength; + synchronized (mPendingNetStackRequests) { + requestsQueueLength = mPendingNetStackRequests.size(); + } + + pw.println(); + pw.println("pendingNetStackRequests length: " + requestsQueueLength); + } } diff --git a/services/net/java/android/net/ip/IpServer.java b/services/net/java/android/net/ip/IpServer.java index 34fc7354d63e..0e44f88d2389 100644 --- a/services/net/java/android/net/ip/IpServer.java +++ b/services/net/java/android/net/ip/IpServer.java @@ -87,7 +87,6 @@ public class IpServer extends StateMachine { return "UNKNOWN: " + state; } - private static final IpPrefix LINK_LOCAL_PREFIX = new IpPrefix("fe80::/64"); private static final byte DOUG_ADAMS = (byte) 42; private static final String USB_NEAR_IFACE_ADDR = "192.168.42.129"; @@ -557,16 +556,6 @@ public class IpServer extends StateMachine { addedPrefixes.removeAll(mLastRaParams.prefixes); } - if (mLastRaParams == null || mLastRaParams.prefixes.isEmpty()) { - // We need to be able to send unicast RAs, and clients might - // like to ping the default router's link-local address. Note - // that we never remove the link-local route from the network - // until Tethering disables tethering on the interface. We - // only need to add the link-local prefix once, but in the - // event we add it more than once netd silently ignores EEXIST. - addedPrefixes.add(LINK_LOCAL_PREFIX); - } - if (!addedPrefixes.isEmpty()) { final ArrayList<RouteInfo> toBeAdded = getLocalRoutesFor(mIfaceName, addedPrefixes); 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/net/java/android/net/netlink/NetlinkSocket.java b/services/net/java/android/net/netlink/NetlinkSocket.java index 16f72bd53e15..4240d240ca23 100644 --- a/services/net/java/android/net/netlink/NetlinkSocket.java +++ b/services/net/java/android/net/netlink/NetlinkSocket.java @@ -109,7 +109,7 @@ public class NetlinkSocket { } public static void connectToKernel(FileDescriptor fd) throws ErrnoException, SocketException { - SocketUtils.connectSocket(fd, makeNetlinkSocketAddress(0, 0)); + Os.connect(fd, makeNetlinkSocketAddress(0, 0)); } private static void checkTimeout(long timeoutMs) { 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 ce9b552e418a..6b530026f8ae 100644 --- a/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java +++ b/services/tests/servicestests/src/com/android/server/accounts/AccountsDbTest.java @@ -17,30 +17,38 @@ package com.android.server.accounts; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + import android.accounts.Account; import android.content.Context; import android.database.Cursor; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import android.database.sqlite.SQLiteStatement; import android.os.Build; 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; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import java.io.File; +import java.io.PrintWriter; import java.util.Arrays; import java.util.List; import java.util.Map; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - /** * Tests for {@link AccountsDb}. * <p>Run with:<pre> @@ -48,7 +56,7 @@ import static org.junit.Assert.assertTrue; * 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) @@ -63,8 +71,11 @@ public class AccountsDbTest { private File deDb; private File ceDb; + @Mock private PrintWriter mMockWriter; + @Before public void setUp() { + MockitoAnnotations.initMocks(this); Context context = InstrumentationRegistry.getContext(); preNDb = new File(context.getCacheDir(), PREN_DB); ceDb = new File(context.getCacheDir(), CE_DB); @@ -443,4 +454,33 @@ public class AccountsDbTest { assertTrue(mAccountsDb.deleteDeAccount(accId)); // Trigger should remove visibility. assertNull(mAccountsDb.findAccountVisibility(account, packageName1)); } + + @Test + public void testDumpDebugTable() { + long accId = 10; + long insertionPoint = mAccountsDb.reserveDebugDbInsertionPoint(); + + SQLiteStatement logStatement = mAccountsDb.getStatementForLogging(); + + logStatement.bindLong(1, accId); + logStatement.bindString(2, "action"); + logStatement.bindString(3, "date"); + logStatement.bindLong(4, 10); + logStatement.bindString(5, "table"); + logStatement.bindLong(6, insertionPoint); + logStatement.execute(); + + mAccountsDb.dumpDebugTable(mMockWriter); + + verify(mMockWriter, times(3)).println(anyString()); + } + + @Test + public void testReserveDebugDbInsertionPoint() { + long insertionPoint = mAccountsDb.reserveDebugDbInsertionPoint(); + long insertionPoint2 = mAccountsDb.reserveDebugDbInsertionPoint(); + + assertEquals(0, insertionPoint); + assertEquals(1, insertionPoint2); + } } 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/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index cdbf3c66767b..955e2477fc66 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -500,8 +500,9 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { NotificationChannel channel = new NotificationChannel("id", "name", IMPORTANCE_HIGH); NotificationRecord r = generateNotificationRecord(channel); - assertTrue(mService.isBlocked(r, mUsageStats)); - verify(mUsageStats, times(1)).registerSuspendedByAdmin(eq(r)); + + // isBlocked is only used for user blocking, not app suspension + assertFalse(mService.isBlocked(r, mUsageStats)); } @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 98c6ec42207f..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; @@ -399,7 +399,7 @@ public class RankingHelperTest extends UiServiceTestCase { mHelper.getNotificationChannel(PKG, UID, channel2.getId(), false)); List<NotificationChannelGroup> actualGroups = - mHelper.getNotificationChannelGroups(PKG, UID, false, true).getList(); + mHelper.getNotificationChannelGroups(PKG, UID, false, true, false).getList(); boolean foundNcg = false; for (NotificationChannelGroup actual : actualGroups) { if (ncg.getId().equals(actual.getId())) { @@ -469,7 +469,7 @@ public class RankingHelperTest extends UiServiceTestCase { mHelper.getNotificationChannel(PKG, UID, channel3.getId(), false)); List<NotificationChannelGroup> actualGroups = - mHelper.getNotificationChannelGroups(PKG, UID, false, true).getList(); + mHelper.getNotificationChannelGroups(PKG, UID, false, true, false).getList(); boolean foundNcg = false; for (NotificationChannelGroup actual : actualGroups) { if (ncg.getId().equals(actual.getId())) { @@ -784,6 +784,31 @@ public class RankingHelperTest extends UiServiceTestCase { new NotificationChannel("bananas", "bananas", IMPORTANCE_MAX), true, false); } + @Test + public void testGetChannelGroups_includeEmptyGroups() { + NotificationChannelGroup ncg = new NotificationChannelGroup("group1", "name1"); + mHelper.createNotificationChannelGroup(PKG, UID, ncg, true); + NotificationChannelGroup ncgEmpty = new NotificationChannelGroup("group2", "name2"); + mHelper.createNotificationChannelGroup(PKG, UID, ncgEmpty, true); + + NotificationChannel channel1 = + new NotificationChannel("id1", "name1", NotificationManager.IMPORTANCE_HIGH); + channel1.setGroup(ncg.getId()); + mHelper.createNotificationChannel(PKG, UID, channel1, true, false); + + List<NotificationChannelGroup> actual = mHelper.getNotificationChannelGroups( + PKG, UID, false, false, true).getList(); + + assertEquals(2, actual.size()); + for (NotificationChannelGroup group : actual) { + if (Objects.equals(group.getId(), ncg.getId())) { + assertEquals(1, group.getChannels().size()); + } + if (Objects.equals(group.getId(), ncgEmpty.getId())) { + assertEquals(0, group.getChannels().size()); + } + } + } @Test public void testUpdate() throws Exception { @@ -1421,7 +1446,7 @@ public class RankingHelperTest extends UiServiceTestCase { mHelper.onPackagesChanged(true, UserHandle.USER_SYSTEM, new String[]{PKG}, new int[]{UID}); assertEquals(0, - mHelper.getNotificationChannelGroups(PKG, UID, true, true).getList().size()); + mHelper.getNotificationChannelGroups(PKG, UID, true, true, false).getList().size()); } @Test @@ -1510,7 +1535,7 @@ public class RankingHelperTest extends UiServiceTestCase { mHelper.createNotificationChannel(PKG, UID, channel3, true, false); List<NotificationChannelGroup> actual = - mHelper.getNotificationChannelGroups(PKG, UID, true, true).getList(); + mHelper.getNotificationChannelGroups(PKG, UID, true, true, false).getList(); assertEquals(3, actual.size()); for (NotificationChannelGroup group : actual) { if (group.getId() == null) { @@ -1542,13 +1567,13 @@ public class RankingHelperTest extends UiServiceTestCase { new NotificationChannel("id1", "name1", NotificationManager.IMPORTANCE_HIGH); channel1.setGroup(ncg.getId()); mHelper.createNotificationChannel(PKG, UID, channel1, true, false); - mHelper.getNotificationChannelGroups(PKG, UID, true, true).getList(); + mHelper.getNotificationChannelGroups(PKG, UID, true, true, false).getList(); channel1.setImportance(IMPORTANCE_LOW); mHelper.updateNotificationChannel(PKG, UID, channel1, true); List<NotificationChannelGroup> actual = - mHelper.getNotificationChannelGroups(PKG, UID, true, true).getList(); + mHelper.getNotificationChannelGroups(PKG, UID, true, true, false).getList(); assertEquals(2, actual.size()); for (NotificationChannelGroup group : actual) { 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/services/usb/java/com/android/server/usb/UsbDebuggingManager.java b/services/usb/java/com/android/server/usb/UsbDebuggingManager.java index 423909921e21..3b0850533ad3 100644 --- a/services/usb/java/com/android/server/usb/UsbDebuggingManager.java +++ b/services/usb/java/com/android/server/usb/UsbDebuggingManager.java @@ -34,10 +34,10 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.SystemClock; +import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.service.usb.UsbDebuggingManagerProto; -import android.sysprop.VoldProperties; import android.util.Base64; import android.util.Slog; @@ -263,7 +263,7 @@ public class UsbDebuggingManager { case MESSAGE_ADB_CONFIRM: { if ("trigger_restart_min_framework".equals( - VoldProperties.decrypt().orElse(""))) { + SystemProperties.get("vold.decrypt"))) { Slog.d(TAG, "Deferring adb confirmation until after vold decrypt"); if (mThread != null) { mThread.sendResponse("NO"); 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/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index 82db0d2ecb96..58e80b474ef9 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -71,7 +71,7 @@ import java.util.concurrent.ConcurrentHashMap; * See {@link PhoneAccount} and {@link TelecomManager#registerPhoneAccount} for more information. * <p> * System managed {@link ConnectionService}s must be enabled by the user in the phone app settings - * before Telecom will bind to them. Self-manged {@link ConnectionService}s must be granted the + * before Telecom will bind to them. Self-managed {@link ConnectionService}s must be granted the * appropriate permission before Telecom will bind to them. * <p> * Once registered and enabled by the user in the phone app settings or granted permission, telecom diff --git a/telecomm/java/android/telecom/Log.java b/telecomm/java/android/telecom/Log.java index 0eb991777d74..16791a4b8680 100644 --- a/telecomm/java/android/telecom/Log.java +++ b/telecomm/java/android/telecom/Log.java @@ -18,7 +18,6 @@ package android.telecom; import android.content.Context; import android.net.Uri; -import android.os.AsyncTask; import android.os.Build; import android.telecom.Logging.EventManager; import android.telecom.Logging.Session; @@ -29,8 +28,6 @@ import android.text.TextUtils; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IndentingPrintWriter; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.util.IllegalFormatException; import java.util.Locale; @@ -373,6 +370,12 @@ public class Log { return FORCE_LOGGING || android.util.Log.isLoggable(TAG, level); } + /** + * Generates an obfuscated string for a calling handle in {@link Uri} format, or a raw phone + * phone number in {@link String} format. + * @param pii The information to obfuscate. + * @return The obfuscated string. + */ public static String piiHandle(Object pii) { if (pii == null || VERBOSE) { return String.valueOf(pii); @@ -389,16 +392,7 @@ public class Log { String textToObfuscate = uri.getSchemeSpecificPart(); if (PhoneAccount.SCHEME_TEL.equals(scheme)) { - int numDigitsToObfuscate = getDialableCount(textToObfuscate) - - NUM_DIALABLE_DIGITS_TO_LOG; - for (int i = 0; i < textToObfuscate.length(); i++) { - char c = textToObfuscate.charAt(i); - boolean isDialable = PhoneNumberUtils.isDialable(c); - if (isDialable) { - numDigitsToObfuscate--; - } - sb.append(isDialable && numDigitsToObfuscate >= 0 ? "*" : c); - } + obfuscatePhoneNumber(sb, textToObfuscate); } else if (PhoneAccount.SCHEME_SIP.equals(scheme)) { for (int i = 0; i < textToObfuscate.length(); i++) { char c = textToObfuscate.charAt(i); @@ -410,12 +404,34 @@ public class Log { } else { sb.append(pii(pii)); } + } else if (pii instanceof String) { + String number = (String) pii; + obfuscatePhoneNumber(sb, number); } return sb.toString(); } /** + * Obfuscates a phone number, allowing NUM_DIALABLE_DIGITS_TO_LOG digits to be exposed for the + * phone number. + * @param sb String buffer to write obfuscated number to. + * @param phoneNumber The number to obfuscate. + */ + private static void obfuscatePhoneNumber(StringBuilder sb, String phoneNumber) { + int numDigitsToObfuscate = getDialableCount(phoneNumber) + - NUM_DIALABLE_DIGITS_TO_LOG; + for (int i = 0; i < phoneNumber.length(); i++) { + char c = phoneNumber.charAt(i); + boolean isDialable = PhoneNumberUtils.isDialable(c); + if (isDialable) { + numDigitsToObfuscate--; + } + sb.append(isDialable && numDigitsToObfuscate >= 0 ? "*" : c); + } + } + + /** * Determines the number of dialable characters in a string. * @param toCount The string to count dialable characters in. * @return The count of dialable characters. diff --git a/telecomm/java/android/telecom/PhoneAccountSuggestion.java b/telecomm/java/android/telecom/PhoneAccountSuggestion.java index b401bcf0f876..563c2dc9ee5e 100644 --- a/telecomm/java/android/telecom/PhoneAccountSuggestion.java +++ b/telecomm/java/android/telecom/PhoneAccountSuggestion.java @@ -17,8 +17,7 @@ package android.telecom; import android.annotation.IntDef; -import android.annotation.SystemApi; -import android.annotation.TestApi; +import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; @@ -68,11 +67,16 @@ public final class PhoneAccountSuggestion implements Parcelable { private boolean mShouldAutoSelect; /** - * @hide + * Creates a new instance of {@link PhoneAccountSuggestion}. This constructor is intended for + * use by apps implementing a {@link PhoneAccountSuggestionService}, and generally should not be + * used by dialer apps other than for testing purposes. + * + * @param handle The {@link PhoneAccountHandle} for this suggestion. + * @param reason The reason for this suggestion + * @param shouldAutoSelect Whether the dialer should automatically place the call using this + * account. See {@link #shouldAutoSelect()}. */ - @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 +105,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 50b8f79892fd..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 @@ -2122,7 +2123,10 @@ public final class Telephony { /** * The URI to query or modify {@link android.telephony.ims.Rcs1To1Thread}s via the - * content provider + * content provider. Can also insert to this URI to create a new 1-to-1 thread. When + * performing an insert, ensure that the provided content values contain the other + * participant's ID under the key + * {@link RcsParticipantColumns.RCS_PARTICIPANT_ID_COLUMN} */ Uri RCS_1_TO_1_THREAD_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, RCS_1_TO_1_THREAD_URI_PART); @@ -3761,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, @@ -3771,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 {} + } /** @@ -4274,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..9cdd53ea7654 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -31,6 +31,7 @@ import android.os.PersistableBundle; import android.os.RemoteException; import android.os.ServiceManager; import android.service.carrier.CarrierService; +import android.telecom.TelecomManager; import android.telephony.ims.ImsReasonInfo; import com.android.internal.telephony.ICarrierConfigLoader; @@ -1812,17 +1813,32 @@ public class CarrierConfigManager { /** * Determine whether user can change Wi-Fi Calling preference in roaming. - * {@code false} - roaming preference {@link KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT} is - * the same as home preference {@link KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT} - * and cannot be changed. - * {@code true} - roaming preference can be changed by user independently. - * + * {@code false} - roaming preference cannot be changed by user independently. If + * {@link #KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL} is false, + * {@link #KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT} is used as the default + * value. If {@link #KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL} is + * true, roaming preference is the same as home preference and + * {@link #KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT} is used as the default value. + * {@code true} - roaming preference can be changed by user independently if + * {@link #KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL} is false. If + * {@link #KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL} is true, this + * configuration is ignored and roaming preference cannot be changed. * @hide */ public static final String KEY_EDITABLE_WFC_ROAMING_MODE_BOOL = "editable_wfc_roaming_mode_bool"; /** + * Flag specifying whether the carrier will use the WFC home network mode in roaming network. + * {@code false} - roaming preference can be selected separately from the home preference. + * {@code true} - roaming preference is the same as home preference and + * {@link #KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT} is used as the default value. + * @hide + */ + public static final String KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL = + "use_wfc_home_network_mode_in_roaming_network_bool"; + + /** * Determine whether current lpp_mode used for E-911 needs to be kept persistently. * {@code false} - not keeping the lpp_mode means using default configuration of gps.conf * when sim is not presented. @@ -2110,6 +2126,18 @@ public class CarrierConfigManager { public static final String KEY_RTT_SUPPORTED_BOOL = "rtt_supported_bool"; /** + * Boolean flag indicating whether the carrier supports TTY. + * <p> + * Note that {@link #KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL} controls availability of TTY over + * VoLTE; if {@link #KEY_TTY_SUPPORTED_BOOL} is disabled, then + * {@link #KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL} is also implicitly disabled. + * <p> + * {@link TelecomManager#isTtySupported()} should be used to determine if a device supports TTY, + * and this carrier config key should be used to see if the current carrier supports it. + */ + public static final String KEY_TTY_SUPPORTED_BOOL = "tty_supported_bool"; + + /** * Indicates if the carrier supports auto-upgrading a call to RTT when receiving a call from a * RTT-supported device. * @hide @@ -2427,6 +2455,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; @@ -2723,6 +2787,7 @@ public class CarrierConfigManager { sDefaults.putBoolean(KEY_NOTIFY_VT_HANDOVER_TO_WIFI_FAILURE_BOOL, false); sDefaults.putStringArray(KEY_FILTERED_CNAP_NAMES_STRING_ARRAY, null); sDefaults.putBoolean(KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, false); + sDefaults.putBoolean(KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, false); sDefaults.putBoolean(KEY_STK_DISABLE_LAUNCH_BROWSER_BOOL, false); sDefaults.putBoolean(KEY_PERSIST_LPP_MODE_BOOL, true); sDefaults.putStringArray(KEY_CARRIER_WIFI_STRING_ARRAY, null); @@ -2749,6 +2814,7 @@ public class CarrierConfigManager { sDefaults.putStringArray(KEY_ROAMING_OPERATOR_STRING_ARRAY, null); sDefaults.putBoolean(KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL, false); sDefaults.putBoolean(KEY_RTT_SUPPORTED_BOOL, false); + sDefaults.putBoolean(KEY_TTY_SUPPORTED_BOOL, true); sDefaults.putBoolean(KEY_DISABLE_CHARGE_INDICATION_BOOL, false); sDefaults.putBoolean(KEY_SUPPORT_NO_REPLY_TIMER_FOR_CFNRY_BOOL, true); sDefaults.putStringArray(KEY_FEATURE_ACCESS_CODES_STRING_ARRAY, null); @@ -2800,9 +2866,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/CellIdentity.java b/telephony/java/android/telephony/CellIdentity.java index 6958d22bf5cc..7655834445b2 100644 --- a/telephony/java/android/telephony/CellIdentity.java +++ b/telephony/java/android/telephony/CellIdentity.java @@ -23,6 +23,7 @@ import android.os.Parcelable; import android.text.TextUtils; import java.util.Objects; +import java.util.UUID; /** * CellIdentity represents the identity of a unique cell. This is the base class for @@ -83,6 +84,13 @@ public abstract class CellIdentity implements Parcelable { mMncStr = null; log("invalid MNC format: " + mnc); } + + if ((mMccStr != null && mMncStr == null) || (mMccStr == null && mMncStr != null)) { + DebugEventReporter.sendEvent( + UUID.fromString("a3ab0b9d-f2aa-4baf-911d-7096c0d4645a"), + "CellIdentity Missing Half of PLMN ID"); + } + mAlphaLong = alphal; mAlphaShort = alphas; } diff --git a/telephony/java/android/telephony/CellIdentityNr.java b/telephony/java/android/telephony/CellIdentityNr.java index 856f08107fd7..b94ca9b3f927 100644 --- a/telephony/java/android/telephony/CellIdentityNr.java +++ b/telephony/java/android/telephony/CellIdentityNr.java @@ -81,18 +81,22 @@ 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; } /** - * Get the Absolute Radio Frequency Channel Number. + * Get the New Radio Absolute Radio Frequency Channel Number. + * + * Reference: 3GPP TS 38.101-1 section 5.4.2.1 NR-ARFCN and channel raster. + * Reference: 3GPP TS 38.101-2 section 5.4.2.1 NR-ARFCN and channel raster. + * * @return Integer value in range [0, 3279165] or {@link CellInfo#UNAVAILABLE} if unknown. */ - @Override - public int getChannelNumber() { + public int getNrarfcn() { return mNrArfcn; } diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java index 8ce5c54c810e..cdaf6ed7c6aa 100644 --- a/telephony/java/android/telephony/CellInfo.java +++ b/telephony/java/android/telephony/CellInfo.java @@ -22,7 +22,6 @@ import android.annotation.UnsupportedAppUsage; import android.hardware.radio.V1_4.CellInfo.Info; import android.os.Parcel; import android.os.Parcelable; -import android.os.SystemClock; import com.android.internal.annotations.VisibleForTesting; @@ -40,6 +39,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 */ @@ -320,9 +324,9 @@ public abstract class CellInfo implements Parcelable { } /** @hide */ - protected CellInfo(android.hardware.radio.V1_4.CellInfo ci) { + protected CellInfo(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { this.mRegistered = ci.isRegistered; - this.mTimeStamp = SystemClock.elapsedRealtimeNanos(); + this.mTimeStamp = timeStamp; this.mCellConnectionStatus = ci.connectionStatus; } @@ -353,14 +357,14 @@ public abstract class CellInfo implements Parcelable { } /** @hide */ - public static CellInfo create(android.hardware.radio.V1_4.CellInfo ci) { + public static CellInfo create(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { if (ci == null) return null; switch (ci.info.getDiscriminator()) { - case Info.hidl_discriminator.gsm: return new CellInfoGsm(ci); - case Info.hidl_discriminator.cdma: return new CellInfoCdma(ci); - case Info.hidl_discriminator.lte: return new CellInfoLte(ci); - case Info.hidl_discriminator.wcdma: return new CellInfoWcdma(ci); - case Info.hidl_discriminator.tdscdma: return new CellInfoTdscdma(ci); + case Info.hidl_discriminator.gsm: return new CellInfoGsm(ci, timeStamp); + case Info.hidl_discriminator.cdma: return new CellInfoCdma(ci, timeStamp); + case Info.hidl_discriminator.lte: return new CellInfoLte(ci, timeStamp); + case Info.hidl_discriminator.wcdma: return new CellInfoWcdma(ci, timeStamp); + case Info.hidl_discriminator.tdscdma: return new CellInfoTdscdma(ci, timeStamp); default: return null; } } diff --git a/telephony/java/android/telephony/CellInfoCdma.java b/telephony/java/android/telephony/CellInfoCdma.java index 4440108879f2..359c8bee8b8d 100644 --- a/telephony/java/android/telephony/CellInfoCdma.java +++ b/telephony/java/android/telephony/CellInfoCdma.java @@ -68,8 +68,8 @@ public final class CellInfoCdma extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoCdma(android.hardware.radio.V1_4.CellInfo ci) { - super(ci); + public CellInfoCdma(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { + super(ci, timeStamp); final android.hardware.radio.V1_2.CellInfoCdma cic = ci.info.cdma(); mCellIdentityCdma = new CellIdentityCdma(cic.cellIdentityCdma); mCellSignalStrengthCdma = diff --git a/telephony/java/android/telephony/CellInfoGsm.java b/telephony/java/android/telephony/CellInfoGsm.java index 248adfcb2d90..dc2779f5fb2a 100644 --- a/telephony/java/android/telephony/CellInfoGsm.java +++ b/telephony/java/android/telephony/CellInfoGsm.java @@ -64,8 +64,8 @@ public final class CellInfoGsm extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoGsm(android.hardware.radio.V1_4.CellInfo ci) { - super(ci); + public CellInfoGsm(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { + super(ci, timeStamp); final android.hardware.radio.V1_2.CellInfoGsm cig = ci.info.gsm(); mCellIdentityGsm = new CellIdentityGsm(cig.cellIdentityGsm); mCellSignalStrengthGsm = new CellSignalStrengthGsm(cig.signalStrengthGsm); diff --git a/telephony/java/android/telephony/CellInfoLte.java b/telephony/java/android/telephony/CellInfoLte.java index 8e8ce8a1f5de..0e9623dfab2b 100644 --- a/telephony/java/android/telephony/CellInfoLte.java +++ b/telephony/java/android/telephony/CellInfoLte.java @@ -71,8 +71,8 @@ public final class CellInfoLte extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoLte(android.hardware.radio.V1_4.CellInfo ci) { - super(ci); + public CellInfoLte(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { + super(ci, timeStamp); final android.hardware.radio.V1_4.CellInfoLte cil = ci.info.lte(); mCellIdentityLte = new CellIdentityLte(cil.base.cellIdentityLte); mCellSignalStrengthLte = new CellSignalStrengthLte(cil.base.signalStrengthLte); diff --git a/telephony/java/android/telephony/CellInfoTdscdma.java b/telephony/java/android/telephony/CellInfoTdscdma.java index 2ab38fb77a90..cb45e956a1cd 100644 --- a/telephony/java/android/telephony/CellInfoTdscdma.java +++ b/telephony/java/android/telephony/CellInfoTdscdma.java @@ -65,8 +65,8 @@ public final class CellInfoTdscdma extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoTdscdma(android.hardware.radio.V1_4.CellInfo ci) { - super(ci); + public CellInfoTdscdma(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { + super(ci, timeStamp); final android.hardware.radio.V1_2.CellInfoTdscdma cit = ci.info.tdscdma(); mCellIdentityTdscdma = new CellIdentityTdscdma(cit.cellIdentityTdscdma); mCellSignalStrengthTdscdma = new CellSignalStrengthTdscdma(cit.signalStrengthTdscdma); diff --git a/telephony/java/android/telephony/CellInfoWcdma.java b/telephony/java/android/telephony/CellInfoWcdma.java index 65e047077639..fe06c78c3a91 100644 --- a/telephony/java/android/telephony/CellInfoWcdma.java +++ b/telephony/java/android/telephony/CellInfoWcdma.java @@ -64,8 +64,8 @@ public final class CellInfoWcdma extends CellInfo implements Parcelable { } /** @hide */ - public CellInfoWcdma(android.hardware.radio.V1_4.CellInfo ci) { - super(ci); + public CellInfoWcdma(android.hardware.radio.V1_4.CellInfo ci, long timeStamp) { + super(ci, timeStamp); final android.hardware.radio.V1_2.CellInfoWcdma ciw = ci.info.wcdma(); mCellIdentityWcdma = new CellIdentityWcdma(ciw.cellIdentityWcdma); mCellSignalStrengthWcdma = new CellSignalStrengthWcdma(ciw.signalStrengthWcdma); 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/LocationAccessPolicy.java b/telephony/java/android/telephony/LocationAccessPolicy.java index 24db438580c9..b9d8eb637c34 100644 --- a/telephony/java/android/telephony/LocationAccessPolicy.java +++ b/telephony/java/android/telephony/LocationAccessPolicy.java @@ -42,7 +42,7 @@ import java.util.List; public final class LocationAccessPolicy { private static final String TAG = "LocationAccessPolicy"; private static final boolean DBG = false; - public static final int MAX_SDK_FOR_ANY_ENFORCEMENT = Build.VERSION_CODES.P; + public static final int MAX_SDK_FOR_ANY_ENFORCEMENT = Build.VERSION_CODES.CUR_DEVELOPMENT; public enum LocationPermissionResult { ALLOWED, @@ -174,22 +174,22 @@ public final class LocationAccessPolicy { boolean hasManifestPermission = checkManifestPermission(context, query.callingPid, query.callingUid, permissionToCheck); - int appOpMode = context.getSystemService(AppOpsManager.class) - .noteOpNoThrow(AppOpsManager.permissionToOpCode(permissionToCheck), - query.callingUid, query.callingPackage); - - if (hasManifestPermission && appOpMode == AppOpsManager.MODE_ALLOWED) { - // If the app did everything right, return without logging. - return LocationPermissionResult.ALLOWED; - } - - // If the app has the manifest permission but not the app-op permission, it means that - // it's aware of the requirement and the user denied permission explicitly. If we see - // this, don't let any of the overrides happen. if (hasManifestPermission) { - Log.i(TAG, query.callingPackage + " is aware of " + locationTypeForLog + " but the" - + " app-ops permission is specifically denied."); - return appOpsModeToPermissionResult(appOpMode); + // Only check the app op if the app has the permission. + int appOpMode = context.getSystemService(AppOpsManager.class) + .noteOpNoThrow(AppOpsManager.permissionToOpCode(permissionToCheck), + query.callingUid, query.callingPackage); + if (appOpMode == AppOpsManager.MODE_ALLOWED) { + // If the app did everything right, return without logging. + return LocationPermissionResult.ALLOWED; + } else { + // If the app has the manifest permission but not the app-op permission, it means + // that it's aware of the requirement and the user denied permission explicitly. + // If we see this, don't let any of the overrides happen. + Log.i(TAG, query.callingPackage + " is aware of " + locationTypeForLog + " but the" + + " app-ops permission is specifically denied."); + return appOpsModeToPermissionResult(appOpMode); + } } int minSdkVersion = Manifest.permission.ACCESS_FINE_LOCATION.equals(permissionToCheck) @@ -198,14 +198,14 @@ public final class LocationAccessPolicy { // If the app fails for some reason, see if it should be allowed to proceed. if (minSdkVersion > MAX_SDK_FOR_ANY_ENFORCEMENT) { String errorMsg = "Allowing " + query.callingPackage + " " + locationTypeForLog - + " because we're not enforcing API " + query.minSdkVersionForFine + " yet." + + " because we're not enforcing API " + minSdkVersion + " yet." + " Please fix this app because it will break in the future. Called from " + query.method; logError(context, errorMsg); return null; } else if (!isAppAtLeastSdkVersion(context, query.callingPackage, minSdkVersion)) { String errorMsg = "Allowing " + query.callingPackage + " " + locationTypeForLog - + " because it doesn't target API " + query.minSdkVersionForFine + " yet." + + " because it doesn't target API " + minSdkVersion + " yet." + " Please fix this app. Called from " + query.method; logError(context, errorMsg); return null; diff --git a/telephony/java/android/telephony/MbmsGroupCallSession.java b/telephony/java/android/telephony/MbmsGroupCallSession.java index 269cda13bd93..f1be31fa5477 100644 --- a/telephony/java/android/telephony/MbmsGroupCallSession.java +++ b/telephony/java/android/telephony/MbmsGroupCallSession.java @@ -141,7 +141,7 @@ public class MbmsGroupCallSession implements AutoCloseable { * Create a new {@link MbmsGroupCallSession} using the system default data subscription ID. * See {@link #create(Context, int, Executor, MbmsGroupCallSessionCallback)}. */ - public static MbmsGroupCallSession create(@NonNull Context context, + public static @Nullable MbmsGroupCallSession create(@NonNull Context context, @NonNull Executor executor, @NonNull MbmsGroupCallSessionCallback callback) { return create(context, SubscriptionManager.getDefaultSubscriptionId(), executor, callback); } 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..918bf60c9fa7 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; @@ -297,14 +292,16 @@ public class PhoneStateListener { public static final int LISTEN_PHONE_CAPABILITY_CHANGE = 0x00200000; /** - * Listen for changes to preferred data subId. - * See {@link SubscriptionManager#setPreferredDataSubId(int)} - * for more details. + * Listen for changes to active data subId. Active data subscription is + * the current subscription used to setup Cellular Internet data. For example, + * it could be the current active opportunistic subscription in use, or the + * subscription user selected as default data subscription in DSDS mode. * - * @see #onPreferredDataSubIdChanged - * @hide + * Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE + * READ_PHONE_STATE} + * @see #onActiveDataSubscriptionIdChanged */ - public static final int LISTEN_PREFERRED_DATA_SUBID_CHANGE = 0x00400000; + public static final int LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE = 0x00400000; /** * Listen for changes to the radio power state. @@ -328,12 +325,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 +348,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 +568,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 +581,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 +593,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 +605,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 } @@ -710,14 +706,13 @@ public class PhoneStateListener { } /** - * Callback invoked when preferred data subId changes. Requires - * the READ_PRIVILEGED_PHONE_STATE permission. - * @param subId the new preferred data subId. If it's INVALID_SUBSCRIPTION_ID, - * it means it's unset and defaultDataSub is used to determine which - * modem is preferred. - * @hide + * Callback invoked when active data subId changes. Requires + * the READ_PHONE_STATE permission. + * @param subId current subscription used to setup Cellular Internet data. + * For example, it could be the current active opportunistic subscription in use, + * or the subscription user selected as default data subscription in DSDS mode. */ - public void onPreferredDataSubIdChanged(int subId) { + public void onActiveDataSubscriptionIdChanged(int subId) { // default implementation empty } @@ -1001,12 +996,12 @@ public class PhoneStateListener { () -> mExecutor.execute(() -> psl.onCallAttributesChanged(callAttributes))); } - public void onPreferredDataSubIdChanged(int subId) { + public void onActiveDataSubIdChanged(int subId) { PhoneStateListener psl = mPhoneStateListenerWeakRef.get(); if (psl == null) return; Binder.withCleanCallingIdentity( - () -> mExecutor.execute(() -> psl.onPreferredDataSubIdChanged(subId))); + () -> mExecutor.execute(() -> psl.onActiveDataSubscriptionIdChanged(subId))); } public void onImsCallDisconnectCauseChanged(ImsReasonInfo disconnectCause) { 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/SmsManager.java b/telephony/java/android/telephony/SmsManager.java index d777bf123b67..c39f1f5613b0 100644 --- a/telephony/java/android/telephony/SmsManager.java +++ b/telephony/java/android/telephony/SmsManager.java @@ -316,6 +316,7 @@ public final class SmsManager { * <code>RESULT_ERROR_GENERIC_FAILURE</code><br> * <code>RESULT_ERROR_RADIO_OFF</code><br> * <code>RESULT_ERROR_NULL_PDU</code><br> + * <code>RESULT_ERROR_NO_SERVICE</code><br> * For <code>RESULT_ERROR_GENERIC_FAILURE</code> the sentIntent may include * the extra "errorCode" containing a radio technology specific value, * generally only useful for troubleshooting.<br> @@ -365,19 +366,12 @@ public final class SmsManager { if (DBG) { Log.d(TAG, "for subId: " + subId + ", subscription-info: " + info); } - if (info == null) { - // There is no subscription for the given subId. That can only mean one thing: - // the caller is using a SmsManager instance with an obsolete subscription id. - // That is most probably because caller didn't invalidate SmsManager instance - // for an already deleted subscription id. - Log.e(TAG, "subId: " + subId + " for this SmsManager instance is obsolete."); - sendErrorInPendingIntent(sentIntent, SmsManager.RESULT_ERROR_NO_SERVICE); - } /* If the Subscription associated with this SmsManager instance belongs to a remote-sim, * then send the message thru the remote-sim subscription. */ - if (info.getSubscriptionType() == SubscriptionManager.SUBSCRIPTION_TYPE_REMOTE_SIM) { + if (info != null + && info.getSubscriptionType() == SubscriptionManager.SUBSCRIPTION_TYPE_REMOTE_SIM) { if (DBG) Log.d(TAG, "sending message thru bluetooth"); sendTextMessageBluetooth(destinationAddress, scAddress, text, sentIntent, deliveryIntent, info); @@ -385,8 +379,10 @@ public final class SmsManager { } try { + // If the subscription is invalid or default, we will use the default phone to send the + // SMS and possibly fail later in the SMS sending process. ISms iccISms = getISmsServiceOrThrow(); - iccISms.sendTextForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), + iccISms.sendTextForSubscriber(subId, ActivityThread.currentPackageName(), destinationAddress, scAddress, text, sentIntent, deliveryIntent, persistMessage); @@ -459,6 +455,9 @@ public final class SmsManager { } private void sendErrorInPendingIntent(PendingIntent intent, int errorCode) { + if (intent == null) { + return; + } try { intent.send(errorCode); } catch (PendingIntent.CanceledException e) { diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java index 2a73a5cdef54..2aa4768d3f00 100644 --- a/telephony/java/android/telephony/SmsMessage.java +++ b/telephony/java/android/telephony/SmsMessage.java @@ -606,7 +606,7 @@ public class SmsMessage { /** * Returns the message body as a String, if it exists and is text based. - * @return message body is there is one, otherwise null + * @return message body if there is one, otherwise null */ public String getMessageBody() { return mWrappedSmsMessage.getMessageBody(); diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java index 443f90844c50..58f12e2c427a 100644 --- a/telephony/java/android/telephony/SubscriptionInfo.java +++ b/telephony/java/android/telephony/SubscriptionInfo.java @@ -425,14 +425,14 @@ public class SubscriptionInfo implements Parcelable { /** * @return The MCC, as a string. */ - public String getMccString() { + public @Nullable String getMccString() { return this.mMcc; } /** * @return The MNC, as a string. */ - public String getMncString() { + public @Nullable String getMncString() { return this.mMnc; } diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 5b9e23228dcb..17a4fd8867d9 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -59,6 +59,7 @@ import android.util.DisplayMetrics; import android.util.Log; import com.android.internal.telephony.IOnSubscriptionsChangedListener; +import com.android.internal.telephony.ISetOpportunisticDataCallback; import com.android.internal.telephony.ISub; import com.android.internal.telephony.ITelephonyRegistry; import com.android.internal.telephony.PhoneConstants; @@ -72,6 +73,7 @@ import java.util.List; import java.util.Locale; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -149,6 +151,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 +170,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 +188,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 +205,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 +224,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 +242,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"); @@ -2577,14 +2585,38 @@ public class SubscriptionManager { * {@link SubscriptionManager#DEFAULT_SUBSCRIPTION_ID}, it means * it's unset and {@link SubscriptionManager#getDefaultDataSubscriptionId()} * is used to determine which modem is preferred. + * @param needValidation whether validation is needed before switch happens. + * @param executor The executor of where the callback will execute. + * @param callback Callback will be triggered once it succeeds or failed. + * See {@link TelephonyManager.SetOpportunisticSubscriptionResult} + * for more details. Pass null if don't care about the result. + * * @hide * */ + @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) - public void setPreferredDataSubscriptionId(int subId) { + public void setPreferredDataSubscriptionId(int subId, boolean needValidation, + @NonNull @CallbackExecutor Executor executor, Consumer<Integer> callback) { if (VDBG) logd("[setPreferredDataSubscriptionId]+ subId:" + subId); - setSubscriptionPropertyHelper(DEFAULT_SUBSCRIPTION_ID, "setPreferredDataSubscriptionId", - (iSub)-> iSub.setPreferredDataSubscriptionId(subId)); + try { + ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); + if (iSub == null) return; + + ISetOpportunisticDataCallback callbackStub = new ISetOpportunisticDataCallback.Stub() { + @Override + public void onComplete(int result) { + Binder.withCleanCallingIdentity(() -> executor.execute(() -> { + if (callback != null) { + callback.accept(result); + } + })); + } + }; + iSub.setPreferredDataSubscriptionId(subId, needValidation, callbackStub); + } catch (RemoteException ex) { + // ignore it + } } /** diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 1433b2ac9280..6e762b3a91cd 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -363,27 +363,26 @@ public class TelephonyManager { * Returns 3 for Tri standby mode.(Tri SIM functionality) */ public int getPhoneCount() { - int phoneCount = 0; - - // check for voice and data support, 0 if not supported - if (!isVoiceCapable() && !isSmsCapable()) { - ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService( - Context.CONNECTIVITY_SERVICE); - if (cm != null) { - if (!cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)) { - return phoneCount; + int phoneCount = 1; + switch (getMultiSimConfiguration()) { + case UNKNOWN: + ConnectivityManager cm = mContext == null ? null : (ConnectivityManager) mContext + .getSystemService(Context.CONNECTIVITY_SERVICE); + // check for voice and data support, 0 if not supported + if (!isVoiceCapable() && !isSmsCapable() && cm != null + && !cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)) { + phoneCount = 0; + } else { + phoneCount = 1; } - } - } - - phoneCount = 1; - try { - ITelephony telephony = getITelephony(); - if (telephony != null) { - phoneCount = telephony.getNumOfActiveSims(); - } - } catch (RemoteException ex) { - Rlog.e(TAG, "getNumOfActiveSims RemoteException", ex); + break; + case DSDS: + case DSDA: + phoneCount = PhoneConstants.MAX_PHONE_COUNT_DUAL_SIM; + break; + case TSTS: + phoneCount = PhoneConstants.MAX_PHONE_COUNT_TRI_SIM; + break; } return phoneCount; } @@ -1345,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 @@ -1363,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 @@ -1523,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()); } @@ -1533,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; @@ -1585,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()); } @@ -1595,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; @@ -1971,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(); @@ -2737,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} @@ -3182,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(); @@ -4449,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() { @@ -5697,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. */ @@ -5954,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() { @@ -6805,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) { @@ -6880,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) @@ -6897,7 +6927,7 @@ public class TelephonyManager { } catch (NullPointerException ex) { Rlog.e(TAG, "hasMatchedTetherApnSetting NPE", ex); } - return 2; + return false; } @@ -8641,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) { } @@ -9022,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) { @@ -9671,7 +9704,7 @@ public class TelephonyManager { ITelephony telephony = getITelephony(); if (telephony != null) { return telephony.getNumberOfModemsWithSimultaneousDataConnections( - getSubId(), mContext.getOpPackageName()); + getSubId(), getOpPackageName()); } } catch (RemoteException ex) { // This could happen if binder process crashes. @@ -10076,6 +10109,29 @@ public class TelephonyManager { return false; } + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(prefix = {"SET_OPPORTUNISTIC_SUB"}, value = { + SET_OPPORTUNISTIC_SUB_SUCCESS, + SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED, + SET_OPPORTUNISTIC_SUB_INVALID_PARAMETER}) + public @interface SetOpportunisticSubscriptionResult {} + + /** + * No error. Operation succeeded. + */ + public static final int SET_OPPORTUNISTIC_SUB_SUCCESS = 0; + + /** + * Validation failed when trying to switch to preferred subscription. + */ + public static final int SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED = 1; + + /** + * The parameter passed in is invalid. + */ + public static final int SET_OPPORTUNISTIC_SUB_INVALID_PARAMETER = 2; + /** * Set preferred opportunistic data subscription id. * @@ -10220,24 +10276,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; } /** @@ -10266,18 +10323,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) { @@ -10310,4 +10365,28 @@ public class TelephonyManager { } return false; } + + /** + * Retrieve the Radio HAL Version for this device. + * + * Get the HAL version for the IRadio interface for test purposes. + * + * @return a Pair of (major version, minor version) or (-1,-1) if unknown. + * + * @hide + */ + @TestApi + public Pair<Integer, Integer> getRadioHalVersion() { + try { + ITelephony service = getITelephony(); + if (service != null) { + int version = service.getRadioHalVersion(); + if (version == -1) return new Pair<Integer, Integer>(-1, -1); + return new Pair<Integer, Integer>(version / 100, version % 100); + } + } catch (RemoteException e) { + Log.e(TAG, "getRadioHalVersion() RemoteException", e); + } + return new Pair<Integer, Integer>(-1, -1); + } } 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..16078175382d 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. @@ -1820,12 +1868,24 @@ public class ApnSetting implements Parcelable { * * @param carrierId the carrier id to set for this APN */ + @NonNull public Builder setCarrierId(int carrierId) { this.mCarrierId = carrierId; return this; } /** + * 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 +1893,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/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java index 73f055649b3f..907dbbd20403 100644 --- a/telephony/java/android/telephony/ims/ImsCallProfile.java +++ b/telephony/java/android/telephony/ims/ImsCallProfile.java @@ -543,7 +543,8 @@ public final class ImsCallProfile implements Parcelable { + ", emergencyServiceCategories=" + mEmergencyServiceCategories + ", emergencyUrns=" + mEmergencyUrns + ", emergencyCallRouting=" + mEmergencyCallRouting - + ", emergencyCallTesting=" + mEmergencyCallTesting + " }"; + + ", emergencyCallTesting=" + mEmergencyCallTesting + + ", hasKnownUserIntentEmergency=" + mHasKnownUserIntentEmergency + " }"; } @Override @@ -562,6 +563,7 @@ public final class ImsCallProfile implements Parcelable { out.writeStringList(mEmergencyUrns); out.writeInt(mEmergencyCallRouting); out.writeBoolean(mEmergencyCallTesting); + out.writeBoolean(mHasKnownUserIntentEmergency); } private void readFromParcel(Parcel in) { @@ -573,6 +575,7 @@ public final class ImsCallProfile implements Parcelable { mEmergencyUrns = in.createStringArrayList(); mEmergencyCallRouting = in.readInt(); mEmergencyCallTesting = in.readBoolean(); + mHasKnownUserIntentEmergency = in.readBoolean(); } public static final Creator<ImsCallProfile> CREATOR = new Creator<ImsCallProfile>() { 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/ImsException.java b/telephony/java/android/telephony/ims/ImsException.java index ac4d17a0ce65..bdaad5bffe5e 100644 --- a/telephony/java/android/telephony/ims/ImsException.java +++ b/telephony/java/android/telephony/ims/ImsException.java @@ -86,7 +86,8 @@ public class ImsException extends Exception { * @param message an optional message to detail the error condition more specifically. * @param cause the {@link Throwable} that caused this {@link ImsException} to be created. */ - public ImsException(@Nullable String message, @ImsErrorCode int code, Throwable cause) { + public ImsException(@Nullable String message, @ImsErrorCode int code, + @Nullable Throwable cause) { super(getMessage(message, code), cause); mCode = code; } diff --git a/telephony/java/android/telephony/ims/ImsExternalCallState.java b/telephony/java/android/telephony/ims/ImsExternalCallState.java index f2d0cbf13cc9..c56915d131f3 100644 --- a/telephony/java/android/telephony/ims/ImsExternalCallState.java +++ b/telephony/java/android/telephony/ims/ImsExternalCallState.java @@ -17,6 +17,8 @@ package android.telephony.ims; import android.annotation.IntDef; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SystemApi; import android.net.Uri; import android.os.Parcel; @@ -124,9 +126,9 @@ public final class ImsExternalCallState implements Parcelable { * @param callType The type of external call. * @param isCallheld A flag determining if the external connection is currently held. */ - public ImsExternalCallState(String callId, Uri address, Uri localAddress, - boolean isPullable, @ExternalCallState int callState, @ExternalCallType int callType, - boolean isCallheld) { + public ImsExternalCallState(@NonNull String callId, @NonNull Uri address, + @Nullable Uri localAddress, boolean isPullable, @ExternalCallState int callState, + @ExternalCallType int callType, boolean isCallheld) { mCallId = getIdForString(callId); mAddress = address; mLocalAddress = localAddress; @@ -184,14 +186,14 @@ public final class ImsExternalCallState implements Parcelable { return mCallId; } - public Uri getAddress() { + public @NonNull Uri getAddress() { return mAddress; } /** * @return A {@link Uri} containing the local address from the Multiendpoint Dialog Information. */ - public Uri getLocalAddress() { + public @Nullable Uri getLocalAddress() { return mLocalAddress; } diff --git a/telephony/java/android/telephony/ims/ImsMmTelManager.java b/telephony/java/android/telephony/ims/ImsMmTelManager.java index eb99d5dcaaeb..58ddf21888fc 100644 --- a/telephony/java/android/telephony/ims/ImsMmTelManager.java +++ b/telephony/java/android/telephony/ims/ImsMmTelManager.java @@ -21,6 +21,7 @@ import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.content.Context; @@ -139,7 +140,7 @@ public class ImsMmTelManager { if (mLocalCallback == null) return; Binder.withCleanCallingIdentity(() -> - mExecutor.execute(() -> mLocalCallback.onDeregistered(info))); + mExecutor.execute(() -> mLocalCallback.onUnregistered(info))); } @Override @@ -199,7 +200,7 @@ public class ImsMmTelManager { * * @param info the {@link ImsReasonInfo} associated with why registration was disconnected. */ - public void onDeregistered(ImsReasonInfo info) { + public void onUnregistered(@Nullable ImsReasonInfo info) { } /** @@ -211,7 +212,7 @@ public class ImsMmTelManager { * transport type that has failed to handover registration to. * @param info A {@link ImsReasonInfo} that identifies the reason for failure. */ - public void onTechnologyChangeFailed(int imsTransportType, ImsReasonInfo info) { + public void onTechnologyChangeFailed(int imsTransportType, @Nullable ImsReasonInfo info) { } /** @@ -223,7 +224,7 @@ public class ImsMmTelManager { * subscription. * @hide */ - public void onSubscriberAssociatedUriChanged(Uri[] uris) { + public void onSubscriberAssociatedUriChanged(@Nullable Uri[] uris) { } /**@hide*/ @@ -294,7 +295,7 @@ public class ImsMmTelManager { * @param capabilities The new availability of the capabilities. */ public void onCapabilitiesStatusChanged( - MmTelFeature.MmTelCapabilities capabilities) { + @NonNull MmTelFeature.MmTelCapabilities capabilities) { } /**@hide*/ @@ -319,7 +320,7 @@ public class ImsMmTelManager { * @see android.telephony.SubscriptionManager#getActiveSubscriptionInfoList() * @throws IllegalArgumentException if the subscription is invalid. */ - public static ImsMmTelManager createForSubscriptionId(int subId) { + public static @NonNull ImsMmTelManager createForSubscriptionId(int subId) { if (!SubscriptionManager.isValidSubscriptionId(subId)) { throw new IllegalArgumentException("Invalid subscription ID"); } @@ -357,7 +358,7 @@ public class ImsMmTelManager { * reason. */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) - public void registerImsRegistrationCallback(@CallbackExecutor Executor executor, + public void registerImsRegistrationCallback(@NonNull @CallbackExecutor Executor executor, @NonNull RegistrationCallback c) throws ImsException { if (c == null) { throw new IllegalArgumentException("Must include a non-null RegistrationCallback."); @@ -485,7 +486,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 +520,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 +590,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 +606,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 +617,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 +634,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 +646,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 +664,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 +683,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 +701,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 +740,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/ProvisioningManager.java b/telephony/java/android/telephony/ims/ProvisioningManager.java index 204891b7b86e..d12cda8a30a4 100644 --- a/telephony/java/android/telephony/ims/ProvisioningManager.java +++ b/telephony/java/android/telephony/ims/ProvisioningManager.java @@ -19,6 +19,7 @@ package android.telephony.ims; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.WorkerThread; @@ -153,7 +154,7 @@ public class ProvisioningManager { * @param item the IMS provisioning key constant, as defined by the OEM. * @param value the new String value of the IMS configuration constant. */ - public void onProvisioningStringChanged(int item, String value) { + public void onProvisioningStringChanged(int item, @NonNull String value) { // Base Implementation } @@ -177,7 +178,7 @@ public class ProvisioningManager { * @see android.telephony.SubscriptionManager#getActiveSubscriptionInfoList() * @throws IllegalArgumentException if the subscription is invalid. */ - public static ProvisioningManager createForSubscriptionId(int subId) { + public static @NonNull ProvisioningManager createForSubscriptionId(int subId) { if (!SubscriptionManager.isValidSubscriptionId(subId)) { throw new IllegalArgumentException("Invalid subscription ID"); } @@ -206,7 +207,7 @@ public class ProvisioningManager { * reason. */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) - public void registerProvisioningChangedCallback(@CallbackExecutor Executor executor, + public void registerProvisioningChangedCallback(@NonNull @CallbackExecutor Executor executor, @NonNull Callback callback) throws ImsException { callback.setExecutor(executor); try { @@ -271,7 +272,7 @@ public class ProvisioningManager { */ @WorkerThread @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) - public String getProvisioningStringValue(int key) { + public @Nullable String getProvisioningStringValue(int key) { try { return getITelephony().getImsProvisioningString(mSubId, key); } catch (RemoteException e) { @@ -313,7 +314,7 @@ public class ProvisioningManager { @WorkerThread @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) public @ImsConfigImplBase.SetConfigResult int setProvisioningStringValue(int key, - String value) { + @NonNull String value) { try { return getITelephony().setImsProvisioningString(mSubId, key, value); } catch (RemoteException e) { @@ -333,6 +334,7 @@ public class ProvisioningManager { * @see CarrierConfigManager#KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL * @param isProvisioned true if the device is provisioned for UT over IMS, false otherwise. */ + @WorkerThread @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) public void setProvisioningStatusForCapability( @MmTelFeature.MmTelCapabilities.MmTelCapability int capability, @@ -359,6 +361,7 @@ public class ProvisioningManager { * provisioning, false if the capability does require provisioning and has not been * provisioned yet. */ + @WorkerThread @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean getProvisioningStatusForCapability( @MmTelFeature.MmTelCapabilities.MmTelCapability int capability, 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 df62277f9ac1..994b27ab7405 100644 --- a/telephony/java/android/telephony/ims/RcsEvent.java +++ b/telephony/java/android/telephony/ims/RcsEvent.java @@ -15,16 +15,13 @@ */ package android.telephony.ims; -import android.os.Parcel; - /** * The base class for events that can happen on {@link RcsParticipant}s and {@link RcsThread}s. + * + * @hide */ public abstract class RcsEvent { - /** - * @hide - */ - protected final long mTimestamp; + private final long mTimestamp; protected RcsEvent(long timestamp) { mTimestamp = timestamp; @@ -44,18 +41,4 @@ public abstract class RcsEvent { * @hide */ abstract void persist() throws RcsMessageStoreException; - - /** - * @hide - */ - RcsEvent(Parcel in) { - mTimestamp = in.readLong(); - } - - /** - * @hide - */ - public void writeToParcel(Parcel dest, int flags) { - dest.writeLong(mTimestamp); - } } diff --git a/telephony/java/android/telephony/ims/RcsEvent.aidl b/telephony/java/android/telephony/ims/RcsEventDescriptor.aidl index 08974e0a771c..ab1c55ec984f 100644 --- a/telephony/java/android/telephony/ims/RcsEvent.aidl +++ b/telephony/java/android/telephony/ims/RcsEventDescriptor.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsEvent; +parcelable RcsEventDescriptor; diff --git a/telephony/java/android/telephony/ims/RcsEventDescriptor.java b/telephony/java/android/telephony/ims/RcsEventDescriptor.java new file mode 100644 index 000000000000..8e3f6cd4d889 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsEventDescriptor.java @@ -0,0 +1,56 @@ +/* + * 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.telephony.ims; + +import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.android.internal.annotations.VisibleForTesting; + +/** + * @hide - used only for internal communication with the ircs service + */ +public abstract class RcsEventDescriptor implements Parcelable { + protected final long mTimestamp; + + RcsEventDescriptor(long timestamp) { + mTimestamp = timestamp; + } + + /** + * Creates an RcsEvent based on this RcsEventDescriptor. Overriding this method practically + * allows an injection point for RcsEvent dependencies outside of the values contained in the + * descriptor. + */ + @VisibleForTesting(visibility = PROTECTED) + public abstract RcsEvent createRcsEvent(); + + RcsEventDescriptor(Parcel in) { + mTimestamp = in.readLong(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(mTimestamp); + } + + @Override + public int describeContents() { + return 0; + } +} 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 c30e4ccd7aa2..d6347e3ec693 100644 --- a/telephony/java/android/telephony/ims/RcsEventQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsEventQueryResult.java @@ -16,17 +16,16 @@ package android.telephony.ims; -import android.os.Parcel; -import android.os.Parcelable; - 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 final class RcsEventQueryResult implements Parcelable { +public class RcsEventQueryResult { private RcsQueryContinuationToken mContinuationToken; private List<RcsEvent> mEvents; @@ -60,30 +59,4 @@ public final class RcsEventQueryResult implements Parcelable { public List<RcsEvent> getEvents() { return mEvents; } - - private RcsEventQueryResult(Parcel in) { - mContinuationToken = in.readParcelable(RcsQueryContinuationToken.class.getClassLoader()); - } - - public static final Creator<RcsEventQueryResult> CREATOR = new Creator<RcsEventQueryResult>() { - @Override - public RcsEventQueryResult createFromParcel(Parcel in) { - return new RcsEventQueryResult(in); - } - - @Override - public RcsEventQueryResult[] newArray(int size) { - return new RcsEventQueryResult[size]; - } - }; - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeParcelable(mContinuationToken, flags); - } } diff --git a/telephony/java/android/telephony/ims/RcsEventQueryResult.aidl b/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.aidl index 7d133350973c..0beaaab4f639 100644 --- a/telephony/java/android/telephony/ims/RcsEventQueryResult.aidl +++ b/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsEventQueryResult; +parcelable RcsEventQueryResultDescriptor; diff --git a/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java b/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java new file mode 100644 index 000000000000..bba56d319f25 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsEventQueryResultDescriptor.java @@ -0,0 +1,79 @@ +/* + * 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.telephony.ims; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Contains the raw data backing a {@link RcsEventQueryResult}. + * + * @hide - used only for internal communication with the ircs service + */ +public class RcsEventQueryResultDescriptor implements Parcelable { + private final RcsQueryContinuationToken mContinuationToken; + private final List<RcsEventDescriptor> mEvents; + + public RcsEventQueryResultDescriptor( + RcsQueryContinuationToken continuationToken, + List<RcsEventDescriptor> events) { + mContinuationToken = continuationToken; + mEvents = events; + } + + protected RcsEventQueryResult getRcsEventQueryResult() { + List<RcsEvent> rcsEvents = mEvents.stream() + .map(RcsEventDescriptor::createRcsEvent) + .collect(Collectors.toList()); + + return new RcsEventQueryResult(mContinuationToken, rcsEvents); + } + + protected RcsEventQueryResultDescriptor(Parcel in) { + mContinuationToken = in.readParcelable(RcsQueryContinuationToken.class.getClassLoader()); + mEvents = new LinkedList<>(); + in.readList(mEvents, null); + } + + public static final Creator<RcsEventQueryResultDescriptor> CREATOR = + new Creator<RcsEventQueryResultDescriptor>() { + @Override + public RcsEventQueryResultDescriptor createFromParcel(Parcel in) { + return new RcsEventQueryResultDescriptor(in); + } + + @Override + public RcsEventQueryResultDescriptor[] newArray(int size) { + return new RcsEventQueryResultDescriptor[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeParcelable(mContinuationToken, flags); + dest.writeList(mEvents); + } +} 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 609b1740a536..4a6b963a143a 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java @@ -16,10 +16,11 @@ package android.telephony.ims; import android.annotation.NonNull; -import android.os.Parcel; /** * An event that happened on an {@link RcsGroupThread}. + * + * @hide */ public abstract class RcsGroupThreadEvent extends RcsEvent { private final int mRcsGroupThreadId; @@ -47,22 +48,4 @@ public abstract class RcsGroupThreadEvent extends RcsEvent { public RcsParticipant getOriginatingParticipant() { return new RcsParticipant(mOriginatingParticipantId); } - - /** - * @hide - */ - RcsGroupThreadEvent(Parcel in) { - super(in); - mRcsGroupThreadId = in.readInt(); - mOriginatingParticipantId = in.readInt(); - } - - /** - * @hide - */ - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeInt(mRcsGroupThreadId); - dest.writeInt(mOriginatingParticipantId); - } } diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadEventDescriptor.aidl index 77a23722f080..6299d8a5eb71 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadEvent.aidl +++ b/telephony/java/android/telephony/ims/RcsGroupThreadEventDescriptor.aidl @@ -16,4 +16,4 @@ package android.telephony.ims; -parcelable RcsGroupThreadEvent; +parcelable RcsGroupThreadEventDescriptor; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadEventDescriptor.java new file mode 100644 index 000000000000..662a264b6d67 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadEventDescriptor.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.telephony.ims; + +import android.os.Parcel; + +/** + * @hide - used only for internal communication with the ircs service + */ +public abstract class RcsGroupThreadEventDescriptor extends RcsEventDescriptor { + protected final int mRcsGroupThreadId; + protected final int mOriginatingParticipantId; + + RcsGroupThreadEventDescriptor(long timestamp, int rcsGroupThreadId, + int originatingParticipantId) { + super(timestamp); + mRcsGroupThreadId = rcsGroupThreadId; + mOriginatingParticipantId = originatingParticipantId; + } + + RcsGroupThreadEventDescriptor(Parcel in) { + super(in); + mRcsGroupThreadId = in.readInt(); + mOriginatingParticipantId = in.readInt(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(mRcsGroupThreadId); + dest.writeInt(mOriginatingParticipantId); + } +} diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java index e768439d6cfa..3c6c74fac8e2 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java @@ -18,15 +18,14 @@ package android.telephony.ims; import android.annotation.NonNull; import android.annotation.Nullable; import android.net.Uri; -import android.os.Parcel; -import android.os.Parcelable; /** * 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 implements - Parcelable { +public final class RcsGroupThreadIconChangedEvent extends RcsGroupThreadEvent { private final Uri mNewIcon; /** @@ -48,15 +47,6 @@ public final class RcsGroupThreadIconChangedEvent extends RcsGroupThreadEvent im } /** - * @hide - internal constructor for queries - */ - public RcsGroupThreadIconChangedEvent(long timestamp, int rcsGroupThreadId, - int originatingParticipantId, @Nullable Uri newIcon) { - super(timestamp, rcsGroupThreadId, originatingParticipantId); - mNewIcon = newIcon; - } - - /** * @return Returns the {@link Uri} to the icon of the {@link RcsGroupThread} after this * {@link RcsGroupThreadIconChangedEvent} occured. */ @@ -77,33 +67,4 @@ public final class RcsGroupThreadIconChangedEvent extends RcsGroupThreadEvent im getTimestamp(), getRcsGroupThread().getThreadId(), getOriginatingParticipant().getId(), mNewIcon)); } - - public static final Creator<RcsGroupThreadIconChangedEvent> CREATOR = - new Creator<RcsGroupThreadIconChangedEvent>() { - @Override - public RcsGroupThreadIconChangedEvent createFromParcel(Parcel in) { - return new RcsGroupThreadIconChangedEvent(in); - } - - @Override - public RcsGroupThreadIconChangedEvent[] newArray(int size) { - return new RcsGroupThreadIconChangedEvent[size]; - } - }; - - private RcsGroupThreadIconChangedEvent(Parcel in) { - super(in); - mNewIcon = in.readParcelable(Uri.class.getClassLoader()); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeParcelable(mNewIcon, flags); - } } diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.aidl index daea7922f3df..4bcc5a043acd 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.aidl +++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.aidl @@ -16,4 +16,4 @@ package android.telephony.ims; -parcelable RcsGroupThreadIconChangedEvent; +parcelable RcsGroupThreadIconChangedEventDescriptor; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java new file mode 100644 index 000000000000..b7fe4b230d31 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEventDescriptor.java @@ -0,0 +1,73 @@ +/* + * 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.telephony.ims; + +import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; + +import android.annotation.Nullable; +import android.net.Uri; +import android.os.Parcel; + +import com.android.internal.annotations.VisibleForTesting; + +/** + * @hide - used only for internal communication with the ircs service + */ +public class RcsGroupThreadIconChangedEventDescriptor extends RcsGroupThreadEventDescriptor { + private final Uri mNewIcon; + + public RcsGroupThreadIconChangedEventDescriptor(long timestamp, int rcsGroupThreadId, + int originatingParticipantId, @Nullable Uri newIcon) { + super(timestamp, rcsGroupThreadId, originatingParticipantId); + mNewIcon = newIcon; + } + + @Override + @VisibleForTesting(visibility = PROTECTED) + public RcsGroupThreadIconChangedEvent createRcsEvent() { + return new RcsGroupThreadIconChangedEvent(mTimestamp, new RcsGroupThread(mRcsGroupThreadId), + new RcsParticipant(mOriginatingParticipantId), mNewIcon); + } + + public static final Creator<RcsGroupThreadIconChangedEventDescriptor> CREATOR = + new Creator<RcsGroupThreadIconChangedEventDescriptor>() { + @Override + public RcsGroupThreadIconChangedEventDescriptor createFromParcel(Parcel in) { + return new RcsGroupThreadIconChangedEventDescriptor(in); + } + + @Override + public RcsGroupThreadIconChangedEventDescriptor[] newArray(int size) { + return new RcsGroupThreadIconChangedEventDescriptor[size]; + } + }; + + protected RcsGroupThreadIconChangedEventDescriptor(Parcel in) { + super(in); + mNewIcon = in.readParcelable(Uri.class.getClassLoader()); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeParcelable(mNewIcon, flags); + } +} diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java index 02030bc6a2ec..54032536601e 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java @@ -17,15 +17,14 @@ package android.telephony.ims; import android.annotation.NonNull; import android.annotation.Nullable; -import android.os.Parcel; -import android.os.Parcelable; /** * 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 implements - Parcelable { +public final class RcsGroupThreadNameChangedEvent extends RcsGroupThreadEvent { private final String mNewName; /** @@ -47,15 +46,6 @@ public final class RcsGroupThreadNameChangedEvent extends RcsGroupThreadEvent im } /** - * @hide - internal constructor for queries - */ - public RcsGroupThreadNameChangedEvent(long timestamp, int rcsGroupThreadId, - int originatingParticipantId, @Nullable String newName) { - super(timestamp, rcsGroupThreadId, originatingParticipantId); - mNewName = newName; - } - - /** * @return Returns the name of this {@link RcsGroupThread} after this * {@link RcsGroupThreadNameChangedEvent} happened. */ @@ -75,33 +65,4 @@ public final class RcsGroupThreadNameChangedEvent extends RcsGroupThreadEvent im getTimestamp(), getRcsGroupThread().getThreadId(), getOriginatingParticipant().getId(), mNewName)); } - - public static final Creator<RcsGroupThreadNameChangedEvent> CREATOR = - new Creator<RcsGroupThreadNameChangedEvent>() { - @Override - public RcsGroupThreadNameChangedEvent createFromParcel(Parcel in) { - return new RcsGroupThreadNameChangedEvent(in); - } - - @Override - public RcsGroupThreadNameChangedEvent[] newArray(int size) { - return new RcsGroupThreadNameChangedEvent[size]; - } - }; - - private RcsGroupThreadNameChangedEvent(Parcel in) { - super(in); - mNewName = in.readString(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeString(mNewName); - } } diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.aidl index 3ed9bd11dc70..480e86b73ea9 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.aidl +++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsGroupThreadNameChangedEvent; +parcelable RcsGroupThreadNameChangedEventDescriptor; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java new file mode 100644 index 000000000000..4ec641f7a15f --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEventDescriptor.java @@ -0,0 +1,75 @@ +/* + * 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.telephony.ims; + +import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; + +import android.annotation.Nullable; +import android.os.Parcel; + +import com.android.internal.annotations.VisibleForTesting; + +/** + * @hide - used only for internal communication with the ircs service + */ +public class RcsGroupThreadNameChangedEventDescriptor extends RcsGroupThreadEventDescriptor { + private final String mNewName; + + public RcsGroupThreadNameChangedEventDescriptor(long timestamp, int rcsGroupThreadId, + int originatingParticipantId, @Nullable String newName) { + super(timestamp, rcsGroupThreadId, originatingParticipantId); + mNewName = newName; + } + + @Override + @VisibleForTesting(visibility = PROTECTED) + public RcsGroupThreadNameChangedEvent createRcsEvent() { + return new RcsGroupThreadNameChangedEvent( + mTimestamp, + new RcsGroupThread(mRcsGroupThreadId), + new RcsParticipant(mOriginatingParticipantId), + mNewName); + } + + public static final Creator<RcsGroupThreadNameChangedEventDescriptor> CREATOR = + new Creator<RcsGroupThreadNameChangedEventDescriptor>() { + @Override + public RcsGroupThreadNameChangedEventDescriptor createFromParcel(Parcel in) { + return new RcsGroupThreadNameChangedEventDescriptor(in); + } + + @Override + public RcsGroupThreadNameChangedEventDescriptor[] newArray(int size) { + return new RcsGroupThreadNameChangedEventDescriptor[size]; + } + }; + + protected RcsGroupThreadNameChangedEventDescriptor(Parcel in) { + super(in); + mNewName = in.readString(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeString(mNewName); + } +} diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java index 0d1a5730f0a0..48be479a1ac6 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java @@ -16,16 +16,15 @@ package android.telephony.ims; import android.annotation.NonNull; -import android.os.Parcel; -import android.os.Parcelable; /** * 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 implements - Parcelable { - private final int mJoinedParticipantId; +public final class RcsGroupThreadParticipantJoinedEvent extends RcsGroupThreadEvent { + private final RcsParticipant mJoinedParticipantId; /** * Creates a new {@link RcsGroupThreadParticipantJoinedEvent}. This event is not persisted into @@ -44,23 +43,14 @@ public final class RcsGroupThreadParticipantJoinedEvent extends RcsGroupThreadEv @NonNull RcsGroupThread rcsGroupThread, @NonNull RcsParticipant originatingParticipant, @NonNull RcsParticipant joinedParticipant) { super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId()); - mJoinedParticipantId = joinedParticipant.getId(); - } - - /** - * @hide - internal constructor for queries - */ - public RcsGroupThreadParticipantJoinedEvent(long timestamp, int rcsGroupThreadId, - int originatingParticipantId, int joinedParticipantId) { - super(timestamp, rcsGroupThreadId, originatingParticipantId); - mJoinedParticipantId = joinedParticipantId; + mJoinedParticipantId = joinedParticipant; } /** * @return Returns the {@link RcsParticipant} that joined the associated {@link RcsGroupThread} */ public RcsParticipant getJoinedParticipant() { - return new RcsParticipant(mJoinedParticipantId); + return mJoinedParticipantId; } /** @@ -75,33 +65,4 @@ public final class RcsGroupThreadParticipantJoinedEvent extends RcsGroupThreadEv getRcsGroupThread().getThreadId(), getOriginatingParticipant().getId(), getJoinedParticipant().getId())); } - - public static final Creator<RcsGroupThreadParticipantJoinedEvent> CREATOR = - new Creator<RcsGroupThreadParticipantJoinedEvent>() { - @Override - public RcsGroupThreadParticipantJoinedEvent createFromParcel(Parcel in) { - return new RcsGroupThreadParticipantJoinedEvent(in); - } - - @Override - public RcsGroupThreadParticipantJoinedEvent[] newArray(int size) { - return new RcsGroupThreadParticipantJoinedEvent[size]; - } - }; - - private RcsGroupThreadParticipantJoinedEvent(Parcel in) { - super(in); - mJoinedParticipantId = in.readInt(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeInt(mJoinedParticipantId); - } } diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.aidl index 420abffa067a..7210b9f2fab1 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.aidl +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsGroupThreadParticipantJoinedEvent; +parcelable RcsGroupThreadParticipantJoinedEventDescriptor; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java new file mode 100644 index 000000000000..a4218c293bec --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEventDescriptor.java @@ -0,0 +1,74 @@ +/* + * 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.telephony.ims; + +import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; + +import android.os.Parcel; + +import com.android.internal.annotations.VisibleForTesting; + +/** + * @hide - used only for internal communication with the ircs service + */ +public class RcsGroupThreadParticipantJoinedEventDescriptor extends RcsGroupThreadEventDescriptor { + private final int mJoinedParticipantId; + + public RcsGroupThreadParticipantJoinedEventDescriptor(long timestamp, int rcsGroupThreadId, + int originatingParticipantId, int joinedParticipantId) { + super(timestamp, rcsGroupThreadId, originatingParticipantId); + mJoinedParticipantId = joinedParticipantId; + } + + @Override + @VisibleForTesting(visibility = PROTECTED) + public RcsGroupThreadParticipantJoinedEvent createRcsEvent() { + return new RcsGroupThreadParticipantJoinedEvent( + mTimestamp, + new RcsGroupThread(mRcsGroupThreadId), + new RcsParticipant(mOriginatingParticipantId), + new RcsParticipant(mJoinedParticipantId)); + } + + public static final Creator<RcsGroupThreadParticipantJoinedEventDescriptor> CREATOR = + new Creator<RcsGroupThreadParticipantJoinedEventDescriptor>() { + @Override + public RcsGroupThreadParticipantJoinedEventDescriptor createFromParcel(Parcel in) { + return new RcsGroupThreadParticipantJoinedEventDescriptor(in); + } + + @Override + public RcsGroupThreadParticipantJoinedEventDescriptor[] newArray(int size) { + return new RcsGroupThreadParticipantJoinedEventDescriptor[size]; + } + }; + + protected RcsGroupThreadParticipantJoinedEventDescriptor(Parcel in) { + super(in); + mJoinedParticipantId = in.readInt(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(mJoinedParticipantId); + } +} diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java index cd525086749a..b724a3f2159f 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java @@ -16,16 +16,15 @@ package android.telephony.ims; import android.annotation.NonNull; -import android.os.Parcel; -import android.os.Parcelable; /** * 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 implements - Parcelable { - private final int mLeavingParticipantId; +public final class RcsGroupThreadParticipantLeftEvent extends RcsGroupThreadEvent { + private RcsParticipant mLeavingParticipant; /** * Creates a new {@link RcsGroupThreadParticipantLeftEvent}. his event is not persisted into @@ -46,16 +45,7 @@ public final class RcsGroupThreadParticipantLeftEvent extends RcsGroupThreadEven @NonNull RcsGroupThread rcsGroupThread, @NonNull RcsParticipant originatingParticipant, @NonNull RcsParticipant leavingParticipant) { super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId()); - mLeavingParticipantId = leavingParticipant.getId(); - } - - /** - * @hide - internal constructor for queries - */ - public RcsGroupThreadParticipantLeftEvent(long timestamp, int rcsGroupThreadId, - int originatingParticipantId, int leavingParticipantId) { - super(timestamp, rcsGroupThreadId, originatingParticipantId); - mLeavingParticipantId = leavingParticipantId; + mLeavingParticipant = leavingParticipant; } /** @@ -63,44 +53,15 @@ public final class RcsGroupThreadParticipantLeftEvent extends RcsGroupThreadEven * after this {@link RcsGroupThreadParticipantLeftEvent} happened. */ @NonNull - public RcsParticipant getLeavingParticipantId() { - return new RcsParticipant(mLeavingParticipantId); + public RcsParticipant getLeavingParticipant() { + return mLeavingParticipant; } @Override public void persist() throws RcsMessageStoreException { RcsControllerCall.call( - iRcs -> iRcs.createGroupThreadParticipantJoinedEvent(getTimestamp(), + iRcs -> iRcs.createGroupThreadParticipantLeftEvent(getTimestamp(), getRcsGroupThread().getThreadId(), getOriginatingParticipant().getId(), - getLeavingParticipantId().getId())); - } - - public static final Creator<RcsGroupThreadParticipantLeftEvent> CREATOR = - new Creator<RcsGroupThreadParticipantLeftEvent>() { - @Override - public RcsGroupThreadParticipantLeftEvent createFromParcel(Parcel in) { - return new RcsGroupThreadParticipantLeftEvent(in); - } - - @Override - public RcsGroupThreadParticipantLeftEvent[] newArray(int size) { - return new RcsGroupThreadParticipantLeftEvent[size]; - } - }; - - private RcsGroupThreadParticipantLeftEvent(Parcel in) { - super(in); - mLeavingParticipantId = in.readInt(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeInt(mLeavingParticipantId); + getLeavingParticipant().getId())); } } diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.aidl index ff139ac0ab1e..3ef921001ce7 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.aidl +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsGroupThreadParticipantLeftEvent; +parcelable RcsGroupThreadParticipantLeftEventDescriptor; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java new file mode 100644 index 000000000000..8e91dda1a60f --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEventDescriptor.java @@ -0,0 +1,75 @@ +/* + * 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.telephony.ims; + +import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.android.internal.annotations.VisibleForTesting; + +/** + * @hide - used only for internal communication with the ircs service + */ +public class RcsGroupThreadParticipantLeftEventDescriptor extends RcsGroupThreadEventDescriptor { + private int mLeavingParticipantId; + + public RcsGroupThreadParticipantLeftEventDescriptor(long timestamp, int rcsGroupThreadId, + int originatingParticipantId, int leavingParticipantId) { + super(timestamp, rcsGroupThreadId, originatingParticipantId); + mLeavingParticipantId = leavingParticipantId; + } + + @Override + @VisibleForTesting(visibility = PROTECTED) + public RcsGroupThreadParticipantLeftEvent createRcsEvent() { + return new RcsGroupThreadParticipantLeftEvent( + mTimestamp, + new RcsGroupThread(mRcsGroupThreadId), + new RcsParticipant(mOriginatingParticipantId), + new RcsParticipant(mLeavingParticipantId)); + } + + public static final Parcelable.Creator<RcsGroupThreadParticipantLeftEventDescriptor> CREATOR = + new Creator<RcsGroupThreadParticipantLeftEventDescriptor>() { + @Override + public RcsGroupThreadParticipantLeftEventDescriptor createFromParcel(Parcel in) { + return new RcsGroupThreadParticipantLeftEventDescriptor(in); + } + + @Override + public RcsGroupThreadParticipantLeftEventDescriptor[] newArray(int size) { + return new RcsGroupThreadParticipantLeftEventDescriptor[size]; + } + }; + + protected RcsGroupThreadParticipantLeftEventDescriptor(Parcel in) { + super(in); + mLeavingParticipantId = in.readInt(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(mLeavingParticipantId); + } +} 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 d811c6e93a56..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 { /** @@ -118,15 +120,16 @@ public class RcsMessageStore { /** * Returns the first chunk of existing {@link RcsEvent}s in the common storage. * - * @param queryParameters Parameters to specify to return a subset of all RcsEvents. + * @param queryParams Parameters to specify to return a subset of all RcsEvents. * Passing a value of null will return all events. * @throws RcsMessageStoreException if the query could not be completed on the storage */ @WorkerThread @NonNull public RcsEventQueryResult getRcsEvents( - @Nullable RcsEventQueryParams queryParameters) throws RcsMessageStoreException { - return RcsControllerCall.call(iRcs -> iRcs.getEvents(queryParameters)); + @Nullable RcsEventQueryParams queryParams) throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getEvents(queryParams)) + .getRcsEventQueryResult(); } /** @@ -140,7 +143,8 @@ public class RcsMessageStore { @NonNull public RcsEventQueryResult getRcsEvents( @NonNull RcsQueryContinuationToken continuationToken) throws RcsMessageStoreException { - return RcsControllerCall.call(iRcs -> iRcs.getEventsWithToken(continuationToken)); + return RcsControllerCall.call(iRcs -> iRcs.getEventsWithToken(continuationToken)) + .getRcsEventQueryResult(); } /** 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 c9a2b0d07bc8..61801f3fbf2c 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java +++ b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java @@ -17,16 +17,16 @@ package android.telephony.ims; import android.annotation.NonNull; import android.annotation.Nullable; -import android.os.Parcel; -import android.os.Parcelable; /** * 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 implements Parcelable { - // The ID of the participant that changed their alias - private final int mParticipantId; +public final class RcsParticipantAliasChangedEvent extends RcsEvent { + // The participant that changed their alias + private final RcsParticipant mParticipant; // The new alias of the above participant private final String mNewAlias; @@ -43,17 +43,7 @@ public final class RcsParticipantAliasChangedEvent extends RcsEvent implements P public RcsParticipantAliasChangedEvent(long timestamp, @NonNull RcsParticipant participant, @Nullable String newAlias) { super(timestamp); - mParticipantId = participant.getId(); - mNewAlias = newAlias; - } - - /** - * @hide - internal constructor for queries - */ - public RcsParticipantAliasChangedEvent(long timestamp, int participantId, - @Nullable String newAlias) { - super(timestamp); - mParticipantId = participantId; + mParticipant = participant; mNewAlias = newAlias; } @@ -61,8 +51,8 @@ public final class RcsParticipantAliasChangedEvent extends RcsEvent implements P * @return Returns the {@link RcsParticipant} whose alias was changed. */ @NonNull - public RcsParticipant getParticipantId() { - return new RcsParticipant(mParticipantId); + public RcsParticipant getParticipant() { + return mParticipant; } /** @@ -81,37 +71,6 @@ public final class RcsParticipantAliasChangedEvent extends RcsEvent implements P @Override public void persist() throws RcsMessageStoreException { RcsControllerCall.call(iRcs -> iRcs.createParticipantAliasChangedEvent( - getTimestamp(), getParticipantId().getId(), getNewAlias())); - } - - public static final Creator<RcsParticipantAliasChangedEvent> CREATOR = - new Creator<RcsParticipantAliasChangedEvent>() { - @Override - public RcsParticipantAliasChangedEvent createFromParcel(Parcel in) { - return new RcsParticipantAliasChangedEvent(in); - } - - @Override - public RcsParticipantAliasChangedEvent[] newArray(int size) { - return new RcsParticipantAliasChangedEvent[size]; - } - }; - - private RcsParticipantAliasChangedEvent(Parcel in) { - super(in); - mNewAlias = in.readString(); - mParticipantId = in.readInt(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeString(mNewAlias); - dest.writeInt(mParticipantId); + getTimestamp(), getParticipant().getId(), getNewAlias())); } } diff --git a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.aidl index b9d819054527..64fe3b891572 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.aidl +++ b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsParticipantAliasChangedEvent; +parcelable RcsParticipantAliasChangedEventDescriptor; diff --git a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java new file mode 100644 index 000000000000..a32e5522c851 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEventDescriptor.java @@ -0,0 +1,78 @@ +/* + * 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.telephony.ims; + +import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED; + +import android.annotation.Nullable; +import android.os.Parcel; + +import com.android.internal.annotations.VisibleForTesting; + +/** + * @hide - used only for internal communication with the ircs service + */ +public class RcsParticipantAliasChangedEventDescriptor extends RcsEventDescriptor { + // The ID of the participant that changed their alias + protected int mParticipantId; + // The new alias of the above participant + protected String mNewAlias; + + public RcsParticipantAliasChangedEventDescriptor(long timestamp, int participantId, + @Nullable String newAlias) { + super(timestamp); + mParticipantId = participantId; + mNewAlias = newAlias; + } + + @Override + @VisibleForTesting(visibility = PROTECTED) + public RcsParticipantAliasChangedEvent createRcsEvent() { + return new RcsParticipantAliasChangedEvent( + mTimestamp, new RcsParticipant(mParticipantId), mNewAlias); + } + + public static final Creator<RcsParticipantAliasChangedEventDescriptor> CREATOR = + new Creator<RcsParticipantAliasChangedEventDescriptor>() { + @Override + public RcsParticipantAliasChangedEventDescriptor createFromParcel(Parcel in) { + return new RcsParticipantAliasChangedEventDescriptor(in); + } + + @Override + public RcsParticipantAliasChangedEventDescriptor[] newArray(int size) { + return new RcsParticipantAliasChangedEventDescriptor[size]; + } + }; + + protected RcsParticipantAliasChangedEventDescriptor(Parcel in) { + super(in); + mNewAlias = in.readString(); + mParticipantId = in.readInt(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeString(mNewAlias); + dest.writeInt(mParticipantId); + } +} 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/ims/aidl/IRcs.aidl b/telephony/java/android/telephony/ims/aidl/IRcs.aidl index 2478f8cff6b7..6ab01c2a0eea 100644 --- a/telephony/java/android/telephony/ims/aidl/IRcs.aidl +++ b/telephony/java/android/telephony/ims/aidl/IRcs.aidl @@ -18,7 +18,7 @@ package android.telephony.ims.aidl; import android.net.Uri; import android.telephony.ims.RcsEventQueryParams; -import android.telephony.ims.RcsEventQueryResult; +import android.telephony.ims.RcsEventQueryResultDescriptor; import android.telephony.ims.RcsFileTransferCreationParams; import android.telephony.ims.RcsIncomingMessageCreationParams; import android.telephony.ims.RcsMessageSnippet; @@ -54,9 +54,9 @@ interface IRcs { RcsMessageQueryResult getMessagesWithToken( in RcsQueryContinuationToken continuationToken); - RcsEventQueryResult getEvents(in RcsEventQueryParams queryParams); + RcsEventQueryResultDescriptor getEvents(in RcsEventQueryParams queryParams); - RcsEventQueryResult getEventsWithToken( + RcsEventQueryResultDescriptor getEventsWithToken( in RcsQueryContinuationToken continuationToken); // returns true if the thread was successfully deleted 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/IPhoneStateListener.aidl b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl index 322ce45797ec..4a263f060ca5 100644 --- a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl +++ b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl @@ -54,7 +54,7 @@ oneway interface IPhoneStateListener { void onCarrierNetworkChange(in boolean active); void onUserMobileDataStateChanged(in boolean enabled); void onPhoneCapabilityChanged(in PhoneCapability capability); - void onPreferredDataSubIdChanged(in int subId); + void onActiveDataSubIdChanged(in int subId); void onRadioPowerStateChanged(in int state); void onCallAttributesChanged(in CallAttributes callAttributes); void onEmergencyNumberListChanged(in Map emergencyNumberList); 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/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl b/telephony/java/com/android/internal/telephony/ISetOpportunisticDataCallback.aidl index 62a8c4866f07..7a78f3454aac 100644 --- a/tests/utils/SleepUtils/AlarmService/src/com/android/testing/alarmservice/Alarm.aidl +++ b/telephony/java/com/android/internal/telephony/ISetOpportunisticDataCallback.aidl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 The Android Open Source Project + * 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. @@ -14,10 +14,12 @@ * limitations under the License. */ -package com.android.testing.alarmservice; +package com.android.internal.telephony; -interface Alarm { - int prepare(); - int setAlarmAndWait(long timeoutMills); - int done(); -}
\ No newline at end of file +/** + * Callback to provide asynchronous result of setPreferredOpportunisticData. + * @hide + */ +oneway interface ISetOpportunisticDataCallback { + void onComplete(int result); +} diff --git a/telephony/java/com/android/internal/telephony/ISub.aidl b/telephony/java/com/android/internal/telephony/ISub.aidl index a49d2d976d16..4a4506f9bf7a 100755 --- a/telephony/java/com/android/internal/telephony/ISub.aidl +++ b/telephony/java/com/android/internal/telephony/ISub.aidl @@ -17,6 +17,7 @@ package com.android.internal.telephony; import android.telephony.SubscriptionInfo; +import com.android.internal.telephony.ISetOpportunisticDataCallback; interface ISub { /** @@ -217,10 +218,14 @@ interface ISub { * designed to overwrite default data subscription temporarily. * * @param subId which subscription is preferred to for cellular data. + * @param needValidation whether validation is needed before switching. + * @param callback callback upon request completion. + * * @hide * */ - int setPreferredDataSubscriptionId(int subId); + void setPreferredDataSubscriptionId(int subId, boolean needValidation, + ISetOpportunisticDataCallback callback); /** * Get which subscription is preferred for cellular data. @@ -246,6 +251,7 @@ interface ISub { int[] getSubId(int slotIndex); + @UnsupportedAppUsage int getDefaultSubId(); int clearSubInfo(); @@ -256,8 +262,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 +278,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 e6a55585506c..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,21 +1847,18 @@ 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 * @hide */ void switchMultiSimConfig(int numOfSims); - /** - * Get how many modems have been activated on the phone - * @hide - */ - int getNumOfActiveSims(); /** * Get if reboot is required upon altering modems configurations @@ -1852,4 +1870,9 @@ interface ITelephony { * Get the mapping from logical slots to physical slots. */ int[] getSlotsMapping(); + + /** + * Get the IRadio HAL Version encoded as 100 * MAJOR_VERSION + MINOR_VERSION or -1 if unknown + */ + int getRadioHalVersion(); } diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl index e9eba324acb0..0610c5d106c3 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, @@ -81,9 +85,9 @@ interface ITelephonyRegistry { void notifyCarrierNetworkChange(in boolean active); void notifyUserMobileDataStateChangedForPhoneId(in int phoneId, in int subId, in boolean state); void notifyPhoneCapabilityChanged(in PhoneCapability capability); - void notifyPreferredDataSubIdChanged(int preferredSubId); + void notifyActiveDataSubIdChanged(int activeDataSubId); 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/test-base/hiddenapi/src/android/test/InstrumentationTestCase.java b/test-base/hiddenapi/src/android/test/InstrumentationTestCase.java new file mode 100644 index 000000000000..139cd18a176c --- /dev/null +++ b/test-base/hiddenapi/src/android/test/InstrumentationTestCase.java @@ -0,0 +1,39 @@ +/* + * 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 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.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/AccessibilityEventsLogger/Android.bp b/tests/AccessibilityEventsLogger/Android.bp new file mode 100644 index 000000000000..ead165602254 --- /dev/null +++ b/tests/AccessibilityEventsLogger/Android.bp @@ -0,0 +1,9 @@ +android_test { + name: "AccessibilityEventsLogger", + srcs: ["**/*.java"], + sdk_version: "current", + certificate: "platform", + optimize: { + enabled: false, + }, +} diff --git a/tests/AccessibilityEventsLogger/Android.mk b/tests/AccessibilityEventsLogger/Android.mk deleted file mode 100644 index 4224017993e2..000000000000 --- a/tests/AccessibilityEventsLogger/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 := AccessibilityEventsLogger -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) diff --git a/tests/AccessoryDisplay/Android.mk b/tests/AccessoryDisplay/Android.mk deleted file mode 100644 index 85cb309bd720..000000000000 --- a/tests/AccessoryDisplay/Android.mk +++ /dev/null @@ -1,17 +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 $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/AccessoryDisplay/common/Android.bp b/tests/AccessoryDisplay/common/Android.bp new file mode 100644 index 000000000000..3ce4c5718d13 --- /dev/null +++ b/tests/AccessoryDisplay/common/Android.bp @@ -0,0 +1,20 @@ +// 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. + +// Build the application. +java_library_static { + name: "AccessoryDisplayCommon", + sdk_version: "current", + srcs: ["src/**/*.java"], +} diff --git a/tests/AccessoryDisplay/common/Android.mk b/tests/AccessoryDisplay/common/Android.mk deleted file mode 100644 index 2d4de1564506..000000000000 --- a/tests/AccessoryDisplay/common/Android.mk +++ /dev/null @@ -1,23 +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) - -# Build the application. -include $(CLEAR_VARS) -LOCAL_MODULE := AccessoryDisplayCommon -LOCAL_MODULE_TAGS := tests -LOCAL_SDK_VERSION := current -LOCAL_SRC_FILES := $(call all-java-files-under, src) -include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/tests/AccessoryDisplay/sink/Android.bp b/tests/AccessoryDisplay/sink/Android.bp new file mode 100644 index 000000000000..4e50a81d8c24 --- /dev/null +++ b/tests/AccessoryDisplay/sink/Android.bp @@ -0,0 +1,22 @@ +// 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. + +// Build the application. +android_test { + name: "AccessoryDisplaySink", + sdk_version: "current", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + static_libs: ["AccessoryDisplayCommon"], +} diff --git a/tests/AccessoryDisplay/sink/Android.mk b/tests/AccessoryDisplay/sink/Android.mk deleted file mode 100644 index 772ce0c849fb..000000000000 --- a/tests/AccessoryDisplay/sink/Android.mk +++ /dev/null @@ -1,25 +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) - -# Build the application. -include $(CLEAR_VARS) -LOCAL_PACKAGE_NAME := AccessoryDisplaySink -LOCAL_MODULE_TAGS := tests -LOCAL_SDK_VERSION := current -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_RESOURCE_DIR = $(LOCAL_PATH)/res -LOCAL_STATIC_JAVA_LIBRARIES := AccessoryDisplayCommon -include $(BUILD_PACKAGE) diff --git a/tests/AccessoryDisplay/source/Android.bp b/tests/AccessoryDisplay/source/Android.bp new file mode 100644 index 000000000000..6d8087f5e7dd --- /dev/null +++ b/tests/AccessoryDisplay/source/Android.bp @@ -0,0 +1,22 @@ +// 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. + +// Build the application. +android_test { + name: "AccessoryDisplaySource", + sdk_version: "current", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + static_libs: ["AccessoryDisplayCommon"], +} diff --git a/tests/AccessoryDisplay/source/Android.mk b/tests/AccessoryDisplay/source/Android.mk deleted file mode 100644 index 5d1085dc2a84..000000000000 --- a/tests/AccessoryDisplay/source/Android.mk +++ /dev/null @@ -1,25 +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) - -# Build the application. -include $(CLEAR_VARS) -LOCAL_PACKAGE_NAME := AccessoryDisplaySource -LOCAL_MODULE_TAGS := tests -LOCAL_SDK_VERSION := current -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_RESOURCE_DIR = $(LOCAL_PATH)/res -LOCAL_STATIC_JAVA_LIBRARIES := AccessoryDisplayCommon -include $(BUILD_PACKAGE) diff --git a/tests/ActivityTests/Android.bp b/tests/ActivityTests/Android.bp new file mode 100644 index 000000000000..01828624fa4a --- /dev/null +++ b/tests/ActivityTests/Android.bp @@ -0,0 +1,6 @@ +android_test { + name: "ActivityTest", + srcs: ["**/*.java"], + platform_apis: true, + certificate: "platform", +} diff --git a/tests/ActivityTests/Android.mk b/tests/ActivityTests/Android.mk deleted file mode 100644 index 94294f6b062a..000000000000 --- a/tests/ActivityTests/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := ActivityTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := tests -LOCAL_CERTIFICATE := platform - -LOCAL_USE_AAPT2 := true - -include $(BUILD_PACKAGE) diff --git a/tests/AmSlam/Android.bp b/tests/AmSlam/Android.bp new file mode 100644 index 000000000000..a8e575a39da4 --- /dev/null +++ b/tests/AmSlam/Android.bp @@ -0,0 +1,23 @@ +// +// 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: "AmSlam", + srcs: ["**/*.java"], + sdk_version: "current", + min_sdk_version: "21", + java_version: "1.8", +} diff --git a/tests/AmSlam/Android.mk b/tests/AmSlam/Android.mk deleted file mode 100644 index 934bae03a560..000000000000 --- a/tests/AmSlam/Android.mk +++ /dev/null @@ -1,30 +0,0 @@ -# -# Copyright (C) 2016 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := AmSlam - -LOCAL_SDK_VERSION := current -LOCAL_MIN_SDK_VERSION := 21 -LOCAL_JAVA_LANGUAGE_VERSION := 1.8 - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java index bd8c7dd6bd08..26de0b3f6fcd 100644 --- a/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java +++ b/tests/AppLaunch/src/com/android/tests/applaunch/AppLaunch.java @@ -108,9 +108,8 @@ public class AppLaunch extends InstrumentationTestCase { private static final String DROP_CACHE_SCRIPT = "/data/local/tmp/dropCache.sh"; private static final String APP_LAUNCH_CMD = "am start -W -n"; private static final String SUCCESS_MESSAGE = "Status: ok"; - private static final String WARNING_MESSAGE = "Warning:"; + private static final String TOTAL_TIME_MESSAGE = "TotalTime:"; private static final String COMPILE_SUCCESS = "Success"; - private static final String THIS_TIME = "ThisTime:"; private static final String LAUNCH_ITERATION = "LAUNCH_ITERATION - %d"; private static final String TRACE_ITERATION = "TRACE_ITERATION-%d"; private static final String LAUNCH_ITERATION_PREFIX = "LAUNCH_ITERATION"; @@ -831,15 +830,13 @@ public class AppLaunch extends InstrumentationTestCase { String launchTime = "-1"; String cpuCycles = "-1"; String majorFaults = "-1"; - boolean coldLaunchSuccess = false; - boolean hotLaunchSuccess = false; + boolean launchSuccess = false; try { InputStream inputStream = new FileInputStream(parcelDesc.getFileDescriptor()); /* SAMPLE OUTPUT : Cold launch Starting: Intent { cmp=com.google.android.calculator/com.android.calculator2.Calculator } Status: ok Activity: com.google.android.calculator/com.android.calculator2.Calculator - ThisTime: 357 TotalTime: 357 WaitTime: 377 Complete*/ @@ -848,7 +845,6 @@ public class AppLaunch extends InstrumentationTestCase { Warning: Activity not started, its current task has been brought to the front Status: ok Activity: com.google.android.calculator/com.android.calculator2.CalculatorGoogle - ThisTime: 60 TotalTime: 60 WaitTime: 67 Complete*/ @@ -859,54 +855,37 @@ public class AppLaunch extends InstrumentationTestCase { Total test time,1.462129,seconds,*/ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( inputStream)); - String line = null; - int lineCount = 1; + String line; mBufferedWriter.newLine(); mBufferedWriter.write(headerInfo); mBufferedWriter.newLine(); while ((line = bufferedReader.readLine()) != null) { - if (lineCount == 2 && line.startsWith(SUCCESS_MESSAGE)) { - coldLaunchSuccess = true; + mBufferedWriter.write(line); + mBufferedWriter.newLine(); + if (line.startsWith(SUCCESS_MESSAGE)) { + launchSuccess = true; } - if (lineCount == 2 && line.startsWith(WARNING_MESSAGE)) { - hotLaunchSuccess = true; + if (!launchSuccess) { + continue; } // Parse TotalTime which is the launch time - if (coldLaunchSuccess && lineCount == 5) { - String launchSplit[] = line.split(":"); - launchTime = launchSplit[1].trim(); - } - if (hotLaunchSuccess && lineCount == 6) { + if (line.startsWith(TOTAL_TIME_MESSAGE)) { String launchSplit[] = line.split(":"); launchTime = launchSplit[1].trim(); } if (mSimplePerfAppOnly) { - // Parse simpleperf output. - if ((lineCount == 9 && coldLaunchSuccess) - || (lineCount == 10 && hotLaunchSuccess)) { - if (!line.contains("cpu-cycles")) { - Log.e(TAG, "Error in simpleperf output"); - } else { - cpuCycles = line.split(",")[0].trim(); - } - } else if ((lineCount == 10 && coldLaunchSuccess) - || (lineCount == 11 && hotLaunchSuccess)) { - if (!line.contains("major-faults")) { - Log.e(TAG, "Error in simpleperf output"); - } else { - majorFaults = line.split(",")[0].trim(); - } + if (line.contains(",cpu-cycles,")) { + cpuCycles = line.split(",")[0].trim(); + } else if (line.contains(",major-faults,")) { + majorFaults = line.split(",")[0].trim(); } } - mBufferedWriter.write(line); - mBufferedWriter.newLine(); - lineCount++; } mBufferedWriter.flush(); inputStream.close(); } catch (IOException e) { - Log.w(TAG, "Error writing the launch file", e); + Log.w(TAG, "Error parsing launch time and writing to file", e); } return new AppLaunchResult(launchTime, cpuCycles, majorFaults); } diff --git a/tests/Assist/Android.bp b/tests/Assist/Android.bp new file mode 100644 index 000000000000..216e75109dde --- /dev/null +++ b/tests/Assist/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "Assist", + srcs: ["**/*.java"], + platform_apis: true, +} diff --git a/tests/Assist/Android.mk b/tests/Assist/Android.mk deleted file mode 100644 index d0d3ecaa5dec..000000000000 --- a/tests/Assist/Android.mk +++ /dev/null @@ -1,11 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := Assist -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) diff --git a/tests/BandwidthTests/Android.bp b/tests/BandwidthTests/Android.bp new file mode 100644 index 000000000000..523f5226cd2c --- /dev/null +++ b/tests/BandwidthTests/Android.bp @@ -0,0 +1,21 @@ +// +// Copyright (C) 2011 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { + name: "BandwidthEnforcementTest", + platform_apis: true, + srcs: ["src/**/*.java"], +} diff --git a/tests/BandwidthTests/Android.mk b/tests/BandwidthTests/Android.mk deleted file mode 100644 index d00fdc68cda4..000000000000 --- a/tests/BandwidthTests/Android.mk +++ /dev/null @@ -1,25 +0,0 @@ -# -# Copyright (C) 2011 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_PACKAGE_NAME := BandwidthEnforcementTest -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -include $(BUILD_PACKAGE) diff --git a/tests/BatteryWaster/Android.bp b/tests/BatteryWaster/Android.bp new file mode 100644 index 000000000000..4698910adb40 --- /dev/null +++ b/tests/BatteryWaster/Android.bp @@ -0,0 +1,6 @@ +android_test { + name: "BatteryWaster", + srcs: ["**/*.java"], + sdk_version: "current", + certificate: "platform", +} diff --git a/tests/BatteryWaster/Android.mk b/tests/BatteryWaster/Android.mk deleted file mode 100644 index fb244a856121..000000000000 --- a/tests/BatteryWaster/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := BatteryWaster -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/BiDiTests/Android.bp b/tests/BiDiTests/Android.bp new file mode 100644 index 000000000000..c659e8c1257e --- /dev/null +++ b/tests/BiDiTests/Android.bp @@ -0,0 +1,23 @@ +// Copyright (C) 2011 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test { + name: "BiDiTests", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + sdk_version: "current", + optimize: { + proguard_flags_files: ["proguard.flags"], + }, +} diff --git a/tests/BiDiTests/Android.mk b/tests/BiDiTests/Android.mk deleted file mode 100644 index 78cf4be66fbe..000000000000 --- a/tests/BiDiTests/Android.mk +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (C) 2011 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := BiDiTests -LOCAL_SDK_VERSION := current - -LOCAL_PROGUARD_FLAG_FILES := proguard.flags - -include $(BUILD_PACKAGE)
\ No newline at end of file diff --git a/tests/BrowserPowerTest/Android.bp b/tests/BrowserPowerTest/Android.bp new file mode 100644 index 000000000000..1d358cbe6e75 --- /dev/null +++ b/tests/BrowserPowerTest/Android.bp @@ -0,0 +1,26 @@ +// Copyright 2008, 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: "BrowserPowerTests", + libs: [ + "android.test.runner", + "android.test.base", + ], + static_libs: ["junit"], + // Include all test java files. + srcs: ["src/**/*.java"], + platform_apis: true, + //LOCAL_INSTRUMENTATION_FOR := browserpowertest +} diff --git a/tests/BrowserPowerTest/Android.mk b/tests/BrowserPowerTest/Android.mk deleted file mode 100644 index 0934889e04d7..000000000000 --- a/tests/BrowserPowerTest/Android.mk +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2008, The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base -LOCAL_STATIC_JAVA_LIBRARIES := junit - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := BrowserPowerTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -#LOCAL_INSTRUMENTATION_FOR := browserpowertest - -include $(BUILD_PACKAGE) diff --git a/tests/Camera2Tests/Android.mk b/tests/Camera2Tests/Android.mk deleted file mode 100644 index 5053e7d64389..000000000000 --- a/tests/Camera2Tests/Android.mk +++ /dev/null @@ -1 +0,0 @@ -include $(call all-subdir-makefiles) diff --git a/tests/Camera2Tests/SmartCamera/Android.mk b/tests/Camera2Tests/SmartCamera/Android.mk deleted file mode 100644 index 3fa8f54ae030..000000000000 --- a/tests/Camera2Tests/SmartCamera/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright 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. -include $(call all-subdir-makefiles) diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/jni/Android.bp b/tests/Camera2Tests/SmartCamera/SimpleCamera/jni/Android.bp index 0b16b0ecf0c1..a23ac38785f6 100644 --- a/tests/Camera2Tests/SmartCamera/SimpleCamera/jni/Android.bp +++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/jni/Android.bp @@ -15,9 +15,7 @@ cc_test_library { name: "libsmartcamera_jni", - sdk_version: "14", - srcs: [ "contrast.cpp", "brightness.cpp", @@ -29,13 +27,11 @@ cc_test_library { "sobeloperator.cpp", "stats_scorer.cpp", ], - cflags: [ "-Wall", "-Wextra", "-Werror", "-Wno-unused-parameter", ], - stl: "c++_static", } diff --git a/tests/CameraPrewarmTest/Android.bp b/tests/CameraPrewarmTest/Android.bp new file mode 100644 index 000000000000..eaf453b6f3ae --- /dev/null +++ b/tests/CameraPrewarmTest/Android.bp @@ -0,0 +1,6 @@ +android_test { + name: "CameraPrewarmTest", + srcs: ["**/*.java"], + sdk_version: "current", + certificate: "platform", +} diff --git a/tests/CameraPrewarmTest/Android.mk b/tests/CameraPrewarmTest/Android.mk deleted file mode 100644 index e12850469245..000000000000 --- a/tests/CameraPrewarmTest/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := CameraPrewarmTest -LOCAL_SDK_VERSION := current - -LOCAL_MODULE_TAGS := tests -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/CoreTests/Android.mk b/tests/CoreTests/Android.mk deleted file mode 100644 index 833843220098..000000000000 --- a/tests/CoreTests/Android.mk +++ /dev/null @@ -1,2 +0,0 @@ -include $(call all-subdir-makefiles) - diff --git a/tests/CoreTests/android/Android.bp b/tests/CoreTests/android/Android.bp new file mode 100644 index 000000000000..24134e8fb7f0 --- /dev/null +++ b/tests/CoreTests/android/Android.bp @@ -0,0 +1,11 @@ +android_test { + name: "LegacyCoreTests", + srcs: ["**/*.java"], + libs: [ + "android.test.runner.stubs", + "org.apache.http.legacy", + "android.test.base.stubs", + ], + sdk_version: "current", + static_libs: ["junit"], +} diff --git a/tests/CoreTests/android/Android.mk b/tests/CoreTests/android/Android.mk deleted file mode 100644 index 04f6739a6ced..000000000000 --- a/tests/CoreTests/android/Android.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := \ - $(call all-subdir-java-files) - -LOCAL_JAVA_LIBRARIES := \ - android.test.runner.stubs \ - org.apache.http.legacy \ - android.test.base.stubs \ - -LOCAL_SDK_VERSION := current - -LOCAL_STATIC_JAVA_LIBRARIES := junit - -LOCAL_PACKAGE_NAME := LegacyCoreTests - -include $(BUILD_PACKAGE) diff --git a/tests/DataIdleTest/Android.bp b/tests/DataIdleTest/Android.bp new file mode 100644 index 000000000000..19656ce32b29 --- /dev/null +++ b/tests/DataIdleTest/Android.bp @@ -0,0 +1,28 @@ +// +// Copyright (C) 2011 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { + name: "DataIdleTest", + platform_apis: true, + libs: [ + "android.test.runner", + "android.test.base", + ], + static_libs: ["junit"], + srcs: ["src/**/*.java"], + // We need to sign it to get access to the network usage history. + certificate: "platform", +} diff --git a/tests/DataIdleTest/Android.mk b/tests/DataIdleTest/Android.mk deleted file mode 100644 index bcf35999c96c..000000000000 --- a/tests/DataIdleTest/Android.mk +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (C) 2011 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -LOCAL_PACKAGE_NAME := DataIdleTest -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base -LOCAL_STATIC_JAVA_LIBRARIES := junit -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -# We need to sign it to get access to the network usage history. -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/DozeTest/Android.bp b/tests/DozeTest/Android.bp new file mode 100644 index 000000000000..f1be029f58d5 --- /dev/null +++ b/tests/DozeTest/Android.bp @@ -0,0 +1,6 @@ +android_app { + name: "DozeTest", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + platform_apis: true, +} diff --git a/tests/DozeTest/Android.mk b/tests/DozeTest/Android.mk deleted file mode 100644 index ec250ffe3aa0..000000000000 --- a/tests/DozeTest/Android.mk +++ /dev/null @@ -1,15 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := DozeTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) - -# Use the following include to make our test apk. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/DpiTest/Android.bp b/tests/DpiTest/Android.bp new file mode 100644 index 000000000000..7d6a78ba1581 --- /dev/null +++ b/tests/DpiTest/Android.bp @@ -0,0 +1,9 @@ +android_test { + name: "DensityTest", + srcs: ["**/*.java"], + platform_apis: true, + aaptflags: [ + "-c", + "120dpi,240dpi,160dpi,nodpi", + ], +} diff --git a/tests/DpiTest/Android.mk b/tests/DpiTest/Android.mk deleted file mode 100644 index e69d0826bb57..000000000000 --- a/tests/DpiTest/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := DensityTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := tests - -LOCAL_AAPT_FLAGS = -c 120dpi,240dpi,160dpi,nodpi - -include $(BUILD_PACKAGE) diff --git a/tests/FeatureSplit/base/Android.bp b/tests/FeatureSplit/base/Android.bp new file mode 100644 index 000000000000..ab25464a82fc --- /dev/null +++ b/tests/FeatureSplit/base/Android.bp @@ -0,0 +1,22 @@ +// +// 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. +// + +android_test_helper_app { + name: "FeatureSplitBase", + srcs: ["**/*.java"], + sdk_version: "current", + export_package_resources: true, +} diff --git a/tests/FeatureSplit/base/Android.mk b/tests/FeatureSplit/base/Android.mk deleted file mode 100644 index 864646030a61..000000000000 --- a/tests/FeatureSplit/base/Android.mk +++ /dev/null @@ -1,28 +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_USE_AAPT2 := true -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := FeatureSplitBase -LOCAL_SDK_VERSION := current -LOCAL_EXPORT_PACKAGE_RESOURCES := true - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/FeatureSplit/feature1/Android.bp b/tests/FeatureSplit/feature1/Android.bp new file mode 100644 index 000000000000..1a93e842cec5 --- /dev/null +++ b/tests/FeatureSplit/feature1/Android.bp @@ -0,0 +1,29 @@ +// +// 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. +// + +android_test { + name: "FeatureSplit1", + srcs: ["**/*.java"], + sdk_version: "current", + libs: ["FeatureSplitBase"], + aaptflags: [ + "--package-id", + "0x80", + ] + [ + "--custom-package", + "com.android.test.split.feature.one", + ], +} diff --git a/tests/FeatureSplit/feature1/Android.mk b/tests/FeatureSplit/feature1/Android.mk deleted file mode 100644 index d4d25890431e..000000000000 --- a/tests/FeatureSplit/feature1/Android.mk +++ /dev/null @@ -1,32 +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_USE_AAPT2 := true -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := FeatureSplit1 -LOCAL_SDK_VERSION := current -LOCAL_MODULE_TAGS := tests - -LOCAL_APK_LIBRARIES := FeatureSplitBase -LOCAL_RES_LIBRARIES := FeatureSplitBase - -LOCAL_AAPT_FLAGS += --package-id 0x80 -LOCAL_AAPT_FLAGS += --custom-package com.android.test.split.feature.one - -include $(BUILD_PACKAGE) diff --git a/tests/FeatureSplit/feature2/Android.bp b/tests/FeatureSplit/feature2/Android.bp new file mode 100644 index 000000000000..a3634821f6fd --- /dev/null +++ b/tests/FeatureSplit/feature2/Android.bp @@ -0,0 +1,28 @@ +// +// 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. +// + +android_test { + name: "FeatureSplit2", + srcs: ["**/*.java"], + sdk_version: "current", + libs: ["FeatureSplitBase"], + aaptflags: [ + "--package-id", + "0x81", + "--custom-package", + "com.android.test.split.feature.two", + ], +} diff --git a/tests/FeatureSplit/feature2/Android.mk b/tests/FeatureSplit/feature2/Android.mk deleted file mode 100644 index 5e5e78bcfff5..000000000000 --- a/tests/FeatureSplit/feature2/Android.mk +++ /dev/null @@ -1,32 +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_USE_AAPT2 := true -LOCAL_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := FeatureSplit2 -LOCAL_SDK_VERSION := current -LOCAL_MODULE_TAGS := tests - -LOCAL_APK_LIBRARIES := FeatureSplitBase -LOCAL_RES_LIBRARIES := FeatureSplitBase - -LOCAL_AAPT_FLAGS += --package-id 0x81 -LOCAL_AAPT_FLAGS += --custom-package com.android.test.split.feature.two - -include $(BUILD_PACKAGE) diff --git a/tests/FixVibrateSetting/Android.bp b/tests/FixVibrateSetting/Android.bp new file mode 100644 index 000000000000..5608a2b5e15d --- /dev/null +++ b/tests/FixVibrateSetting/Android.bp @@ -0,0 +1,6 @@ +android_app { + name: "FixVibrateSetting", + srcs: ["**/*.java"], + sdk_version: "current", + certificate: "platform", +} diff --git a/tests/FixVibrateSetting/Android.mk b/tests/FixVibrateSetting/Android.mk deleted file mode 100644 index 86db09eaa20d..000000000000 --- a/tests/FixVibrateSetting/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := FixVibrateSetting -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/FrameworkPerf/Android.bp b/tests/FrameworkPerf/Android.bp new file mode 100644 index 000000000000..a259ebd05fa8 --- /dev/null +++ b/tests/FrameworkPerf/Android.bp @@ -0,0 +1,14 @@ +android_test { + name: "FrameworkPerf", + srcs: ["**/*.java"], + platform_apis: true, + libs: [ + "android.test.runner", + "android.test.base", + ], + static_libs: ["junit"], + aaptflags: [ + "-c", + "120dpi,240dpi,160dpi,161dpi,320dpi,nodpi", + ], +} diff --git a/tests/FrameworkPerf/Android.mk b/tests/FrameworkPerf/Android.mk deleted file mode 100644 index 0664d4d46253..000000000000 --- a/tests/FrameworkPerf/Android.mk +++ /dev/null @@ -1,16 +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 := FrameworkPerf -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base -LOCAL_STATIC_JAVA_LIBRARIES := junit - -LOCAL_AAPT_FLAGS = -c 120dpi,240dpi,160dpi,161dpi,320dpi,nodpi - -include $(BUILD_PACKAGE) diff --git a/tests/GridLayoutTest/Android.bp b/tests/GridLayoutTest/Android.bp new file mode 100644 index 000000000000..b4b5ba561c3f --- /dev/null +++ b/tests/GridLayoutTest/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: "GridLayoutTest", + srcs: ["**/*.java"], + sdk_version: "current", +} diff --git a/tests/GridLayoutTest/Android.mk b/tests/GridLayoutTest/Android.mk deleted file mode 100644 index e7e3ccd56986..000000000000 --- a/tests/GridLayoutTest/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 := GridLayoutTest -LOCAL_SDK_VERSION := current - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/HierarchyViewerTest/Android.bp b/tests/HierarchyViewerTest/Android.bp new file mode 100644 index 000000000000..814c88328118 --- /dev/null +++ b/tests/HierarchyViewerTest/Android.bp @@ -0,0 +1,10 @@ +android_test { + name: "HierarchyViewerTest", + srcs: ["**/*.java"], + sdk_version: "current", + libs: [ + "android.test.runner.stubs", + "android.test.base.stubs", + ], + static_libs: ["junit"], +} diff --git a/tests/HierarchyViewerTest/Android.mk b/tests/HierarchyViewerTest/Android.mk deleted file mode 100644 index cf1a512b6d57..000000000000 --- a/tests/HierarchyViewerTest/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 := HierarchyViewerTest -LOCAL_SDK_VERSION := current - -LOCAL_JAVA_LIBRARIES := android.test.runner.stubs android.test.base.stubs -LOCAL_STATIC_JAVA_LIBRARIES := junit - -include $(BUILD_PACKAGE) diff --git a/tests/HugeBackup/Android.bp b/tests/HugeBackup/Android.bp new file mode 100644 index 000000000000..b44c4578a853 --- /dev/null +++ b/tests/HugeBackup/Android.bp @@ -0,0 +1,9 @@ +android_test { + name: "HugeBackup", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + sdk_version: "current", + optimize: { + proguard_flags_files: ["proguard.flags"], + }, +} diff --git a/tests/HugeBackup/Android.mk b/tests/HugeBackup/Android.mk deleted file mode 100644 index 4789bc8118f2..000000000000 --- a/tests/HugeBackup/Android.mk +++ /dev/null @@ -1,15 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := HugeBackup - -LOCAL_SDK_VERSION := current - -LOCAL_PROGUARD_FLAG_FILES := proguard.flags - -include $(BUILD_PACKAGE) 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/JobSchedulerTestApp/Android.bp b/tests/JobSchedulerTestApp/Android.bp new file mode 100644 index 000000000000..bac0220e5591 --- /dev/null +++ b/tests/JobSchedulerTestApp/Android.bp @@ -0,0 +1,9 @@ +android_app { + name: "JobSchedulerTestApp", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + sdk_version: "current", + optimize: { + enabled: false, + }, +} diff --git a/tests/JobSchedulerTestApp/Android.mk b/tests/JobSchedulerTestApp/Android.mk deleted file mode 100644 index 48ee1f673755..000000000000 --- a/tests/JobSchedulerTestApp/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := JobSchedulerTestApp -LOCAL_SDK_VERSION := current - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - diff --git a/tests/LargeAssetTest/Android.bp b/tests/LargeAssetTest/Android.bp new file mode 100644 index 000000000000..499e6a0721a1 --- /dev/null +++ b/tests/LargeAssetTest/Android.bp @@ -0,0 +1,6 @@ +android_app { + name: "LargeAssetTest", + srcs: ["**/*.java"], + sdk_version: "current", + certificate: "platform", +} diff --git a/tests/LargeAssetTest/Android.mk b/tests/LargeAssetTest/Android.mk deleted file mode 100644 index f6d98bfa094a..000000000000 --- a/tests/LargeAssetTest/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := LargeAssetTest -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/LegacyAssistant/Android.bp b/tests/LegacyAssistant/Android.bp new file mode 100644 index 000000000000..fef924d1cd89 --- /dev/null +++ b/tests/LegacyAssistant/Android.bp @@ -0,0 +1,6 @@ +android_test { + name: "LegacyAssistant", + srcs: ["**/*.java"], + sdk_version: "current", + certificate: "platform", +} diff --git a/tests/LegacyAssistant/Android.mk b/tests/LegacyAssistant/Android.mk deleted file mode 100644 index a58336967f7e..000000000000 --- a/tests/LegacyAssistant/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := LegacyAssistant -LOCAL_SDK_VERSION := current - -LOCAL_MODULE_TAGS := tests -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/LocationTracker/Android.bp b/tests/LocationTracker/Android.bp new file mode 100644 index 000000000000..f0075a9c37bd --- /dev/null +++ b/tests/LocationTracker/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "LocationTracker", + srcs: ["**/*.java"], + sdk_version: "current", +} diff --git a/tests/LocationTracker/Android.mk b/tests/LocationTracker/Android.mk deleted file mode 100644 index 0d51b3bcf13f..000000000000 --- a/tests/LocationTracker/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 := LocationTracker -LOCAL_SDK_VERSION := current - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/LotsOfApps/Android.bp b/tests/LotsOfApps/Android.bp new file mode 100644 index 000000000000..68b9f88ecfd7 --- /dev/null +++ b/tests/LotsOfApps/Android.bp @@ -0,0 +1,9 @@ +android_app { + name: "LotsOfApps", + srcs: ["**/*.java"], + sdk_version: "current", + certificate: "platform", + optimize: { + enabled: false, + }, +} diff --git a/tests/LotsOfApps/Android.mk b/tests/LotsOfApps/Android.mk deleted file mode 100644 index bee3bcc7ca51..000000000000 --- a/tests/LotsOfApps/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := LotsOfApps -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) diff --git a/tests/LowStorageTest/Android.bp b/tests/LowStorageTest/Android.bp new file mode 100644 index 000000000000..e72e4a5e2559 --- /dev/null +++ b/tests/LowStorageTest/Android.bp @@ -0,0 +1,20 @@ +// Copyright (C) 2009 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test { + name: "lowstoragetest", + certificate: "platform", + srcs: ["**/*.java"], + sdk_version: "current", +} diff --git a/tests/LowStorageTest/Android.mk b/tests/LowStorageTest/Android.mk deleted file mode 100644 index bdde6bdc2fe1..000000000000 --- a/tests/LowStorageTest/Android.mk +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (C) 2009 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests -LOCAL_CERTIFICATE := platform - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := lowstoragetest -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) diff --git a/tests/MemoryUsage/Android.bp b/tests/MemoryUsage/Android.bp new file mode 100644 index 000000000000..aeb533882d4f --- /dev/null +++ b/tests/MemoryUsage/Android.bp @@ -0,0 +1,12 @@ +android_test { + name: "MemoryUsage", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + platform_apis: true, + certificate: "platform", + libs: [ + "android.test.runner", + "android.test.base", + ], + static_libs: ["junit"], +} diff --git a/tests/MemoryUsage/Android.mk b/tests/MemoryUsage/Android.mk deleted file mode 100644 index 5040d5a3b90a..000000000000 --- a/tests/MemoryUsage/Android.mk +++ /dev/null @@ -1,19 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := MemoryUsage -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_CERTIFICATE := platform -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base -LOCAL_STATIC_JAVA_LIBRARIES := junit - -include $(BUILD_PACKAGE) - -# Use the following include to make our test apk. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/NetworkSecurityConfigTest/Android.bp b/tests/NetworkSecurityConfigTest/Android.bp new file mode 100644 index 000000000000..cf8ca57862b4 --- /dev/null +++ b/tests/NetworkSecurityConfigTest/Android.bp @@ -0,0 +1,12 @@ +android_test { + name: "NetworkSecurityConfigTests", + certificate: "platform", + libs: [ + "android.test.runner", + "android.test.base", + ], + static_libs: ["junit"], + // Include all test java files. + srcs: ["src/**/*.java"], + platform_apis: true, +} diff --git a/tests/NetworkSecurityConfigTest/Android.mk b/tests/NetworkSecurityConfigTest/Android.mk deleted file mode 100644 index a6c21db16846..000000000000 --- a/tests/NetworkSecurityConfigTest/Android.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests -LOCAL_CERTIFICATE := platform - -LOCAL_JAVA_LIBRARIES := \ - android.test.runner \ - android.test.base \ - -LOCAL_STATIC_JAVA_LIBRARIES := junit - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := NetworkSecurityConfigTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) diff --git a/test-legacy/Android.bp b/tests/OdmApps/Android.bp index a69f422b3bdb..d86f9cc81a5f 100644 --- a/test-legacy/Android.bp +++ b/tests/OdmApps/Android.bp @@ -1,4 +1,3 @@ -// // Copyright (C) 2018 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,25 +11,10 @@ // 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", - ], +java_test_host { + name: "OdmAppsTest", + srcs: ["src/**/*.java"], + libs: ["tradefed"], + test_suites: ["device-tests"], } diff --git a/tests/OdmApps/Android.mk b/tests/OdmApps/Android.mk deleted file mode 100644 index 64fa65325acc..000000000000 --- a/tests/OdmApps/Android.mk +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (C) 2018 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := OdmAppsTest -LOCAL_MODULE_TAGS := tests -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_JAVA_LIBRARIES := tradefed -LOCAL_COMPATIBILITY_SUITE := device-tests -include $(BUILD_HOST_JAVA_LIBRARY) - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/OdmApps/app/Android.bp b/tests/OdmApps/app/Android.bp new file mode 100644 index 000000000000..5eb8590b6e06 --- /dev/null +++ b/tests/OdmApps/app/Android.bp @@ -0,0 +1,19 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test { + name: "TestOdmApp", + test_suites: ["device-tests"], + sdk_version: "current", +} diff --git a/tests/OdmApps/app/Android.mk b/tests/OdmApps/app/Android.mk deleted file mode 100644 index 9eec0cc4f66f..000000000000 --- a/tests/OdmApps/app/Android.mk +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (C) 2018 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_PACKAGE_NAME := TestOdmApp -LOCAL_MODULE_TAGS := tests -LOCAL_COMPATIBILITY_SUITE := device-tests -LOCAL_SDK_VERSION := current -include $(BUILD_PACKAGE) diff --git a/tests/OdmApps/priv-app/Android.bp b/tests/OdmApps/priv-app/Android.bp new file mode 100644 index 000000000000..9dd477cf6ad3 --- /dev/null +++ b/tests/OdmApps/priv-app/Android.bp @@ -0,0 +1,19 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test { + name: "TestOdmPrivApp", + test_suites: ["device-tests"], + sdk_version: "current", +} diff --git a/tests/OdmApps/priv-app/Android.mk b/tests/OdmApps/priv-app/Android.mk deleted file mode 100644 index d423133fc9f5..000000000000 --- a/tests/OdmApps/priv-app/Android.mk +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (C) 2018 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_PACKAGE_NAME := TestOdmPrivApp -LOCAL_MODULE_TAGS := tests -LOCAL_COMPATIBILITY_SUITE := device-tests -LOCAL_SDK_VERSION := current -include $(BUILD_PACKAGE) diff --git a/tests/OneMedia/Android.bp b/tests/OneMedia/Android.bp new file mode 100644 index 000000000000..11e12f35741c --- /dev/null +++ b/tests/OneMedia/Android.bp @@ -0,0 +1,13 @@ +android_app { + name: "OneMedia", + srcs: [ + "**/*.java", + "src/**/I*.aidl", + ], + platform_apis: true, + certificate: "platform", + libs: ["org.apache.http.legacy"], + optimize: { + enabled: false, + }, +} diff --git a/tests/OneMedia/Android.mk b/tests/OneMedia/Android.mk deleted file mode 100644 index 41f3f64235d4..000000000000 --- a/tests/OneMedia/Android.mk +++ /dev/null @@ -1,17 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-subdir-java-files) \ - $(call all-Iaidl-files-under, src) - -LOCAL_PACKAGE_NAME := OneMedia -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform - -LOCAL_JAVA_LIBRARIES += org.apache.http.legacy - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java index 915a260f5c79..89d32ab5a925 100644 --- a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java +++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java @@ -20,9 +20,8 @@ import static com.google.common.truth.Truth.assertThat; import android.net.Uri; import android.os.Parcel; import android.support.test.runner.AndroidJUnit4; -import android.telephony.ims.RcsGroupThread; import android.telephony.ims.RcsGroupThreadIconChangedEvent; -import android.telephony.ims.RcsParticipant; +import android.telephony.ims.RcsGroupThreadIconChangedEventDescriptor; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,20 +31,27 @@ public class RcsGroupThreadIconChangedEventTest { @Test public void testCanUnparcel() { - RcsGroupThread rcsGroupThread = new RcsGroupThread(1); - RcsParticipant rcsParticipant = new RcsParticipant(2); + int rcsGroupThreadId = 1; + int rcsParticipantId = 2; Uri newIconUri = Uri.parse("content://new_icon"); - RcsGroupThreadIconChangedEvent iconChangedEvent = - new RcsGroupThreadIconChangedEvent(1234567890, rcsGroupThread, rcsParticipant, - newIconUri); + RcsGroupThreadIconChangedEventDescriptor iconChangedEventDescriptor = + new RcsGroupThreadIconChangedEventDescriptor(1234567890, rcsGroupThreadId, + rcsParticipantId, newIconUri); Parcel parcel = Parcel.obtain(); - iconChangedEvent.writeToParcel(parcel, iconChangedEvent.describeContents()); + iconChangedEventDescriptor.writeToParcel( + parcel, iconChangedEventDescriptor.describeContents()); parcel.setDataPosition(0); - iconChangedEvent = RcsGroupThreadIconChangedEvent.CREATOR.createFromParcel(parcel); + iconChangedEventDescriptor = + RcsGroupThreadIconChangedEventDescriptor.CREATOR.createFromParcel(parcel); + + RcsGroupThreadIconChangedEvent iconChangedEvent = + iconChangedEventDescriptor.createRcsEvent(); + + assertThat(iconChangedEvent.getNewIcon()).isEqualTo(newIconUri); assertThat(iconChangedEvent.getRcsGroupThread().getThreadId()).isEqualTo(1); diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java index 1384c016daa8..726b9cd6641f 100644 --- a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java +++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java @@ -19,9 +19,8 @@ import static com.google.common.truth.Truth.assertThat; import android.os.Parcel; import android.support.test.runner.AndroidJUnit4; -import android.telephony.ims.RcsGroupThread; import android.telephony.ims.RcsGroupThreadNameChangedEvent; -import android.telephony.ims.RcsParticipant; +import android.telephony.ims.RcsGroupThreadNameChangedEventDescriptor; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,20 +31,24 @@ public class RcsGroupThreadNameChangedEventTest { public void testCanUnparcel() { String newName = "new name"; - RcsGroupThread rcsGroupThread = new RcsGroupThread(1); - RcsParticipant rcsParticipant = new RcsParticipant(2); + int rcsGroupThreadId = 1; + int rcsParticipantId = 2; - RcsGroupThreadNameChangedEvent nameChangedEvent = - new RcsGroupThreadNameChangedEvent(1234567890, rcsGroupThread, rcsParticipant, - newName); + RcsGroupThreadNameChangedEventDescriptor nameChangedEventDescriptor = + new RcsGroupThreadNameChangedEventDescriptor( + 1234567890, rcsGroupThreadId, rcsParticipantId, newName); Parcel parcel = Parcel.obtain(); - nameChangedEvent.writeToParcel(parcel, nameChangedEvent.describeContents()); + nameChangedEventDescriptor.writeToParcel( + parcel, nameChangedEventDescriptor.describeContents()); parcel.setDataPosition(0); - nameChangedEvent = RcsGroupThreadNameChangedEvent.CREATOR.createFromParcel( - parcel); + nameChangedEventDescriptor = RcsGroupThreadNameChangedEventDescriptor.CREATOR + .createFromParcel(parcel); + + RcsGroupThreadNameChangedEvent nameChangedEvent = + nameChangedEventDescriptor.createRcsEvent(); assertThat(nameChangedEvent.getNewName()).isEqualTo(newName); assertThat(nameChangedEvent.getRcsGroupThread().getThreadId()).isEqualTo(1); diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java index d0af7db90627..a109310076d2 100644 --- a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java +++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java @@ -19,9 +19,8 @@ import static com.google.common.truth.Truth.assertThat; import android.os.Parcel; import android.support.test.runner.AndroidJUnit4; -import android.telephony.ims.RcsGroupThread; import android.telephony.ims.RcsGroupThreadParticipantJoinedEvent; -import android.telephony.ims.RcsParticipant; +import android.telephony.ims.RcsGroupThreadParticipantJoinedEventDescriptor; import org.junit.Test; import org.junit.runner.RunWith; @@ -31,20 +30,24 @@ public class RcsGroupThreadParticipantJoinedEventTest { @Test public void testCanUnparcel() { - RcsGroupThread rcsGroupThread = new RcsGroupThread(1); - RcsParticipant rcsParticipant = new RcsParticipant(2); + int rcsGroupThreadId = 1; + int rcsParticipantId = 2; - RcsGroupThreadParticipantJoinedEvent participantJoinedEvent = - new RcsGroupThreadParticipantJoinedEvent(1234567890, rcsGroupThread, rcsParticipant, - rcsParticipant); + RcsGroupThreadParticipantJoinedEventDescriptor participantJoinedEventDescriptor = + new RcsGroupThreadParticipantJoinedEventDescriptor( + 1234567890, rcsGroupThreadId, rcsParticipantId, rcsParticipantId); Parcel parcel = Parcel.obtain(); - participantJoinedEvent.writeToParcel(parcel, participantJoinedEvent.describeContents()); + participantJoinedEventDescriptor.writeToParcel( + parcel, participantJoinedEventDescriptor.describeContents()); parcel.setDataPosition(0); - participantJoinedEvent = RcsGroupThreadParticipantJoinedEvent.CREATOR.createFromParcel( - parcel); + participantJoinedEventDescriptor = RcsGroupThreadParticipantJoinedEventDescriptor.CREATOR + .createFromParcel(parcel); + + RcsGroupThreadParticipantJoinedEvent participantJoinedEvent = + participantJoinedEventDescriptor.createRcsEvent(); assertThat(participantJoinedEvent.getJoinedParticipant().getId()).isEqualTo(2); assertThat(participantJoinedEvent.getRcsGroupThread().getThreadId()).isEqualTo(1); diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java index 7ba5fa653258..de2688c5b8c8 100644 --- a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java +++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java @@ -19,9 +19,8 @@ import static com.google.common.truth.Truth.assertThat; import android.os.Parcel; import android.support.test.runner.AndroidJUnit4; -import android.telephony.ims.RcsGroupThread; import android.telephony.ims.RcsGroupThreadParticipantLeftEvent; -import android.telephony.ims.RcsParticipant; +import android.telephony.ims.RcsGroupThreadParticipantLeftEventDescriptor; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,24 +29,29 @@ import org.junit.runner.RunWith; public class RcsGroupThreadParticipantLeftEventTest { @Test public void testCanUnparcel() { - RcsGroupThread rcsGroupThread = new RcsGroupThread(1); - RcsParticipant rcsParticipant = new RcsParticipant(2); + int rcsGroupThreadId = 1; + int rcsParticipantId = 2; - RcsGroupThreadParticipantLeftEvent participantLeftEvent = - new RcsGroupThreadParticipantLeftEvent(1234567890, rcsGroupThread, rcsParticipant, - rcsParticipant); + RcsGroupThreadParticipantLeftEventDescriptor participantLeftEventDescriptor = + new RcsGroupThreadParticipantLeftEventDescriptor( + 1234567890, rcsGroupThreadId, rcsParticipantId, rcsParticipantId); Parcel parcel = Parcel.obtain(); - participantLeftEvent.writeToParcel(parcel, participantLeftEvent.describeContents()); + participantLeftEventDescriptor.writeToParcel( + parcel, participantLeftEventDescriptor.describeContents()); parcel.setDataPosition(0); // create from parcel parcel.setDataPosition(0); - participantLeftEvent = RcsGroupThreadParticipantLeftEvent.CREATOR.createFromParcel( - parcel); + participantLeftEventDescriptor = RcsGroupThreadParticipantLeftEventDescriptor.CREATOR + .createFromParcel(parcel); + + RcsGroupThreadParticipantLeftEvent participantLeftEvent = + participantLeftEventDescriptor.createRcsEvent(); + assertThat(participantLeftEvent.getRcsGroupThread().getThreadId()).isEqualTo(1); - assertThat(participantLeftEvent.getLeavingParticipantId().getId()).isEqualTo(2); + assertThat(participantLeftEvent.getLeavingParticipant().getId()).isEqualTo(2); assertThat(participantLeftEvent.getTimestamp()).isEqualTo(1234567890); } } diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java index 3e2bbbf8256c..57240545e5d8 100644 --- a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java +++ b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java @@ -19,10 +19,9 @@ import static com.google.common.truth.Truth.assertThat; import android.os.Parcel; import android.support.test.runner.AndroidJUnit4; -import android.telephony.ims.RcsParticipant; import android.telephony.ims.RcsParticipantAliasChangedEvent; +import android.telephony.ims.RcsParticipantAliasChangedEventDescriptor; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,27 +29,27 @@ import org.junit.runner.RunWith; public class RcsParticipantAliasChangedEventTest { private static final String OLD_ALIAS = "old alias"; private static final String NEW_ALIAS = "new alias"; - private RcsParticipant mParticipant; - - @Before - public void setUp() { - mParticipant = new RcsParticipant(3); - } + private int mParticipantId = 3; @Test public void testCanUnparcel() { - RcsParticipantAliasChangedEvent aliasChangedEvent = - new RcsParticipantAliasChangedEvent(1234567890, mParticipant, NEW_ALIAS); + RcsParticipantAliasChangedEventDescriptor aliasChangedEventDescriptor = + new RcsParticipantAliasChangedEventDescriptor( + 1234567890, mParticipantId, NEW_ALIAS); Parcel parcel = Parcel.obtain(); - aliasChangedEvent.writeToParcel(parcel, aliasChangedEvent.describeContents()); + aliasChangedEventDescriptor.writeToParcel( + parcel, aliasChangedEventDescriptor.describeContents()); parcel.setDataPosition(0); - aliasChangedEvent = RcsParticipantAliasChangedEvent.CREATOR.createFromParcel( - parcel); + aliasChangedEventDescriptor = RcsParticipantAliasChangedEventDescriptor.CREATOR + .createFromParcel(parcel); + + RcsParticipantAliasChangedEvent aliasChangedEvent = + aliasChangedEventDescriptor.createRcsEvent(); - assertThat(aliasChangedEvent.getParticipantId().getId()).isEqualTo(3); + assertThat(aliasChangedEvent.getParticipant().getId()).isEqualTo(mParticipantId); assertThat(aliasChangedEvent.getNewAlias()).isEqualTo(NEW_ALIAS); assertThat(aliasChangedEvent.getTimestamp()).isEqualTo(1234567890); } diff --git a/tests/RemoteDisplayProvider/Android.bp b/tests/RemoteDisplayProvider/Android.bp new file mode 100644 index 000000000000..6c7798fb3faf --- /dev/null +++ b/tests/RemoteDisplayProvider/Android.bp @@ -0,0 +1,23 @@ +// 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. + +// Build the application. +android_test { + name: "RemoteDisplayProviderTest", + sdk_version: "system_current", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + libs: ["com.android.media.remotedisplay"], + certificate: "platform", +} diff --git a/tests/RemoteDisplayProvider/Android.mk b/tests/RemoteDisplayProvider/Android.mk deleted file mode 100644 index 43bf0243b55b..000000000000 --- a/tests/RemoteDisplayProvider/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) - -# Build the application. -include $(CLEAR_VARS) -LOCAL_PACKAGE_NAME := RemoteDisplayProviderTest -LOCAL_MODULE_TAGS := tests -LOCAL_SDK_VERSION := system_current -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_RESOURCE_DIR = $(LOCAL_PATH)/res -LOCAL_JAVA_LIBRARIES := com.android.media.remotedisplay -LOCAL_CERTIFICATE := platform -include $(BUILD_PACKAGE) diff --git a/tests/RenderThreadTest/Android.bp b/tests/RenderThreadTest/Android.bp new file mode 100644 index 000000000000..165977607219 --- /dev/null +++ b/tests/RenderThreadTest/Android.bp @@ -0,0 +1,10 @@ +android_test { + name: "RenderThreadTest", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + platform_apis: true, + static_libs: ["android-common"], + optimize: { + enabled: false, + }, +} diff --git a/tests/RenderThreadTest/Android.mk b/tests/RenderThreadTest/Android.mk deleted file mode 100644 index 4e5f35bd71ca..000000000000 --- a/tests/RenderThreadTest/Android.mk +++ /dev/null @@ -1,19 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := RenderThreadTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_STATIC_JAVA_LIBRARIES += android-common - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - -# Use the following include to make our test apk. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/SerialChat/Android.bp b/tests/SerialChat/Android.bp new file mode 100644 index 000000000000..3c18035a4aab --- /dev/null +++ b/tests/SerialChat/Android.bp @@ -0,0 +1,21 @@ +// +// Copyright (C) 2011 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { + name: "SerialChat", + srcs: ["**/*.java"], + platform_apis: true, +} diff --git a/tests/SerialChat/Android.mk b/tests/SerialChat/Android.mk deleted file mode 100644 index ed6ca9991417..000000000000 --- a/tests/SerialChat/Android.mk +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright (C) 2011 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := SerialChat -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) diff --git a/tests/SharedLibrary/client/Android.bp b/tests/SharedLibrary/client/Android.bp new file mode 100644 index 000000000000..dbf6dc94eb8d --- /dev/null +++ b/tests/SharedLibrary/client/Android.bp @@ -0,0 +1,6 @@ +android_test { + name: "SharedLibraryClient", + srcs: ["**/*.java"], + libs: ["SharedLibrary"], + sdk_version: "current", +} diff --git a/tests/SharedLibrary/client/Android.mk b/tests/SharedLibrary/client/Android.mk deleted file mode 100644 index 9e76c4038600..000000000000 --- a/tests/SharedLibrary/client/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_USE_AAPT2 := true -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_RES_LIBRARIES := SharedLibrary - -LOCAL_PACKAGE_NAME := SharedLibraryClient -LOCAL_SDK_VERSION := current - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/SharedLibrary/lib/Android.bp b/tests/SharedLibrary/lib/Android.bp new file mode 100644 index 000000000000..f69d388ef0f1 --- /dev/null +++ b/tests/SharedLibrary/lib/Android.bp @@ -0,0 +1,11 @@ +android_app { + name: "SharedLibrary", + srcs: ["**/*.java"], + aaptflags: ["--shared-lib"], + sdk_version: "current", + export_package_resources: true, + privileged: true, + optimize: { + proguard_flags_files: ["proguard.proguard"], + }, +} diff --git a/tests/SharedLibrary/lib/Android.mk b/tests/SharedLibrary/lib/Android.mk deleted file mode 100644 index 3c1ca8764386..000000000000 --- a/tests/SharedLibrary/lib/Android.mk +++ /dev/null @@ -1,17 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) -LOCAL_USE_AAPT2 := true - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_AAPT_FLAGS := --shared-lib -LOCAL_PACKAGE_NAME := SharedLibrary -LOCAL_SDK_VERSION := current - -LOCAL_EXPORT_PACKAGE_RESOURCES := true -LOCAL_PRIVILEGED_MODULE := true -LOCAL_MODULE_TAGS := optional - -LOCAL_PROGUARD_FLAG_FILES := proguard.proguard - -include $(BUILD_PACKAGE) diff --git a/tests/ShowWhenLockedApp/Android.bp b/tests/ShowWhenLockedApp/Android.bp new file mode 100644 index 000000000000..dba564c91059 --- /dev/null +++ b/tests/ShowWhenLockedApp/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "ShowWhenLocked", + srcs: ["**/*.java"], + sdk_version: "current", +} diff --git a/tests/ShowWhenLockedApp/Android.mk b/tests/ShowWhenLockedApp/Android.mk deleted file mode 100644 index 41e0ac42a5a9..000000000000 --- a/tests/ShowWhenLockedApp/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 := ShowWhenLocked -LOCAL_SDK_VERSION := current - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE)
\ No newline at end of file diff --git a/tests/SmokeTest/Android.bp b/tests/SmokeTest/Android.bp new file mode 100644 index 000000000000..bc45ee6799b4 --- /dev/null +++ b/tests/SmokeTest/Android.bp @@ -0,0 +1,6 @@ +android_test { + name: "SmokeTestApp", + // This builds "SmokeTestApp" + srcs: ["src/**/*.java"], + sdk_version: "8", +} diff --git a/tests/SmokeTest/Android.mk b/tests/SmokeTest/Android.mk deleted file mode 100644 index 591a84e95ec7..000000000000 --- a/tests/SmokeTest/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -# This builds "SmokeTestApp" -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := SmokeTestApp - -LOCAL_SDK_VERSION := 8 - -include $(BUILD_PACKAGE) - -# This builds "SmokeTest" -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/SmokeTest/tests/Android.bp b/tests/SmokeTest/tests/Android.bp new file mode 100644 index 000000000000..ceb2d193de79 --- /dev/null +++ b/tests/SmokeTest/tests/Android.bp @@ -0,0 +1,10 @@ +android_test { + name: "SmokeTest", + // Include all test java files. + srcs: ["src/**/*.java"], + // Notice that we don't have to include the src files of SmokeTestApp because, by + // running the tests using an instrumentation targeting SmokeTestApp, we + // automatically get all of its classes loaded into our environment. + instrumentation_for: "SmokeTestApp", + sdk_version: "8", +} diff --git a/tests/SmokeTest/tests/Android.mk b/tests/SmokeTest/tests/Android.mk deleted file mode 100644 index 18e682ee8b46..000000000000 --- a/tests/SmokeTest/tests/Android.mk +++ /dev/null @@ -1,21 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -# Notice that we don't have to include the src files of SmokeTestApp because, by -# running the tests using an instrumentation targeting SmokeTestApp, we -# automatically get all of its classes loaded into our environment. - -LOCAL_PACKAGE_NAME := SmokeTest - -LOCAL_INSTRUMENTATION_FOR := SmokeTestApp - -LOCAL_SDK_VERSION := 8 - -include $(BUILD_PACKAGE) - diff --git a/tests/SmokeTestApps/Android.bp b/tests/SmokeTestApps/Android.bp new file mode 100644 index 000000000000..0feb00040eac --- /dev/null +++ b/tests/SmokeTestApps/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "SmokeTestTriggerApps", + srcs: ["src/**/*.java"], + sdk_version: "current", +} diff --git a/tests/SmokeTestApps/Android.mk b/tests/SmokeTestApps/Android.mk deleted file mode 100644 index 1f564e06bb85..000000000000 --- a/tests/SmokeTestApps/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-java-files-under, src) - -LOCAL_PACKAGE_NAME := SmokeTestTriggerApps -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) - -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/SoundTriggerTestApp/Android.bp b/tests/SoundTriggerTestApp/Android.bp new file mode 100644 index 000000000000..d3a1300b8e12 --- /dev/null +++ b/tests/SoundTriggerTestApp/Android.bp @@ -0,0 +1,7 @@ +android_app { + name: "SoundTriggerTestApp", + srcs: ["**/*.java"], + platform_apis: true, + privileged: true, + certificate: "platform", +} diff --git a/tests/SoundTriggerTestApp/Android.mk b/tests/SoundTriggerTestApp/Android.mk deleted file mode 100644 index 73fb5e8eab54..000000000000 --- a/tests/SoundTriggerTestApp/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := SoundTriggerTestApp -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := optional - -LOCAL_PRIVILEGED_MODULE := true -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/Split/Android.bp b/tests/Split/Android.bp new file mode 100644 index 000000000000..d8c89bab2857 --- /dev/null +++ b/tests/Split/Android.bp @@ -0,0 +1,27 @@ +// +// 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. +// + +android_test { + name: "Split", + srcs: ["**/*.java"], + sdk_version: "current", + package_splits: [ + "mdpi-v4", + "hdpi-v4", + "xhdpi-v4", + "xxhdpi-v4", + ], +} diff --git a/tests/Split/Android.mk b/tests/Split/Android.mk deleted file mode 100644 index 4d15b2d4bd01..000000000000 --- a/tests/Split/Android.mk +++ /dev/null @@ -1,28 +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_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := Split -LOCAL_SDK_VERSION := current - -LOCAL_PACKAGE_SPLITS := mdpi-v4 hdpi-v4 xhdpi-v4 xxhdpi-v4 - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/StatusBar/Android.bp b/tests/StatusBar/Android.bp new file mode 100644 index 000000000000..0b650ed3afc8 --- /dev/null +++ b/tests/StatusBar/Android.bp @@ -0,0 +1,9 @@ +android_test { + name: "StatusBarTest", + srcs: ["**/*.java"], + platform_apis: true, + certificate: "platform", + optimize: { + enabled: false, + }, +} diff --git a/tests/StatusBar/Android.mk b/tests/StatusBar/Android.mk deleted file mode 100644 index e845335684bc..000000000000 --- a/tests/StatusBar/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 := StatusBarTest -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) diff --git a/tests/SystemUIDemoModeController/Android.bp b/tests/SystemUIDemoModeController/Android.bp new file mode 100644 index 000000000000..1e4c43792d70 --- /dev/null +++ b/tests/SystemUIDemoModeController/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "DemoModeController", + srcs: ["**/*.java"], + sdk_version: "current", +} diff --git a/tests/SystemUIDemoModeController/Android.mk b/tests/SystemUIDemoModeController/Android.mk deleted file mode 100644 index cc6fa8dfb5f7..000000000000 --- a/tests/SystemUIDemoModeController/Android.mk +++ /dev/null @@ -1,11 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := DemoModeController -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) diff --git a/tests/TouchLatency/Android.bp b/tests/TouchLatency/Android.bp new file mode 100644 index 000000000000..1174bcb0d4d6 --- /dev/null +++ b/tests/TouchLatency/Android.bp @@ -0,0 +1,10 @@ +android_test { + name: "TouchLatency", + manifest: "app/src/main/AndroidManifest.xml", + // omit gradle 'build' dir + srcs: ["app/src/main/java/**/*.java"], + resource_dirs: ["app/src/main/res"], + aaptflags: ["--auto-add-overlay"], + sdk_version: "current", + test_suites: ["device-tests"], +} diff --git a/tests/TouchLatency/Android.mk b/tests/TouchLatency/Android.mk deleted file mode 100644 index 2334bd84c1f2..000000000000 --- a/tests/TouchLatency/Android.mk +++ /dev/null @@ -1,22 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml - -# omit gradle 'build' dir -LOCAL_SRC_FILES := $(call all-java-files-under,app/src/main/java) - -LOCAL_RESOURCE_DIR := \ - $(LOCAL_PATH)/app/src/main/res - -LOCAL_AAPT_FLAGS := \ - --auto-add-overlay - -LOCAL_PACKAGE_NAME := TouchLatency -LOCAL_SDK_VERSION := current - -LOCAL_COMPATIBILITY_SUITE := device-tests - -include $(BUILD_PACKAGE) diff --git a/tests/TransformTest/Android.bp b/tests/TransformTest/Android.bp new file mode 100644 index 000000000000..fd7aaeb35feb --- /dev/null +++ b/tests/TransformTest/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "TransformTest", + srcs: ["**/*.java"], + sdk_version: "current", +} diff --git a/tests/TransformTest/Android.mk b/tests/TransformTest/Android.mk deleted file mode 100644 index 5340cdd5f29b..000000000000 --- a/tests/TransformTest/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 := TransformTest -LOCAL_SDK_VERSION := current - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/TransitionTests/Android.bp b/tests/TransitionTests/Android.bp new file mode 100644 index 000000000000..57f19e38330d --- /dev/null +++ b/tests/TransitionTests/Android.bp @@ -0,0 +1,10 @@ +android_app { + name: "TransitionTests", + // Only compile source java files in this apk. + srcs: ["src/**/*.java"], + platform_apis: true, + static_libs: ["android-common"], + optimize: { + enabled: false, + }, +} diff --git a/tests/TransitionTests/Android.mk b/tests/TransitionTests/Android.mk deleted file mode 100644 index a696156d1ee8..000000000000 --- a/tests/TransitionTests/Android.mk +++ /dev/null @@ -1,19 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -# Only compile source java files in this apk. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := TransitionTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_STATIC_JAVA_LIBRARIES += android-common - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - -# Use the following include to make our test apk. -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tests/TtsTests/Android.bp b/tests/TtsTests/Android.bp new file mode 100644 index 000000000000..b137523803a6 --- /dev/null +++ b/tests/TtsTests/Android.bp @@ -0,0 +1,26 @@ +// +// Copyright (C) 2011 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { + name: "TtsTests", + srcs: ["**/*.java"], + static_libs: ["mockito-target"], + libs: [ + "android.test.runner", + "android.test.base", + ], + platform_apis: true, +} diff --git a/tests/TtsTests/Android.mk b/tests/TtsTests/Android.mk deleted file mode 100644 index 116cc0a913ee..000000000000 --- a/tests/TtsTests/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# -# Copyright (C) 2011 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_STATIC_JAVA_LIBRARIES := mockito-target -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base - -LOCAL_PACKAGE_NAME := TtsTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) 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/UsesFeature2Test/Android.bp b/tests/UsesFeature2Test/Android.bp new file mode 100644 index 000000000000..a1b77d07ccdc --- /dev/null +++ b/tests/UsesFeature2Test/Android.bp @@ -0,0 +1,21 @@ +// +// 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. +// + +android_test { + name: "UsesFeature2Test", + srcs: ["**/*.java"], + sdk_version: "current", +} diff --git a/tests/UsesFeature2Test/Android.mk b/tests/UsesFeature2Test/Android.mk deleted file mode 100644 index 4cba4ff62dd4..000000000000 --- a/tests/UsesFeature2Test/Android.mk +++ /dev/null @@ -1,26 +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_SRC_FILES := $(call all-subdir-java-files) -LOCAL_PACKAGE_NAME := UsesFeature2Test -LOCAL_SDK_VERSION := current - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/VectorDrawableTest/Android.bp b/tests/VectorDrawableTest/Android.bp new file mode 100644 index 000000000000..13f318ef7c42 --- /dev/null +++ b/tests/VectorDrawableTest/Android.bp @@ -0,0 +1,21 @@ +// +// 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. +// + +android_test { + name: "VectorDrawableTest", + srcs: ["**/*.java"], + platform_apis: true, +} diff --git a/tests/VectorDrawableTest/Android.mk b/tests/VectorDrawableTest/Android.mk deleted file mode 100644 index 155b2bc8560c..000000000000 --- a/tests/VectorDrawableTest/Android.mk +++ /dev/null @@ -1,27 +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_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := VectorDrawableTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/VoiceEnrollment/Android.bp b/tests/VoiceEnrollment/Android.bp new file mode 100644 index 000000000000..e43b38c5a034 --- /dev/null +++ b/tests/VoiceEnrollment/Android.bp @@ -0,0 +1,6 @@ +android_app { + name: "VoiceEnrollment", + srcs: ["**/*.java"], + platform_apis: true, + privileged: true, +} diff --git a/tests/VoiceEnrollment/Android.mk b/tests/VoiceEnrollment/Android.mk deleted file mode 100644 index 725e2bdd74e5..000000000000 --- a/tests/VoiceEnrollment/Android.mk +++ /dev/null @@ -1,13 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := VoiceEnrollment -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := optional - -LOCAL_PRIVILEGED_MODULE := true - -include $(BUILD_PACKAGE) diff --git a/tests/VoiceInteraction/Android.bp b/tests/VoiceInteraction/Android.bp new file mode 100644 index 000000000000..7059473fb63f --- /dev/null +++ b/tests/VoiceInteraction/Android.bp @@ -0,0 +1,5 @@ +android_test { + name: "VoiceInteraction", + srcs: ["**/*.java"], + platform_apis: true, +} diff --git a/tests/VoiceInteraction/Android.mk b/tests/VoiceInteraction/Android.mk deleted file mode 100644 index aa48b42d57ca..000000000000 --- a/tests/VoiceInteraction/Android.mk +++ /dev/null @@ -1,11 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := VoiceInteraction -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) diff --git a/tests/WallpaperTest/Android.bp b/tests/WallpaperTest/Android.bp new file mode 100644 index 000000000000..f68b6ec2452d --- /dev/null +++ b/tests/WallpaperTest/Android.bp @@ -0,0 +1,9 @@ +android_app { + name: "WallpaperTest", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + platform_apis: true, + optimize: { + enabled: false, + }, +} diff --git a/tests/WallpaperTest/Android.mk b/tests/WallpaperTest/Android.mk deleted file mode 100644 index 4815500b68e6..000000000000 --- a/tests/WallpaperTest/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_PACKAGE_NAME := WallpaperTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_PROGUARD_ENABLED := disabled - -include $(BUILD_PACKAGE) - diff --git a/tests/WindowManagerStressTest/Android.bp b/tests/WindowManagerStressTest/Android.bp new file mode 100644 index 000000000000..98749a7e4512 --- /dev/null +++ b/tests/WindowManagerStressTest/Android.bp @@ -0,0 +1,21 @@ +// +// 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: "WindowManagerStressTest", + srcs: ["**/*.java"], + platform_apis: true, +} diff --git a/tests/WindowManagerStressTest/Android.mk b/tests/WindowManagerStressTest/Android.mk deleted file mode 100644 index 6f4403fa86c7..000000000000 --- a/tests/WindowManagerStressTest/Android.mk +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright (C) 2016 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := WindowManagerStressTest -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_MODULE_TAGS := tests - -include $(BUILD_PACKAGE) diff --git a/tests/appwidgets/AppWidgetHostTest/Android.bp b/tests/appwidgets/AppWidgetHostTest/Android.bp new file mode 100644 index 000000000000..24b76136c045 --- /dev/null +++ b/tests/appwidgets/AppWidgetHostTest/Android.bp @@ -0,0 +1,6 @@ +android_app { + name: "AppWidgetHostTest", + srcs: ["**/*.java"], + sdk_version: "current", + certificate: "platform", +} diff --git a/tests/appwidgets/AppWidgetHostTest/Android.mk b/tests/appwidgets/AppWidgetHostTest/Android.mk deleted file mode 100644 index c9e6c6b42b5b..000000000000 --- a/tests/appwidgets/AppWidgetHostTest/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := AppWidgetHostTest -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -include $(BUILD_PACKAGE) diff --git a/tests/appwidgets/AppWidgetProviderTest/Android.bp b/tests/appwidgets/AppWidgetProviderTest/Android.bp new file mode 100644 index 000000000000..a1a599177a01 --- /dev/null +++ b/tests/appwidgets/AppWidgetProviderTest/Android.bp @@ -0,0 +1,6 @@ +android_app { + name: "AppWidgetProvider", + srcs: ["**/*.java"], + sdk_version: "current", + certificate: "platform", +} diff --git a/tests/appwidgets/AppWidgetProviderTest/Android.mk b/tests/appwidgets/AppWidgetProviderTest/Android.mk deleted file mode 100644 index b26c60b38d4a..000000000000 --- a/tests/appwidgets/AppWidgetProviderTest/Android.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_PACKAGE_NAME := AppWidgetProvider -LOCAL_SDK_VERSION := current -LOCAL_CERTIFICATE := platform - -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/Android.bp b/tests/net/Android.bp new file mode 100644 index 000000000000..2539c0f66ce1 --- /dev/null +++ b/tests/net/Android.bp @@ -0,0 +1,27 @@ +//######################################################################## +// Build FrameworksNetTests package +//######################################################################## + +android_test { + name: "FrameworksNetTests", + // Include all test java files. + srcs: ["java/**/*.java"], + static_libs: [ + "frameworks-base-testutils", + "framework-protos", + "androidx.test.rules", + "mockito-target-minus-junit4", + "platform-test-annotations", + "services.core", + "services.ipmemorystore", + "services.net", + ], + libs: [ + "android.test.runner", + "android.test.base", + "android.test.mock", + ], + platform_apis: true, + test_suites: ["device-tests"], + certificate: "platform", +} diff --git a/tests/net/Android.mk b/tests/net/Android.mk deleted file mode 100644 index 7e1b4008c473..000000000000 --- a/tests/net/Android.mk +++ /dev/null @@ -1,37 +0,0 @@ -######################################################################### -# Build FrameworksNetTests package -######################################################################### - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, java) - -LOCAL_STATIC_JAVA_LIBRARIES := \ - frameworks-base-testutils \ - framework-protos \ - android-support-test \ - mockito-target-minus-junit4 \ - platform-test-annotations \ - services.core \ - services.ipmemorystore \ - services.net - -LOCAL_JAVA_LIBRARIES := \ - android.test.runner \ - android.test.base \ - android.test.mock - -LOCAL_PACKAGE_NAME := FrameworksNetTests -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_COMPATIBILITY_SUITE := device-tests - -LOCAL_CERTIFICATE := platform - -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk - -include $(BUILD_PACKAGE) diff --git a/tests/net/AndroidManifest.xml b/tests/net/AndroidManifest.xml index 6dae3f11b371..dcacb6dd7b10 100644 --- a/tests/net/AndroidManifest.xml +++ b/tests/net/AndroidManifest.xml @@ -51,7 +51,7 @@ </application> <instrumentation - android:name="android.support.test.runner.AndroidJUnitRunner" + android:name="androidx.test.runner.AndroidJUnitRunner" android:targetPackage="com.android.frameworks.tests.net" android:label="Frameworks Networking Tests" /> </manifest> diff --git a/tests/net/AndroidTest.xml b/tests/net/AndroidTest.xml index 6e020a3daa2b..939ae493b280 100644 --- a/tests/net/AndroidTest.xml +++ b/tests/net/AndroidTest.xml @@ -22,7 +22,7 @@ <option name="test-tag" value="FrameworksNetTests" /> <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.frameworks.tests.net" /> - <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/tests/net/OWNERS b/tests/net/OWNERS index 7311eee32a4c..d3836d4c6c57 100644 --- a/tests/net/OWNERS +++ b/tests/net/OWNERS @@ -1,8 +1,8 @@ set noparent codewiz@google.com -ek@google.com jchalard@google.com +junyulai@google.com lorenzo@google.com reminv@google.com satk@google.com diff --git a/tests/net/java/android/app/usage/NetworkStatsManagerTest.java b/tests/net/java/android/app/usage/NetworkStatsManagerTest.java index 25e147416d2c..fd555c1e9115 100644 --- a/tests/net/java/android/app/usage/NetworkStatsManagerTest.java +++ b/tests/net/java/android/app/usage/NetworkStatsManagerTest.java @@ -26,7 +26,6 @@ import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -38,9 +37,10 @@ import android.net.NetworkStats.Entry; import android.net.NetworkStatsHistory; import android.net.NetworkTemplate; import android.os.RemoteException; -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/tests/net/java/android/net/ConnectivityManagerTest.java b/tests/net/java/android/net/ConnectivityManagerTest.java index 6174c6ca6190..7ede14428a4f 100644 --- a/tests/net/java/android/net/ConnectivityManagerTest.java +++ b/tests/net/java/android/net/ConnectivityManagerTest.java @@ -34,7 +34,6 @@ import static android.net.NetworkCapabilities.TRANSPORT_WIFI; 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.any; @@ -47,19 +46,20 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.PendingIntent; +import android.content.Context; +import android.content.pm.ApplicationInfo; import android.net.ConnectivityManager; +import android.net.ConnectivityManager.NetworkCallback; import android.net.NetworkCapabilities; -import android.content.Context; +import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.Messenger; -import android.content.pm.ApplicationInfo; -import android.os.Build.VERSION_CODES; -import android.net.ConnectivityManager.NetworkCallback; -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/net/java/android/net/DnsPacketTest.java b/tests/net/java/android/net/DnsPacketTest.java index 032e52666970..9ede2b85af00 100644 --- a/tests/net/java/android/net/DnsPacketTest.java +++ b/tests/net/java/android/net/DnsPacketTest.java @@ -20,8 +20,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; 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.Test; import org.junit.runner.RunWith; @@ -36,19 +36,19 @@ public class DnsPacketTest { int qCount, int aCount, int nsCount, int arCount) { assertEquals(header.id, id); assertEquals(header.flags, flag); - assertEquals(header.getSectionCount(DnsPacket.QDSECTION), qCount); - assertEquals(header.getSectionCount(DnsPacket.ANSECTION), aCount); - assertEquals(header.getSectionCount(DnsPacket.NSSECTION), nsCount); - assertEquals(header.getSectionCount(DnsPacket.ARSECTION), arCount); + assertEquals(header.getRecordCount(DnsPacket.QDSECTION), qCount); + assertEquals(header.getRecordCount(DnsPacket.ANSECTION), aCount); + assertEquals(header.getRecordCount(DnsPacket.NSSECTION), nsCount); + assertEquals(header.getRecordCount(DnsPacket.ARSECTION), arCount); } - private void assertSectionParses(DnsPacket.DnsSection section, String dname, + private void assertRecordParses(DnsPacket.DnsRecord record, String dname, int dtype, int dclass, int ttl, byte[] rr) { - assertEquals(section.dName, dname); - assertEquals(section.nsType, dtype); - assertEquals(section.nsClass, dclass); - assertEquals(section.ttl, ttl); - assertTrue(Arrays.equals(section.getRR(), rr)); + assertEquals(record.dName, dname); + assertEquals(record.nsType, dtype); + assertEquals(record.nsClass, dclass); + assertEquals(record.ttl, ttl); + assertTrue(Arrays.equals(record.getRR(), rr)); } class TestDnsPacket extends DnsPacket { @@ -59,8 +59,8 @@ public class DnsPacketTest { public DnsHeader getHeader() { return mHeader; } - public List<DnsSection> getSectionList(int secType) { - return mSections[secType]; + public List<DnsRecord> getRecordList(int secType) { + return mRecords[secType]; } } @@ -101,16 +101,16 @@ public class DnsPacketTest { // Header part assertHeaderParses(packet.getHeader(), 0x5566, 0x8180, 1, 1, 0, 0); - // Section part - List<DnsPacket.DnsSection> qdSectionList = - packet.getSectionList(DnsPacket.QDSECTION); - assertEquals(qdSectionList.size(), 1); - assertSectionParses(qdSectionList.get(0), "www.google.com", 1, 1, 0, null); + // Record part + List<DnsPacket.DnsRecord> qdRecordList = + packet.getRecordList(DnsPacket.QDSECTION); + assertEquals(qdRecordList.size(), 1); + assertRecordParses(qdRecordList.get(0), "www.google.com", 1, 1, 0, null); - List<DnsPacket.DnsSection> anSectionList = - packet.getSectionList(DnsPacket.ANSECTION); - assertEquals(anSectionList.size(), 1); - assertSectionParses(anSectionList.get(0), "www.google.com", 1, 1, 0x12b, + List<DnsPacket.DnsRecord> anRecordList = + packet.getRecordList(DnsPacket.ANSECTION); + assertEquals(anRecordList.size(), 1); + assertRecordParses(anRecordList.get(0), "www.google.com", 1, 1, 0x12b, new byte[]{ (byte) 0xac, (byte) 0xd9, (byte) 0xa1, (byte) 0x84 }); } @@ -143,16 +143,16 @@ public class DnsPacketTest { // Header part assertHeaderParses(packet.getHeader(), 0x7722, 0x8180, 1, 1, 0, 0); - // Section part - List<DnsPacket.DnsSection> qdSectionList = - packet.getSectionList(DnsPacket.QDSECTION); - assertEquals(qdSectionList.size(), 1); - assertSectionParses(qdSectionList.get(0), "www.google.com", 28, 1, 0, null); + // Record part + List<DnsPacket.DnsRecord> qdRecordList = + packet.getRecordList(DnsPacket.QDSECTION); + assertEquals(qdRecordList.size(), 1); + assertRecordParses(qdRecordList.get(0), "www.google.com", 28, 1, 0, null); - List<DnsPacket.DnsSection> anSectionList = - packet.getSectionList(DnsPacket.ANSECTION); - assertEquals(anSectionList.size(), 1); - assertSectionParses(anSectionList.get(0), "www.google.com", 28, 1, 0x37, + List<DnsPacket.DnsRecord> anRecordList = + packet.getRecordList(DnsPacket.ANSECTION); + assertEquals(anRecordList.size(), 1); + assertRecordParses(anRecordList.get(0), "www.google.com", 28, 1, 0x37, new byte[]{ 0x24, 0x04, 0x68, 0x00, 0x40, 0x05, 0x08, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04 }); } diff --git a/tests/net/java/android/net/IpMemoryStoreTest.java b/tests/net/java/android/net/IpMemoryStoreTest.java index eae9710215ca..57ecc8f38c69 100644 --- a/tests/net/java/android/net/IpMemoryStoreTest.java +++ b/tests/net/java/android/net/IpMemoryStoreTest.java @@ -17,8 +17,9 @@ package android.net; import android.content.Context; -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/net/java/android/net/IpPrefixTest.java b/tests/net/java/android/net/IpPrefixTest.java index 1f1ba2e6a603..3cc0e368d381 100644 --- a/tests/net/java/android/net/IpPrefixTest.java +++ b/tests/net/java/android/net/IpPrefixTest.java @@ -25,14 +25,15 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import android.os.Parcel; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import java.net.InetAddress; -import java.util.Random; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; -import org.junit.runner.RunWith; import org.junit.Test; +import org.junit.runner.RunWith; + +import java.net.InetAddress; +import java.util.Random; @RunWith(AndroidJUnit4.class) @SmallTest diff --git a/tests/net/java/android/net/IpSecAlgorithmTest.java b/tests/net/java/android/net/IpSecAlgorithmTest.java index 85e836179b5e..8e9d08c705f3 100644 --- a/tests/net/java/android/net/IpSecAlgorithmTest.java +++ b/tests/net/java/android/net/IpSecAlgorithmTest.java @@ -20,17 +20,18 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import android.os.Parcel; -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.util.AbstractMap.SimpleEntry; import java.util.Arrays; import java.util.Map.Entry; import java.util.Random; -import org.junit.Test; -import org.junit.runner.RunWith; - /** Unit tests for {@link IpSecAlgorithm}. */ @SmallTest @RunWith(AndroidJUnit4.class) diff --git a/tests/net/java/android/net/IpSecConfigTest.java b/tests/net/java/android/net/IpSecConfigTest.java index be1a45501bb1..215506c05c88 100644 --- a/tests/net/java/android/net/IpSecConfigTest.java +++ b/tests/net/java/android/net/IpSecConfigTest.java @@ -22,7 +22,8 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import android.os.Parcel; -import android.support.test.filters.SmallTest; + +import androidx.test.filters.SmallTest; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/tests/net/java/android/net/IpSecManagerTest.java b/tests/net/java/android/net/IpSecManagerTest.java index 8160924c41fa..730e2d56bd78 100644 --- a/tests/net/java/android/net/IpSecManagerTest.java +++ b/tests/net/java/android/net/IpSecManagerTest.java @@ -19,6 +19,7 @@ package android.net; import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.IPPROTO_UDP; import static android.system.OsConstants.SOCK_DGRAM; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; @@ -30,21 +31,22 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import android.test.mock.MockContext; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.system.Os; +import android.test.mock.MockContext; -import com.android.server.IpSecService; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; -import java.net.InetAddress; -import java.net.Socket; -import java.net.UnknownHostException; +import com.android.server.IpSecService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import java.net.InetAddress; +import java.net.Socket; +import java.net.UnknownHostException; + /** Unit tests for {@link IpSecManager}. */ @SmallTest @RunWith(AndroidJUnit4.class) diff --git a/tests/net/java/android/net/IpSecTransformTest.java b/tests/net/java/android/net/IpSecTransformTest.java index ffd1f063e48b..2308a3c9b477 100644 --- a/tests/net/java/android/net/IpSecTransformTest.java +++ b/tests/net/java/android/net/IpSecTransformTest.java @@ -19,7 +19,7 @@ package android.net; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import android.support.test.filters.SmallTest; +import androidx.test.filters.SmallTest; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/tests/net/java/android/net/LinkAddressTest.java b/tests/net/java/android/net/LinkAddressTest.java index c1ad94669508..be7bd1b108b0 100644 --- a/tests/net/java/android/net/LinkAddressTest.java +++ b/tests/net/java/android/net/LinkAddressTest.java @@ -26,6 +26,7 @@ import static android.system.OsConstants.RT_SCOPE_HOST; 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 static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; @@ -33,24 +34,22 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import android.os.Parcel; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + import java.net.Inet4Address; -import java.net.Inet6Address; import java.net.InetAddress; import java.net.InterfaceAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; import java.util.List; -import android.os.Parcel; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.runner.RunWith; -import org.junit.Test; - @RunWith(AndroidJUnit4.class) @SmallTest public class LinkAddressTest { diff --git a/tests/net/java/android/net/LinkPropertiesTest.java b/tests/net/java/android/net/LinkPropertiesTest.java index bdde0961909d..9a7d48723e8c 100644 --- a/tests/net/java/android/net/LinkPropertiesTest.java +++ b/tests/net/java/android/net/LinkPropertiesTest.java @@ -24,11 +24,12 @@ import static org.junit.Assert.fail; import android.net.LinkProperties.CompareResult; import android.net.LinkProperties.ProvisioningChange; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.system.OsConstants; import android.util.ArraySet; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.internal.util.TestUtils; import org.junit.Test; diff --git a/tests/net/java/android/net/MacAddressTest.java b/tests/net/java/android/net/MacAddressTest.java index 8be807de9b06..b0e5fb1a65f2 100644 --- a/tests/net/java/android/net/MacAddressTest.java +++ b/tests/net/java/android/net/MacAddressTest.java @@ -18,12 +18,12 @@ package android.net; import static org.junit.Assert.assertArrayEquals; 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.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.Test; import org.junit.runner.RunWith; diff --git a/tests/net/java/android/net/NetworkCapabilitiesTest.java b/tests/net/java/android/net/NetworkCapabilitiesTest.java index 84f735985b0d..4d4915b83ca4 100644 --- a/tests/net/java/android/net/NetworkCapabilitiesTest.java +++ b/tests/net/java/android/net/NetworkCapabilitiesTest.java @@ -42,10 +42,11 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import android.os.Parcel; -import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.SmallTest; import android.util.ArraySet; +import androidx.test.runner.AndroidJUnit4; + import org.junit.Test; import org.junit.runner.RunWith; diff --git a/tests/net/java/android/net/NetworkStatsHistoryTest.java b/tests/net/java/android/net/NetworkStatsHistoryTest.java index 301d04d5cf6f..13558cd51c28 100644 --- a/tests/net/java/android/net/NetworkStatsHistoryTest.java +++ b/tests/net/java/android/net/NetworkStatsHistoryTest.java @@ -16,14 +16,14 @@ package android.net; +import static android.net.NetworkStatsHistory.DataStreamUtils.readVarLong; +import static android.net.NetworkStatsHistory.DataStreamUtils.writeVarLong; +import static android.net.NetworkStatsHistory.Entry.UNKNOWN; import static android.net.NetworkStatsHistory.FIELD_ALL; import static android.net.NetworkStatsHistory.FIELD_OPERATIONS; import static android.net.NetworkStatsHistory.FIELD_RX_BYTES; import static android.net.NetworkStatsHistory.FIELD_RX_PACKETS; import static android.net.NetworkStatsHistory.FIELD_TX_BYTES; -import static android.net.NetworkStatsHistory.DataStreamUtils.readVarLong; -import static android.net.NetworkStatsHistory.DataStreamUtils.writeVarLong; -import static android.net.NetworkStatsHistory.Entry.UNKNOWN; import static android.net.TrafficStats.GB_IN_BYTES; import static android.net.TrafficStats.MB_IN_BYTES; import static android.text.format.DateUtils.DAY_IN_MILLIS; @@ -32,29 +32,30 @@ import static android.text.format.DateUtils.MINUTE_IN_MILLIS; import static android.text.format.DateUtils.SECOND_IN_MILLIS; import static android.text.format.DateUtils.WEEK_IN_MILLIS; import static android.text.format.DateUtils.YEAR_IN_MILLIS; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; 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 android.test.suitebuilder.annotation.Suppress; import android.util.Log; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.frameworks.tests.net.R; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.util.Random; -import org.junit.After; -import org.junit.Test; -import org.junit.runner.RunWith; - @RunWith(AndroidJUnit4.class) @SmallTest public class NetworkStatsHistoryTest { diff --git a/tests/net/java/android/net/NetworkStatsTest.java b/tests/net/java/android/net/NetworkStatsTest.java index 2c2afd4c6f1c..b5b0384ca599 100644 --- a/tests/net/java/android/net/NetworkStatsTest.java +++ b/tests/net/java/android/net/NetworkStatsTest.java @@ -19,6 +19,7 @@ package android.net; import static android.net.NetworkStats.DEFAULT_NETWORK_ALL; import static android.net.NetworkStats.DEFAULT_NETWORK_NO; import static android.net.NetworkStats.DEFAULT_NETWORK_YES; +import static android.net.NetworkStats.IFACE_ALL; import static android.net.NetworkStats.INTERFACES_ALL; import static android.net.NetworkStats.METERED_ALL; import static android.net.NetworkStats.METERED_NO; @@ -26,31 +27,30 @@ import static android.net.NetworkStats.METERED_YES; import static android.net.NetworkStats.ROAMING_ALL; import static android.net.NetworkStats.ROAMING_NO; import static android.net.NetworkStats.ROAMING_YES; -import static android.net.NetworkStats.SET_DEFAULT; -import static android.net.NetworkStats.SET_FOREGROUND; +import static android.net.NetworkStats.SET_ALL; import static android.net.NetworkStats.SET_DBG_VPN_IN; import static android.net.NetworkStats.SET_DBG_VPN_OUT; -import static android.net.NetworkStats.SET_ALL; -import static android.net.NetworkStats.IFACE_ALL; +import static android.net.NetworkStats.SET_DEFAULT; +import static android.net.NetworkStats.SET_FOREGROUND; import static android.net.NetworkStats.TAG_ALL; import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import android.net.NetworkStats.Entry; import android.os.Process; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.filters.SmallTest; import android.util.ArrayMap; -import com.google.android.collect.Sets; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; -import java.util.HashSet; +import com.google.android.collect.Sets; -import org.junit.runner.RunWith; import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.HashSet; @RunWith(AndroidJUnit4.class) @SmallTest diff --git a/tests/net/java/android/net/NetworkTest.java b/tests/net/java/android/net/NetworkTest.java index 94d01e91d03b..0bee7cd29d29 100644 --- a/tests/net/java/android/net/NetworkTest.java +++ b/tests/net/java/android/net/NetworkTest.java @@ -25,22 +25,22 @@ import android.net.LocalServerSocket; import android.net.LocalSocket; import android.net.LocalSocketAddress; import android.net.Network; -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.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; -import java.io.IOException; import java.net.DatagramSocket; -import java.net.InetAddress; import java.net.Inet6Address; +import java.net.InetAddress; import java.net.SocketException; import java.util.Objects; -import org.junit.Test; -import org.junit.runner.RunWith; - @RunWith(AndroidJUnit4.class) @SmallTest public class NetworkTest { diff --git a/tests/net/java/android/net/NetworkUtilsTest.java b/tests/net/java/android/net/NetworkUtilsTest.java index ba6e0f299057..7748288aeb05 100644 --- a/tests/net/java/android/net/NetworkUtilsTest.java +++ b/tests/net/java/android/net/NetworkUtilsTest.java @@ -18,7 +18,7 @@ package android.net; import static junit.framework.Assert.assertEquals; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; @@ -27,7 +27,7 @@ import java.math.BigInteger; import java.util.TreeSet; @RunWith(AndroidJUnit4.class) -@android.support.test.filters.SmallTest +@androidx.test.filters.SmallTest public class NetworkUtilsTest { @Test public void testRoutedIPv4AddressCount() { diff --git a/tests/net/java/android/net/StaticIpConfigurationTest.java b/tests/net/java/android/net/StaticIpConfigurationTest.java index 2b5ad378e0ae..8449ca76d580 100644 --- a/tests/net/java/android/net/StaticIpConfigurationTest.java +++ b/tests/net/java/android/net/StaticIpConfigurationTest.java @@ -23,8 +23,9 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import android.os.Parcel; -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/tests/net/java/android/net/UidRangeTest.java b/tests/net/java/android/net/UidRangeTest.java index 860d73293c2b..ea1df096e208 100644 --- a/tests/net/java/android/net/UidRangeTest.java +++ b/tests/net/java/android/net/UidRangeTest.java @@ -16,15 +16,13 @@ package android.net; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.filters.SmallTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; -import org.junit.runner.RunWith; import org.junit.Test; +import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) @SmallTest diff --git a/tests/net/java/android/net/captiveportal/CaptivePortalProbeSpecTest.java b/tests/net/java/android/net/captiveportal/CaptivePortalProbeSpecTest.java index 40a8b3eb9793..f948086ac79b 100644 --- a/tests/net/java/android/net/captiveportal/CaptivePortalProbeSpecTest.java +++ b/tests/net/java/android/net/captiveportal/CaptivePortalProbeSpecTest.java @@ -20,14 +20,13 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; import static junit.framework.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 org.junit.Test; import org.junit.runner.RunWith; import java.net.MalformedURLException; -import java.net.URL; import java.text.ParseException; @RunWith(AndroidJUnit4.class) diff --git a/tests/net/java/android/net/dhcp/DhcpServingParamsParcelExtTest.java b/tests/net/java/android/net/dhcp/DhcpServingParamsParcelExtTest.java index 4a6f20a043bb..e01ac7f08c2f 100644 --- a/tests/net/java/android/net/dhcp/DhcpServingParamsParcelExtTest.java +++ b/tests/net/java/android/net/dhcp/DhcpServingParamsParcelExtTest.java @@ -25,8 +25,9 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import android.net.LinkAddress; -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/net/java/android/net/ip/InterfaceControllerTest.java b/tests/net/java/android/net/ip/InterfaceControllerTest.java index d27a4f99cfd9..7a56b3aafee7 100644 --- a/tests/net/java/android/net/ip/InterfaceControllerTest.java +++ b/tests/net/java/android/net/ip/InterfaceControllerTest.java @@ -28,8 +28,9 @@ import android.net.InetAddresses; import android.net.InterfaceConfigurationParcel; import android.net.LinkAddress; 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; diff --git a/tests/net/java/android/net/ip/IpServerTest.java b/tests/net/java/android/net/ip/IpServerTest.java index f7542a7b4bfa..05912e85426a 100644 --- a/tests/net/java/android/net/ip/IpServerTest.java +++ b/tests/net/java/android/net/ip/IpServerTest.java @@ -65,10 +65,11 @@ import android.net.util.SharedLog; import android.os.INetworkManagementService; import android.os.RemoteException; import android.os.test.TestLooper; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.text.TextUtils; +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/tests/net/java/android/net/ipmemorystore/ParcelableTests.java b/tests/net/java/android/net/ipmemorystore/ParcelableTests.java index 1fc67a8212ae..76cccc95742d 100644 --- a/tests/net/java/android/net/ipmemorystore/ParcelableTests.java +++ b/tests/net/java/android/net/ipmemorystore/ParcelableTests.java @@ -21,8 +21,9 @@ import static org.junit.Assert.assertTrue; import android.os.Parcel; import android.os.Parcelable; -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/tests/net/java/android/net/netlink/ConntrackMessageTest.java b/tests/net/java/android/net/netlink/ConntrackMessageTest.java index 3aab9426bc3f..5c8675770d50 100644 --- a/tests/net/java/android/net/netlink/ConntrackMessageTest.java +++ b/tests/net/java/android/net/netlink/ConntrackMessageTest.java @@ -20,19 +20,18 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assume.assumeTrue; import android.system.OsConstants; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import libcore.util.HexEncoding; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import org.junit.runner.RunWith; import org.junit.Test; +import org.junit.runner.RunWith; import java.net.Inet4Address; import java.net.InetAddress; -import java.nio.ByteBuffer; import java.nio.ByteOrder; -import java.util.Arrays; - @RunWith(AndroidJUnit4.class) @SmallTest diff --git a/tests/net/java/android/net/netlink/InetDiagSocketTest.java b/tests/net/java/android/net/netlink/InetDiagSocketTest.java index 122edbaf078c..b6038aba089c 100644 --- a/tests/net/java/android/net/netlink/InetDiagSocketTest.java +++ b/tests/net/java/android/net/netlink/InetDiagSocketTest.java @@ -25,8 +25,6 @@ import static android.system.OsConstants.IPPROTO_TCP; import static android.system.OsConstants.IPPROTO_UDP; import static android.system.OsConstants.SOCK_DGRAM; import static android.system.OsConstants.SOCK_STREAM; -import static android.system.OsConstants.SOL_SOCKET; -import static android.system.OsConstants.SO_RCVTIMEO; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -38,30 +36,26 @@ import android.content.Context; import android.net.ConnectivityManager; import android.net.netlink.StructNlMsgHdr; import android.os.Process; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.filters.SmallTest; -import android.support.test.InstrumentationRegistry; import android.system.Os; -import android.system.StructTimeval; -import android.util.Log; + +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import libcore.util.HexEncoding; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + import java.io.FileDescriptor; -import java.net.DatagramSocket; -import java.net.InetAddress; import java.net.Inet4Address; import java.net.Inet6Address; +import java.net.InetAddress; import java.net.InetSocketAddress; -import java.net.ServerSocket; -import java.net.Socket; -import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import libcore.util.HexEncoding; - -import org.junit.Before; -import org.junit.runner.RunWith; -import org.junit.Test; - @RunWith(AndroidJUnit4.class) @SmallTest public class InetDiagSocketTest { diff --git a/tests/net/java/android/net/netlink/NetlinkErrorMessageTest.java b/tests/net/java/android/net/netlink/NetlinkErrorMessageTest.java index 6647760f2ea9..44ab6051d5b3 100644 --- a/tests/net/java/android/net/netlink/NetlinkErrorMessageTest.java +++ b/tests/net/java/android/net/netlink/NetlinkErrorMessageTest.java @@ -16,9 +16,10 @@ package android.net.netlink; -import static android.net.netlink.StructNlMsgHdr.NLM_F_REQUEST; import static android.net.netlink.StructNlMsgHdr.NLM_F_ACK; import static android.net.netlink.StructNlMsgHdr.NLM_F_REPLACE; +import static android.net.netlink.StructNlMsgHdr.NLM_F_REQUEST; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -27,18 +28,17 @@ import android.net.netlink.NetlinkConstants; import android.net.netlink.NetlinkErrorMessage; import android.net.netlink.NetlinkMessage; import android.net.netlink.StructNlMsgErr; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.filters.SmallTest; -import android.util.Log; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -import org.junit.runner.RunWith; -import org.junit.Test; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; import libcore.util.HexEncoding; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; @RunWith(AndroidJUnit4.class) @SmallTest diff --git a/tests/net/java/android/net/netlink/NetlinkSocketTest.java b/tests/net/java/android/net/netlink/NetlinkSocketTest.java index 11be40b4ce33..3916578a3405 100644 --- a/tests/net/java/android/net/netlink/NetlinkSocketTest.java +++ b/tests/net/java/android/net/netlink/NetlinkSocketTest.java @@ -18,31 +18,29 @@ package android.net.netlink; import static android.net.netlink.NetlinkSocket.DEFAULT_RECV_BUFSIZE; import static android.system.OsConstants.NETLINK_ROUTE; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import android.net.netlink.NetlinkSocket; import android.net.netlink.RtNetlinkNeighborMessage; -import android.net.netlink.StructNdMsg; import android.net.netlink.StructNlMsgHdr; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.filters.SmallTest; -import android.system.ErrnoException; import android.system.NetlinkSocketAddress; import android.system.Os; -import android.util.Log; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import libcore.io.IoUtils; -import java.io.InterruptedIOException; +import org.junit.Test; +import org.junit.runner.RunWith; + import java.io.FileDescriptor; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import org.junit.runner.RunWith; -import org.junit.Test; - - @RunWith(AndroidJUnit4.class) @SmallTest public class NetlinkSocketTest { diff --git a/tests/net/java/android/net/netlink/RtNetlinkNeighborMessageTest.java b/tests/net/java/android/net/netlink/RtNetlinkNeighborMessageTest.java index c9fd74fcddd9..81625227f36e 100644 --- a/tests/net/java/android/net/netlink/RtNetlinkNeighborMessageTest.java +++ b/tests/net/java/android/net/netlink/RtNetlinkNeighborMessageTest.java @@ -25,23 +25,22 @@ import android.net.netlink.NetlinkMessage; import android.net.netlink.RtNetlinkNeighborMessage; import android.net.netlink.StructNdMsg; import android.net.netlink.StructNlMsgHdr; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.filters.SmallTest; import android.system.OsConstants; -import android.util.Log; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import libcore.util.HexEncoding; + +import org.junit.Test; +import org.junit.runner.RunWith; import java.net.Inet4Address; import java.net.InetAddress; -import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays; -import org.junit.runner.RunWith; -import org.junit.Test; - -import libcore.util.HexEncoding; - @RunWith(AndroidJUnit4.class) @SmallTest public class RtNetlinkNeighborMessageTest { diff --git a/tests/net/java/android/net/nsd/NsdManagerTest.java b/tests/net/java/android/net/nsd/NsdManagerTest.java index 0a5a6aae6e9c..2d2bccba7eb9 100644 --- a/tests/net/java/android/net/nsd/NsdManagerTest.java +++ b/tests/net/java/android/net/nsd/NsdManagerTest.java @@ -16,29 +16,31 @@ package android.net.nsd; +import static com.android.internal.util.TestUtils.waitForIdleHandler; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static com.android.internal.util.TestUtils.waitForIdleHandler; -import android.os.HandlerThread; +import android.content.Context; import android.os.Handler; +import android.os.HandlerThread; import android.os.Looper; -import android.content.Context; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.os.Message; import android.os.Messenger; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.internal.util.AsyncChannel; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -46,8 +48,6 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import java.util.function.Consumer; - @RunWith(AndroidJUnit4.class) @SmallTest public class NsdManagerTest { diff --git a/tests/net/java/android/net/nsd/NsdServiceInfoTest.java b/tests/net/java/android/net/nsd/NsdServiceInfoTest.java index e48b52225c97..94dfc7515c67 100644 --- a/tests/net/java/android/net/nsd/NsdServiceInfoTest.java +++ b/tests/net/java/android/net/nsd/NsdServiceInfoTest.java @@ -24,20 +24,18 @@ import static org.junit.Assert.fail; import android.os.Bundle; import android.os.Parcel; import android.os.StrictMode; -import android.net.nsd.NsdServiceInfo; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import android.util.Log; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.net.InetAddress; -import java.net.UnknownHostException; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Arrays; +import java.util.Map; + @RunWith(AndroidJUnit4.class) @SmallTest public class NsdServiceInfoTest { diff --git a/tests/net/java/android/net/shared/Inet4AddressUtilsTest.java b/tests/net/java/android/net/shared/Inet4AddressUtilsTest.java index 6da851400af1..35f8c790ad42 100644 --- a/tests/net/java/android/net/shared/Inet4AddressUtilsTest.java +++ b/tests/net/java/android/net/shared/Inet4AddressUtilsTest.java @@ -32,8 +32,9 @@ import static junit.framework.Assert.assertEquals; import static org.junit.Assert.fail; import android.net.InetAddresses; -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/tests/net/java/android/net/shared/InitialConfigurationTest.java b/tests/net/java/android/net/shared/InitialConfigurationTest.java index 78792bdfe4f9..27bc13d75440 100644 --- a/tests/net/java/android/net/shared/InitialConfigurationTest.java +++ b/tests/net/java/android/net/shared/InitialConfigurationTest.java @@ -24,8 +24,9 @@ import static org.junit.Assert.assertNotEquals; import android.net.IpPrefix; import android.net.LinkAddress; -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/net/java/android/net/shared/IpConfigurationParcelableUtilTest.java b/tests/net/java/android/net/shared/IpConfigurationParcelableUtilTest.java index fb4d43c367db..3e86e77183ec 100644 --- a/tests/net/java/android/net/shared/IpConfigurationParcelableUtilTest.java +++ b/tests/net/java/android/net/shared/IpConfigurationParcelableUtilTest.java @@ -27,8 +27,9 @@ import android.net.DhcpResults; import android.net.LinkAddress; import android.net.StaticIpConfiguration; import android.net.apf.ApfCapabilities; -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/net/java/android/net/shared/LinkPropertiesParcelableUtilTest.java b/tests/net/java/android/net/shared/LinkPropertiesParcelableUtilTest.java index b6d01dbc1cac..2d0e03d3187a 100644 --- a/tests/net/java/android/net/shared/LinkPropertiesParcelableUtilTest.java +++ b/tests/net/java/android/net/shared/LinkPropertiesParcelableUtilTest.java @@ -29,8 +29,9 @@ import android.net.LinkProperties; import android.net.ProxyInfo; import android.net.RouteInfo; import android.net.Uri; -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/net/java/android/net/shared/ProvisioningConfigurationTest.java b/tests/net/java/android/net/shared/ProvisioningConfigurationTest.java index 6ea47d2160a7..6fad89ec50b2 100644 --- a/tests/net/java/android/net/shared/ProvisioningConfigurationTest.java +++ b/tests/net/java/android/net/shared/ProvisioningConfigurationTest.java @@ -27,8 +27,9 @@ import android.net.LinkAddress; import android.net.Network; import android.net.StaticIpConfiguration; import android.net.apf.ApfCapabilities; -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/net/java/android/net/util/InterfaceParamsTest.java b/tests/net/java/android/net/util/InterfaceParamsTest.java index 21728afdd5de..141455cb179a 100644 --- a/tests/net/java/android/net/util/InterfaceParamsTest.java +++ b/tests/net/java/android/net/util/InterfaceParamsTest.java @@ -21,13 +21,12 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; 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 org.junit.Test; import org.junit.runner.RunWith; - @RunWith(AndroidJUnit4.class) @SmallTest public class InterfaceParamsTest { diff --git a/tests/net/java/android/net/util/InterfaceSetTest.java b/tests/net/java/android/net/util/InterfaceSetTest.java index 8012838d16fc..ea084b607868 100644 --- a/tests/net/java/android/net/util/InterfaceSetTest.java +++ b/tests/net/java/android/net/util/InterfaceSetTest.java @@ -20,8 +20,8 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.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 org.junit.Test; import org.junit.runner.RunWith; diff --git a/tests/net/java/android/net/util/IpUtilsTest.java b/tests/net/java/android/net/util/IpUtilsTest.java index 8903bf923fbf..193d85d0013a 100644 --- a/tests/net/java/android/net/util/IpUtilsTest.java +++ b/tests/net/java/android/net/util/IpUtilsTest.java @@ -18,13 +18,13 @@ package android.net.util; import static org.junit.Assert.assertEquals; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.filters.SmallTest; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; -import java.nio.ByteBuffer; - -import org.junit.runner.RunWith; import org.junit.Test; +import org.junit.runner.RunWith; + +import java.nio.ByteBuffer; @RunWith(AndroidJUnit4.class) @SmallTest diff --git a/tests/net/java/android/net/util/SharedLogTest.java b/tests/net/java/android/net/util/SharedLogTest.java index 86048604e95f..e1dba3677121 100644 --- a/tests/net/java/android/net/util/SharedLogTest.java +++ b/tests/net/java/android/net/util/SharedLogTest.java @@ -19,16 +19,14 @@ package android.net.util; import static org.junit.Assert.assertEquals; 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 org.junit.Test; import org.junit.runner.RunWith; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Vector; @RunWith(AndroidJUnit4.class) @SmallTest diff --git a/tests/net/java/android/net/util/VersionedBroadcastListenerTest.java b/tests/net/java/android/net/util/VersionedBroadcastListenerTest.java index 39f59f1c0d69..0d27d5bf0a11 100644 --- a/tests/net/java/android/net/util/VersionedBroadcastListenerTest.java +++ b/tests/net/java/android/net/util/VersionedBroadcastListenerTest.java @@ -26,21 +26,19 @@ import android.os.Handler; import android.os.Looper; 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.util.test.BroadcastInterceptingContext; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; -import org.junit.runner.RunWith; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.MockitoAnnotations; - @RunWith(AndroidJUnit4.class) @SmallTest public class VersionedBroadcastListenerTest { diff --git a/tests/net/java/com/android/internal/net/NetworkStatsFactoryTest.java b/tests/net/java/com/android/internal/net/NetworkStatsFactoryTest.java index 90bf7b1a83ed..4ec4fdd80a00 100644 --- a/tests/net/java/com/android/internal/net/NetworkStatsFactoryTest.java +++ b/tests/net/java/com/android/internal/net/NetworkStatsFactoryTest.java @@ -24,32 +24,35 @@ import static android.net.NetworkStats.SET_DEFAULT; import static android.net.NetworkStats.SET_FOREGROUND; import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; + import static com.android.server.NetworkManagementSocketTagger.kernelToTag; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import android.content.res.Resources; import android.net.NetworkStats; import android.net.TrafficStats; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import com.android.frameworks.tests.net.R; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.InputStream; -import java.io.OutputStream; +import com.android.frameworks.tests.net.R; import libcore.io.IoUtils; import libcore.io.Streams; -import org.junit.runner.RunWith; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.InputStream; +import java.io.OutputStream; /** * Tests for {@link NetworkStatsFactory}. diff --git a/tests/net/java/com/android/internal/util/BitUtilsTest.java b/tests/net/java/com/android/internal/util/BitUtilsTest.java index f4dc12ab8348..01fb0df2d47e 100644 --- a/tests/net/java/com/android/internal/util/BitUtilsTest.java +++ b/tests/net/java/com/android/internal/util/BitUtilsTest.java @@ -16,14 +16,24 @@ package com.android.internal.util; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; -import java.nio.ByteBuffer; +import static com.android.internal.util.BitUtils.bytesToBEInt; +import static com.android.internal.util.BitUtils.bytesToLEInt; +import static com.android.internal.util.BitUtils.getUint16; +import static com.android.internal.util.BitUtils.getUint32; +import static com.android.internal.util.BitUtils.getUint8; +import static com.android.internal.util.BitUtils.uint16; +import static com.android.internal.util.BitUtils.uint32; +import static com.android.internal.util.BitUtils.uint8; + +import static org.junit.Assert.assertEquals; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.assertEquals; -import static com.android.internal.util.BitUtils.*; +import java.nio.ByteBuffer; @SmallTest @RunWith(AndroidJUnit4.class) diff --git a/tests/net/java/com/android/internal/util/RingBufferTest.java b/tests/net/java/com/android/internal/util/RingBufferTest.java index 90a373a9c11e..eff334f7979d 100644 --- a/tests/net/java/com/android/internal/util/RingBufferTest.java +++ b/tests/net/java/com/android/internal/util/RingBufferTest.java @@ -16,19 +16,18 @@ package com.android.internal.util; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; 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.Test; import org.junit.runner.RunWith; + import java.util.Arrays; import java.util.Objects; - @SmallTest @RunWith(AndroidJUnit4.class) public class RingBufferTest { diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index d1a06925a902..9453a8054203 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; @@ -147,15 +148,17 @@ import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; 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.text.TextUtils; import android.util.ArraySet; import android.util.Log; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + 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; @@ -202,7 +205,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Predicate; - /** * Tests for {@link ConnectivityService}. * @@ -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/IpSecServiceParameterizedTest.java b/tests/net/java/com/android/server/IpSecServiceParameterizedTest.java index a844cfeeeb80..7c40adfac002 100644 --- a/tests/net/java/com/android/server/IpSecServiceParameterizedTest.java +++ b/tests/net/java/com/android/server/IpSecServiceParameterizedTest.java @@ -18,6 +18,7 @@ package com.android.server; import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.AF_INET6; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; @@ -45,13 +46,10 @@ import android.net.Network; import android.net.NetworkUtils; import android.os.Binder; import android.os.ParcelFileDescriptor; -import android.support.test.filters.SmallTest; import android.system.Os; import android.test.mock.MockContext; -import java.net.Socket; -import java.util.Arrays; -import java.util.Collection; +import androidx.test.filters.SmallTest; import org.junit.Before; import org.junit.Ignore; @@ -59,6 +57,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; +import java.net.Socket; +import java.util.Arrays; +import java.util.Collection; + /** Unit tests for {@link IpSecService}. */ @SmallTest @RunWith(Parameterized.class) diff --git a/tests/net/java/com/android/server/IpSecServiceRefcountedResourceTest.java b/tests/net/java/com/android/server/IpSecServiceRefcountedResourceTest.java index cf8f715f23af..68ff777a0160 100644 --- a/tests/net/java/com/android/server/IpSecServiceRefcountedResourceTest.java +++ b/tests/net/java/com/android/server/IpSecServiceRefcountedResourceTest.java @@ -31,22 +31,23 @@ import android.content.Context; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; -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.IpSecService.IResource; import com.android.server.IpSecService.RefcountedResource; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ThreadLocalRandom; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - /** Unit tests for {@link IpSecService.RefcountedResource}. */ @SmallTest @RunWith(AndroidJUnit4.class) diff --git a/tests/net/java/com/android/server/IpSecServiceTest.java b/tests/net/java/com/android/server/IpSecServiceTest.java index 5be7c7bb2040..b5c3e9287467 100644 --- a/tests/net/java/com/android/server/IpSecServiceTest.java +++ b/tests/net/java/com/android/server/IpSecServiceTest.java @@ -20,6 +20,7 @@ import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.EADDRINUSE; import static android.system.OsConstants.IPPROTO_UDP; import static android.system.OsConstants.SOCK_DGRAM; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; @@ -39,19 +40,24 @@ import android.net.IpSecAlgorithm; import android.net.IpSecConfig; import android.net.IpSecManager; import android.net.IpSecSpiResponse; -import android.net.IpSecTransform; import android.net.IpSecUdpEncapResponse; import android.os.Binder; import android.os.ParcelFileDescriptor; import android.os.Process; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.system.ErrnoException; import android.system.Os; import android.system.StructStat; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import dalvik.system.SocketTagger; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentMatcher; + import java.io.FileDescriptor; import java.net.InetAddress; import java.net.ServerSocket; @@ -60,11 +66,6 @@ import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentMatcher; - /** Unit tests for {@link IpSecService}. */ @SmallTest @RunWith(AndroidJUnit4.class) diff --git a/tests/net/java/com/android/server/NetworkManagementServiceTest.java b/tests/net/java/com/android/server/NetworkManagementServiceTest.java index 56a075be4722..6fb322554d48 100644 --- a/tests/net/java/com/android/server/NetworkManagementServiceTest.java +++ b/tests/net/java/com/android/server/NetworkManagementServiceTest.java @@ -26,21 +26,19 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import android.content.Context; import android.net.INetd; import android.net.LinkAddress; -import android.net.LocalSocket; import android.net.LocalServerSocket; +import android.net.LocalSocket; import android.os.BatteryStats; import android.os.Binder; import android.os.IBinder; -import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.internal.app.IBatteryStats; import com.android.server.NetworkManagementService.SystemServices; import com.android.server.net.BaseNetworkObserver; -import java.io.IOException; -import java.io.OutputStream; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -48,6 +46,9 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.io.IOException; +import java.io.OutputStream; + /** * Tests for {@link NetworkManagementService}. */ diff --git a/tests/net/java/com/android/server/NsdServiceTest.java b/tests/net/java/com/android/server/NsdServiceTest.java index b88c784bed5d..a90fa6882c25 100644 --- a/tests/net/java/com/android/server/NsdServiceTest.java +++ b/tests/net/java/com/android/server/NsdServiceTest.java @@ -22,23 +22,25 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.content.ContentResolver; +import android.content.Context; +import android.net.nsd.NsdManager; +import android.net.nsd.NsdServiceInfo; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; -import android.content.Context; -import android.content.ContentResolver; -import android.net.nsd.NsdManager; -import android.net.nsd.NsdServiceInfo; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.server.NsdService.DaemonConnection; import com.android.server.NsdService.DaemonConnectionSupplier; import com.android.server.NsdService.NativeCallbackReceiver; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; + import org.junit.After; import org.junit.Before; import org.junit.Test; diff --git a/tests/net/java/com/android/server/connectivity/DnsManagerTest.java b/tests/net/java/com/android/server/connectivity/DnsManagerTest.java index 38322e925a24..15ba43df832f 100644 --- a/tests/net/java/com/android/server/connectivity/DnsManagerTest.java +++ b/tests/net/java/com/android/server/connectivity/DnsManagerTest.java @@ -37,10 +37,11 @@ import android.net.RouteInfo; import android.net.shared.PrivateDnsConfig; import android.os.INetworkManagementService; 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.util.test.FakeSettingsProvider; import org.junit.Before; diff --git a/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java b/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java index 0656c5fd9e94..70495cced536 100644 --- a/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java +++ b/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java @@ -16,52 +16,44 @@ package com.android.server.connectivity; -import static android.net.metrics.INetdEventListener.EVENT_GETADDRINFO; -import static android.net.metrics.INetdEventListener.EVENT_GETHOSTBYNAME; -import static com.android.server.connectivity.MetricsTestUtil.aBool; -import static com.android.server.connectivity.MetricsTestUtil.aByteArray; import static com.android.server.connectivity.MetricsTestUtil.aLong; import static com.android.server.connectivity.MetricsTestUtil.aString; import static com.android.server.connectivity.MetricsTestUtil.aType; import static com.android.server.connectivity.MetricsTestUtil.anInt; -import static com.android.server.connectivity.MetricsTestUtil.anIntArray; -import static com.android.server.connectivity.MetricsTestUtil.b; import static com.android.server.connectivity.MetricsTestUtil.describeIpEvent; -import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityLog; import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.BLUETOOTH; import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.CELLULAR; -import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.ETHERNET; +import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityLog; import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.MULTIPLE; import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.WIFI; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import android.net.ConnectivityMetricsEvent; import android.net.metrics.ApfProgramEvent; import android.net.metrics.ApfStats; -import android.net.metrics.ConnectStats; import android.net.metrics.DefaultNetworkEvent; import android.net.metrics.DhcpClientEvent; import android.net.metrics.DhcpErrorEvent; -import android.net.metrics.DnsEvent; -import android.net.metrics.DnsEvent; import android.net.metrics.IpManagerEvent; import android.net.metrics.IpReachabilityEvent; import android.net.metrics.NetworkEvent; import android.net.metrics.RaEvent; import android.net.metrics.ValidationProbeEvent; import android.net.metrics.WakeupStats; -import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent; +import org.junit.Test; +import org.junit.runner.RunWith; + import java.util.Arrays; import java.util.List; -import org.junit.runner.RunWith; -import org.junit.Test; - // TODO: instead of comparing textpb to textpb, parse textpb and compare proto to proto. @RunWith(AndroidJUnit4.class) @SmallTest diff --git a/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java b/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java index 1a0cb745ff0c..d5b2c87ffe46 100644 --- a/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java +++ b/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java @@ -47,11 +47,12 @@ import android.net.metrics.IpReachabilityEvent; import android.net.metrics.RaEvent; import android.net.metrics.ValidationProbeEvent; import android.os.Parcelable; -import android.support.test.runner.AndroidJUnit4; import android.system.OsConstants; import android.test.suitebuilder.annotation.SmallTest; import android.util.Base64; +import androidx.test.runner.AndroidJUnit4; + import com.android.internal.util.BitUtils; import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass; diff --git a/tests/net/java/com/android/server/connectivity/LingerMonitorTest.java b/tests/net/java/com/android/server/connectivity/LingerMonitorTest.java index aa6cbda0479d..38352b34a170 100644 --- a/tests/net/java/com/android/server/connectivity/LingerMonitorTest.java +++ b/tests/net/java/com/android/server/connectivity/LingerMonitorTest.java @@ -38,10 +38,11 @@ import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.NetworkMisc; import android.os.INetworkManagementService; -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.internal.R; import com.android.server.ConnectivityService; import com.android.server.connectivity.NetworkNotificationManager.NotificationType; diff --git a/tests/net/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java b/tests/net/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java index e58811b4c08e..b783467cfaf2 100644 --- a/tests/net/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java +++ b/tests/net/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java @@ -28,7 +28,6 @@ import static android.provider.Settings.Global.NETWORK_DEFAULT_DAILY_MULTIPATH_Q import static com.android.server.net.NetworkPolicyManagerInternal.QUOTA_TYPE_MULTIPATH; import static com.android.server.net.NetworkPolicyManagerService.OPPORTUNISTIC_QUOTA_UNKNOWN; -import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertNotNull; import static org.mockito.ArgumentMatchers.any; @@ -54,13 +53,14 @@ import android.net.NetworkTemplate; import android.net.StringNetworkSpecifier; import android.os.Handler; import android.provider.Settings; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.telephony.TelephonyManager; import android.test.mock.MockContentResolver; import android.util.DataUnit; import android.util.RecurrenceRule; +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.LocalServices; diff --git a/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java b/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java index 07b1d057c882..cc09fb7ba66f 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; @@ -34,8 +37,9 @@ import android.net.NetworkMisc; import android.os.Handler; import android.os.INetworkManagementService; import android.os.test.TestLooper; -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.ConnectivityService; @@ -43,6 +47,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 +58,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 +72,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 +98,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 +131,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 +179,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 +197,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 +307,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 +328,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 +346,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 +378,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/NetdEventListenerServiceTest.java b/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java index 67805c944943..e4117b848a35 100644 --- a/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java +++ b/tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java @@ -18,43 +18,37 @@ package com.android.server.connectivity; import static android.net.metrics.INetdEventListener.EVENT_GETADDRINFO; import static android.net.metrics.INetdEventListener.EVENT_GETHOSTBYNAME; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.anyInt; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; -import android.support.test.runner.AndroidJUnit4; import android.system.OsConstants; import android.test.suitebuilder.annotation.SmallTest; import android.util.Base64; -import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.DNSLookupBatch; +import androidx.test.runner.AndroidJUnit4; + import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent; import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityLog; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + import java.io.FileOutputStream; import java.io.PrintWriter; import java.io.StringWriter; -import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - @RunWith(AndroidJUnit4.class) @SmallTest public class NetdEventListenerServiceTest { diff --git a/tests/net/java/com/android/server/connectivity/NetworkNotificationManagerTest.java b/tests/net/java/com/android/server/connectivity/NetworkNotificationManagerTest.java index 273b8fc3773b..95807638f6c4 100644 --- a/tests/net/java/com/android/server/connectivity/NetworkNotificationManagerTest.java +++ b/tests/net/java/com/android/server/connectivity/NetworkNotificationManagerTest.java @@ -35,10 +35,11 @@ import android.content.pm.PackageManager; import android.content.res.Resources; import android.net.NetworkCapabilities; import android.net.NetworkInfo; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.telephony.TelephonyManager; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.server.connectivity.NetworkNotificationManager.NotificationType; import org.junit.Before; diff --git a/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java b/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java index f2bd770d085a..354c08f12e10 100644 --- a/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java +++ b/tests/net/java/com/android/server/connectivity/PermissionMonitorTest.java @@ -50,8 +50,9 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.INetworkManagementService; 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 org.junit.Before; import org.junit.Test; diff --git a/tests/net/java/com/android/server/connectivity/TetheringTest.java b/tests/net/java/com/android/server/connectivity/TetheringTest.java index 533d7ad2a472..a12b0a0fbcf0 100644 --- a/tests/net/java/com/android/server/connectivity/TetheringTest.java +++ b/tests/net/java/com/android/server/connectivity/TetheringTest.java @@ -98,11 +98,12 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.test.TestLooper; import android.provider.Settings; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.telephony.CarrierConfigManager; import android.test.mock.MockContentResolver; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.internal.util.ArrayUtils; import com.android.internal.util.StateMachine; import com.android.internal.util.test.BroadcastInterceptingContext; diff --git a/tests/net/java/com/android/server/connectivity/VpnTest.java b/tests/net/java/com/android/server/connectivity/VpnTest.java index f169d6b5bee3..2cae2509026c 100644 --- a/tests/net/java/com/android/server/connectivity/VpnTest.java +++ b/tests/net/java/com/android/server/connectivity/VpnTest.java @@ -28,6 +28,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_VPN; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; +import static android.net.RouteInfo.RTN_UNREACHABLE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -72,11 +73,12 @@ import android.os.Looper; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.util.ArrayMap; import android.util.ArraySet; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.internal.R; import com.android.internal.net.VpnConfig; @@ -89,6 +91,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.net.Inet4Address; +import java.net.Inet6Address; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; @@ -775,6 +778,16 @@ public class VpnTest { // V4 does not, but V6 has sufficient coverage again lp.addRoute(new RouteInfo(new IpPrefix("::/1"))); assertTrue(Vpn.providesRoutesToMostDestinations(lp)); + + lp.clear(); + // V4-unreachable route should not be treated as sufficient coverage + lp.addRoute(new RouteInfo(new IpPrefix(Inet4Address.ANY, 0), RTN_UNREACHABLE)); + assertFalse(Vpn.providesRoutesToMostDestinations(lp)); + + lp.clear(); + // V6-unreachable route should not be treated as sufficient coverage + lp.addRoute(new RouteInfo(new IpPrefix(Inet6Address.ANY, 0), RTN_UNREACHABLE)); + assertFalse(Vpn.providesRoutesToMostDestinations(lp)); } @Test diff --git a/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java b/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java index 193f3806dbf6..3944fad2ac9e 100644 --- a/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java +++ b/tests/net/java/com/android/server/connectivity/tethering/EntitlementManagerTest.java @@ -42,11 +42,12 @@ import android.os.PersistableBundle; import android.os.ResultReceiver; import android.os.test.TestLooper; import android.provider.Settings; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.telephony.CarrierConfigManager; 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.State; import com.android.internal.util.StateMachine; @@ -225,7 +226,7 @@ public final class EntitlementManagerTest { mCallbacklatch.countDown(); } }; - mEnMgr.getLatestTetheringEntitlementValue(TETHERING_WIFI, receiver, true); + mEnMgr.getLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, true); callbackTimeoutHelper(mCallbacklatch); assertFalse(mEnMgr.everRunUiEntitlement); @@ -241,7 +242,7 @@ public final class EntitlementManagerTest { mCallbacklatch.countDown(); } }; - mEnMgr.getLatestTetheringEntitlementValue(TETHERING_WIFI, receiver, false); + mEnMgr.getLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, false); callbackTimeoutHelper(mCallbacklatch); assertFalse(mEnMgr.everRunUiEntitlement); // 3. No cache value and ui entitlement check is needed. @@ -254,7 +255,7 @@ public final class EntitlementManagerTest { mCallbacklatch.countDown(); } }; - mEnMgr.getLatestTetheringEntitlementValue(TETHERING_WIFI, receiver, true); + mEnMgr.getLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, true); mLooper.dispatchAll(); callbackTimeoutHelper(mCallbacklatch); assertTrue(mEnMgr.everRunUiEntitlement); @@ -268,7 +269,7 @@ public final class EntitlementManagerTest { mCallbacklatch.countDown(); } }; - mEnMgr.getLatestTetheringEntitlementValue(TETHERING_WIFI, receiver, false); + mEnMgr.getLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, false); callbackTimeoutHelper(mCallbacklatch); assertFalse(mEnMgr.everRunUiEntitlement); // 5. Cache value is TETHER_ERROR_PROVISION_FAILED and ui entitlement check is needed. @@ -281,7 +282,7 @@ public final class EntitlementManagerTest { mCallbacklatch.countDown(); } }; - mEnMgr.getLatestTetheringEntitlementValue(TETHERING_WIFI, receiver, true); + mEnMgr.getLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, true); mLooper.dispatchAll(); callbackTimeoutHelper(mCallbacklatch); assertTrue(mEnMgr.everRunUiEntitlement); @@ -295,7 +296,7 @@ public final class EntitlementManagerTest { mCallbacklatch.countDown(); } }; - mEnMgr.getLatestTetheringEntitlementValue(TETHERING_WIFI, receiver, true); + mEnMgr.getLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, true); callbackTimeoutHelper(mCallbacklatch); assertFalse(mEnMgr.everRunUiEntitlement); // 7. Test get value for other downstream type. @@ -307,7 +308,7 @@ public final class EntitlementManagerTest { mCallbacklatch.countDown(); } }; - mEnMgr.getLatestTetheringEntitlementValue(TETHERING_USB, receiver, false); + mEnMgr.getLatestTetheringEntitlementResult(TETHERING_USB, receiver, false); callbackTimeoutHelper(mCallbacklatch); assertFalse(mEnMgr.everRunUiEntitlement); } diff --git a/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java b/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java index b98f63b6a5a5..be54b1a93b5d 100644 --- a/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java +++ b/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java @@ -23,7 +23,9 @@ import static android.net.NetworkStats.TAG_NONE; import static android.net.NetworkStats.UID_ALL; import static android.net.TrafficStats.UID_TETHERING; import static android.provider.Settings.Global.TETHER_OFFLOAD_DISABLED; + import static com.android.server.connectivity.tethering.OffloadHardwareInterface.ForwardedStats; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -35,7 +37,6 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.inOrder; 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.verifyNoMoreInteractions; @@ -52,30 +53,30 @@ import android.net.RouteInfo; import android.net.util.SharedLog; import android.os.ConditionVariable; import android.os.Handler; -import android.os.Looper; import android.os.INetworkManagementService; +import android.os.Looper; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; - -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.test.mock.MockContentResolver; -import com.android.internal.util.test.FakeSettingsProvider; -import java.net.InetAddress; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.internal.util.test.FakeSettingsProvider; import org.junit.After; 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.InOrder; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; @RunWith(AndroidJUnit4.class) @SmallTest 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..36a1b7c000d9 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; @@ -38,11 +36,12 @@ import android.content.Context; import android.content.res.Resources; import android.net.util.SharedLog; import android.provider.Settings; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.telephony.TelephonyManager; import android.test.mock.MockContentResolver; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.internal.util.test.BroadcastInterceptingContext; import com.android.internal.util.test.FakeSettingsProvider; @@ -52,6 +51,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 +112,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 +216,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 +229,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 +247,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 +305,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/connectivity/tethering/UpstreamNetworkMonitorTest.java b/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java index 0afd607d1457..5a1f853e75a9 100644 --- a/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java +++ b/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java @@ -41,8 +41,6 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.content.Context; -import android.os.Handler; -import android.os.Message; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.IConnectivityManager; @@ -54,16 +52,19 @@ import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.net.NetworkState; import android.net.util.SharedLog; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; +import android.os.Handler; +import android.os.Message; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; import com.android.internal.util.State; import com.android.internal.util.StateMachine; import org.junit.After; import org.junit.Before; -import org.junit.runner.RunWith; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -76,7 +77,6 @@ import java.util.Map; import java.util.Objects; import java.util.Set; - @RunWith(AndroidJUnit4.class) @SmallTest public class UpstreamNetworkMonitorTest { diff --git a/tests/net/java/com/android/server/net/NetworkStatsAccessTest.java b/tests/net/java/com/android/server/net/NetworkStatsAccessTest.java index b870bbdb73ed..6e725dd69cb7 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsAccessTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsAccessTest.java @@ -26,10 +26,11 @@ import android.app.admin.DeviceAdminInfo; import android.app.admin.DevicePolicyManagerInternal; import android.content.Context; import android.content.pm.PackageManager; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.telephony.TelephonyManager; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.server.LocalServices; import org.junit.After; diff --git a/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java b/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java index 6f1433286ca4..830c928d1e7f 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsCollectionTest.java @@ -26,12 +26,13 @@ import static android.net.NetworkTemplate.buildTemplateMobileAll; import static android.os.Process.myUid; import static android.text.format.DateUtils.HOUR_IN_MILLIS; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; + +import static com.android.server.net.NetworkStatsCollection.multiplySafe; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; -import static com.android.server.net.NetworkStatsCollection.multiplySafe; - import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.NetworkIdentity; @@ -40,20 +41,26 @@ import android.net.NetworkStatsHistory; import android.net.NetworkTemplate; import android.os.Process; import android.os.UserHandle; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.telephony.SubscriptionPlan; import android.telephony.TelephonyManager; import android.test.MoreAsserts; import android.text.format.DateUtils; import android.util.RecurrenceRule; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.frameworks.tests.net.R; import libcore.io.IoUtils; import libcore.io.Streams; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -68,11 +75,6 @@ import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - /** * Tests for {@link NetworkStatsCollection}. */ diff --git a/tests/net/java/com/android/server/net/NetworkStatsObserversTest.java b/tests/net/java/com/android/server/net/NetworkStatsObserversTest.java index 185c3ebfbcb9..43a38039c0da 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsObserversTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsObserversTest.java @@ -17,7 +17,6 @@ package com.android.server.net; import static android.net.ConnectivityManager.TYPE_MOBILE; -import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.NetworkStats.DEFAULT_NETWORK_NO; import static android.net.NetworkStats.DEFAULT_NETWORK_YES; import static android.net.NetworkStats.METERED_NO; @@ -33,11 +32,8 @@ import static com.android.internal.util.TestUtils.waitForIdleHandler; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.isA; -import static org.mockito.Mockito.when; import android.app.usage.NetworkStatsManager; import android.net.DataUsageRequest; @@ -49,23 +45,18 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.Looper; -import android.os.Message; import android.os.Messenger; import android.os.Process; import android.os.UserHandle; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.telephony.TelephonyManager; import android.util.ArrayMap; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.internal.net.VpnInfo; -import com.android.server.net.NetworkStatsService; import com.android.server.net.NetworkStatsServiceTest.LatchedHandler; -import java.util.ArrayList; -import java.util.Objects; -import java.util.List; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -73,6 +64,8 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; +import java.util.Objects; + /** * Tests for {@link NetworkStatsObservers}. */ diff --git a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java index f89f303a1345..598448b3e1b1 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; @@ -92,15 +91,15 @@ import android.os.Message; import android.os.Messenger; import android.os.PowerManager; import android.os.SimpleClock; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.SmallTest; -import android.support.test.runner.AndroidJUnit4; import android.telephony.TelephonyManager; +import androidx.test.InstrumentationRegistry; +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + import com.android.internal.net.VpnInfo; import com.android.internal.util.ArrayUtils; import com.android.internal.util.test.BroadcastInterceptingContext; -import com.android.server.LocalServices; import com.android.server.net.NetworkStatsService.NetworkStatsSettings; import com.android.server.net.NetworkStatsService.NetworkStatsSettings.Config; @@ -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/net/java/com/android/server/net/ipmemorystore/IpMemoryStoreServiceTest.java b/tests/net/java/com/android/server/net/ipmemorystore/IpMemoryStoreServiceTest.java index e57433a52cca..be1068065b05 100644 --- a/tests/net/java/com/android/server/net/ipmemorystore/IpMemoryStoreServiceTest.java +++ b/tests/net/java/com/android/server/net/ipmemorystore/IpMemoryStoreServiceTest.java @@ -39,9 +39,10 @@ import android.net.ipmemorystore.Status; import android.net.ipmemorystore.StatusParcelable; import android.os.IBinder; import android.os.RemoteException; -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.After; import org.junit.Before; diff --git a/tests/net/java/com/android/server/net/ipmemorystore/NetworkAttributesTest.java b/tests/net/java/com/android/server/net/ipmemorystore/NetworkAttributesTest.java index fe19eee4594c..dc2018543050 100644 --- a/tests/net/java/com/android/server/net/ipmemorystore/NetworkAttributesTest.java +++ b/tests/net/java/com/android/server/net/ipmemorystore/NetworkAttributesTest.java @@ -19,8 +19,9 @@ package com.android.server.net.ipmemorystore; import static org.junit.Assert.assertEquals; import android.net.ipmemorystore.NetworkAttributes; -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/tests/net/java/com/android/server/net/ipmemorystore/RelevanceUtilsTests.java b/tests/net/java/com/android/server/net/ipmemorystore/RelevanceUtilsTests.java index 8d367e2fc387..7413b914dbe9 100644 --- a/tests/net/java/com/android/server/net/ipmemorystore/RelevanceUtilsTests.java +++ b/tests/net/java/com/android/server/net/ipmemorystore/RelevanceUtilsTests.java @@ -22,8 +22,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; 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.Test; import org.junit.runner.RunWith; diff --git a/tests/notification/Android.bp b/tests/notification/Android.bp new file mode 100644 index 000000000000..f05edafbf8b7 --- /dev/null +++ b/tests/notification/Android.bp @@ -0,0 +1,7 @@ +android_test { + name: "NotificationTests", + // Include all test java files. + srcs: ["src/**/*.java"], + libs: ["android.test.runner.stubs"], + sdk_version: "21", +} diff --git a/tests/notification/Android.mk b/tests/notification/Android.mk deleted file mode 100644 index 255e6e70a921..000000000000 --- a/tests/notification/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_JAVA_LIBRARIES := android.test.runner.stubs -LOCAL_PACKAGE_NAME := NotificationTests - -LOCAL_SDK_VERSION := 21 - -include $(BUILD_PACKAGE) - diff --git a/tests/permission/Android.bp b/tests/permission/Android.bp new file mode 100644 index 000000000000..bd07009de7b3 --- /dev/null +++ b/tests/permission/Android.bp @@ -0,0 +1,12 @@ +android_test { + name: "FrameworkPermissionTests", + // Include all test java files. + srcs: ["src/**/*.java"], + libs: [ + "android.test.runner", + "telephony-common", + "android.test.base", + ], + static_libs: ["junit"], + platform_apis: true, +} diff --git a/tests/permission/Android.mk b/tests/permission/Android.mk deleted file mode 100644 index dd2f3ec46d26..000000000000 --- a/tests/permission/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -# We only want this apk build for tests. -LOCAL_MODULE_TAGS := tests - -# Include all test java files. -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common android.test.base -LOCAL_STATIC_JAVA_LIBRARIES := junit -LOCAL_PACKAGE_NAME := FrameworkPermissionTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -include $(BUILD_PACKAGE) - 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..eb6811cf490e 100644 --- a/tests/testables/Android.bp +++ b/tests/testables/Android.bp @@ -15,18 +15,12 @@ // java_library { - name: "testables", - // ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_MODULE_TAG - // LOCAL_MODULE_TAG := tests - srcs: ["src/**/*.java"], - 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.bp b/tests/testables/tests/Android.bp new file mode 100644 index 000000000000..e1a58be7bd68 --- /dev/null +++ b/tests/testables/tests/Android.bp @@ -0,0 +1,41 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_test { + name: "TestablesTests", + platform_apis: true, + srcs: [ + "src/**/*.java", + "src/**/I*.aidl", + ], + resource_dirs: ["res"], + static_libs: [ + "androidx.test.rules", + "hamcrest-library", + "mockito-target-inline-minus-junit4", + "testables", + ], + compile_multilib: "both", + jni_libs: [ + "libdexmakerjvmtiagent", + "libmultiplejvmtiagentsinterferenceagent", + ], + libs: [ + "android.test.runner", + "android.test.base", + "android.test.mock", + ], + certificate: "platform", + test_suites: ["device-tests"], +} diff --git a/tests/testables/tests/Android.mk b/tests/testables/tests/Android.mk deleted file mode 100644 index 79469e3aa032..000000000000 --- a/tests/testables/tests/Android.mk +++ /dev/null @@ -1,47 +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_USE_AAPT2 := true -LOCAL_MODULE_TAGS := tests - -LOCAL_PACKAGE_NAME := TestablesTests -LOCAL_PRIVATE_PLATFORM_APIS := true - -LOCAL_SRC_FILES := $(call all-java-files-under, src) \ - $(call all-Iaidl-files-under, src) - -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -LOCAL_STATIC_JAVA_LIBRARIES := \ - android-support-test \ - mockito-target-inline-minus-junit4 \ - testables - -LOCAL_MULTILIB := both - -LOCAL_JNI_SHARED_LIBRARIES := \ - libdexmakerjvmtiagent \ - libmultiplejvmtiagentsinterferenceagent - -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base android.test.mock - -LOCAL_CERTIFICATE := platform - -LOCAL_COMPATIBILITY_SUITE := device-tests - -include $(BUILD_PACKAGE) - 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/touchlag/Android.bp b/tests/touchlag/Android.bp index 2610cb386da2..092eea918b1d 100644 --- a/tests/touchlag/Android.bp +++ b/tests/touchlag/Android.bp @@ -1,14 +1,11 @@ cc_test { name: "test-touchlag", gtest: false, - srcs: ["touchlag.cpp"], - shared_libs: [ "libcutils", "libutils", ], - cflags: [ "-Wall", "-Wextra", diff --git a/tests/utils/Android.mk b/tests/utils/Android.mk deleted file mode 100644 index c141484d81d5..000000000000 --- a/tests/utils/Android.mk +++ /dev/null @@ -1,17 +0,0 @@ -# -# Copyright (C) 2012 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -include $(call all-subdir-makefiles) diff --git a/tests/utils/DummyIME/Android.bp b/tests/utils/DummyIME/Android.bp new file mode 100644 index 000000000000..4a44b3b27992 --- /dev/null +++ b/tests/utils/DummyIME/Android.bp @@ -0,0 +1,21 @@ +// +// Copyright (C) 2012 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { + name: "DummyIME", + srcs: ["src/**/*.java"], + sdk_version: "current", +} diff --git a/tests/utils/DummyIME/Android.mk b/tests/utils/DummyIME/Android.mk deleted file mode 100644 index 0f6c988b5463..000000000000 --- a/tests/utils/DummyIME/Android.mk +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright (C) 2012 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := tests - -LOCAL_SRC_FILES := $(call all-java-files-under, src) - -LOCAL_PACKAGE_NAME := DummyIME -LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) 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/aapt2/integration-tests/Android.mk b/tools/aapt2/integration-tests/Android.mk deleted file mode 100644 index 6361f9b8ae7d..000000000000 --- a/tools/aapt2/integration-tests/Android.mk +++ /dev/null @@ -1,2 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tools/aapt2/integration-tests/AutoVersionTest/Android.bp b/tools/aapt2/integration-tests/AutoVersionTest/Android.bp new file mode 100644 index 000000000000..79fb5734cd68 --- /dev/null +++ b/tools/aapt2/integration-tests/AutoVersionTest/Android.bp @@ -0,0 +1,20 @@ +// +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { + name: "AaptAutoVersionTest", + sdk_version: "current", +} diff --git a/tools/aapt2/integration-tests/AutoVersionTest/Android.mk b/tools/aapt2/integration-tests/AutoVersionTest/Android.mk deleted file mode 100644 index 03cce3534a4e..000000000000 --- a/tools/aapt2/integration-tests/AutoVersionTest/Android.mk +++ /dev/null @@ -1,24 +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_USE_AAPT2 := true -LOCAL_PACKAGE_NAME := AaptAutoVersionTest -LOCAL_SDK_VERSION := current -LOCAL_MODULE_TAGS := tests -include $(BUILD_PACKAGE) diff --git a/tools/aapt2/integration-tests/BasicTest/Android.bp b/tools/aapt2/integration-tests/BasicTest/Android.bp new file mode 100644 index 000000000000..a94a01f12c9e --- /dev/null +++ b/tools/aapt2/integration-tests/BasicTest/Android.bp @@ -0,0 +1,20 @@ +// +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { + name: "AaptBasicTest", + sdk_version: "current", +} diff --git a/tools/aapt2/integration-tests/BasicTest/Android.mk b/tools/aapt2/integration-tests/BasicTest/Android.mk deleted file mode 100644 index d1605540371e..000000000000 --- a/tools/aapt2/integration-tests/BasicTest/Android.mk +++ /dev/null @@ -1,24 +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_USE_AAPT2 := true -LOCAL_PACKAGE_NAME := AaptBasicTest -LOCAL_SDK_VERSION := current -LOCAL_MODULE_TAGS := tests -include $(BUILD_PACKAGE) diff --git a/tools/aapt2/integration-tests/StaticLibTest/Android.mk b/tools/aapt2/integration-tests/StaticLibTest/Android.mk deleted file mode 100644 index 6361f9b8ae7d..000000000000 --- a/tools/aapt2/integration-tests/StaticLibTest/Android.mk +++ /dev/null @@ -1,2 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/tools/aapt2/integration-tests/StaticLibTest/App/Android.bp b/tools/aapt2/integration-tests/StaticLibTest/App/Android.bp new file mode 100644 index 000000000000..9aadff3d619e --- /dev/null +++ b/tools/aapt2/integration-tests/StaticLibTest/App/Android.bp @@ -0,0 +1,34 @@ +// +// 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: "AaptTestStaticLib_App", + sdk_version: "current", + srcs: ["src/**/*.java"], + asset_dirs: [ + "assets", + "assets2", + ], + static_libs: [ + "AaptTestStaticLib_LibOne", + "AaptTestStaticLib_LibTwo", + ], + aaptflags: [ + "--no-version-vectors", + "--no-version-transitions", + ], +} diff --git a/tools/aapt2/integration-tests/StaticLibTest/App/Android.mk b/tools/aapt2/integration-tests/StaticLibTest/App/Android.mk deleted file mode 100644 index 3cce35de6a31..000000000000 --- a/tools/aapt2/integration-tests/StaticLibTest/App/Android.mk +++ /dev/null @@ -1,30 +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_USE_AAPT2 := true -LOCAL_PACKAGE_NAME := AaptTestStaticLib_App -LOCAL_SDK_VERSION := current -LOCAL_MODULE_TAGS := tests -LOCAL_SRC_FILES := $(call all-java-files-under,src) -LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets $(LOCAL_PATH)/assets2 -LOCAL_STATIC_ANDROID_LIBRARIES := \ - AaptTestStaticLib_LibOne \ - AaptTestStaticLib_LibTwo -LOCAL_AAPT_FLAGS := --no-version-vectors --no-version-transitions -include $(BUILD_PACKAGE) diff --git a/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.bp b/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.bp new file mode 100644 index 000000000000..4c8181343a33 --- /dev/null +++ b/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.bp @@ -0,0 +1,22 @@ +// +// 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_library { + name: "AaptTestStaticLib_LibOne", + sdk_version: "current", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], +} diff --git a/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.mk b/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.mk deleted file mode 100644 index da25f6477b08..000000000000 --- a/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.mk +++ /dev/null @@ -1,29 +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_USE_AAPT2 := true -LOCAL_MODULE := AaptTestStaticLib_LibOne -LOCAL_SDK_VERSION := current -LOCAL_MODULE_TAGS := tests -LOCAL_SRC_FILES := $(call all-java-files-under,src) -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res - -# We need this to compile the Java sources of AaptTestStaticLib_LibTwo using javac. -LOCAL_JAR_EXCLUDE_FILES := none -include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.bp b/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.bp new file mode 100644 index 000000000000..7c4f7ed90e69 --- /dev/null +++ b/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.bp @@ -0,0 +1,23 @@ +// +// 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_library { + name: "AaptTestStaticLib_LibTwo", + sdk_version: "current", + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + libs: ["AaptTestStaticLib_LibOne"], +} diff --git a/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.mk b/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.mk deleted file mode 100644 index 27a3134e6ffa..000000000000 --- a/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.mk +++ /dev/null @@ -1,28 +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_USE_AAPT2 := true -LOCAL_MODULE := AaptTestStaticLib_LibTwo -LOCAL_SDK_VERSION := current -LOCAL_MODULE_TAGS := tests -LOCAL_SRC_FILES := $(call all-java-files-under,src) -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res -LOCAL_SHARED_ANDROID_LIBRARIES := AaptTestStaticLib_LibOne -include $(BUILD_STATIC_JAVA_LIBRARY) - diff --git a/tools/aapt2/integration-tests/SymlinkTest/Android.bp b/tools/aapt2/integration-tests/SymlinkTest/Android.bp new file mode 100644 index 000000000000..68e6148e480c --- /dev/null +++ b/tools/aapt2/integration-tests/SymlinkTest/Android.bp @@ -0,0 +1,20 @@ +// +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +android_test { + name: "AaptSymlinkTest", + sdk_version: "current", +} diff --git a/tools/aapt2/integration-tests/SymlinkTest/Android.mk b/tools/aapt2/integration-tests/SymlinkTest/Android.mk deleted file mode 100644 index 8da1141df7b3..000000000000 --- a/tools/aapt2/integration-tests/SymlinkTest/Android.mk +++ /dev/null @@ -1,24 +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_USE_AAPT2 := true -LOCAL_PACKAGE_NAME := AaptSymlinkTest -LOCAL_SDK_VERSION := current -LOCAL_MODULE_TAGS := tests -include $(BUILD_PACKAGE) 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/tools/hiddenapi/generate_hiddenapi_lists.py b/tools/hiddenapi/generate_hiddenapi_lists.py index 2a8f69525eb8..6781eba05534 100755 --- a/tools/hiddenapi/generate_hiddenapi_lists.py +++ b/tools/hiddenapi/generate_hiddenapi_lists.py @@ -29,6 +29,9 @@ FLAG_BLACKLIST = "blacklist" FLAG_GREYLIST_MAX_O = "greylist-max-o" FLAG_GREYLIST_MAX_P = "greylist-max-p" FLAG_CORE_PLATFORM_API = "core-platform-api" +FLAG_PUBLIC_API = "public-api" +FLAG_SYSTEM_API = "system-api" +FLAG_TEST_API = "test-api" # List of all known flags. FLAGS_API_LIST = [ @@ -38,7 +41,12 @@ FLAGS_API_LIST = [ FLAG_GREYLIST_MAX_O, FLAG_GREYLIST_MAX_P, ] -ALL_FLAGS = FLAGS_API_LIST + [ FLAG_CORE_PLATFORM_API ] +ALL_FLAGS = FLAGS_API_LIST + [ + FLAG_CORE_PLATFORM_API, + FLAG_PUBLIC_API, + FLAG_SYSTEM_API, + FLAG_TEST_API, + ] FLAGS_API_LIST_SET = set(FLAGS_API_LIST) ALL_FLAGS_SET = set(ALL_FLAGS) @@ -203,14 +211,19 @@ class FlagsDict: # Iterate over all CSV lines, find entry in dict and append flags to it. for csv in csv_values: - self._dict[csv[0]].update(csv[1:]) + flags = csv[1:] + if (FLAG_PUBLIC_API in flags) or (FLAG_SYSTEM_API in flags): + flags.append(FLAG_WHITELIST) + elif FLAG_TEST_API in flags: + flags.append(FLAG_GREYLIST) + self._dict[csv[0]].update(flags) def assign_flag(self, flag, apis, source="<unknown>"): """Assigns a flag to given subset of entries. Args: flag (string): One of ALL_FLAGS. - apis (set): Subset of APIs to recieve the flag. + apis (set): Subset of APIs to receive the flag. source (string): Origin of `entries_subset`. Will be printed in error messages. Throws: 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(); diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index fd8796a7e229..b1ad964a2aa3 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -333,9 +333,10 @@ public class WifiConfiguration implements Parcelable { public String preSharedKey; /** - * Up to four WEP keys. Either an ASCII string enclosed in double - * quotation marks (e.g., {@code "abcdef"}) or a string - * of hex digits (e.g., {@code 0102030405}). + * Four WEP keys. For each of the four values, provide either an ASCII + * string enclosed in double quotation marks (e.g., {@code "abcdef"}), + * a string of hex digits (e.g., {@code 0102030405}), or an empty string + * (e.g., {@code ""}). * <p/> * When the value of one of these keys is read, the actual key is * not returned, just a "*" if the key has a value, or the null @@ -513,7 +514,7 @@ public class WifiConfiguration implements Parcelable { /** * @hide * Universal name for app creating the configuration - * see {#link {@link PackageManager#getNameForUid(int)} + * see {@link PackageManager#getNameForUid(int)} */ @SystemApi public String creatorName; @@ -521,7 +522,7 @@ public class WifiConfiguration implements Parcelable { /** * @hide * Universal name for app updating the configuration - * see {#link {@link PackageManager#getNameForUid(int)} + * see {@link PackageManager#getNameForUid(int)} */ @SystemApi public String lastUpdateName; |