diff options
143 files changed, 2778 insertions, 1418 deletions
diff --git a/Android.mk b/Android.mk index a78a01a1600f..f4208207e146 100644 --- a/Android.mk +++ b/Android.mk @@ -36,7 +36,7 @@ aidl_parcelables := define stubs-to-aidl-parcelables gen := $(TARGET_OUT_COMMON_INTERMEDIATES)/$1.aidl aidl_parcelables += $$(gen) - $$(gen): $(call java-lib-header-files,$1) | $(HOST_OUT_EXECUTABLES)/sdkparcelables + $$(gen): $(call java-lib-header-files,$1) $(HOST_OUT_EXECUTABLES)/sdkparcelables @echo Extract SDK parcelables: $$@ rm -f $$@ $(HOST_OUT_EXECUTABLES)/sdkparcelables $$< $$@ diff --git a/api/current.txt b/api/current.txt index 3a82ed2afaf7..7150c29fe3cf 100644 --- a/api/current.txt +++ b/api/current.txt @@ -6705,6 +6705,7 @@ package android.app.admin { field public static final int USER_OPERATION_ERROR_MAX_RUNNING_USERS = 3; // 0x3 field public static final int USER_OPERATION_ERROR_UNKNOWN = 1; // 0x1 field public static final int USER_OPERATION_SUCCESS = 0; // 0x0 + field public static final int WIPE_EUICC = 4; // 0x4 field public static final int WIPE_EXTERNAL_STORAGE = 1; // 0x1 field public static final int WIPE_RESET_PROTECTION_DATA = 2; // 0x2 } @@ -9441,6 +9442,7 @@ package android.content { field public static final java.lang.String DISPLAY_SERVICE = "display"; field public static final java.lang.String DOWNLOAD_SERVICE = "download"; field public static final java.lang.String DROPBOX_SERVICE = "dropbox"; + field public static final java.lang.String EUICC_SERVICE = "euicc"; field public static final java.lang.String FINGERPRINT_SERVICE = "fingerprint"; field public static final java.lang.String HARDWARE_PROPERTIES_SERVICE = "hardware_properties"; field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method"; @@ -11266,6 +11268,7 @@ package android.content.pm { field public static final java.lang.String FEATURE_STRONGBOX_KEYSTORE = "android.hardware.strongbox_keystore"; field public static final java.lang.String FEATURE_TELEPHONY = "android.hardware.telephony"; field public static final java.lang.String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma"; + field public static final java.lang.String FEATURE_TELEPHONY_EUICC = "android.hardware.telephony.euicc"; field public static final java.lang.String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm"; field public static final java.lang.String FEATURE_TELEPHONY_MBMS = "android.hardware.telephony.mbms"; field public static final deprecated java.lang.String FEATURE_TELEVISION = "android.hardware.type.television"; @@ -15843,8 +15846,6 @@ package android.hardware.camera2 { method public abstract void createReprocessableCaptureSessionByConfigurations(android.hardware.camera2.params.InputConfiguration, java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException; method public abstract java.lang.String getId(); field public static final int TEMPLATE_MANUAL = 6; // 0x6 - field public static final int TEMPLATE_MOTION_TRACKING_BEST = 8; // 0x8 - field public static final int TEMPLATE_MOTION_TRACKING_PREVIEW = 7; // 0x7 field public static final int TEMPLATE_PREVIEW = 1; // 0x1 field public static final int TEMPLATE_RECORD = 3; // 0x3 field public static final int TEMPLATE_STILL_CAPTURE = 2; // 0x2 @@ -42206,13 +42207,16 @@ package android.telephony { method public java.lang.String getNumber(); method public int getSimSlotIndex(); method public int getSubscriptionId(); + method public boolean isEmbedded(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.telephony.SubscriptionInfo> CREATOR; } public class SubscriptionManager { method public void addOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener); + method public boolean canManageSubscription(android.telephony.SubscriptionInfo); method public static deprecated android.telephony.SubscriptionManager from(android.content.Context); + method public java.util.List<android.telephony.SubscriptionInfo> getAccessibleSubscriptionInfoList(); method public android.telephony.SubscriptionInfo getActiveSubscriptionInfo(int); method public int getActiveSubscriptionInfoCount(); method public int getActiveSubscriptionInfoCountMax(); @@ -42597,6 +42601,44 @@ package android.telephony.data { } +package android.telephony.euicc { + + public final class DownloadableSubscription implements android.os.Parcelable { + method public int describeContents(); + method public static android.telephony.euicc.DownloadableSubscription forActivationCode(java.lang.String); + method public java.lang.String getConfirmationCode(); + method public java.lang.String getEncodedActivationCode(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.telephony.euicc.DownloadableSubscription> CREATOR; + } + + public final class EuiccInfo implements android.os.Parcelable { + ctor public EuiccInfo(java.lang.String); + method public int describeContents(); + method public java.lang.String getOsVersion(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccInfo> CREATOR; + } + + public class EuiccManager { + method public void deleteSubscription(int, android.app.PendingIntent); + method public void downloadSubscription(android.telephony.euicc.DownloadableSubscription, boolean, android.app.PendingIntent); + method public java.lang.String getEid(); + method public android.telephony.euicc.EuiccInfo getEuiccInfo(); + method public boolean isEnabled(); + method public void startResolutionActivity(android.app.Activity, int, android.content.Intent, android.app.PendingIntent) throws android.content.IntentSender.SendIntentException; + method public void switchToSubscription(int, android.app.PendingIntent); + field public static final java.lang.String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.telephony.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS"; + field public static final java.lang.String ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE = "android.telephony.euicc.action.NOTIFY_CARRIER_SETUP_INCOMPLETE"; + field public static final int EMBEDDED_SUBSCRIPTION_RESULT_ERROR = 2; // 0x2 + field public static final int EMBEDDED_SUBSCRIPTION_RESULT_OK = 0; // 0x0 + field public static final int EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR = 1; // 0x1 + field public static final java.lang.String EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DETAILED_CODE"; + field public static final java.lang.String META_DATA_CARRIER_ICON = "android.telephony.euicc.carriericon"; + } + +} + package android.telephony.gsm { public class GsmCellLocation extends android.telephony.CellLocation { diff --git a/api/system-current.txt b/api/system-current.txt index 71df2726919c..3707c910c481 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -20,6 +20,7 @@ package android { field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET"; field public static final deprecated java.lang.String BIND_CONNECTION_SERVICE = "android.permission.BIND_CONNECTION_SERVICE"; field public static final java.lang.String BIND_DIRECTORY_SEARCH = "android.permission.BIND_DIRECTORY_SEARCH"; + field public static final java.lang.String BIND_EUICC_SERVICE = "android.permission.BIND_EUICC_SERVICE"; field public static final java.lang.String BIND_IMS_SERVICE = "android.permission.BIND_IMS_SERVICE"; field public static final java.lang.String BIND_KEYGUARD_APPWIDGET = "android.permission.BIND_KEYGUARD_APPWIDGET"; field public static final java.lang.String BIND_NETWORK_RECOMMENDATION_SERVICE = "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE"; @@ -186,6 +187,7 @@ package android { field public static final java.lang.String USE_RESERVED_DISK = "android.permission.USE_RESERVED_DISK"; field public static final java.lang.String WRITE_APN_SETTINGS = "android.permission.WRITE_APN_SETTINGS"; field public static final java.lang.String WRITE_DREAM_STATE = "android.permission.WRITE_DREAM_STATE"; + field public static final java.lang.String WRITE_EMBEDDED_SUBSCRIPTIONS = "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"; field public static final java.lang.String WRITE_GSERVICES = "android.permission.WRITE_GSERVICES"; field public static final java.lang.String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE"; field public static final java.lang.String WRITE_SECURE_SETTINGS = "android.permission.WRITE_SECURE_SETTINGS"; @@ -791,6 +793,7 @@ package android.content { method public abstract void sendOrderedBroadcast(android.content.Intent, java.lang.String, android.os.Bundle, android.content.BroadcastReceiver, android.os.Handler, int, java.lang.String, android.os.Bundle); field public static final java.lang.String BACKUP_SERVICE = "backup"; field public static final java.lang.String CONTEXTHUB_SERVICE = "contexthub"; + field public static final java.lang.String EUICC_CARD_SERVICE = "euicc_card"; field public static final java.lang.String HDMI_CONTROL_SERVICE = "hdmi_control"; field public static final java.lang.String NETWORK_SCORE_SERVICE = "network_score"; field public static final java.lang.String OEM_LOCK_SERVICE = "oem_lock"; @@ -4134,6 +4137,7 @@ package android.provider { method public static boolean putString(android.content.ContentResolver, java.lang.String, java.lang.String, java.lang.String, boolean); method public static void resetToDefaults(android.content.ContentResolver, java.lang.String); field public static final java.lang.String AUTOFILL_COMPAT_ALLOWED_PACKAGES = "autofill_compat_allowed_packages"; + field public static final java.lang.String DEFAULT_SM_DP_PLUS = "default_sm_dp_plus"; field public static final java.lang.String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update"; field public static final java.lang.String THEATER_MODE_ON = "theater_mode_on"; field public static final java.lang.String WEBVIEW_MULTIPROCESS = "webview_multiprocess"; @@ -4307,6 +4311,125 @@ package android.service.autofill { } +package android.service.euicc { + + public final class EuiccProfileInfo implements android.os.Parcelable { + method public int describeContents(); + method public android.service.carrier.CarrierIdentifier getCarrierIdentifier(); + method public java.lang.String getIccid(); + method public java.lang.String getNickname(); + method public int getPolicyRules(); + method public int getProfileClass(); + method public java.lang.String getProfileName(); + method public java.lang.String getServiceProviderName(); + method public int getState(); + method public java.util.List<android.telephony.UiccAccessRule> getUiccAccessRules(); + method public boolean hasPolicyRule(int); + method public boolean hasPolicyRules(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.service.euicc.EuiccProfileInfo> CREATOR; + field public static final int POLICY_RULE_DELETE_AFTER_DISABLING = 4; // 0x4 + field public static final int POLICY_RULE_DO_NOT_DELETE = 2; // 0x2 + field public static final int POLICY_RULE_DO_NOT_DISABLE = 1; // 0x1 + 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_STATE_DISABLED = 0; // 0x0 + field public static final int PROFILE_STATE_ENABLED = 1; // 0x1 + } + + public static final class EuiccProfileInfo.Builder { + ctor public EuiccProfileInfo.Builder(java.lang.String); + ctor public EuiccProfileInfo.Builder(android.service.euicc.EuiccProfileInfo); + method public android.service.euicc.EuiccProfileInfo build(); + method public android.service.euicc.EuiccProfileInfo.Builder setCarrierIdentifier(android.service.carrier.CarrierIdentifier); + method public android.service.euicc.EuiccProfileInfo.Builder setIccid(java.lang.String); + method public android.service.euicc.EuiccProfileInfo.Builder setNickname(java.lang.String); + method public android.service.euicc.EuiccProfileInfo.Builder setPolicyRules(int); + method public android.service.euicc.EuiccProfileInfo.Builder setProfileClass(int); + method public android.service.euicc.EuiccProfileInfo.Builder setProfileName(java.lang.String); + method public android.service.euicc.EuiccProfileInfo.Builder setServiceProviderName(java.lang.String); + method public android.service.euicc.EuiccProfileInfo.Builder setState(int); + method public android.service.euicc.EuiccProfileInfo.Builder setUiccAccessRule(java.util.List<android.telephony.UiccAccessRule>); + } + + public static abstract class EuiccProfileInfo.PolicyRule implements java.lang.annotation.Annotation { + } + + public static abstract class EuiccProfileInfo.ProfileClass implements java.lang.annotation.Annotation { + } + + public static abstract class EuiccProfileInfo.ProfileState implements java.lang.annotation.Annotation { + } + + public abstract class EuiccService extends android.app.Service { + ctor public EuiccService(); + method public android.os.IBinder onBind(android.content.Intent); + method public abstract int onDeleteSubscription(int, java.lang.String); + method public abstract int onDownloadSubscription(int, android.telephony.euicc.DownloadableSubscription, boolean, boolean); + method public abstract int onEraseSubscriptions(int); + method public abstract android.service.euicc.GetDefaultDownloadableSubscriptionListResult onGetDefaultDownloadableSubscriptionList(int, boolean); + method public abstract android.service.euicc.GetDownloadableSubscriptionMetadataResult onGetDownloadableSubscriptionMetadata(int, android.telephony.euicc.DownloadableSubscription, boolean); + method public abstract java.lang.String onGetEid(int); + method public abstract android.telephony.euicc.EuiccInfo onGetEuiccInfo(int); + method public abstract android.service.euicc.GetEuiccProfileInfoListResult onGetEuiccProfileInfoList(int); + method public abstract int onGetOtaStatus(int); + method public abstract int onRetainSubscriptionsForFactoryReset(int); + method public abstract void onStartOtaIfNecessary(int, android.service.euicc.EuiccService.OtaStatusChangedCallback); + method public abstract int onSwitchToSubscription(int, java.lang.String, boolean); + method public abstract int onUpdateSubscriptionNickname(int, java.lang.String, java.lang.String); + field public static final java.lang.String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS"; + field public static final java.lang.String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION = "android.service.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION"; + field public static final java.lang.String ACTION_RESOLVE_CONFIRMATION_CODE = "android.service.euicc.action.RESOLVE_CONFIRMATION_CODE"; + field public static final java.lang.String ACTION_RESOLVE_DEACTIVATE_SIM = "android.service.euicc.action.RESOLVE_DEACTIVATE_SIM"; + field public static final java.lang.String ACTION_RESOLVE_NO_PRIVILEGES = "android.service.euicc.action.RESOLVE_NO_PRIVILEGES"; + field public static final java.lang.String CATEGORY_EUICC_UI = "android.service.euicc.category.EUICC_UI"; + field public static final java.lang.String EUICC_SERVICE_INTERFACE = "android.service.euicc.EuiccService"; + field public static final java.lang.String EXTRA_RESOLUTION_CALLING_PACKAGE = "android.service.euicc.extra.RESOLUTION_CALLING_PACKAGE"; + field public static final java.lang.String EXTRA_RESOLUTION_CONFIRMATION_CODE = "android.service.euicc.extra.RESOLUTION_CONFIRMATION_CODE"; + field public static final java.lang.String EXTRA_RESOLUTION_CONFIRMATION_CODE_RETRIED = "android.service.euicc.extra.RESOLUTION_CONFIRMATION_CODE_RETRIED"; + field public static final java.lang.String EXTRA_RESOLUTION_CONSENT = "android.service.euicc.extra.RESOLUTION_CONSENT"; + field public static final int RESULT_FIRST_USER = 1; // 0x1 + field public static final int RESULT_MUST_DEACTIVATE_SIM = -1; // 0xffffffff + field public static final int RESULT_NEED_CONFIRMATION_CODE = -2; // 0xfffffffe + field public static final int RESULT_OK = 0; // 0x0 + } + + public static abstract class EuiccService.OtaStatusChangedCallback { + ctor public EuiccService.OtaStatusChangedCallback(); + method public abstract void onOtaStatusChanged(int); + } + + public final class GetDefaultDownloadableSubscriptionListResult implements android.os.Parcelable { + ctor public GetDefaultDownloadableSubscriptionListResult(int, android.telephony.euicc.DownloadableSubscription[]); + method public int describeContents(); + method public java.util.List<android.telephony.euicc.DownloadableSubscription> getDownloadableSubscriptions(); + method public int getResult(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.service.euicc.GetDefaultDownloadableSubscriptionListResult> CREATOR; + } + + public final class GetDownloadableSubscriptionMetadataResult implements android.os.Parcelable { + ctor public GetDownloadableSubscriptionMetadataResult(int, android.telephony.euicc.DownloadableSubscription); + method public int describeContents(); + method public android.telephony.euicc.DownloadableSubscription getDownloadableSubscription(); + method public int getResult(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.service.euicc.GetDownloadableSubscriptionMetadataResult> CREATOR; + } + + public final class GetEuiccProfileInfoListResult implements android.os.Parcelable { + ctor public GetEuiccProfileInfoListResult(int, android.service.euicc.EuiccProfileInfo[], boolean); + method public int describeContents(); + method public boolean getIsRemovable(); + method public java.util.List<android.service.euicc.EuiccProfileInfo> getProfiles(); + method public int getResult(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.service.euicc.GetEuiccProfileInfoListResult> CREATOR; + } + +} + package android.service.notification { public final class Adjustment implements android.os.Parcelable { @@ -4907,8 +5030,14 @@ package android.telephony { field public static final int RESULT_SYSTEM_ERROR = 15; // 0xf } + public class SubscriptionInfo implements android.os.Parcelable { + method public java.util.List<android.telephony.UiccAccessRule> getAccessRules(); + } + public class SubscriptionManager { + method public java.util.List<android.telephony.SubscriptionInfo> getAvailableSubscriptionInfoList(); method public java.util.List<android.telephony.SubscriptionPlan> getSubscriptionPlans(int); + method public void requestEmbeddedSubscriptionInfoListRefresh(); method public void setSubscriptionOverrideCongested(int, boolean, long); method public void setSubscriptionOverrideUnmetered(int, boolean, long); method public void setSubscriptionPlans(int, java.util.List<android.telephony.SubscriptionPlan>); @@ -5044,6 +5173,16 @@ package android.telephony { field public static final int SIM_STATE_PRESENT = 11; // 0xb } + public final class UiccAccessRule implements android.os.Parcelable { + ctor public UiccAccessRule(byte[], java.lang.String, long); + method public int describeContents(); + method public int getCarrierPrivilegeStatus(android.content.pm.PackageInfo); + method public int getCarrierPrivilegeStatus(android.content.pm.Signature, java.lang.String); + method public java.lang.String getPackageName(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.telephony.UiccAccessRule> CREATOR; + } + public class UiccSlotInfo implements android.os.Parcelable { ctor public UiccSlotInfo(boolean, boolean, java.lang.String, int, int); method public int describeContents(); @@ -5154,6 +5293,125 @@ package android.telephony.data { } +package android.telephony.euicc { + + public final class DownloadableSubscription implements android.os.Parcelable { + method public java.util.List<android.telephony.UiccAccessRule> getAccessRules(); + method public java.lang.String getCarrierName(); + } + + public static final class DownloadableSubscription.Builder { + ctor public DownloadableSubscription.Builder(); + ctor public DownloadableSubscription.Builder(android.telephony.euicc.DownloadableSubscription); + method public android.telephony.euicc.DownloadableSubscription build(); + method public android.telephony.euicc.DownloadableSubscription.Builder setAccessRules(java.util.List<android.telephony.UiccAccessRule>); + method public android.telephony.euicc.DownloadableSubscription.Builder setCarrierName(java.lang.String); + method public android.telephony.euicc.DownloadableSubscription.Builder setConfirmationCode(java.lang.String); + method public android.telephony.euicc.DownloadableSubscription.Builder setEncodedActivationCode(java.lang.String); + } + + public class EuiccCardManager { + method public void authenticateServer(java.lang.String, java.lang.String, byte[], byte[], byte[], byte[], java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>); + method public void cancelSession(java.lang.String, byte[], int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>); + method public void deleteProfile(java.lang.String, java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>); + method public void disableProfile(java.lang.String, java.lang.String, boolean, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>); + method public void listNotifications(java.lang.String, int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccNotification[]>); + method public void loadBoundProfilePackage(java.lang.String, byte[], java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>); + method public void prepareDownload(java.lang.String, byte[], byte[], byte[], byte[], java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>); + method public void removeNotificationFromList(java.lang.String, int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>); + method public void requestAllProfiles(java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.service.euicc.EuiccProfileInfo[]>); + method public void requestDefaultSmdpAddress(java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.String>); + method public void requestEuiccChallenge(java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>); + method public void requestEuiccInfo1(java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>); + method public void requestEuiccInfo2(java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>); + method public void requestProfile(java.lang.String, java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.service.euicc.EuiccProfileInfo>); + method public void requestRulesAuthTable(java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccRulesAuthTable>); + method public void requestSmdsAddress(java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.String>); + method public void resetMemory(java.lang.String, int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>); + method public void retrieveNotification(java.lang.String, int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccNotification>); + method public void retrieveNotificationList(java.lang.String, int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccNotification[]>); + method public void setDefaultSmdpAddress(java.lang.String, java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>); + method public void setNickname(java.lang.String, java.lang.String, java.lang.String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>); + method public void switchToProfile(java.lang.String, java.lang.String, boolean, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.service.euicc.EuiccProfileInfo>); + field public static final int CANCEL_REASON_END_USER_REJECTED = 0; // 0x0 + field public static final int CANCEL_REASON_POSTPONED = 1; // 0x1 + field public static final int CANCEL_REASON_PPR_NOT_ALLOWED = 3; // 0x3 + field public static final int CANCEL_REASON_TIMEOUT = 2; // 0x2 + field public static final int RESET_OPTION_DELETE_FIELD_LOADED_TEST_PROFILES = 2; // 0x2 + field public static final int RESET_OPTION_DELETE_OPERATIONAL_PROFILES = 1; // 0x1 + field public static final int RESET_OPTION_RESET_DEFAULT_SMDP_ADDRESS = 4; // 0x4 + field public static final int RESULT_OK = 0; // 0x0 + field public static final int RESULT_UNKNOWN_ERROR = -1; // 0xffffffff + } + + public static abstract class EuiccCardManager.CancelReason implements java.lang.annotation.Annotation { + } + + public static abstract class EuiccCardManager.ResetOption implements java.lang.annotation.Annotation { + } + + public static abstract interface EuiccCardManager.ResultCallback<T> { + method public abstract void onComplete(int, T); + } + + public class EuiccManager { + method public void continueOperation(android.content.Intent, android.os.Bundle); + method public void getDefaultDownloadableSubscriptionList(android.app.PendingIntent); + method public void getDownloadableSubscriptionMetadata(android.telephony.euicc.DownloadableSubscription, android.app.PendingIntent); + method public int getOtaStatus(); + field public static final java.lang.String ACTION_OTA_STATUS_CHANGED = "android.telephony.euicc.action.OTA_STATUS_CHANGED"; + field public static final java.lang.String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION = "android.telephony.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION"; + 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 java.lang.String EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION"; + field public static final java.lang.String EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS"; + } + + public static abstract class EuiccManager.OtaStatus implements java.lang.annotation.Annotation { + } + + public final class EuiccNotification implements android.os.Parcelable { + ctor public EuiccNotification(int, java.lang.String, int, byte[]); + method public int describeContents(); + method public byte[] getData(); + method public int getEvent(); + method public int getSeq(); + method public java.lang.String getTargetAddr(); + method public void writeToParcel(android.os.Parcel, int); + field public static final int ALL_EVENTS = 15; // 0xf + field public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccNotification> CREATOR; + field public static final int EVENT_DELETE = 8; // 0x8 + field public static final int EVENT_DISABLE = 4; // 0x4 + field public static final int EVENT_ENABLE = 2; // 0x2 + field public static final int EVENT_INSTALL = 1; // 0x1 + } + + public static abstract class EuiccNotification.Event implements java.lang.annotation.Annotation { + } + + public final class EuiccRulesAuthTable implements android.os.Parcelable { + method public int describeContents(); + method public int findIndex(int, android.service.carrier.CarrierIdentifier); + method public boolean hasPolicyRuleFlag(int, int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccRulesAuthTable> CREATOR; + field public static final int POLICY_RULE_FLAG_CONSENT_REQUIRED = 1; // 0x1 + } + + public static final class EuiccRulesAuthTable.Builder { + ctor public EuiccRulesAuthTable.Builder(int); + method public android.telephony.euicc.EuiccRulesAuthTable.Builder add(int, java.util.List<android.service.carrier.CarrierIdentifier>, int); + method public android.telephony.euicc.EuiccRulesAuthTable build(); + } + + public static abstract class EuiccRulesAuthTable.PolicyRuleFlag implements java.lang.annotation.Annotation { + } + +} + package android.telephony.ims { public final class ImsCallForwardInfo implements android.os.Parcelable { diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index 4fac5aa7c8e7..3a20b12500ae 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -72,9 +72,6 @@ StatsLogProcessor::StatsLogProcessor(const sp<UidMap>& uidMap, mAnomalyMonitor(anomalyMonitor), mSendBroadcast(sendBroadcast), mTimeBaseSec(timeBaseSec) { - // On each initialization of StatsLogProcessor, check stats-data directory to see if there is - // any left over data to be read. - StorageManager::sendBroadcast(STATS_DATA_DIR, mSendBroadcast); StatsPullerManager statsPullerManager; statsPullerManager.SetTimeBaseSec(mTimeBaseSec); } diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index e111f5854a34..ee38667b0df9 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -669,11 +669,18 @@ Status StatsService::informAnomalyAlarmFired() { "Only system uid can call informAnomalyAlarmFired"); } - VLOG("StatsService::informAnomalyAlarmFired succeeded"); + // TODO: This may be a bug. time(nullptr) can be off (wrt AlarmManager's time) and cause us to + // miss the alarm! Eventually we will switch to using elapsedRealTime everywhere, + // which may hopefully fix the problem, so we'll leave this alone for now. uint64_t currentTimeSec = time(nullptr); std::unordered_set<sp<const AnomalyAlarm>, SpHash<AnomalyAlarm>> anomalySet = mAnomalyMonitor->popSoonerThan(static_cast<uint32_t>(currentTimeSec)); - mProcessor->onAnomalyAlarmFired(currentTimeSec * NS_PER_SEC, anomalySet); + if (anomalySet.size() > 0) { + VLOG("Found an anomaly alarm that fired."); + mProcessor->onAnomalyAlarmFired(currentTimeSec * NS_PER_SEC, anomalySet); + } else { + VLOG("Cannot find an anomaly alarm that fired. Perhaps it was recently cancelled."); + } return Status::ok(); } diff --git a/cmds/statsd/src/anomaly/AnomalyMonitor.cpp b/cmds/statsd/src/anomaly/AnomalyMonitor.cpp index 72d29d03c863..ca34dc6d87fd 100644 --- a/cmds/statsd/src/anomaly/AnomalyMonitor.cpp +++ b/cmds/statsd/src/anomaly/AnomalyMonitor.cpp @@ -96,7 +96,7 @@ unordered_set<sp<const AnomalyAlarm>, SpHash<AnomalyAlarm>> AnomalyMonitor::popS std::lock_guard<std::mutex> lock(mLock); for (sp<const AnomalyAlarm> t = mPq.top(); t != nullptr && t->timestampSec <= timestampSec; - t = mPq.top()) { + t = mPq.top()) { oldAlarms.insert(t); mPq.pop(); // remove t } diff --git a/cmds/statsd/src/anomaly/AnomalyTracker.cpp b/cmds/statsd/src/anomaly/AnomalyTracker.cpp index ba16ec83a5c5..443d33d39915 100644 --- a/cmds/statsd/src/anomaly/AnomalyTracker.cpp +++ b/cmds/statsd/src/anomaly/AnomalyTracker.cpp @@ -92,6 +92,9 @@ void AnomalyTracker::flushPastBuckets(const int64_t& latestPastBucketNum) { void AnomalyTracker::addPastBucket(const MetricDimensionKey& key, const int64_t& bucketValue, const int64_t& bucketNum) { + if (mNumOfPastBuckets == 0) { + return; + } flushPastBuckets(bucketNum); auto& bucket = mPastBuckets[index(bucketNum)]; @@ -106,6 +109,9 @@ void AnomalyTracker::addPastBucket(const MetricDimensionKey& key, const int64_t& void AnomalyTracker::addPastBucket(std::shared_ptr<DimToValMap> bucketValues, const int64_t& bucketNum) { VLOG("addPastBucket() called."); + if (mNumOfPastBuckets == 0) { + return; + } flushPastBuckets(bucketNum); // Replace the oldest bucket with the new bucket we are adding. mPastBuckets[index(bucketNum)] = bucketValues; diff --git a/cmds/statsd/src/anomaly/DurationAnomalyTracker.cpp b/cmds/statsd/src/anomaly/DurationAnomalyTracker.cpp index fa0bc0c400b0..3ba943c310bb 100644 --- a/cmds/statsd/src/anomaly/DurationAnomalyTracker.cpp +++ b/cmds/statsd/src/anomaly/DurationAnomalyTracker.cpp @@ -53,10 +53,11 @@ void DurationAnomalyTracker::declareAnomalyIfAlarmExpired(const MetricDimensionK void DurationAnomalyTracker::startAlarm(const MetricDimensionKey& dimensionKey, const uint64_t& timestampNs) { - uint32_t timestampSec = static_cast<uint32_t>(timestampNs / NS_PER_SEC); + // Alarms are stored in secs. Must round up, since if it fires early, it is ignored completely. + uint32_t timestampSec = static_cast<uint32_t>((timestampNs -1)/ NS_PER_SEC) + 1; // round up if (isInRefractoryPeriod(timestampNs, dimensionKey)) { - VLOG("Skipping setting anomaly alarm since it'd fall in the refractory period"); - return; + VLOG("Setting a delayed anomaly alarm lest it fall in the refractory period"); + timestampSec = getRefractoryPeriodEndsSec(dimensionKey) + 1; } sp<const AnomalyAlarm> alarm = new AnomalyAlarm{timestampSec}; mAlarms.insert({dimensionKey, alarm}); diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt index 7b70f5997762..44f43a254361 100644 --- a/config/hiddenapi-light-greylist.txt +++ b/config/hiddenapi-light-greylist.txt @@ -1,7 +1,11 @@ Landroid/accounts/AccountManager;->mContext:Landroid/content/Context; +Landroid/accounts/IAccountManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/accounts/IAccountManager; +Landroid/accounts/IAccountManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/animation/LayoutTransition;->cancel()V Landroid/animation/ValueAnimator;->animateValue(F)V Landroid/animation/ValueAnimator;->getDurationScale()F Landroid/animation/ValueAnimator;->sDurationScale:F +Landroid/animation/ValueAnimator;->setDurationScale(F)V Landroid/app/Activity;->convertFromTranslucent()V Landroid/app/Activity;->convertToTranslucent(Landroid/app/Activity$TranslucentConversionListener;Landroid/app/ActivityOptions;)Z Landroid/app/Activity;->getActivityOptions()Landroid/app/ActivityOptions; @@ -12,6 +16,8 @@ Landroid/app/ActivityManager;->clearApplicationUserData(Ljava/lang/String;Landro Landroid/app/ActivityManager;->forceStopPackage(Ljava/lang/String;)V Landroid/app/ActivityManager;->getCurrentUser()I Landroid/app/ActivityManager;->getPackageImportance(Ljava/lang/String;)I +Landroid/app/ActivityManager;->getService()Landroid/app/IActivityManager; +Landroid/app/ActivityManager;->IActivityManagerSingleton:Landroid/util/Singleton; Landroid/app/ActivityManager;->isLowRamDeviceStatic()Z Landroid/app/ActivityManager;->isUserRunning(I)Z Landroid/app/ActivityManager;->mContext:Landroid/content/Context; @@ -22,17 +28,37 @@ Landroid/app/ActivityManager;->removeOnUidImportanceListener(Landroid/app/Activi Landroid/app/ActivityManager$RunningAppProcessInfo;->flags:I Landroid/app/ActivityManager$RunningAppProcessInfo;->processState:I Landroid/app/Activity;->mApplication:Landroid/app/Application; +Landroid/app/Activity;->mComponent:Landroid/content/ComponentName; +Landroid/app/Activity;->mFragments:Landroid/app/FragmentController; Landroid/app/Activity;->mHandler:Landroid/os/Handler; +Landroid/app/Activity;->mInstrumentation:Landroid/app/Instrumentation; +Landroid/app/Activity;->mReferrer:Ljava/lang/String; Landroid/app/Activity;->mResultCode:I Landroid/app/Activity;->mResultData:Landroid/content/Intent; +Landroid/app/Activity;->mResumed:Z Landroid/app/Activity;->mToken:Landroid/os/IBinder; Landroid/app/Activity;->mWindow:Landroid/view/Window; Landroid/app/Activity;->mWindowManager:Landroid/view/WindowManager; Landroid/app/Activity;->setDisablePreviewScreenshots(Z)V Landroid/app/ActivityThread$ActivityClientRecord;->activityInfo:Landroid/content/pm/ActivityInfo; +Landroid/app/ActivityThread$ActivityClientRecord;->activity:Landroid/app/Activity; +Landroid/app/ActivityThread$ActivityClientRecord;->compatInfo:Landroid/content/res/CompatibilityInfo; +Landroid/app/ActivityThread$ActivityClientRecord;->intent:Landroid/content/Intent; +Landroid/app/ActivityThread$ActivityClientRecord;->mPreserveWindow:Z +Landroid/app/ActivityThread$ActivityClientRecord;->packageInfo:Landroid/app/LoadedApk; +Landroid/app/ActivityThread$ActivityClientRecord;->paused:Z +Landroid/app/ActivityThread$ActivityClientRecord;->stopped:Z Landroid/app/ActivityThread$ActivityClientRecord;->token:Landroid/os/IBinder; +Landroid/app/ActivityThread$AppBindData;->appInfo:Landroid/content/pm/ApplicationInfo; Landroid/app/ActivityThread$AppBindData;->info:Landroid/app/LoadedApk; Landroid/app/ActivityThread$AppBindData;->instrumentationArgs:Landroid/os/Bundle; +Landroid/app/ActivityThread$AppBindData;->providers:Ljava/util/List; +Landroid/app/ActivityThread$BindServiceData;->intent:Landroid/content/Intent; +Landroid/app/ActivityThread$BindServiceData;->token:Landroid/os/IBinder; +Landroid/app/ActivityThread$CreateServiceData;->compatInfo:Landroid/content/res/CompatibilityInfo; +Landroid/app/ActivityThread$CreateServiceData;->info:Landroid/content/pm/ServiceInfo; +Landroid/app/ActivityThread$CreateServiceData;->intent:Landroid/content/Intent; +Landroid/app/ActivityThread$CreateServiceData;->token:Landroid/os/IBinder; Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread; Landroid/app/ActivityThread;->currentApplication()Landroid/app/Application; Landroid/app/ActivityThread;->currentPackageName()Ljava/lang/String; @@ -42,25 +68,41 @@ Landroid/app/ActivityThread;->getApplication()Landroid/app/Application; Landroid/app/ActivityThread;->getApplicationThread()Landroid/app/ActivityThread$ApplicationThread; Landroid/app/ActivityThread;->getHandler()Landroid/os/Handler; Landroid/app/ActivityThread;->getInstrumentation()Landroid/app/Instrumentation; +Landroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;I)Landroid/app/LoadedApk; +Landroid/app/ActivityThread;->getPackageInfoNoCheck(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;)Landroid/app/LoadedApk; Landroid/app/ActivityThread;->getPackageManager()Landroid/content/pm/IPackageManager; Landroid/app/ActivityThread;->getProcessName()Ljava/lang/String; +Landroid/app/ActivityThread;->getSystemContext()Landroid/app/ContextImpl; Landroid/app/ActivityThread$H;->BIND_SERVICE:I Landroid/app/ActivityThread$H;->CREATE_SERVICE:I Landroid/app/ActivityThread$H;->EXIT_APPLICATION:I +Landroid/app/ActivityThread$H;->GC_WHEN_IDLE:I Landroid/app/ActivityThread$H;->RECEIVER:I Landroid/app/ActivityThread$H;->REMOVE_PROVIDER:I Landroid/app/ActivityThread$H;->SERVICE_ARGS:I Landroid/app/ActivityThread$H;->STOP_SERVICE:I Landroid/app/ActivityThread$H;->UNBIND_SERVICE:I Landroid/app/ActivityThread;->installContentProviders(Landroid/content/Context;Ljava/util/List;)V +Landroid/app/ActivityThread;->installProvider(Landroid/content/Context;Landroid/app/ContentProviderHolder;Landroid/content/pm/ProviderInfo;ZZZ)Landroid/app/ContentProviderHolder; Landroid/app/ActivityThread;->mActivities:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mAllApplications:Ljava/util/ArrayList; Landroid/app/ActivityThread;->mBoundApplication:Landroid/app/ActivityThread$AppBindData; +Landroid/app/ActivityThread;->mH:Landroid/app/ActivityThread$H; Landroid/app/ActivityThread;->mInitialApplication:Landroid/app/Application; Landroid/app/ActivityThread;->mInstrumentation:Landroid/app/Instrumentation; Landroid/app/ActivityThread;->mNumVisibleActivities:I Landroid/app/ActivityThread;->mPackages:Landroid/util/ArrayMap; +Landroid/app/ActivityThread;->mProviderMap:Landroid/util/ArrayMap; +Landroid/app/ActivityThread;->mServices:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->performStopActivity(Landroid/os/IBinder;ZLjava/lang/String;)V +Landroid/app/ActivityThread$ProviderClientRecord;->mLocalProvider:Landroid/content/ContentProvider; +Landroid/app/ActivityThread$ReceiverData;->compatInfo:Landroid/content/res/CompatibilityInfo; +Landroid/app/ActivityThread$ReceiverData;->info:Landroid/content/pm/ActivityInfo; +Landroid/app/ActivityThread$ReceiverData;->intent:Landroid/content/Intent; +Landroid/app/ActivityThread;->sCurrentActivityThread:Landroid/app/ActivityThread; +Landroid/app/ActivityThread;->sendActivityResult(Landroid/os/IBinder;Ljava/lang/String;IILandroid/content/Intent;)V +Landroid/app/ActivityThread$ServiceArgsData;->args:Landroid/content/Intent; +Landroid/app/ActivityThread$ServiceArgsData;->token:Landroid/os/IBinder; Landroid/app/ActivityThread;->sPackageManager:Landroid/content/pm/IPackageManager; Landroid/app/admin/DevicePolicyManager;->getDeviceOwnerComponentOnAnyUser()Landroid/content/ComponentName; Landroid/app/admin/DevicePolicyManager;->getDeviceOwner()Ljava/lang/String; @@ -72,6 +114,9 @@ Landroid/app/admin/DevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/Strin Landroid/app/admin/DevicePolicyManager;->packageHasActiveAdmins(Ljava/lang/String;)Z Landroid/app/admin/DevicePolicyManager;->setActiveAdmin(Landroid/content/ComponentName;ZI)V Landroid/app/admin/DevicePolicyManager;->setActiveAdmin(Landroid/content/ComponentName;Z)V +Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_packageHasActiveAdmins:I +Landroid/app/admin/IDevicePolicyManager$Stub;->TRANSACTION_removeActiveAdmin:I +Landroid/app/admin/SecurityLog$SecurityEvent;-><init>([B)V Landroid/app/AlarmManager;->FLAG_ALLOW_WHILE_IDLE_UNRESTRICTED:I Landroid/app/AlarmManager;->FLAG_IDLE_UNTIL:I Landroid/app/AlarmManager;->FLAG_STANDALONE:I @@ -85,26 +130,50 @@ Landroid/app/AlertDialog;->mAlert:Lcom/android/internal/app/AlertController; Landroid/app/AppGlobals;->getInitialApplication()Landroid/app/Application; Landroid/app/AppGlobals;->getPackageManager()Landroid/content/pm/IPackageManager; Landroid/app/Application;->attach(Landroid/content/Context;)V +Landroid/app/Application;->collectActivityLifecycleCallbacks()[Ljava/lang/Object; +Landroid/app/Application;->dispatchActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +Landroid/app/Application;->dispatchActivityDestroyed(Landroid/app/Activity;)V +Landroid/app/Application;->dispatchActivityPaused(Landroid/app/Activity;)V +Landroid/app/Application;->dispatchActivityResumed(Landroid/app/Activity;)V +Landroid/app/Application;->dispatchActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V +Landroid/app/Application;->dispatchActivityStarted(Landroid/app/Activity;)V +Landroid/app/Application;->dispatchActivityStopped(Landroid/app/Activity;)V Landroid/app/ApplicationLoaders;->getDefault()Landroid/app/ApplicationLoaders; Landroid/app/ApplicationLoaders;->mLoaders:Landroid/util/ArrayMap; Landroid/app/Application;->mComponentCallbacks:Ljava/util/ArrayList; Landroid/app/Application;->mLoadedApk:Landroid/app/LoadedApk; Landroid/app/ApplicationPackageManager;->deletePackage(Ljava/lang/String;Landroid/content/pm/IPackageDeleteObserver;I)V +Landroid/app/ApplicationPackageManager;->getPackageSizeInfoAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageStatsObserver;)V +Landroid/app/ApplicationPackageManager;-><init>(Landroid/app/ContextImpl;Landroid/content/pm/IPackageManager;)V Landroid/app/ApplicationPackageManager;->installExistingPackage(Ljava/lang/String;)I Landroid/app/ApplicationPackageManager;->installExistingPackage(Ljava/lang/String;I)I +Landroid/app/ApplicationPackageManager;->mPM:Landroid/content/pm/IPackageManager; Landroid/app/AppOpsManager;->checkOp(IILjava/lang/String;)I Landroid/app/AppOpsManager;->checkOpNoThrow(IILjava/lang/String;)I +Landroid/app/AppOpsManager;->mService:Lcom/android/internal/app/IAppOpsService; Landroid/app/AppOpsManager;->noteOp(I)I Landroid/app/AppOpsManager;->noteOp(IILjava/lang/String;)I +Landroid/app/AppOpsManager;->OP_COARSE_LOCATION:I +Landroid/app/AppOpsManager;->OP_FINE_LOCATION:I +Landroid/app/AppOpsManager;->OP_GET_USAGE_STATS:I Landroid/app/AppOpsManager;->OP_POST_NOTIFICATION:I +Landroid/app/AppOpsManager;->OP_READ_PHONE_STATE:I +Landroid/app/AppOpsManager;->OP_READ_SMS:I +Landroid/app/AppOpsManager;->OP_SYSTEM_ALERT_WINDOW:I Landroid/app/AppOpsManager;->OP_WIFI_SCAN:I Landroid/app/AppOpsManager;->OP_WRITE_SMS:I +Landroid/app/AppOpsManager;->permissionToOpCode(Ljava/lang/String;)I Landroid/app/AppOpsManager;->setMode(IILjava/lang/String;I)V Landroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I +Landroid/app/backup/BackupDataInput$EntityHeader;->dataSize:I +Landroid/app/backup/BackupDataInput$EntityHeader;->key:Ljava/lang/String; Landroid/app/backup/BackupDataInput;-><init>(Ljava/io/FileDescriptor;)V Landroid/app/backup/BackupDataInputStream;->dataSize:I Landroid/app/backup/BackupDataInputStream;->key:Ljava/lang/String; Landroid/app/backup/BackupDataOutput;-><init>(Ljava/io/FileDescriptor;)V +Landroid/app/backup/BackupDataOutput;->mBackupWriter:J +Landroid/app/backup/BackupHelperDispatcher$Header;->chunkSize:I +Landroid/app/backup/BackupHelperDispatcher$Header;->keyPrefix:Ljava/lang/String; Landroid/app/backup/BackupManager;->backupNow()V Landroid/app/backup/BackupManager;->beginRestoreSession()Landroid/app/backup/RestoreSession; Landroid/app/backup/BackupManager;->cancelBackups()V @@ -118,64 +187,135 @@ Landroid/app/backup/BackupManager;->selectBackupTransport(Landroid/content/Compo Landroid/app/backup/BackupManager;->selectBackupTransport(Ljava/lang/String;)Ljava/lang/String; Landroid/app/backup/BackupManager;->setAutoRestore(Z)V Landroid/app/backup/BackupManager;->setBackupEnabled(Z)V +Landroid/app/backup/BackupManager;->updateTransportAttributes(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;)V Landroid/app/backup/BackupObserver;-><init>()V Landroid/app/backup/BackupTransport;-><init>()V Landroid/app/backup/FullBackup;->backupToTar(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/backup/FullBackupDataOutput;)I +Landroid/app/backup/FullBackupDataOutput;->addSize(J)V +Landroid/app/backup/FullBackupDataOutput;->mData:Landroid/app/backup/BackupDataOutput; Landroid/app/backup/RestoreDescription;-><init>(Ljava/lang/String;I)V Landroid/app/backup/RestoreSession;->endRestoreSession()V Landroid/app/backup/RestoreSession;->getAvailableRestoreSets(Landroid/app/backup/RestoreObserver;)I Landroid/app/backup/RestoreSession;->restoreAll(JLandroid/app/backup/RestoreObserver;)I Landroid/app/backup/RestoreSet;-><init>(Ljava/lang/String;Ljava/lang/String;J)V Landroid/app/backup/SelectBackupTransportCallback;-><init>()V +Landroid/app/ContentProviderHolder;->provider:Landroid/content/IContentProvider; Landroid/app/ContextImpl;->createActivityContext(Landroid/app/ActivityThread;Landroid/app/LoadedApk;Landroid/content/pm/ActivityInfo;Landroid/os/IBinder;ILandroid/content/res/Configuration;)Landroid/app/ContextImpl; Landroid/app/ContextImpl;->getActivityToken()Landroid/os/IBinder; +Landroid/app/ContextImpl;->getDisplay()Landroid/view/Display; +Landroid/app/ContextImpl;->getPreferencesDir()Ljava/io/File; +Landroid/app/ContextImpl;->mContentResolver:Landroid/app/ContextImpl$ApplicationContentResolver; Landroid/app/ContextImpl;->mMainThread:Landroid/app/ActivityThread; +Landroid/app/ContextImpl;->mOpPackageName:Ljava/lang/String; +Landroid/app/ContextImpl;->mOuterContext:Landroid/content/Context; Landroid/app/ContextImpl;->mPackageInfo:Landroid/app/LoadedApk; +Landroid/app/ContextImpl;->mPackageManager:Landroid/content/pm/PackageManager; +Landroid/app/ContextImpl;->mResources:Landroid/content/res/Resources; +Landroid/app/ContextImpl;->mServiceCache:[Ljava/lang/Object; +Landroid/app/ContextImpl;->mTheme:Landroid/content/res/Resources$Theme; +Landroid/app/ContextImpl;->scheduleFinalCleanup(Ljava/lang/String;Ljava/lang/String;)V Landroid/app/ContextImpl;->setOuterContext(Landroid/content/Context;)V Landroid/app/DatePickerDialog;->mDatePicker:Landroid/widget/DatePicker; Landroid/app/Dialog;->CANCEL:I +Landroid/app/Dialog;->dismissDialog()V Landroid/app/Dialog;->mCancelMessage:Landroid/os/Message; Landroid/app/Dialog;->mDismissMessage:Landroid/os/Message; Landroid/app/Dialog;->mListenersHandler:Landroid/os/Handler; Landroid/app/Dialog;->mOwnerActivity:Landroid/app/Activity; Landroid/app/Dialog;->mShowMessage:Landroid/os/Message; Landroid/app/DownloadManager$Request;->mUri:Landroid/net/Uri; +Landroid/app/FragmentManagerImpl;->mAdded:Ljava/util/ArrayList; Landroid/app/Fragment;->mChildFragmentManager:Landroid/app/FragmentManagerImpl; Landroid/app/IActivityManager;->forceStopPackage(Ljava/lang/String;I)V Landroid/app/IActivityManager;->getLaunchedFromPackage(Landroid/os/IBinder;)Ljava/lang/String; +Landroid/app/IActivityManager;->getTaskForActivity(Landroid/os/IBinder;Z)I Landroid/app/IActivityManager;->resumeAppSwitches()V +Landroid/app/IActivityManager;->setRequestedOrientation(Landroid/os/IBinder;I)V +Landroid/app/IActivityManager$Stub$Proxy;->getConfiguration()Landroid/content/res/Configuration; +Landroid/app/IActivityManager$Stub$Proxy;->getLaunchedFromUid(Landroid/os/IBinder;)I +Landroid/app/IActivityManager$Stub$Proxy;->getProcessPss([I)[J +Landroid/app/IActivityManager$Stub$Proxy;->isAppForeground(I)Z +Landroid/app/IActivityManager$Stub$Proxy;->mRemote:Landroid/os/IBinder; +Landroid/app/IAlarmManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/app/IAlarmManager$Stub;->TRANSACTION_remove:I +Landroid/app/IAlarmManager$Stub;->TRANSACTION_set:I Landroid/app/IApplicationThread;->scheduleTrimMemory(I)V +Landroid/app/INotificationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/INotificationManager; +Landroid/app/INotificationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/InstantAppResolverService;-><init>()V Landroid/app/InstantAppResolverService$InstantAppResolutionCallback;->onInstantAppResolveInfo(Ljava/util/List;)V +Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/Instrumentation$ActivityResult; +Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/Instrumentation$ActivityResult; +Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/Instrumentation$ActivityResult; Landroid/app/IntentService;->mServiceHandler:Landroid/app/IntentService$ServiceHandler; +Landroid/app/ISearchManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ISearchManager; +Landroid/app/ISearchManager$Stub$Proxy;->getGlobalSearchActivity()Landroid/content/ComponentName; +Landroid/app/ISearchManager$Stub$Proxy;->getWebSearchActivity()Landroid/content/ComponentName; +Landroid/app/IUiModeManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/IWallpaperManager;->getWallpaper(Ljava/lang/String;Landroid/app/IWallpaperManagerCallback;ILandroid/os/Bundle;I)Landroid/os/ParcelFileDescriptor; +Landroid/app/job/IJobScheduler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobScheduler; +Landroid/app/job/IJobScheduler$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/app/LoadedApk;->mActivityThread:Landroid/app/ActivityThread; +Landroid/app/LoadedApk;->makeApplication(ZLandroid/app/Instrumentation;)Landroid/app/Application; +Landroid/app/LoadedApk;->mAppDir:Ljava/lang/String; +Landroid/app/LoadedApk;->mApplicationInfo:Landroid/content/pm/ApplicationInfo; Landroid/app/LoadedApk;->mApplication:Landroid/app/Application; +Landroid/app/LoadedApk;->mBaseClassLoader:Ljava/lang/ClassLoader; +Landroid/app/LoadedApk;->mClassLoader:Ljava/lang/ClassLoader; +Landroid/app/LoadedApk;->mDataDir:Ljava/lang/String; +Landroid/app/LoadedApk;->mPackageName:Ljava/lang/String; Landroid/app/LoadedApk;->mReceivers:Landroid/util/ArrayMap; Landroid/app/LoadedApk;->mResDir:Ljava/lang/String; Landroid/app/LoadedApk;->mResources:Landroid/content/res/Resources; +Landroid/app/LoadedApk;->mSplitResDirs:[Ljava/lang/String; Landroid/app/LocalActivityManager;->mActivities:Ljava/util/Map; Landroid/app/LocalActivityManager;->mActivityArray:Ljava/util/ArrayList; +Landroid/app/NativeActivity;->hideIme(I)V +Landroid/app/NativeActivity;->setWindowFlags(II)V +Landroid/app/NativeActivity;->setWindowFormat(I)V +Landroid/app/NativeActivity;->showIme(I)V Landroid/app/Notification$Builder;->mActions:Ljava/util/ArrayList; Landroid/app/Notification;->EXTRA_SUBSTITUTE_APP_NAME:Ljava/lang/String; Landroid/app/Notification;->isGroupSummary()Z Landroid/app/NotificationManager;->getService()Landroid/app/INotificationManager; Landroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V +Landroid/app/NotificationManager;->sService:Landroid/app/INotificationManager; +Landroid/app/Notification;->mLargeIcon:Landroid/graphics/drawable/Icon; +Landroid/app/Notification;->mSmallIcon:Landroid/graphics/drawable/Icon; Landroid/app/Notification;->setLatestEventInfo(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V Landroid/app/PendingIntent;->getActivityAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent; Landroid/app/PendingIntent;->getIntent()Landroid/content/Intent; Landroid/app/PendingIntent;->isActivity()Z Landroid/app/Presentation;->createPresentationContext(Landroid/content/Context;Landroid/view/Display;I)Landroid/content/Context; Landroid/app/ProgressDialog;->mProgressNumber:Landroid/widget/TextView; +Landroid/app/QueuedWork;->addFinisher(Ljava/lang/Runnable;)V +Landroid/app/QueuedWork;->removeFinisher(Ljava/lang/Runnable;)V +Landroid/app/ResourcesManager;->appendLibAssetForMainAssetPath(Ljava/lang/String;Ljava/lang/String;)V +Landroid/app/ResourcesManager;->getInstance()Landroid/app/ResourcesManager; +Landroid/app/ResourcesManager;->mActivityResourceReferences:Ljava/util/WeakHashMap; +Landroid/app/ResourcesManager;->mResourceImpls:Landroid/util/ArrayMap; +Landroid/app/ResourcesManager;->mResourceReferences:Ljava/util/ArrayList; +Landroid/app/Service;->attach(Landroid/content/Context;Landroid/app/ActivityThread;Ljava/lang/String;Landroid/os/IBinder;Landroid/app/Application;Ljava/lang/Object;)V +Landroid/app/Service;->mActivityManager:Landroid/app/IActivityManager; +Landroid/app/Service;->mApplication:Landroid/app/Application; +Landroid/app/Service;->mClassName:Ljava/lang/String; +Landroid/app/Service;->mStartCompatibility:Z +Landroid/app/Service;->mThread:Landroid/app/ActivityThread; +Landroid/app/Service;->mToken:Landroid/os/IBinder; Landroid/app/Service;->setForeground(Z)V +Landroid/app/SharedPreferencesImpl;->mFile:Ljava/io/File; Landroid/app/StatusBarManager;->collapsePanels()V Landroid/app/StatusBarManager;->disable(I)V Landroid/app/StatusBarManager;->expandNotificationsPanel()V Landroid/app/StatusBarManager;->expandSettingsPanel(Ljava/lang/String;)V Landroid/app/StatusBarManager;->expandSettingsPanel()V Landroid/app/TimePickerDialog;->mTimePicker:Landroid/widget/TimePicker; +Landroid/app/trust/ITrustManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/app/usage/UsageStatsManager;->getAppStandbyBuckets()Ljava/util/Map; +Landroid/app/usage/UsageStatsManager;->mService:Landroid/app/usage/IUsageStatsManager; Landroid/app/usage/UsageStatsManager;->setAppStandbyBuckets(Ljava/util/Map;)V Landroid/app/usage/UsageStatsManager;->whitelistAppTemporarily(Ljava/lang/String;JLandroid/os/UserHandle;)V +Landroid/app/usage/UsageStats;->mLastEvent:I Landroid/app/WallpaperColors;->getColorHints()I Landroid/app/WallpaperManager;->getBitmap()Landroid/graphics/Bitmap; Landroid/app/WallpaperManager;->getBitmap(Z)Landroid/graphics/Bitmap; @@ -194,6 +334,7 @@ Landroid/bluetooth/BluetoothAdapter;->enableNoAutoConnect()Z Landroid/bluetooth/BluetoothAdapter;->getDiscoverableTimeout()I Landroid/bluetooth/BluetoothAdapter;->isBleScanAlwaysAvailable()Z Landroid/bluetooth/BluetoothAdapter;->isLeEnabled()Z +Landroid/bluetooth/BluetoothAdapter;->mService:Landroid/bluetooth/IBluetooth; Landroid/bluetooth/BluetoothAdapter;->setScanMode(II)Z Landroid/bluetooth/BluetoothAdapter;->setScanMode(I)Z Landroid/bluetooth/BluetoothDevice;->cancelBondProcess()Z @@ -211,15 +352,26 @@ Landroid/bluetooth/BluetoothGatt;->refresh()Z Landroid/bluetooth/BluetoothHeadset;->close()V Landroid/bluetooth/BluetoothHeadset;->setPriority(Landroid/bluetooth/BluetoothDevice;I)Z Landroid/bluetooth/BluetoothUuid;->RESERVED_UUIDS:[Landroid/os/ParcelUuid; +Landroid/bluetooth/IBluetooth;->getAddress()Ljava/lang/String; Landroid/bluetooth/IBluetooth$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetooth; +Landroid/bluetooth/IBluetooth$Stub$Proxy;->getAddress()Ljava/lang/String; Landroid/bluetooth/le/BluetoothLeScanner;->startScanFromSource(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/os/WorkSource;Landroid/bluetooth/le/ScanCallback;)V Landroid/bluetooth/le/ScanSettings$Builder;->setScanResultType(I)Landroid/bluetooth/le/ScanSettings$Builder; Landroid/content/AsyncTaskLoader;->mExecutor:Ljava/util/concurrent/Executor; +Landroid/content/BroadcastReceiver$PendingResult;-><init>(ILjava/lang/String;Landroid/os/Bundle;IZZLandroid/os/IBinder;II)V +Landroid/content/BroadcastReceiver;->setPendingResult(Landroid/content/BroadcastReceiver$PendingResult;)V +Landroid/content/ContentProvider;->mContext:Landroid/content/Context; +Landroid/content/ContentProvider;->mPathPermissions:[Landroid/content/pm/PathPermission; +Landroid/content/ContentProvider;->mReadPermission:Ljava/lang/String; +Landroid/content/ContentProvider;->mWritePermission:Ljava/lang/String; Landroid/content/ContentProviderOperation;->mSelection:Ljava/lang/String; Landroid/content/ContentProviderOperation;->mType:I +Landroid/content/ContentResolver;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider; Landroid/content/ContentResolver;->getContentService()Landroid/content/IContentService; Landroid/content/ContentResolver;->getSyncStatus(Landroid/accounts/Account;Ljava/lang/String;)Landroid/content/SyncStatusInfo; Landroid/content/ContentResolver;->mContext:Landroid/content/Context; +Landroid/content/ContentResolver;->mPackageName:Ljava/lang/String; +Landroid/content/ContentValues;-><init>(Ljava/util/HashMap;)V Landroid/content/ContentValues;->mValues:Ljava/util/HashMap; Landroid/content/Context;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z Landroid/content/Context;->createCredentialProtectedStorageContext()Landroid/content/Context; @@ -227,40 +379,59 @@ Landroid/content/Context;->createPackageContextAsUser(Ljava/lang/String;ILandroi Landroid/content/Context;->getSharedPrefsFile(Ljava/lang/String;)Ljava/io/File; Landroid/content/Context;->getThemeResId()I Landroid/content/Context;->isCredentialProtectedStorage()Z +Landroid/content/Context;->PERSISTENT_DATA_BLOCK_SERVICE:Ljava/lang/String; Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;I)V Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/os/Bundle;)V Landroid/content/Context;->sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;ILandroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V Landroid/content/Context;->sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;ILandroid/os/Bundle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V Landroid/content/ContextWrapper;->createCredentialProtectedStorageContext()Landroid/content/Context; +Landroid/content/ContextWrapper;->getDisplay()Landroid/view/Display; Landroid/content/ContextWrapper;->mBase:Landroid/content/Context; Landroid/content/CursorLoader;->mCancellationSignal:Landroid/os/CancellationSignal; Landroid/content/CursorLoader;->mObserver:Landroid/content/Loader$ForceLoadContentObserver; +Landroid/content/IClipboard$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IClipboard; Landroid/content/IContentService;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)V Landroid/content/IContentService;->getMasterSyncAutomatically()Z Landroid/content/IContentService;->setMasterSyncAutomatically(Z)V +Landroid/content/IContentService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/Intent;->ACTION_ALARM_CHANGED:Ljava/lang/String; +Landroid/content/IntentFilter;->mActions:Ljava/util/ArrayList; Landroid/content/IntentFilter;->setOrder(I)V Landroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/IBinder;)Landroid/content/Intent; +Landroid/content/pm/ApplicationInfo;->enabledSetting:I +Landroid/content/pm/ApplicationInfo;->getBaseResourcePath()Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->installLocation:I Landroid/content/pm/ApplicationInfo;->isForwardLocked()Z Landroid/content/pm/ApplicationInfo;->isInstantApp()Z Landroid/content/pm/ApplicationInfo;->isPrivilegedApp()Z Landroid/content/pm/ApplicationInfo;->primaryCpuAbi:Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->privateFlags:I +Landroid/content/pm/ApplicationInfo;->scanPublicSourceDir:Ljava/lang/String; +Landroid/content/pm/ApplicationInfo;->scanSourceDir:Ljava/lang/String; +Landroid/content/pm/ApplicationInfo;->secondaryNativeLibraryDir:Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->targetSandboxVersion:I Landroid/content/pm/InstantAppIntentFilter;-><init>(Ljava/lang/String;Ljava/util/List;)V Landroid/content/pm/InstantAppResolveInfo;->getPackageName()Ljava/lang/String; Landroid/content/pm/InstantAppResolveInfo;-><init>(Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;Ljava/lang/String;Ljava/util/List;I)V Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;->getDigestPrefix()[I Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;-><init>(Ljava/lang/String;)V +Landroid/content/pm/IPackageManager;->getInstallLocation()I Landroid/content/pm/IPackageManager;->getLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo; +Landroid/content/pm/IPackageManager;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V +Landroid/content/pm/IPackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V Landroid/content/pm/IPackageManager;->setLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/IntentFilter;ILandroid/content/ComponentName;)V +Landroid/content/pm/IPackageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageManager; +Landroid/content/pm/IPackageManager$Stub$Proxy;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo; +Landroid/content/pm/IPackageManager$Stub$Proxy;->getPackagesForUid(I)[Ljava/lang/String; +Landroid/content/pm/IPackageManager$Stub$Proxy;->getSystemSharedLibraryNames()[Ljava/lang/String; Landroid/content/pm/IPackageStatsObserver$Stub;-><init>()V Landroid/content/pm/LauncherApps;->mPm:Landroid/content/pm/PackageManager; Landroid/content/pm/LauncherApps;->startShortcut(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;I)V +Landroid/content/pm/PackageInstaller$SessionParams;->setAllocateAggressive(Z)V Landroid/content/pm/PackageInstaller$SessionParams;->setGrantedRuntimePermissions([Ljava/lang/String;)V Landroid/content/pm/PackageInstaller$SessionParams;->setInstallAsInstantApp(Z)V Landroid/content/pm/PackageManager;->addOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V +Landroid/content/pm/PackageManager;->buildRequestPermissionsIntent([Ljava/lang/String;)Landroid/content/Intent; Landroid/content/pm/PackageManager;->freeStorageAndNotify(JLandroid/content/pm/IPackageDataObserver;)V Landroid/content/pm/PackageManager;->freeStorageAndNotify(Ljava/lang/String;JLandroid/content/pm/IPackageDataObserver;)V Landroid/content/pm/PackageManager;->freeStorage(JLandroid/content/IntentSender;)V @@ -271,29 +442,70 @@ Landroid/content/pm/PackageManager;->getPackageInfoAsUser(Ljava/lang/String;II)L Landroid/content/pm/PackageManager;->getPackageSizeInfo(Ljava/lang/String;Landroid/content/pm/IPackageStatsObserver;)V Landroid/content/pm/PackageManager;->getResourcesForApplicationAsUser(Ljava/lang/String;I)Landroid/content/res/Resources; Landroid/content/pm/PackageManager;->movePackage(Ljava/lang/String;Landroid/os/storage/VolumeInfo;)I +Landroid/content/pm/PackageManager;->NO_NATIVE_LIBRARIES:I Landroid/content/pm/PackageManager;->queryBroadcastReceivers(Landroid/content/Intent;II)Ljava/util/List; Landroid/content/pm/PackageManager;->removeOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V Landroid/content/pm/PackageManager;->verifyIntentFilter(IILjava/util/List;)V +Landroid/content/pm/PackageParser$Activity;->info:Landroid/content/pm/ActivityInfo; +Landroid/content/pm/PackageParser$ActivityIntentInfo;->activity:Landroid/content/pm/PackageParser$Activity; Landroid/content/pm/PackageParser;->collectCertificates(Landroid/content/pm/PackageParser$Package;Ljava/io/File;Z)V Landroid/content/pm/PackageParser;->collectCertificates(Landroid/content/pm/PackageParser$Package;Z)V +Landroid/content/pm/PackageParser$Component;->className:Ljava/lang/String; +Landroid/content/pm/PackageParser$Component;->getComponentName()Landroid/content/ComponentName; +Landroid/content/pm/PackageParser$Component;->intents:Ljava/util/ArrayList; Landroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;I)Landroid/content/pm/PackageInfo; Landroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;)Landroid/content/pm/PackageInfo; +Landroid/content/pm/PackageParser;-><init>()V +Landroid/content/pm/PackageParser$Package;->activities:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->applicationInfo:Landroid/content/pm/ApplicationInfo; +Landroid/content/pm/PackageParser$Package;->mVersionCode:I +Landroid/content/pm/PackageParser$Package;->mVersionName:Ljava/lang/String; +Landroid/content/pm/PackageParser$Package;->packageName:Ljava/lang/String; +Landroid/content/pm/PackageParser$Package;->providers:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->receivers:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->requestedPermissions:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->services:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser;->parseBaseApk(Ljava/lang/String;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I[Ljava/lang/String;)Landroid/content/pm/PackageParser$Package; Landroid/content/pm/PackageParser;->parseMonolithicPackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package; Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;I)Landroid/content/pm/PackageParser$Package; Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;IZ)Landroid/content/pm/PackageParser$Package; +Landroid/content/pm/PackageParser$Provider;->info:Landroid/content/pm/ProviderInfo; +Landroid/content/pm/PackageParser$ProviderIntentInfo;->provider:Landroid/content/pm/PackageParser$Provider; +Landroid/content/pm/PackageParser$ServiceIntentInfo;->service:Landroid/content/pm/PackageParser$Service; +Landroid/content/pm/PackageUserState;-><init>()V +Landroid/content/pm/ParceledListSlice;-><init>(Ljava/util/List;)V +Landroid/content/pm/ResolveInfo;->instantAppAvailable:Z +Landroid/content/pm/Signature;->getPublicKey()Ljava/security/PublicKey; Landroid/content/pm/UserInfo;->id:I Landroid/content/pm/UserInfo;->isPrimary()Z +Landroid/content/pm/UserInfo;->serialNumber:I +Landroid/content/res/AssetFileDescriptor;->mFd:Landroid/os/ParcelFileDescriptor; +Landroid/content/res/AssetFileDescriptor;->mLength:J +Landroid/content/res/AssetFileDescriptor;->mStartOffset:J +Landroid/content/res/AssetManager;->addAssetPathAsSharedLibrary(Ljava/lang/String;)I Landroid/content/res/AssetManager;->addAssetPath(Ljava/lang/String;)I +Landroid/content/res/AssetManager;->addAssetPathNative(Ljava/lang/String;Z)I Landroid/content/res/AssetManager;->addAssetPaths([Ljava/lang/String;)[I Landroid/content/res/AssetManager;->applyStyle(JIIJ[IIJJ)V +Landroid/content/res/AssetManager;->ensureStringBlocks()[Landroid/content/res/StringBlock; Landroid/content/res/AssetManager;->getArraySize(I)I Landroid/content/res/AssetManager;->getAssignedPackageIdentifiers()Landroid/util/SparseArray; Landroid/content/res/AssetManager;->getCookieName(I)Ljava/lang/String; +Landroid/content/res/AssetManager;->getNativeStringBlock(I)J Landroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence; +Landroid/content/res/AssetManager;->getResourceEntryName(I)Ljava/lang/String; +Landroid/content/res/AssetManager;->getResourceIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I +Landroid/content/res/AssetManager;->getResourceName(I)Ljava/lang/String; +Landroid/content/res/AssetManager;->getResourcePackageName(I)Ljava/lang/String; +Landroid/content/res/AssetManager;->getResourceTypeName(I)Ljava/lang/String; +Landroid/content/res/AssetManager;->getStringBlockCount()I +Landroid/content/res/AssetManager;-><init>()V +Landroid/content/res/AssetManager;->isUpToDate()Z Landroid/content/res/AssetManager;->loadResourceBagValue(IILandroid/util/TypedValue;Z)I Landroid/content/res/AssetManager;->loadResourceValue(ISLandroid/util/TypedValue;Z)I Landroid/content/res/AssetManager;->loadThemeAttributeValue(JILandroid/util/TypedValue;Z)I Landroid/content/res/AssetManager;->mObject:J +Landroid/content/res/AssetManager;->mStringBlocks:[Landroid/content/res/StringBlock; Landroid/content/res/AssetManager;->openNonAssetFdNative(ILjava/lang/String;[J)Landroid/os/ParcelFileDescriptor; Landroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;I)Ljava/io/InputStream; Landroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;)Ljava/io/InputStream; @@ -304,9 +516,16 @@ Landroid/content/res/AssetManager;->openXmlAssetNative(ILjava/lang/String;)J Landroid/content/res/AssetManager;->resolveAttrs(JII[I[I[I[I)Z Landroid/content/res/AssetManager;->retrieveArray(I[I)I Landroid/content/res/AssetManager;->retrieveAttributes(J[I[I[I)Z +Landroid/content/res/AssetManager;->setConfiguration(IILjava/lang/String;IIIIIIIIIIIIIII)V Landroid/content/res/AssetManager;->STYLE_NUM_ENTRIES:I Landroid/content/res/AssetManager;->STYLE_RESOURCE_ID:I +Landroid/content/res/ColorStateList$ColorStateListFactory;-><init>(Landroid/content/res/ColorStateList;)V +Landroid/content/res/ColorStateList;->mColors:[I +Landroid/content/res/ColorStateList;->mDefaultColor:I +Landroid/content/res/ColorStateList;->mFactory:Landroid/content/res/ColorStateList$ColorStateListFactory; +Landroid/content/res/CompatibilityInfo;->DEFAULT_COMPATIBILITY_INFO:Landroid/content/res/CompatibilityInfo; Landroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; +Landroid/content/res/ObbInfo;->salt:[B Landroid/content/res/Resources;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo; Landroid/content/res/ResourcesImpl;->mAccessLock:Ljava/lang/Object; Landroid/content/res/ResourcesImpl;->mAssets:Landroid/content/res/AssetManager; @@ -315,15 +534,20 @@ Landroid/content/res/ResourcesImpl;->mConfiguration:Landroid/content/res/Configu Landroid/content/res/ResourcesImpl;->mDrawableCache:Landroid/content/res/DrawableCache; Landroid/content/res/ResourcesImpl;->mPreloading:Z Landroid/content/res/ResourcesImpl;->sPreloadedColorDrawables:Landroid/util/LongSparseArray; +Landroid/content/res/ResourcesImpl;->sPreloadedComplexColors:Landroid/util/LongSparseArray; Landroid/content/res/ResourcesImpl;->sPreloadedDrawables:[Landroid/util/LongSparseArray; Landroid/content/res/ResourcesImpl;->TRACE_FOR_MISS_PRELOAD:Z Landroid/content/res/ResourcesImpl;->TRACE_FOR_PRELOAD:Z +Landroid/content/res/ResourcesKey;->mSplitResDirs:[Ljava/lang/String; Landroid/content/res/Resources;->loadXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser; Landroid/content/res/Resources;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser; Landroid/content/res/Resources;->mResourcesImpl:Landroid/content/res/ResourcesImpl; Landroid/content/res/Resources;->mTmpValue:Landroid/util/TypedValue; Landroid/content/res/Resources;->mTypedArrayPool:Landroid/util/Pools$SynchronizedPool; Landroid/content/res/Resources;->setCompatibilityInfo(Landroid/content/res/CompatibilityInfo;)V +Landroid/content/res/Resources;->updateSystemConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V +Landroid/content/res/StringBlock;-><init>(JZ)V +Landroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String; Landroid/content/res/TypedArray;->getValueAt(ILandroid/util/TypedValue;)Z Landroid/content/res/TypedArray;->mAssets:Landroid/content/res/AssetManager; Landroid/content/res/TypedArray;->mData:[I @@ -336,18 +560,48 @@ Landroid/content/res/TypedArray;->mTheme:Landroid/content/res/Resources$Theme; Landroid/content/res/TypedArray;->mValue:Landroid/util/TypedValue; Landroid/content/res/TypedArray;->mXml:Landroid/content/res/XmlBlock$Parser; Landroid/content/res/XmlBlock;->close()V +Landroid/content/res/XmlBlock;-><init>([B)V Landroid/content/res/XmlBlock;->newParser()Landroid/content/res/XmlResourceParser; Landroid/content/res/XmlBlock$Parser;->mParseState:J Landroid/content/SyncStatusInfo;->lastSuccessTime:J +Landroid/database/AbstractCursor;->mExtras:Landroid/os/Bundle; Landroid/database/AbstractCursor;->mNotifyUri:Landroid/net/Uri; Landroid/database/CursorWindow;->mWindowPtr:J Landroid/database/CursorWindow;->sCursorWindowSize:I Landroid/database/CursorWindow;->sWindowToPidMap:Landroid/util/LongSparseArray; Landroid/database/CursorWrapper;->mCursor:Landroid/database/Cursor; +Landroid/database/sqlite/SQLiteCustomFunction;->dispatchCallback([Ljava/lang/String;)V +Landroid/database/sqlite/SQLiteCustomFunction;->name:Ljava/lang/String; +Landroid/database/sqlite/SQLiteCustomFunction;->numArgs:I +Landroid/database/sqlite/SQLiteDatabaseConfiguration;->maxSqlCacheSize:I +Landroid/database/sqlite/SQLiteDatabase;->mConfigurationLocked:Landroid/database/sqlite/SQLiteDatabaseConfiguration; +Landroid/database/sqlite/SQLiteDatabase;->mConnectionPoolLocked:Landroid/database/sqlite/SQLiteConnectionPool; +Landroid/database/sqlite/SQLiteDebug$PagerStats;->largestMemAlloc:I +Landroid/database/sqlite/SQLiteDebug$PagerStats;->memoryUsed:I +Landroid/database/sqlite/SQLiteDebug$PagerStats;->pageCacheOverflow:I +Landroid/database/sqlite/SQLiteOpenHelper;->mName:Ljava/lang/String; +Landroid/ddm/DdmHandleAppName;->getAppName()Ljava/lang/String; +Landroid/graphics/BaseCanvas;->mNativeCanvasWrapper:J Landroid/graphics/Bitmap$Config;->nativeInt:I +Landroid/graphics/Bitmap$Config;->nativeToConfig(I)Landroid/graphics/Bitmap$Config; Landroid/graphics/Bitmap;->createAshmemBitmap()Landroid/graphics/Bitmap; Landroid/graphics/Bitmap;->createAshmemBitmap(Landroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap; +Landroid/graphics/BitmapFactory;->nativeDecodeAsset(JLandroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap; +Landroid/graphics/BitmapFactory;->nativeDecodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap; +Landroid/graphics/BitmapFactory;->nativeDecodeFileDescriptor(Ljava/io/FileDescriptor;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap; +Landroid/graphics/BitmapFactory;->nativeDecodeStream(Ljava/io/InputStream;[BLandroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap; Landroid/graphics/Bitmap;->getDefaultDensity()I +Landroid/graphics/Bitmap;-><init>(JIIIZZ[BLandroid/graphics/NinePatch$InsetStruct;)V +Landroid/graphics/Bitmap;->mNativePtr:J +Landroid/graphics/Bitmap;->mNinePatchChunk:[B +Landroid/graphics/Bitmap;->mNinePatchInsets:Landroid/graphics/NinePatch$InsetStruct; +Landroid/graphics/BitmapRegionDecoder;-><init>(J)V +Landroid/graphics/Bitmap;->reinit(IIZ)V +Landroid/graphics/Camera;->native_instance:J +Landroid/graphics/Canvas;-><init>(J)V +Landroid/graphics/Canvas;->release()V +Landroid/graphics/drawable/AnimatedImageDrawable;->onAnimationEnd()V +Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;->callOnFinished(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V Landroid/graphics/drawable/AnimationDrawable;->mCurFrame:I Landroid/graphics/drawable/BitmapDrawable;->getTint()Landroid/content/res/ColorStateList; Landroid/graphics/drawable/BitmapDrawable;->getTintMode()Landroid/graphics/PorterDuff$Mode; @@ -357,6 +611,11 @@ Landroid/graphics/drawable/DrawableContainer;->getOpticalInsets()Landroid/graphi Landroid/graphics/drawable/DrawableContainer;->mDrawableContainerState:Landroid/graphics/drawable/DrawableContainer$DrawableContainerState; Landroid/graphics/drawable/Drawable;->inflateWithAttributes(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/TypedArray;I)V Landroid/graphics/drawable/Drawable;->mCallback:Ljava/lang/ref/WeakReference; +Landroid/graphics/drawable/GradientDrawable$GradientState;->mAngle:I +Landroid/graphics/drawable/GradientDrawable$GradientState;->mPadding:Landroid/graphics/Rect; +Landroid/graphics/drawable/GradientDrawable$GradientState;->mPositions:[F +Landroid/graphics/drawable/GradientDrawable;->mPadding:Landroid/graphics/Rect; +Landroid/graphics/drawable/Icon;->getResPackage()Ljava/lang/String; Landroid/graphics/drawable/NinePatchDrawable;->mNinePatchState:Landroid/graphics/drawable/NinePatchDrawable$NinePatchState; Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;->mNinePatch:Landroid/graphics/NinePatch; Landroid/graphics/drawable/StateListDrawable;->extractStateSet(Landroid/util/AttributeSet;)[I @@ -370,18 +629,45 @@ Landroid/graphics/FontFamily;->addFontFromAssetManager(Landroid/content/res/Asse Landroid/graphics/FontFamily;->addFontFromBuffer(Ljava/nio/ByteBuffer;I[Landroid/graphics/fonts/FontVariationAxis;II)Z Landroid/graphics/FontFamily;->freeze()Z Landroid/graphics/FontFamily;-><init>()V +Landroid/graphics/fonts/FontVariationAxis;->mStyleValue:F +Landroid/graphics/fonts/FontVariationAxis;->mTag:I +Landroid/graphics/GraphicBuffer;->createFromExisting(IIIIJ)Landroid/graphics/GraphicBuffer; +Landroid/graphics/GraphicBuffer;-><init>(IIIIJ)V +Landroid/graphics/GraphicBuffer;->mNativeObject:J +Landroid/graphics/ImageDecoder;-><init>(JIIZ)V +Landroid/graphics/ImageDecoder;->onPartialImage(I)Z +Landroid/graphics/ImageDecoder;->postProcessAndRelease(Landroid/graphics/Canvas;)I Landroid/graphics/LinearGradient;->mColors:[I +Landroid/graphics/Matrix;->native_instance:J +Landroid/graphics/Movie;-><init>(J)V +Landroid/graphics/Movie;->mNativeMovie:J +Landroid/graphics/NinePatch$InsetStruct;-><init>(IIIIIIIIFIF)V Landroid/graphics/NinePatch;->mBitmap:Landroid/graphics/Bitmap; +Landroid/graphics/Picture;->mNativePicture:J +Landroid/graphics/Region;-><init>(JI)V +Landroid/graphics/Region;->mNativeRegion:J +Landroid/graphics/SurfaceTexture;->mFrameAvailableListener:J +Landroid/graphics/SurfaceTexture;->mProducer:J +Landroid/graphics/SurfaceTexture;->mSurfaceTexture:J Landroid/graphics/SurfaceTexture;->nativeDetachFromGLContext()I +Landroid/graphics/SurfaceTexture;->postEventFromNative(Ljava/lang/ref/WeakReference;)V Landroid/graphics/Typeface;->mStyle:I Landroid/graphics/Typeface;->sDefaults:[Landroid/graphics/Typeface; Landroid/graphics/Typeface;->setDefault(Landroid/graphics/Typeface;)V Landroid/graphics/Typeface;->sSystemFontMap:Ljava/util/Map; +Landroid/hardware/camera2/CameraCharacteristics$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;J)V +Landroid/hardware/camera2/CaptureRequest$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;J)V +Landroid/hardware/camera2/CaptureResult$Key;-><init>(Ljava/lang/String;Ljava/lang/Class;J)V +Landroid/hardware/camera2/impl/CameraMetadataNative;->mMetadataPtr:J Landroid/hardware/Camera;->addCallbackBuffer([BI)V +Landroid/hardware/Camera;->mNativeContext:J Landroid/hardware/Camera;->openLegacy(II)Landroid/hardware/Camera; +Landroid/hardware/Camera;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V Landroid/hardware/display/DisplayManager;->getStableDisplaySize()Landroid/graphics/Point; Landroid/hardware/display/WifiDisplayStatus;->mActiveDisplay:Landroid/hardware/display/WifiDisplay; Landroid/hardware/display/WifiDisplayStatus;->mDisplays:[Landroid/hardware/display/WifiDisplay; +Landroid/hardware/HardwareBuffer;-><init>(J)V +Landroid/hardware/HardwareBuffer;->mNativeObject:J Landroid/hardware/input/IInputManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputManager; Landroid/hardware/input/InputManager;->getInstance()Landroid/hardware/input/InputManager; Landroid/hardware/input/InputManager;->mIm:Landroid/hardware/input/IInputManager; @@ -422,19 +708,81 @@ Landroid/hardware/location/NanoAppInstanceInfo;->getAppId()J Landroid/hardware/location/NanoAppInstanceInfo;->getAppVersion()I Landroid/hardware/location/NanoAppInstanceInfo;->getHandle()I Landroid/hardware/location/NanoAppInstanceInfo;->getName()Ljava/lang/String; +Landroid/hardware/SerialPort;->mNativeContext:I +Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;->confidenceLevel:I +Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;-><init>(II)V +Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;->userId:I +Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;-><init>(IIZIIIZLandroid/media/AudioFormat;[B)V +Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->id:I +Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->locale:Ljava/lang/String; +Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;-><init>(IIZIIIZLandroid/media/AudioFormat;[B[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;)V +Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->coarseConfidenceLevel:I +Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->confidenceLevels:[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel; +Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->id:I +Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;-><init>(III[Landroid/hardware/soundtrigger/SoundTrigger$ConfidenceLevel;)V +Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra;->recognitionModes:I +Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->recognitionModes:I +Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;->keyphrases:[Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase; +Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->text:Ljava/lang/String; +Landroid/hardware/soundtrigger/SoundTrigger$Keyphrase;->users:[I +Landroid/hardware/soundtrigger/SoundTriggerModule;->mId:I +Landroid/hardware/soundtrigger/SoundTriggerModule;->mNativeContext:J +Landroid/hardware/soundtrigger/SoundTriggerModule;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V +Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIIZIZIZ)V +Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;->captureRequested:Z +Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;->data:[B +Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;->keyphrases:[Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionExtra; +Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;-><init>(IIZIIIZLandroid/media/AudioFormat;[B)V +Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;->data:[B +Landroid/hardware/soundtrigger/SoundTrigger$SoundModelEvent;-><init>(II[B)V +Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;->uuid:Ljava/util/UUID; +Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;->vendorUuid:Ljava/util/UUID; +Landroid/hardware/SystemSensorManager$BaseEventQueue;->dispatchAdditionalInfoEvent(III[F[I)V +Landroid/hardware/SystemSensorManager$BaseEventQueue;->dispatchFlushCompleteEvent(I)V +Landroid/hardware/SystemSensorManager$BaseEventQueue;->dispatchSensorEvent(I[FIJ)V +Landroid/hardware/usb/UsbDeviceConnection;->mNativeContext:J Landroid/hardware/usb/UsbManager;->setCurrentFunction(Ljava/lang/String;Z)V +Landroid/hardware/usb/UsbRequest;->mNativeContext:J +Landroid/location/CountryDetector;->detectCountry()Landroid/location/Country; +Landroid/location/Country;->getCountryIso()Ljava/lang/String; +Landroid/location/Country;->getSource()I Landroid/location/GeocoderParams;->getClientPackage()Ljava/lang/String; Landroid/location/GeocoderParams;->getLocale()Ljava/util/Locale; +Landroid/location/ILocationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/location/LocationManager;->mService:Landroid/location/ILocationManager; Landroid/location/LocationManager;->requestLocationUpdates(Landroid/location/LocationRequest;Landroid/location/LocationListener;Landroid/os/Looper;)V Landroid/location/LocationRequest;->createFromDeprecatedProvider(Ljava/lang/String;JFZ)Landroid/location/LocationRequest; Landroid/location/LocationRequest;->setHideFromAppOps(Z)V Landroid/location/LocationRequest;->setWorkSource(Landroid/os/WorkSource;)V Landroid/location/Location;->setIsFromMockProvider(Z)V +Landroid/Manifest$permission;->REAL_GET_TASKS:Ljava/lang/String; Landroid/media/AudioAttributes$Builder;->setInternalCapturePreset(I)Landroid/media/AudioAttributes$Builder; +Landroid/media/AudioAttributes;->mContentType:I +Landroid/media/AudioAttributes;->mFlags:I +Landroid/media/AudioAttributes;->mFormattedTags:Ljava/lang/String; +Landroid/media/AudioAttributes;->mSource:I +Landroid/media/AudioAttributes;->mUsage:I +Landroid/media/AudioDevicePortConfig;-><init>(Landroid/media/AudioDevicePort;IIILandroid/media/AudioGainConfig;)V +Landroid/media/AudioDevicePort;-><init>(Landroid/media/AudioHandle;Ljava/lang/String;[I[I[I[I[Landroid/media/AudioGain;ILjava/lang/String;)V Landroid/media/AudioFocusInfo;->getClientId()Ljava/lang/String; Landroid/media/AudioFocusInfo;->getClientUid()I Landroid/media/AudioFocusInfo;->getLossReceived()I +Landroid/media/AudioFormat;-><init>(IIII)V +Landroid/media/AudioFormat;->mChannelMask:I +Landroid/media/AudioFormat;->mEncoding:I +Landroid/media/AudioFormat;->mSampleRate:I +Landroid/media/audiofx/AudioEffect;-><init>(Ljava/util/UUID;Ljava/util/UUID;II)V +Landroid/media/AudioGainConfig;-><init>(ILandroid/media/AudioGain;II[II)V +Landroid/media/AudioGainConfig;->mChannelMask:I +Landroid/media/AudioGainConfig;->mIndex:I +Landroid/media/AudioGainConfig;->mMode:I +Landroid/media/AudioGainConfig;->mRampDurationMs:I +Landroid/media/AudioGainConfig;->mValues:[I +Landroid/media/AudioGain;-><init>(IIIIIIIII)V +Landroid/media/AudioHandle;-><init>(I)V +Landroid/media/AudioHandle;->mId:I Landroid/media/AudioManager;->abandonAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/media/AudioAttributes;)I +Landroid/media/AudioManager;->getService()Landroid/media/IAudioService; Landroid/media/AudioManager;->mAudioFocusIdListenerMap:Ljava/util/concurrent/ConcurrentHashMap; Landroid/media/AudioManager;->registerAudioPolicy(Landroid/media/audiopolicy/AudioPolicy;)I Landroid/media/AudioManager;->requestAudioFocus(Landroid/media/AudioFocusRequest;Landroid/media/audiopolicy/AudioPolicy;)I @@ -445,13 +793,28 @@ Landroid/media/AudioManager;->STREAM_BLUETOOTH_SCO:I Landroid/media/AudioManager;->STREAM_SYSTEM_ENFORCED:I Landroid/media/AudioManager;->STREAM_TTS:I Landroid/media/AudioManager;->unregisterAudioPolicyAsync(Landroid/media/audiopolicy/AudioPolicy;)V +Landroid/media/AudioMixPortConfig;-><init>(Landroid/media/AudioMixPort;IIILandroid/media/AudioGainConfig;)V +Landroid/media/AudioMixPort;-><init>(Landroid/media/AudioHandle;IILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V +Landroid/media/AudioPatch;-><init>(Landroid/media/AudioHandle;[Landroid/media/AudioPortConfig;[Landroid/media/AudioPortConfig;)V +Landroid/media/AudioPatch;->mHandle:Landroid/media/AudioHandle; Landroid/media/audiopolicy/AudioMix$Builder;->build()Landroid/media/audiopolicy/AudioMix; Landroid/media/audiopolicy/AudioMix$Builder;-><init>(Landroid/media/audiopolicy/AudioMixingRule;)V Landroid/media/audiopolicy/AudioMix$Builder;->setFormat(Landroid/media/AudioFormat;)Landroid/media/audiopolicy/AudioMix$Builder; Landroid/media/audiopolicy/AudioMix$Builder;->setRouteFlags(I)Landroid/media/audiopolicy/AudioMix$Builder; +Landroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;->mAttr:Landroid/media/AudioAttributes; +Landroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;->mIntProp:I +Landroid/media/audiopolicy/AudioMixingRule$AudioMixMatchCriterion;->mRule:I Landroid/media/audiopolicy/AudioMixingRule$Builder;->addRule(Landroid/media/AudioAttributes;I)Landroid/media/audiopolicy/AudioMixingRule$Builder; Landroid/media/audiopolicy/AudioMixingRule$Builder;->build()Landroid/media/audiopolicy/AudioMixingRule; Landroid/media/audiopolicy/AudioMixingRule$Builder;-><init>()V +Landroid/media/audiopolicy/AudioMixingRule;->mCriteria:Ljava/util/ArrayList; +Landroid/media/audiopolicy/AudioMix;->mCallbackFlags:I +Landroid/media/audiopolicy/AudioMix;->mDeviceAddress:Ljava/lang/String; +Landroid/media/audiopolicy/AudioMix;->mDeviceSystemType:I +Landroid/media/audiopolicy/AudioMix;->mFormat:Landroid/media/AudioFormat; +Landroid/media/audiopolicy/AudioMix;->mMixType:I +Landroid/media/audiopolicy/AudioMix;->mRouteFlags:I +Landroid/media/audiopolicy/AudioMix;->mRule:Landroid/media/audiopolicy/AudioMixingRule; Landroid/media/audiopolicy/AudioPolicy$AudioPolicyFocusListener;-><init>()V Landroid/media/audiopolicy/AudioPolicy$Builder;->addMix(Landroid/media/audiopolicy/AudioMix;)Landroid/media/audiopolicy/AudioPolicy$Builder; Landroid/media/audiopolicy/AudioPolicy$Builder;->build()Landroid/media/audiopolicy/AudioPolicy; @@ -459,18 +822,53 @@ Landroid/media/audiopolicy/AudioPolicy$Builder;-><init>(Landroid/content/Context Landroid/media/audiopolicy/AudioPolicy$Builder;->setAudioPolicyFocusListener(Landroid/media/audiopolicy/AudioPolicy$AudioPolicyFocusListener;)V Landroid/media/audiopolicy/AudioPolicy$Builder;->setLooper(Landroid/os/Looper;)Landroid/media/audiopolicy/AudioPolicy$Builder; Landroid/media/audiopolicy/AudioPolicy;->createAudioRecordSink(Landroid/media/audiopolicy/AudioMix;)Landroid/media/AudioRecord; +Landroid/media/AudioPortConfig;-><init>(Landroid/media/AudioPort;IIILandroid/media/AudioGainConfig;)V +Landroid/media/AudioPortConfig;->mChannelMask:I +Landroid/media/AudioPortConfig;->mConfigMask:I +Landroid/media/AudioPortConfig;->mFormat:I +Landroid/media/AudioPortConfig;->mGain:Landroid/media/AudioGainConfig; +Landroid/media/AudioPortConfig;->mPort:Landroid/media/AudioPort; +Landroid/media/AudioPortConfig;->mSamplingRate:I +Landroid/media/AudioPortEventHandler;->mJniCallback:J +Landroid/media/AudioPortEventHandler;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V +Landroid/media/AudioPort;-><init>(Landroid/media/AudioHandle;ILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V +Landroid/media/AudioPort;->mActiveConfig:Landroid/media/AudioPortConfig; +Landroid/media/AudioPort;->mGains:[Landroid/media/AudioGain; +Landroid/media/AudioPort;->mHandle:Landroid/media/AudioHandle; +Landroid/media/AudioPort;->mRole:I +Landroid/media/AudioRecord;->mNativeCallbackCookie:J +Landroid/media/AudioRecord;->mNativeDeviceCallback:J +Landroid/media/AudioRecord;->mNativeRecorderInJavaObj:J +Landroid/media/AudioRecord;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V +Landroid/media/AudioSystem;->dynamicPolicyCallbackFromNative(ILjava/lang/String;I)V +Landroid/media/AudioSystem;->errorCallbackFromNative(I)V +Landroid/media/AudioSystem;->getPrimaryOutputFrameCount()I +Landroid/media/AudioSystem;->getPrimaryOutputSamplingRate()I +Landroid/media/AudioSystem;->recordingCallbackFromNative(IIII[I)V Landroid/media/AudioSystem;->setDeviceConnectionState(IILjava/lang/String;Ljava/lang/String;)I Landroid/media/AudioTrack;->getLatency()I +Landroid/media/AudioTrack;->mJniData:J +Landroid/media/AudioTrack;->mNativeTrackInJavaObj:J +Landroid/media/AudioTrack;->mStreamType:I +Landroid/media/AudioTrack;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V Landroid/media/IAudioService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioService; +Landroid/media/JetPlayer;->mNativePlayerInJavaObj:J +Landroid/media/JetPlayer;->postEventFromNative(Ljava/lang/Object;III)V Landroid/media/MediaCodec;->releaseOutputBuffer(IZZJ)V +Landroid/media/MediaFile;->FIRST_AUDIO_FILE_TYPE:I Landroid/media/MediaFile;->getFileType(Ljava/lang/String;)Landroid/media/MediaFile$MediaFileType; Landroid/media/MediaFile;->getMimeTypeForFile(Ljava/lang/String;)Ljava/lang/String; +Landroid/media/MediaFile;-><init>()V +Landroid/media/MediaFile;->isAudioFileType(I)Z Landroid/media/MediaFile;->isVideoFileType(I)Z +Landroid/media/MediaFile;->LAST_AUDIO_FILE_TYPE:I Landroid/media/MediaFile$MediaFileType;->fileType:I +Landroid/media/MediaFile$MediaFileType;->mimeType:Ljava/lang/String; Landroid/media/MediaFile;->sFileTypeMap:Ljava/util/HashMap; Landroid/media/MediaMetadataRetriever;->getEmbeddedPicture(I)[B Landroid/media/MediaPlayer;->getMetadata(ZZ)Landroid/media/Metadata; Landroid/media/MediaPlayer;->invoke(Landroid/os/Parcel;Landroid/os/Parcel;)V +Landroid/media/MediaPlayer;->mEventHandler:Landroid/media/MediaPlayer$EventHandler; Landroid/media/MediaPlayer;->newRequest()Landroid/os/Parcel; Landroid/media/MediaPlayer;->setDataSource(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/util/List;)V Landroid/media/MediaPlayer;->setDataSource(Ljava/lang/String;Ljava/util/Map;Ljava/util/List;)V @@ -482,12 +880,47 @@ Landroid/media/MediaRouter$RouteInfo;->STATUS_CONNECTING:I Landroid/media/MediaRouter;->selectRouteInt(ILandroid/media/MediaRouter$RouteInfo;Z)V Landroid/media/MediaScanner;->mClient:Landroid/media/MediaScanner$MyMediaScannerClient; Landroid/media/MediaScanner;->scanSingleFile(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri; +Landroid/media/Metadata;->getBoolean(I)Z +Landroid/media/Metadata;->has(I)Z +Landroid/media/Metadata;->PAUSE_AVAILABLE:I +Landroid/media/Metadata;->SEEK_BACKWARD_AVAILABLE:I +Landroid/media/Metadata;->SEEK_FORWARD_AVAILABLE:I +Landroid/media/MicrophoneInfo;-><init>(Ljava/lang/String;ILjava/lang/String;IIILandroid/media/MicrophoneInfo$Coordinate3F;Landroid/media/MicrophoneInfo$Coordinate3F;Ljava/util/List;Ljava/util/List;FFFI)V Landroid/media/MiniThumbFile;->reset()V +Landroid/media/PlaybackParams;->mAudioFallbackMode:I +Landroid/media/PlaybackParams;->mAudioStretchMode:I +Landroid/media/PlaybackParams;->mPitch:F +Landroid/media/PlaybackParams;->mSet:I +Landroid/media/PlaybackParams;->mSpeed:F +Landroid/media/PlaybackParams;->SET_AUDIO_FALLBACK_MODE:I +Landroid/media/PlaybackParams;->SET_AUDIO_STRETCH_MODE:I +Landroid/media/PlaybackParams;->SET_PITCH:I +Landroid/media/PlaybackParams;->SET_SPEED:I +Landroid/media/RemoteDisplay;->notifyDisplayConnected(Landroid/view/Surface;IIII)V +Landroid/media/RemoteDisplay;->notifyDisplayDisconnected()V +Landroid/media/RemoteDisplay;->notifyDisplayError(I)V Landroid/media/RingtoneManager;->getRingtone(Landroid/content/Context;Landroid/net/Uri;I)Landroid/media/Ringtone; Landroid/media/Ringtone;->setLooping(Z)V Landroid/media/Ringtone;->setVolume(F)V +Landroid/media/session/MediaSessionLegacyHelper;->getHelper(Landroid/content/Context;)Landroid/media/session/MediaSessionLegacyHelper; Landroid/media/SubtitleController;->mHandler:Landroid/os/Handler; Landroid/media/ThumbnailUtils;->createImageThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap; +Landroid/media/ToneGenerator;->mNativeContext:J +Landroid/media/VolumeShaper$Configuration;-><init>(IIIDI[F[F)V +Landroid/media/VolumeShaper$Configuration;->mDurationMs:D +Landroid/media/VolumeShaper$Configuration;->mId:I +Landroid/media/VolumeShaper$Configuration;->mInterpolatorType:I +Landroid/media/VolumeShaper$Configuration;->mOptionFlags:I +Landroid/media/VolumeShaper$Configuration;->mTimes:[F +Landroid/media/VolumeShaper$Configuration;->mType:I +Landroid/media/VolumeShaper$Configuration;->mVolumes:[F +Landroid/media/VolumeShaper$Operation;-><init>(IIF)V +Landroid/media/VolumeShaper$Operation;->mFlags:I +Landroid/media/VolumeShaper$Operation;->mReplaceId:I +Landroid/media/VolumeShaper$Operation;->mXOffset:F +Landroid/media/VolumeShaper$State;-><init>(FF)V +Landroid/media/VolumeShaper$State;->mVolume:F +Landroid/media/VolumeShaper$State;->mXOffset:F Landroid/metrics/LogMaker;->getCategory()I Landroid/metrics/LogMaker;->getCounterBucket()J Landroid/metrics/LogMaker;->getCounterName()Ljava/lang/String; @@ -519,8 +952,23 @@ Landroid/net/ConnectivityManager;->requestRouteToHost(II)Z Landroid/net/ConnectivityManager;->startTethering(IZLandroid/net/ConnectivityManager$OnStartTetheringCallback;Landroid/os/Handler;)V Landroid/net/ConnectivityManager;->startTethering(IZLandroid/net/ConnectivityManager$OnStartTetheringCallback;)V Landroid/net/ConnectivityManager;->stopTethering(I)V +Landroid/net/ConnectivityManager;->TYPE_MOBILE_CBS:I +Landroid/net/ConnectivityManager;->TYPE_MOBILE_EMERGENCY:I +Landroid/net/ConnectivityManager;->TYPE_MOBILE_FOTA:I +Landroid/net/ConnectivityManager;->TYPE_MOBILE_IA:I +Landroid/net/ConnectivityManager;->TYPE_MOBILE_IMS:I +Landroid/net/ConnectivityManager;->TYPE_NONE:I +Landroid/net/ConnectivityManager;->TYPE_PROXY:I +Landroid/net/ConnectivityManager;->TYPE_WIFI_P2P:I +Landroid/net/IConnectivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IConnectivityManager; +Landroid/net/IConnectivityManager$Stub$Proxy;->getAllNetworks()[Landroid/net/Network; +Landroid/net/IConnectivityManager$Stub$Proxy;->getTetherableIfaces()[Ljava/lang/String; +Landroid/net/IConnectivityManager$Stub$Proxy;->getTetherableUsbRegexs()[Ljava/lang/String; +Landroid/net/IConnectivityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/net/INetworkStatsService$Stub$Proxy;->getMobileIfaces()[Ljava/lang/String; Landroid/net/LinkProperties;->setHttpProxy(Landroid/net/ProxyInfo;)V +Landroid/net/LocalSocketImpl;->inboundFileDescriptors:[Ljava/io/FileDescriptor; +Landroid/net/LocalSocketImpl;->outboundFileDescriptors:[Ljava/io/FileDescriptor; Landroid/net/NetworkKey;-><init>(Landroid/net/WifiKey;)V Landroid/net/NetworkPolicyManager;->mService:Landroid/net/INetworkPolicyManager; Landroid/net/NetworkRecommendationProvider;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;)V @@ -541,6 +989,7 @@ Landroid/net/NetworkStats;->tag:[I Landroid/net/NetworkStats;->txBytes:[J Landroid/net/NetworkStats;->txPackets:[J Landroid/net/NetworkStats;->uid:[I +Landroid/net/ProxyInfo;-><init>(Ljava/lang/String;ILjava/lang/String;)V Landroid/net/RssiCurve;-><init>(II[BI)V Landroid/net/RssiCurve;-><init>(II[B)V Landroid/net/RssiCurve;->lookupScore(IZ)B @@ -571,11 +1020,17 @@ Landroid/net/SSLCertificateSocketFactory;->setSoWriteTimeout(Ljava/net/Socket;I) Landroid/net/SSLCertificateSocketFactory;->TAG:Ljava/lang/String; Landroid/net/SSLCertificateSocketFactory;->toLengthPrefixedList([[[B)[B Landroid/net/SSLCertificateSocketFactory;->verifyHostname(Ljava/net/Socket;Ljava/lang/String;)V +Landroid/net/SSLSessionCache;->mSessionCache:Lcom/android/org/conscrypt/SSLClientSessionCache; +Landroid/net/TrafficStats;->getRxBytes(Ljava/lang/String;)J Landroid/net/TrafficStats;->getStatsService()Landroid/net/INetworkStatsService; +Landroid/net/TrafficStats;->getTxBytes(Ljava/lang/String;)J Landroid/net/TrafficStats;->setThreadStatsTagBackup()V Landroid/net/TrafficStats;->setThreadStatsTagRestore()V Landroid/net/TrafficStats;->setThreadStatsUid(I)V +Landroid/net/Uri;-><init>()V Landroid/net/WebAddress;-><init>(Ljava/lang/String;)V +Landroid/net/wifi/IWifiManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/IWifiManager; +Landroid/net/wifi/IWifiManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/net/WifiKey;-><init>(Ljava/lang/String;Ljava/lang/String;)V Landroid/net/wifi/p2p/WifiP2pGroup;->getNetworkId()I Landroid/net/wifi/p2p/WifiP2pGroupList;->getGroupList()Ljava/util/Collection; @@ -585,13 +1040,30 @@ Landroid/net/wifi/p2p/WifiP2pManager;->setDeviceName(Landroid/net/wifi/p2p/WifiP Landroid/net/wifi/RttManager;->getRttCapabilities()Landroid/net/wifi/RttManager$RttCapabilities; Landroid/net/wifi/RttManager$RttParams;-><init>()V Landroid/net/wifi/RttManager;->startRanging([Landroid/net/wifi/RttManager$RttParams;Landroid/net/wifi/RttManager$RttListener;)V +Landroid/net/wifi/ScanResult;->anqpDomainId:I +Landroid/net/wifi/ScanResult;->anqpLines:Ljava/util/List; +Landroid/net/wifi/ScanResult;->distanceCm:I +Landroid/net/wifi/ScanResult;->distanceSdCm:I +Landroid/net/wifi/ScanResult;->flags:J +Landroid/net/wifi/ScanResult;->hessid:J +Landroid/net/wifi/ScanResult;->numUsage:I +Landroid/net/wifi/ScanResult;->seen:J +Landroid/net/wifi/ScanResult;->untrusted:Z +Landroid/net/wifi/ScanResult;->wifiSsid:Landroid/net/wifi/WifiSsid; Landroid/net/wifi/WifiConfiguration;->apBand:I Landroid/net/wifi/WifiConfiguration;->apChannel:I +Landroid/net/wifi/WifiConfiguration;->creatorUid:I Landroid/net/wifi/WifiConfiguration;->hasNoInternetAccess()Z Landroid/net/wifi/WifiConfiguration;->isEphemeral()Z Landroid/net/wifi/WifiConfiguration;->isNoInternetAccessExpected()Z +Landroid/net/wifi/WifiConfiguration;->lastUpdateUid:I Landroid/net/wifi/WifiConfiguration;->mIpConfiguration:Landroid/net/IpConfiguration; +Landroid/net/wifi/WifiConfiguration;->numAssociation:I Landroid/net/wifi/WifiConfiguration;->validatedInternetAccess:Z +Landroid/net/wifi/WifiEnterpriseConfig;->getCaCertificateAlias()Ljava/lang/String; +Landroid/net/wifi/WifiEnterpriseConfig;->getClientCertificateAlias()Ljava/lang/String; +Landroid/net/wifi/WifiInfo;->getMeteredHint()Z +Landroid/net/wifi/WifiManager;->cancelLocalOnlyHotspotRequest()V Landroid/net/wifi/WifiManager;->connect(ILandroid/net/wifi/WifiManager$ActionListener;)V Landroid/net/wifi/WifiManager;->connect(Landroid/net/wifi/WifiConfiguration;Landroid/net/wifi/WifiManager$ActionListener;)V Landroid/net/wifi/WifiManager;->EXTRA_WIFI_AP_STATE:Ljava/lang/String; @@ -636,6 +1108,7 @@ Landroid/os/AsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; Landroid/os/AsyncTask;->mWorker:Landroid/os/AsyncTask$WorkerRunnable; Landroid/os/AsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; Landroid/os/AsyncTask;->setDefaultExecutor(Ljava/util/concurrent/Executor;)V +Landroid/os/BatteryStats;->getUidStats()Landroid/util/SparseArray; Landroid/os/BatteryStats$HistoryItem;->states2:I Landroid/os/BatteryStats;->NUM_DATA_CONNECTION_TYPES:I Landroid/os/BatteryStats$Timer;->getTotalTimeLocked(JI)J @@ -650,18 +1123,45 @@ Landroid/os/BatteryStats$Uid$Proc;->getSystemTime(I)J Landroid/os/BatteryStats$Uid$Proc;->getUserTime(I)J Landroid/os/BatteryStats$Uid$Sensor;->getHandle()I Landroid/os/BatteryStats$Uid$Sensor;->getSensorTime()Landroid/os/BatteryStats$Timer; +Landroid/os/Binder;->execTransact(IJJI)Z +Landroid/os/Binder;->mObject:J Landroid/os/Build;->getString(Ljava/lang/String;)Ljava/lang/String; +Landroid/os/Build$VERSION;->ACTIVE_CODENAMES:[Ljava/lang/String; +Landroid/os/Build$VERSION;->RESOURCES_SDK_INT:I Landroid/os/Bundle;->getIBinder(Ljava/lang/String;)Landroid/os/IBinder; Landroid/os/Bundle;->putIBinder(Ljava/lang/String;Landroid/os/IBinder;)V Landroid/os/Debug;->countInstancesOfClass(Ljava/lang/Class;)J Landroid/os/Debug;->dumpReferenceTables()V +Landroid/os/Debug$MemoryInfo;->dalvikPrivateClean:I +Landroid/os/Debug$MemoryInfo;->dalvikRss:I +Landroid/os/Debug$MemoryInfo;->dalvikSharedClean:I +Landroid/os/Debug$MemoryInfo;->dalvikSwappablePss:I +Landroid/os/Debug$MemoryInfo;->dalvikSwappedOut:I +Landroid/os/Debug$MemoryInfo;->dalvikSwappedOutPss:I Landroid/os/Debug$MemoryInfo;->getOtherLabel(I)Ljava/lang/String; Landroid/os/Debug$MemoryInfo;->getOtherPrivateDirty(I)I +Landroid/os/Debug$MemoryInfo;->getOtherPrivate(I)I Landroid/os/Debug$MemoryInfo;->getOtherPss(I)I Landroid/os/Debug$MemoryInfo;->getOtherSharedDirty(I)I +Landroid/os/Debug$MemoryInfo;->getTotalUss()I +Landroid/os/Debug$MemoryInfo;->hasSwappedOutPss:Z +Landroid/os/Debug$MemoryInfo;->nativePrivateClean:I +Landroid/os/Debug$MemoryInfo;->nativeRss:I +Landroid/os/Debug$MemoryInfo;->nativeSharedClean:I +Landroid/os/Debug$MemoryInfo;->nativeSwappablePss:I +Landroid/os/Debug$MemoryInfo;->nativeSwappedOut:I +Landroid/os/Debug$MemoryInfo;->nativeSwappedOutPss:I Landroid/os/Debug$MemoryInfo;->NUM_DVK_STATS:I Landroid/os/Debug$MemoryInfo;->NUM_OTHER_STATS:I +Landroid/os/Debug$MemoryInfo;->otherPrivateClean:I +Landroid/os/Debug$MemoryInfo;->otherRss:I +Landroid/os/Debug$MemoryInfo;->otherSharedClean:I +Landroid/os/Debug$MemoryInfo;->otherStats:[I +Landroid/os/Debug$MemoryInfo;->otherSwappablePss:I +Landroid/os/Debug$MemoryInfo;->otherSwappedOut:I +Landroid/os/Debug$MemoryInfo;->otherSwappedOutPss:I Landroid/os/Environment;->buildExternalStorageAppDataDirs(Ljava/lang/String;)[Ljava/io/File; +Landroid/os/FileObserver$ObserverThread;->onEvent(IILjava/lang/String;)V Landroid/os/FileUtils;->checksumCrc32(Ljava/io/File;)J Landroid/os/FileUtils;->copyFile(Ljava/io/File;Ljava/io/File;)Z Landroid/os/FileUtils;->copyToFile(Ljava/io/InputStream;Ljava/io/File;)Z @@ -676,21 +1176,37 @@ Landroid/os/Handler;->getIMessenger()Landroid/os/IMessenger; Landroid/os/Handler;->hasCallbacks(Ljava/lang/Runnable;)Z Landroid/os/Handler;->mCallback:Landroid/os/Handler$Callback; Landroid/os/Handler;->mMessenger:Landroid/os/IMessenger; +Landroid/os/HwParcel;-><init>(Z)V +Landroid/os/IPermissionController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPermissionController; +Landroid/os/IPermissionController$Stub$Proxy;->checkPermission(Ljava/lang/String;II)Z Landroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPowerManager; +Landroid/os/IPowerManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/os/IPowerManager$Stub$Proxy;->isLightDeviceIdleMode()Z Landroid/os/IPowerManager;->userActivity(JII)V +Landroid/os/IServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder; +Landroid/os/IUserManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/os/Looper;->mQueue:Landroid/os/MessageQueue; +Landroid/os/Looper;->sThreadLocal:Ljava/lang/ThreadLocal; Landroid/os/MemoryFile;->getFileDescriptor()Ljava/io/FileDescriptor; Landroid/os/Message;->callback:Ljava/lang/Runnable; Landroid/os/Message;->flags:I +Landroid/os/Message;->markInUse()V Landroid/os/Message;->next:Landroid/os/Message; +Landroid/os/MessageQueue;->dispatchEvents(II)I Landroid/os/MessageQueue;->mIdleHandlers:Ljava/util/ArrayList; Landroid/os/MessageQueue;->mMessages:Landroid/os/Message; +Landroid/os/MessageQueue;->mPtr:J Landroid/os/MessageQueue;->mQuitAllowed:Z +Landroid/os/MessageQueue;->nativePollOnce(JI)V Landroid/os/MessageQueue;->next()Landroid/os/Message; Landroid/os/Message;->target:Landroid/os/Handler; +Landroid/os/ParcelFileDescriptor;-><init>(Ljava/io/FileDescriptor;)V +Landroid/os/Parcel;->mNativePtr:J +Landroid/os/Parcel$ReadWriteHelper;-><init>()V Landroid/os/PowerManager;->getMaximumScreenBrightnessSetting()I Landroid/os/PowerManager;->getMinimumScreenBrightnessSetting()I Landroid/os/PowerManager;->isLightDeviceIdleMode()Z +Landroid/os/PowerManager;->mService:Landroid/os/IPowerManager; Landroid/os/PowerManager;->userActivity(JII)V Landroid/os/PowerManager;->userActivity(JZ)V Landroid/os/PowerManager;->validateWakeLockParameters(ILjava/lang/String;)V @@ -698,6 +1214,7 @@ Landroid/os/PowerManager;->wakeUp(JLjava/lang/String;)V Landroid/os/PowerManager;->wakeUp(J)V Landroid/os/Process;->getParentPid(I)I Landroid/os/Process;->getPids(Ljava/lang/String;[I)[I +Landroid/os/Process;->getTotalMemory()J Landroid/os/Process;->getUidForPid(I)I Landroid/os/Process;->isIsolated(I)Z Landroid/os/Process;->isIsolated()Z @@ -711,18 +1228,30 @@ Landroid/os/RecoverySystem;->rebootWipeAb(Landroid/content/Context;Ljava/io/File Landroid/os/RecoverySystem;->scheduleUpdateOnBoot(Landroid/content/Context;Ljava/io/File;)V Landroid/os/SELinux;->isSELinuxEnabled()Z Landroid/os/SELinux;->isSELinuxEnforced()Z +Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;)V Landroid/os/ServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder; +Landroid/os/ServiceManager;->getIServiceManager()Landroid/os/IServiceManager; Landroid/os/ServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder; +Landroid/os/ServiceManager;-><init>()V +Landroid/os/ServiceManager;->listServices()[Ljava/lang/String; +Landroid/os/ServiceManagerNative;->asInterface(Landroid/os/IBinder;)Landroid/os/IServiceManager; +Landroid/os/ServiceManager;->sCache:Ljava/util/HashMap; +Landroid/os/ServiceManager;->sServiceManager:Landroid/os/IServiceManager; Landroid/os/storage/DiskInfo;->getDescription()Ljava/lang/String; +Landroid/os/storage/IStorageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/storage/IStorageManager; +Landroid/os/storage/IStorageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/os/storage/StorageManager;->findVolumeByUuid(Ljava/lang/String;)Landroid/os/storage/VolumeInfo; Landroid/os/storage/StorageManager;->getBestVolumeDescription(Landroid/os/storage/VolumeInfo;)Ljava/lang/String; Landroid/os/storage/StorageManager;->getDisks()Ljava/util/List; Landroid/os/storage/StorageManager;->getStorageBytesUntilLow(Ljava/io/File;)J +Landroid/os/storage/StorageManager;->getStorageLowBytes(Ljava/io/File;)J Landroid/os/storage/StorageManager;->getVolumeList(II)[Landroid/os/storage/StorageVolume; Landroid/os/storage/StorageManager;->getVolumeList()[Landroid/os/storage/StorageVolume; Landroid/os/storage/StorageManager;->getVolumePaths()[Ljava/lang/String; Landroid/os/storage/StorageManager;->getVolumes()Ljava/util/List; Landroid/os/storage/StorageManager;->getVolumeState(Ljava/lang/String;)Ljava/lang/String; +Landroid/os/storage/StorageVolume;->allowMassStorage()Z +Landroid/os/storage/StorageVolume;->getMaxFileSize()J Landroid/os/storage/StorageVolume;->getPathFile()Ljava/io/File; Landroid/os/storage/StorageVolume;->getPath()Ljava/lang/String; Landroid/os/storage/StorageVolume;->getUserLabel()Ljava/lang/String; @@ -733,6 +1262,9 @@ Landroid/os/storage/VolumeInfo;->getState()I Landroid/os/storage/VolumeInfo;->getType()I Landroid/os/storage/VolumeInfo;->isPrimary()Z Landroid/os/storage/VolumeInfo;->isVisible()Z +Landroid/os/StrictMode;->disableDeathOnFileUriExposure()V +Landroid/os/StrictMode;->getThreadPolicyMask()I +Landroid/os/StrictMode;->onBinderStrictModePolicyChange(I)V Landroid/os/StrictMode;->violationsBeingTimed:Ljava/lang/ThreadLocal; Landroid/os/SystemProperties;->addChangeCallback(Ljava/lang/Runnable;)V Landroid/os/SystemProperties;->getBoolean(Ljava/lang/String;Z)Z @@ -740,6 +1272,8 @@ Landroid/os/SystemProperties;->getInt(Ljava/lang/String;I)I Landroid/os/SystemProperties;->get(Ljava/lang/String;)Ljava/lang/String; Landroid/os/SystemProperties;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; Landroid/os/SystemProperties;->getLong(Ljava/lang/String;J)J +Landroid/os/SystemProperties;-><init>()V +Landroid/os/SystemProperties;->native_get(Ljava/lang/String;)Ljava/lang/String; Landroid/os/SystemProperties;->PROP_NAME_MAX:I Landroid/os/SystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V @@ -764,16 +1298,19 @@ Landroid/os/UpdateLock;->acquire()V Landroid/os/UpdateLock;->isHeld()Z Landroid/os/UpdateLock;->NOW_IS_CONVENIENT:Ljava/lang/String; Landroid/os/UpdateLock;->release()V +Landroid/os/UpdateLock;->TIMESTAMP:Ljava/lang/String; Landroid/os/UpdateLock;->UPDATE_LOCK_CHANGED:Ljava/lang/String; Landroid/os/UserHandle;->ALL:Landroid/os/UserHandle; Landroid/os/UserHandle;->getAppIdFromSharedAppGid(I)I Landroid/os/UserHandle;->getCallingUserId()I Landroid/os/UserHandle;->getIdentifier()I +Landroid/os/UserHandle;->getUid(II)I Landroid/os/UserHandle;->getUserId(I)I Landroid/os/UserHandle;-><init>(I)V Landroid/os/UserHandle;->isOwner()Z Landroid/os/UserHandle;->myUserId()I Landroid/os/UserHandle;->of(I)Landroid/os/UserHandle; +Landroid/os/UserHandle;->PER_USER_RANGE:I Landroid/os/UserHandle;->USER_OWNER:I Landroid/os/UserManager;->getBadgedLabelForUser(Ljava/lang/CharSequence;Landroid/os/UserHandle;)Ljava/lang/CharSequence; Landroid/os/UserManager;->get(Landroid/content/Context;)Landroid/os/UserManager; @@ -789,10 +1326,14 @@ Landroid/os/UserManager;->hasBaseUserRestriction(Ljava/lang/String;Landroid/os/U Landroid/os/UserManager;->isLinkedUser()Z Landroid/os/UserManager;->isManagedProfile()Z Landroid/os/UserManager;->isUserUnlocked(I)Z +Landroid/os/VintfObject;->report()[Ljava/lang/String; Landroid/os/WorkSource;->add(ILjava/lang/String;)Z Landroid/os/WorkSource;->add(I)Z Landroid/os/WorkSource;->get(I)I Landroid/os/WorkSource;->getName(I)Ljava/lang/String; +Landroid/os/WorkSource;->mNames:[Ljava/lang/String; +Landroid/os/WorkSource;->mNum:I +Landroid/os/WorkSource;->mUids:[I Landroid/os/WorkSource;->size()I Landroid/preference/DialogPreference;->mBuilder:Landroid/app/AlertDialog$Builder; Landroid/preference/DialogPreference;->mDialogIcon:Landroid/graphics/drawable/Drawable; @@ -812,6 +1353,7 @@ Landroid/preference/PreferenceManager;->getEditor()Landroid/content/SharedPrefer Landroid/preference/PreferenceManager;->getPreferenceScreen()Landroid/preference/PreferenceScreen; Landroid/preference/PreferenceManager;->inflateFromIntent(Landroid/content/Intent;Landroid/preference/PreferenceScreen;)Landroid/preference/PreferenceScreen; Landroid/preference/PreferenceManager;->inflateFromResource(Landroid/content/Context;ILandroid/preference/PreferenceScreen;)Landroid/preference/PreferenceScreen; +Landroid/preference/PreferenceManager;-><init>(Landroid/app/Activity;I)V Landroid/preference/PreferenceManager;->mActivityDestroyListeners:Ljava/util/List; Landroid/preference/PreferenceManager;->mOnPreferenceTreeClickListener:Landroid/preference/PreferenceManager$OnPreferenceTreeClickListener; Landroid/preference/PreferenceManager;->mSharedPreferences:Landroid/content/SharedPreferences; @@ -828,20 +1370,26 @@ Landroid/preference/PreferenceScreen;->mRootAdapter:Landroid/widget/ListAdapter; Landroid/print/PrinterId;->getServiceName()Landroid/content/ComponentName; Landroid/print/PrintJobInfo;->getAdvancedOptions()Landroid/os/Bundle; Landroid/print/PrintJobInfo;->getDocumentInfo()Landroid/print/PrintDocumentInfo; +Landroid/provider/Browser;->BOOKMARKS_URI:Landroid/net/Uri; Landroid/provider/Browser;->canClearHistory(Landroid/content/ContentResolver;)Z Landroid/provider/Browser;->clearHistory(Landroid/content/ContentResolver;)V Landroid/provider/Browser;->clearSearches(Landroid/content/ContentResolver;)V Landroid/provider/Browser;->deleteFromHistory(Landroid/content/ContentResolver;Ljava/lang/String;)V Landroid/provider/Browser;->getVisitedHistory(Landroid/content/ContentResolver;)[Ljava/lang/String; Landroid/provider/Browser;->sendString(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V +Landroid/provider/Settings$ContentProviderHolder;->mContentProvider:Landroid/content/IContentProvider; Landroid/provider/Settings$Global;->OTA_DISABLE_AUTOMATIC_UPDATE:Ljava/lang/String; Landroid/provider/Settings$Global;->PACKAGE_VERIFIER_ENABLE:Ljava/lang/String; +Landroid/provider/Settings$Global;->sNameValueCache:Landroid/provider/Settings$NameValueCache; +Landroid/provider/Settings$NameValueCache;->mProviderHolder:Landroid/provider/Settings$ContentProviderHolder; Landroid/provider/Settings$Secure;->ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED:Ljava/lang/String; Landroid/provider/Settings$Secure;->PACKAGE_VERIFIER_USER_CONSENT:Ljava/lang/String; +Landroid/provider/Settings$Secure;->sNameValueCache:Landroid/provider/Settings$NameValueCache; Landroid/provider/Settings$Secure;->USER_SETUP_COMPLETE:Ljava/lang/String; Landroid/provider/Settings$System;->AIRPLANE_MODE_TOGGLEABLE_RADIOS:Ljava/lang/String; Landroid/provider/Settings$System;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String; Landroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z +Landroid/provider/Settings$System;->sNameValueCache:Landroid/provider/Settings$NameValueCache; Landroid/provider/Telephony$Sms;->addMessageToUri(ILandroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZJ)Landroid/net/Uri; Landroid/provider/Telephony$Sms;->addMessageToUri(ILandroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZ)Landroid/net/Uri; Landroid/provider/Telephony$Sms;->addMessageToUri(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;ZZJ)Landroid/net/Uri; @@ -850,6 +1398,7 @@ Landroid/provider/Telephony$Sms$Inbox;->addMessage(ILandroid/content/ContentReso Landroid/provider/Telephony$Sms$Inbox;->addMessage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Z)Landroid/net/Uri; Landroid/provider/Telephony$Sms$Sent;->addMessage(ILandroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;)Landroid/net/Uri; Landroid/provider/Telephony$Sms$Sent;->addMessage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;)Landroid/net/Uri; +Landroid/renderscript/RenderScriptCacheDir;->mCacheDir:Ljava/io/File; Landroid/renderscript/RenderScript;->create(Landroid/content/Context;I)Landroid/renderscript/RenderScript; Landroid/renderscript/RenderScript;->create(Landroid/content/Context;ILandroid/renderscript/RenderScript$ContextType;I)Landroid/renderscript/RenderScript; Landroid/renderscript/RenderScript;->getMinorID()J @@ -857,14 +1406,17 @@ Landroid/R$styleable;->TextAppearance:[I Landroid/R$styleable;->TextAppearance_textColor:I Landroid/R$styleable;->TextAppearance_textSize:I Landroid/security/KeyStore;->getInstance()Landroid/security/KeyStore; +Landroid/security/net/config/RootTrustManager;->checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List; Landroid/service/media/IMediaBrowserServiceCallbacks;->onConnectFailed()V Landroid/service/media/IMediaBrowserServiceCallbacks;->onConnect(Ljava/lang/String;Landroid/media/session/MediaSession$Token;Landroid/os/Bundle;)V Landroid/service/media/IMediaBrowserServiceCallbacks;->onLoadChildren(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V Landroid/service/media/IMediaBrowserServiceCallbacks;->onLoadChildrenWithOptions(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;Landroid/os/Bundle;)V +Landroid/service/media/IMediaBrowserServiceCallbacks$Stub;->asInterface(Landroid/os/IBinder;)Landroid/service/media/IMediaBrowserServiceCallbacks; Landroid/service/media/MediaBrowserService;->KEY_MEDIA_ITEM:Ljava/lang/String; Landroid/service/media/MediaBrowserService$Result;->mFlags:I Landroid/service/notification/NotificationListenerService;->registerAsSystemService(Landroid/content/Context;Landroid/content/ComponentName;I)V Landroid/service/notification/NotificationListenerService;->unregisterAsSystemService()V +Landroid/service/persistentdata/PersistentDataBlockManager;->getFlashLockState()I Landroid/service/persistentdata/PersistentDataBlockManager;->getMaximumDataBlockSize()J Landroid/service/persistentdata/PersistentDataBlockManager;->read()[B Landroid/service/persistentdata/PersistentDataBlockManager;->write([B)I @@ -879,6 +1431,7 @@ Landroid/service/trust/TrustAgentService;-><init>()V Landroid/service/voice/VoiceInteractionService;->isKeyphraseAndLocaleSupportedForHotword(Ljava/lang/String;Ljava/util/Locale;)Z Landroid/service/wallpaper/WallpaperService$Engine;->setFixedSizeAllowed(Z)V Landroid/speech/tts/TextToSpeech;->getCurrentEngine()Ljava/lang/String; +Landroid/system/Int32Ref;->value:I Landroid/system/StructTimeval;->fromMillis(J)Landroid/system/StructTimeval; Landroid/telecom/AudioState;->getRoute()I Landroid/telecom/AudioState;->getSupportedRouteMask()I @@ -896,16 +1449,32 @@ Landroid/telecom/Phone;->setAudioRoute(I)V Landroid/telecom/Phone;->setMuted(Z)V Landroid/telecom/TelecomManager;->endCall()Z Landroid/telecom/TelecomManager;->EXTRA_IS_HANDOVER:Ljava/lang/String; +Landroid/telecom/TelecomManager;->getUserSelectedOutgoingPhoneAccount()Landroid/telecom/PhoneAccountHandle; +Landroid/telecom/TelecomManager;->setUserSelectedOutgoingPhoneAccount(Landroid/telecom/PhoneAccountHandle;)V +Landroid/telephony/CellSignalStrengthLte;->mCqi:I +Landroid/telephony/CellSignalStrengthLte;->mRsrp:I +Landroid/telephony/CellSignalStrengthLte;->mRsrq:I +Landroid/telephony/CellSignalStrengthLte;->mRssnr:I Landroid/telephony/PhoneStateListener;->mSubId:Ljava/lang/Integer; Landroid/telephony/ServiceState;->newFromBundle(Landroid/os/Bundle;)Landroid/telephony/ServiceState; +Landroid/telephony/SignalStrength;->getAsuLevel()I Landroid/telephony/SignalStrength;->getCdmaLevel()I +Landroid/telephony/SignalStrength;->getDbm()I Landroid/telephony/SignalStrength;->getLteDbm()I Landroid/telephony/SignalStrength;->getLteRsrp()I +Landroid/telephony/SignalStrength;->getLteRsrq()I Landroid/telephony/SignalStrength;->getLteRssnr()I Landroid/telephony/SignalStrength;->getLteSignalStrength()I +Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_GOOD:I +Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_GREAT:I +Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_MODERATE:I +Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_NONE_OR_UNKNOWN:I +Landroid/telephony/SignalStrength;->SIGNAL_STRENGTH_POOR:I Landroid/telephony/SmsManager;->RESULT_ERROR_FDN_CHECK_FAILURE:I Landroid/telephony/SmsMessage;->getSubId()I Landroid/telephony/SmsMessage;->mWrappedSmsMessage:Lcom/android/internal/telephony/SmsMessageBase; +Landroid/telephony/SubscriptionManager;->getAllSubscriptionInfoCount()I +Landroid/telephony/SubscriptionManager;->getDefaultDataSubscriptionInfo()Landroid/telephony/SubscriptionInfo; Landroid/telephony/SubscriptionManager;->getDefaultSmsPhoneId()I Landroid/telephony/SubscriptionManager;->getPhoneId(I)I Landroid/telephony/SubscriptionManager;->getSlotIndex(I)I @@ -913,26 +1482,43 @@ Landroid/telephony/SubscriptionManager;->getSubId(I)[I Landroid/telephony/SubscriptionManager;->setDefaultSmsSubId(I)V Landroid/telephony/TelephonyManager;->checkCarrierPrivilegesForPackage(Ljava/lang/String;)I Landroid/telephony/TelephonyManager;->from(Landroid/content/Context;)Landroid/telephony/TelephonyManager; +Landroid/telephony/TelephonyManager;->getCallState(I)I Landroid/telephony/TelephonyManager;->getCarrierPackageNamesForIntent(Landroid/content/Intent;)Ljava/util/List; Landroid/telephony/TelephonyManager;->getCurrentPhoneType()I Landroid/telephony/TelephonyManager;->getCurrentPhoneType(I)I Landroid/telephony/TelephonyManager;->getDataEnabled(I)Z Landroid/telephony/TelephonyManager;->getDataEnabled()Z +Landroid/telephony/TelephonyManager;->getDataNetworkType(I)I Landroid/telephony/TelephonyManager;->getDefault()Landroid/telephony/TelephonyManager; +Landroid/telephony/TelephonyManager;->getGroupIdLevel1(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getITelephony()Lcom/android/internal/telephony/ITelephony; Landroid/telephony/TelephonyManager;->getLine1Number(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getMultiSimConfiguration()Landroid/telephony/TelephonyManager$MultiSimVariants; Landroid/telephony/TelephonyManager;->getNetworkClass(I)I Landroid/telephony/TelephonyManager;->getNetworkCountryIso(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getNetworkOperatorForPhone(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getNetworkOperator(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getNetworkOperatorName(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getNetworkType(I)I +Landroid/telephony/TelephonyManager;->getNetworkTypeName(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getPhoneType(I)I +Landroid/telephony/TelephonyManager;->getSimCount()I Landroid/telephony/TelephonyManager;->getSimOperator(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getSimOperatorNameForPhone(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSimOperatorName(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getSimOperatorNumericForPhone(I)Ljava/lang/String; Landroid/telephony/TelephonyManager;->getSimSerialNumber(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getSubIdForPhoneAccount(Landroid/telecom/PhoneAccount;)I Landroid/telephony/TelephonyManager;->getSubscriberId(I)Ljava/lang/String; +Landroid/telephony/TelephonyManager;->getSubscriberInfo()Lcom/android/internal/telephony/IPhoneSubInfo; +Landroid/telephony/TelephonyManager;->hasIccCard(I)Z +Landroid/telephony/TelephonyManager;-><init>(Landroid/content/Context;)V +Landroid/telephony/TelephonyManager;-><init>()V Landroid/telephony/TelephonyManager;->isMultiSimEnabled()Z +Landroid/telephony/TelephonyManager;->isNetworkRoaming(I)Z Landroid/telephony/TelephonyManager;->setDataEnabled(IZ)V Landroid/text/AndroidBidi;->bidi(I[C[B)I +Landroid/text/DynamicLayout;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZIIILandroid/text/TextUtils$TruncateAt;I)V Landroid/text/DynamicLayout;->sStaticLayout:Landroid/text/StaticLayout; Landroid/text/Html;->withinStyle(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;II)V Landroid/text/Layout;->DIRS_ALL_LEFT_TO_RIGHT:Landroid/text/Layout$Directions; @@ -975,64 +1561,155 @@ Landroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;III)V Landroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;IIIZ)V Landroid/text/SpannableStringInternal;->START:I Landroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZLandroid/text/TextUtils$TruncateAt;II)V +Landroid/text/StaticLayout$LineBreaks;->ascents:[F +Landroid/text/StaticLayout$LineBreaks;->breaks:[I +Landroid/text/StaticLayout$LineBreaks;->descents:[F +Landroid/text/StaticLayout$LineBreaks;->flags:[I +Landroid/text/StaticLayout$LineBreaks;->widths:[F Landroid/text/StaticLayout;->mColumns:I Landroid/text/StaticLayout;->mLineCount:I Landroid/text/StaticLayout;->mLines:[I Landroid/text/TextLine;->obtain()Landroid/text/TextLine; Landroid/text/TextLine;->sCached:[Landroid/text/TextLine; Landroid/text/TextPaint;->setUnderlineText(IF)V +Landroid/transition/ChangeBounds;->BOTTOM_RIGHT_ONLY_PROPERTY:Landroid/util/Property; +Landroid/transition/ChangeBounds;->POSITION_PROPERTY:Landroid/util/Property; +Landroid/util/ArrayMap;->mBaseCacheSize:I +Landroid/util/ArrayMap;->mTwiceBaseCacheSize:I +Landroid/util/DisplayMetrics;->noncompatHeightPixels:I +Landroid/util/DisplayMetrics;->noncompatWidthPixels:I +Landroid/util/EventLog$Event;-><init>([B)V Landroid/util/Log;->wtf(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ZZ)I Landroid/util/Pools$SynchronizedPool;->acquire()Ljava/lang/Object; +Landroid/util/Singleton;->mInstance:Ljava/lang/Object; Landroid/view/accessibility/AccessibilityManager;->getInstance(Landroid/content/Context;)Landroid/view/accessibility/AccessibilityManager; Landroid/view/accessibility/AccessibilityManager;->isHighTextContrastEnabled()Z +Landroid/view/accessibility/AccessibilityManager;->mIsHighTextContrastEnabled:Z Landroid/view/accessibility/AccessibilityManager;->sInstance:Landroid/view/accessibility/AccessibilityManager; Landroid/view/accessibility/AccessibilityManager;->sInstanceSync:Ljava/lang/Object; Landroid/view/accessibility/AccessibilityNodeInfo;->refresh(Landroid/os/Bundle;Z)Z +Landroid/view/accessibility/IAccessibilityManager;->getEnabledAccessibilityServiceList(II)Ljava/util/List; +Landroid/view/accessibility/IAccessibilityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/accessibility/IAccessibilityManager; +Landroid/view/accessibility/IAccessibilityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/view/ActionMode;->isUiFocusable()Z Landroid/view/animation/Animation;->mListener:Landroid/view/animation/Animation$AnimationListener; Landroid/view/Choreographer;->doFrame(JI)V Landroid/view/Choreographer;->getFrameTime()J Landroid/view/Choreographer;->mCallbackQueues:[Landroid/view/Choreographer$CallbackQueue; +Landroid/view/Choreographer;->mLastFrameTimeNanos:J Landroid/view/Choreographer;->postCallback(ILjava/lang/Runnable;Ljava/lang/Object;)V Landroid/view/Choreographer;->removeCallbacks(ILjava/lang/Runnable;Ljava/lang/Object;)V Landroid/view/Choreographer;->scheduleVsyncLocked()V +Landroid/view/Choreographer;->USE_VSYNC:Z Landroid/view/ContextThemeWrapper;->mResources:Landroid/content/res/Resources; Landroid/view/ContextThemeWrapper;->mTheme:Landroid/content/res/Resources$Theme; Landroid/view/ContextThemeWrapper;->mThemeResource:I +Landroid/view/DisplayEventReceiver;->dispatchHotplug(JIZ)V +Landroid/view/DisplayEventReceiver;->dispatchVsync(JII)V +Landroid/view/Display$HdrCapabilities;-><init>([IFFF)V +Landroid/view/DisplayListCanvas;->callDrawGLFunction2(J)V +Landroid/view/DisplayListCanvas;->drawGLFunctor2(JLjava/lang/Runnable;)V +Landroid/view/FrameMetrics;->mTimingData:[J +Landroid/view/FrameMetricsObserver;->mFrameMetrics:Landroid/view/FrameMetrics; +Landroid/view/FrameMetricsObserver;->mMessageQueue:Landroid/os/MessageQueue; +Landroid/view/FrameMetricsObserver;->notifyDataAvailable(I)V +Landroid/view/GestureDetector;->mMinimumFlingVelocity:I +Landroid/view/GestureDetector;->mTouchSlopSquare:I +Landroid/view/GhostView;->addGhost(Landroid/view/View;Landroid/view/ViewGroup;Landroid/graphics/Matrix;)Landroid/view/GhostView; +Landroid/view/GhostView;->removeGhost(Landroid/view/View;)V +Landroid/view/IGraphicsStats$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Landroid/view/InputChannel;-><init>()V +Landroid/view/InputChannel;->mPtr:J +Landroid/view/InputDevice;->addMotionRange(IIFFFFF)V +Landroid/view/InputDevice;-><init>(IIILjava/lang/String;IILjava/lang/String;ZIILandroid/view/KeyCharacterMap;ZZZ)V Landroid/view/InputDevice;->isExternal()Z +Landroid/view/InputEventReceiver;->dispatchBatchedInputEventPending()V +Landroid/view/InputEventReceiver;->dispatchInputEvent(ILandroid/view/InputEvent;I)V +Landroid/view/InputEventSender;->dispatchInputEventFinished(IZ)V Landroid/view/inputmethod/InputMethodManager;->finishInputLocked()V Landroid/view/inputmethod/InputMethodManager;->focusIn(Landroid/view/View;)V Landroid/view/inputmethod/InputMethodManager;->getInputMethodWindowVisibleHeight()I Landroid/view/inputmethod/InputMethodManager;->mCurId:Ljava/lang/String; Landroid/view/inputmethod/InputMethodManager;->mCurRootView:Landroid/view/View; +Landroid/view/inputmethod/InputMethodManager;->mH:Landroid/view/inputmethod/InputMethodManager$H; Landroid/view/inputmethod/InputMethodManager;->mNextServedView:Landroid/view/View; Landroid/view/inputmethod/InputMethodManager;->mServedView:Landroid/view/View; +Landroid/view/inputmethod/InputMethodManager;->mService:Lcom/android/internal/view/IInputMethodManager; Landroid/view/inputmethod/InputMethodManager;->notifyUserAction()V Landroid/view/inputmethod/InputMethodManager;->showSoftInputUnchecked(ILandroid/os/ResultReceiver;)V +Landroid/view/inputmethod/InputMethodManager;->sInstance:Landroid/view/inputmethod/InputMethodManager; Landroid/view/inputmethod/InputMethodManager;->windowDismissed(Landroid/os/IBinder;)V +Landroid/view/InputQueue;->finishInputEvent(JZ)V Landroid/view/IWindowManager;->getAnimationScale(I)F Landroid/view/IWindowManager;->hasNavigationBar()Z Landroid/view/IWindowManager;->setAnimationScale(IF)V Landroid/view/IWindowManager;->setStrictModeVisualIndicatorPreference(Ljava/lang/String;)V Landroid/view/IWindowManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowManager; +Landroid/view/IWindowManager$Stub$Proxy;->hasNavigationBar()Z +Landroid/view/IWindowManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/view/IWindowSession$Stub$Proxy;->relayout(Landroid/view/IWindow;ILandroid/view/WindowManager$LayoutParams;IIIILandroid/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/KeyCharacterMap$FallbackAction;->keyCode:I +Landroid/view/KeyCharacterMap$FallbackAction;->metaState:I +Landroid/view/KeyCharacterMap;-><init>(J)V +Landroid/view/KeyEvent;->mAction:I +Landroid/view/KeyEvent;->mCharacters:Ljava/lang/String; +Landroid/view/KeyEvent;->mDeviceId:I +Landroid/view/KeyEvent;->mDownTime:J +Landroid/view/KeyEvent;->mEventTime:J +Landroid/view/KeyEvent;->mFlags:I +Landroid/view/KeyEvent;->mKeyCode:I +Landroid/view/KeyEvent;->mMetaState:I +Landroid/view/KeyEvent;->mRepeatCount:I +Landroid/view/KeyEvent;->mScanCode:I +Landroid/view/KeyEvent;->mSource:I +Landroid/view/KeyEvent;->obtain(JJIIIIIIIILjava/lang/String;)Landroid/view/KeyEvent; +Landroid/view/KeyEvent;->recycle()V Landroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; Landroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;Z)Landroid/view/View; Landroid/view/LayoutInflater;->mConstructorArgs:[Ljava/lang/Object; +Landroid/view/LayoutInflater;->mContext:Landroid/content/Context; Landroid/view/LayoutInflater;->mFactory2:Landroid/view/LayoutInflater$Factory2; Landroid/view/LayoutInflater;->mFactory:Landroid/view/LayoutInflater$Factory; Landroid/view/LayoutInflater;->mFactorySet:Z +Landroid/view/LayoutInflater;->mPrivateFactory:Landroid/view/LayoutInflater$Factory2; Landroid/view/LayoutInflater;->sConstructorMap:Ljava/util/HashMap; Landroid/view/LayoutInflater;->setPrivateFactory(Landroid/view/LayoutInflater$Factory2;)V Landroid/view/MotionEvent;->HISTORY_CURRENT:I Landroid/view/MotionEvent;->mNativePtr:J Landroid/view/MotionEvent;->nativeGetRawAxisValue(JIII)F +Landroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent; +Landroid/view/MotionEvent$PointerCoords;->mPackedAxisBits:J +Landroid/view/MotionEvent$PointerCoords;->mPackedAxisValues:[F Landroid/view/MotionEvent;->scale(F)V +Landroid/view/PointerIcon;->load(Landroid/content/Context;)Landroid/view/PointerIcon; +Landroid/view/PointerIcon;->mBitmapFrames:[Landroid/graphics/Bitmap; +Landroid/view/PointerIcon;->mBitmap:Landroid/graphics/Bitmap; +Landroid/view/PointerIcon;->mDurationPerFrame:I +Landroid/view/PointerIcon;->mHotSpotX:F +Landroid/view/PointerIcon;->mHotSpotY:F +Landroid/view/PointerIcon;->mType:I +Landroid/view/RenderNodeAnimator;->callOnFinished(Landroid/view/RenderNodeAnimator;)V Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener; +Landroid/view/SurfaceControl$PhysicalDisplayInfo;->appVsyncOffsetNanos:J +Landroid/view/SurfaceControl$PhysicalDisplayInfo;->density:F +Landroid/view/SurfaceControl$PhysicalDisplayInfo;->height:I +Landroid/view/SurfaceControl$PhysicalDisplayInfo;-><init>()V +Landroid/view/SurfaceControl$PhysicalDisplayInfo;->presentationDeadlineNanos:J +Landroid/view/SurfaceControl$PhysicalDisplayInfo;->refreshRate:F +Landroid/view/SurfaceControl$PhysicalDisplayInfo;->secure:Z +Landroid/view/SurfaceControl$PhysicalDisplayInfo;->width:I +Landroid/view/SurfaceControl$PhysicalDisplayInfo;->xDpi:F +Landroid/view/SurfaceControl$PhysicalDisplayInfo;->yDpi:F +Landroid/view/Surface;-><init>(J)V +Landroid/view/Surface;->mLock:Ljava/lang/Object; +Landroid/view/Surface;->mNativeObject:J +Landroid/view/SurfaceSession;->mNativeClient:J Landroid/view/SurfaceView;->mCallbacks:Ljava/util/ArrayList; Landroid/view/SurfaceView;->mFormat:I Landroid/view/SurfaceView;->mRequestedFormat:I Landroid/view/SurfaceView;->mSurfaceHolder:Landroid/view/SurfaceHolder; +Landroid/view/SurfaceView;->surfacePositionLost_uiRtSync(J)V +Landroid/view/SurfaceView;->updateSurfacePosition_renderWorker(JIIII)V Landroid/view/textclassifier/logging/SmartSelectionEventTracker;-><init>(Landroid/content/Context;I)V Landroid/view/textclassifier/logging/SmartSelectionEventTracker;->logEvent(Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;)V Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionAction(III)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; @@ -1043,10 +1720,18 @@ Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;- Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionStarted(I)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; Landroid/view/textservice/TextServicesManager;->isSpellCheckerEnabled()Z Landroid/view/TextureView;->mLayer:Landroid/view/HardwareLayer; +Landroid/view/TextureView;->mNativeWindow:J Landroid/view/TextureView;->mSurface:Landroid/graphics/SurfaceTexture; Landroid/view/TextureView;->mUpdateListener:Landroid/graphics/SurfaceTexture$OnFrameAvailableListener; Landroid/view/TouchDelegate;->mDelegateTargeted:Z +Landroid/view/VelocityTracker$Estimator;->confidence:F +Landroid/view/VelocityTracker$Estimator;->degree:I +Landroid/view/VelocityTracker$Estimator;->xCoeff:[F +Landroid/view/VelocityTracker$Estimator;->yCoeff:[F Landroid/view/VelocityTracker;->obtain(Ljava/lang/String;)Landroid/view/VelocityTracker; +Landroid/view/View;->applyDrawableToTransparentRegion(Landroid/graphics/drawable/Drawable;Landroid/graphics/Region;)V +Landroid/view/View$AttachInfo;->mDrawingTime:J +Landroid/view/View$AttachInfo;->mStableInsets:Landroid/graphics/Rect; Landroid/view/View;->clearAccessibilityFocus()V Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z Landroid/view/View;->computeOpaqueFlags()V @@ -1059,28 +1744,37 @@ Landroid/view/ViewDebug;->dump(Landroid/view/View;ZZLjava/io/OutputStream;)V Landroid/view/View;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V Landroid/view/View;->dispatchDetachedFromWindow()V Landroid/view/View;->fitsSystemWindows()Z +Landroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate; Landroid/view/View;->getListenerInfo()Landroid/view/View$ListenerInfo; +Landroid/view/View;->getTransitionAlpha()F Landroid/view/View;->getViewRootImpl()Landroid/view/ViewRootImpl; +Landroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V +Landroid/view/ViewGroup;->dispatchViewRemoved(Landroid/view/View;)V Landroid/view/ViewGroup;->FLAG_SUPPORT_STATIC_TRANSFORMATIONS:I Landroid/view/ViewGroup;->FLAG_USE_CHILD_DRAWING_ORDER:I Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V Landroid/view/ViewGroup$MarginLayoutParams;->endMargin:I Landroid/view/ViewGroup$MarginLayoutParams;->startMargin:I +Landroid/view/ViewGroup;->mChildrenCount:I Landroid/view/ViewGroup;->mChildren:[Landroid/view/View; Landroid/view/ViewGroup;->mFirstTouchTarget:Landroid/view/ViewGroup$TouchTarget; Landroid/view/ViewGroup;->mGroupFlags:I Landroid/view/ViewGroup;->mOnHierarchyChangeListener:Landroid/view/ViewGroup$OnHierarchyChangeListener; +Landroid/view/ViewGroup;->suppressLayout(Z)V Landroid/view/View;->initializeScrollbars(Landroid/content/res/TypedArray;)V +Landroid/view/View;->internalSetPadding(IIII)V Landroid/view/View;->isPaddingResolved()Z Landroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z Landroid/view/View;->isVisibleToUser()Z Landroid/view/View$ListenerInfo;->mOnClickListener:Landroid/view/View$OnClickListener; +Landroid/view/View$ListenerInfo;->mOnLongClickListener:Landroid/view/View$OnLongClickListener; Landroid/view/View$ListenerInfo;->mOnTouchListener:Landroid/view/View$OnTouchListener; Landroid/view/View;->mAccessibilityDelegate:Landroid/view/View$AccessibilityDelegate; Landroid/view/View;->mAttachInfo:Landroid/view/View$AttachInfo; Landroid/view/View;->mBottom:I Landroid/view/View;->mContext:Landroid/content/Context; Landroid/view/View;->mDrawingCache:Landroid/graphics/Bitmap; +Landroid/view/View;->mLayoutParams:Landroid/view/ViewGroup$LayoutParams; Landroid/view/View;->mLeft:I Landroid/view/View;->mListenerInfo:Landroid/view/View$ListenerInfo; Landroid/view/View;->mMinHeight:I @@ -1099,6 +1793,7 @@ Landroid/view/View;->mStartActivityRequestWho:Ljava/lang/String; Landroid/view/View;->mTag:Ljava/lang/Object; Landroid/view/View;->mTop:I Landroid/view/View;->mUnscaledDrawingCache:Landroid/graphics/Bitmap; +Landroid/view/View;->mViewFlags:I Landroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V Landroid/view/View;->recomputePadding()V Landroid/view/View;->requestAccessibilityFocus()Z @@ -1106,9 +1801,14 @@ Landroid/view/View;->resetPaddingToInitialValues()V Landroid/view/ViewRootImpl;->detachFunctor(J)V Landroid/view/ViewRootImpl;->invokeFunctor(JZ)V Landroid/view/ViewRootImpl;->mStopped:Z +Landroid/view/View$ScrollabilityCache;->scrollBar:Landroid/widget/ScrollBarDrawable; +Landroid/view/View;->setAlphaNoInvalidation(F)Z +Landroid/view/View;->setAnimationMatrix(Landroid/graphics/Matrix;)V Landroid/view/View;->setAssistBlocked(Z)V Landroid/view/View;->setFrame(IIII)Z Landroid/view/View;->setIsRootNamespace(Z)V +Landroid/view/View;->setLeftTopRightBottom(IIII)V +Landroid/view/View;->setTransitionAlpha(F)V Landroid/view/View;->startActivityForResult(Landroid/content/Intent;I)V Landroid/view/View;->STATUS_BAR_DISABLE_BACK:I Landroid/view/View;->STATUS_BAR_DISABLE_EXPAND:I @@ -1116,20 +1816,32 @@ Landroid/view/View;->STATUS_BAR_DISABLE_HOME:I Landroid/view/View;->STATUS_BAR_DISABLE_RECENT:I Landroid/view/View;->toGlobalMotionEvent(Landroid/view/MotionEvent;)Z Landroid/view/View;->toLocalMotionEvent(Landroid/view/MotionEvent;)Z +Landroid/view/View;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V +Landroid/view/View;->transformMatrixToLocal(Landroid/graphics/Matrix;)V Landroid/view/ViewTreeObserver;->addOnComputeInternalInsetsListener(Landroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;)V Landroid/view/ViewTreeObserver$InternalInsetsInfo;->setTouchableInsets(I)V Landroid/view/ViewTreeObserver$InternalInsetsInfo;->TOUCHABLE_INSETS_REGION:I Landroid/view/ViewTreeObserver$InternalInsetsInfo;->touchableRegion:Landroid/graphics/Region; Landroid/view/ViewTreeObserver;->removeOnComputeInternalInsetsListener(Landroid/view/ViewTreeObserver$OnComputeInternalInsetsListener;)V +Landroid/view/WindowAnimationFrameStats;->init(J[J)V +Landroid/view/WindowContentFrameStats;->init(J[J[J[J)V Landroid/view/WindowManagerGlobal;->getInstance()Landroid/view/WindowManagerGlobal; Landroid/view/WindowManagerGlobal;->getRootView(Ljava/lang/String;)Landroid/view/View; Landroid/view/WindowManagerGlobal;->getViewRootNames()[Ljava/lang/String; Landroid/view/WindowManagerGlobal;->getWindowManagerService()Landroid/view/IWindowManager; Landroid/view/WindowManagerGlobal;->mLock:Ljava/lang/Object; +Landroid/view/WindowManagerGlobal;->mParams:Ljava/util/ArrayList; +Landroid/view/WindowManagerGlobal;->mRoots:Ljava/util/ArrayList; Landroid/view/WindowManagerGlobal;->mViews:Ljava/util/ArrayList; +Landroid/view/WindowManagerGlobal;->sDefaultWindowManager:Landroid/view/WindowManagerGlobal; +Landroid/view/WindowManagerGlobal;->sWindowManagerService:Landroid/view/IWindowManager; +Landroid/view/WindowManagerGlobal;->sWindowSession:Landroid/view/IWindowSession; Landroid/view/WindowManagerGlobal;->trimMemory(I)V +Landroid/view/WindowManagerImpl;->mGlobal:Landroid/view/WindowManagerGlobal; +Landroid/view/WindowManager$LayoutParams;->hideTimeoutMilliseconds:J Landroid/view/WindowManager$LayoutParams;->needsMenuKey:I Landroid/view/WindowManager$LayoutParams;->NEEDS_MENU_SET_TRUE:I +Landroid/view/WindowManager$LayoutParams;->PRIVATE_FLAG_NO_MOVE_ANIMATION:I Landroid/view/WindowManager$LayoutParams;->privateFlags:I Landroid/view/WindowManager$LayoutParams;->userActivityTimeout:J Landroid/view/Window;->mAppName:Ljava/lang/String; @@ -1142,6 +1854,7 @@ Landroid/webkit/FindActionModeCallback;->setWebView(Landroid/webkit/WebView;)V Landroid/webkit/FindActionModeCallback;->showSoftInput()V Landroid/webkit/GeolocationPermissions;-><init>()V Landroid/webkit/HttpAuthHandler;-><init>()V +Landroid/webkit/IWebViewUpdateService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/webkit/JsDialogHelper;-><init>(Landroid/webkit/JsPromptResult;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V Landroid/webkit/JsDialogHelper;->showDialog(Landroid/content/Context;)V Landroid/webkit/JsPromptResult;->getStringResult()Ljava/lang/String; @@ -1153,12 +1866,14 @@ Landroid/webkit/WebChromeClient;->openFileChooser(Landroid/webkit/ValueCallback; Landroid/webkit/WebMessagePort;-><init>()V Landroid/webkit/WebResourceError;-><init>()V Landroid/webkit/WebResourceResponse;-><init>(ZLjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/util/Map;Ljava/io/InputStream;)V +Landroid/webkit/WebResourceResponse;->mImmutable:Z Landroid/webkit/WebSettings;->getAcceptThirdPartyCookies()Z Landroid/webkit/WebSettings;->setAcceptThirdPartyCookies(Z)V Landroid/webkit/WebSettings;->setNavDump(Z)V Landroid/webkit/WebSettings;->setPluginsEnabled(Z)V Landroid/webkit/WebStorage;-><init>()V Landroid/webkit/WebStorage$Origin;-><init>(Ljava/lang/String;JJ)V +Landroid/webkit/WebSyncManager;->mHandler:Landroid/os/Handler; Landroid/webkit/WebView;->debugDump()V Landroid/webkit/WebViewDelegate;->addWebViewAssetPath(Landroid/content/Context;)V Landroid/webkit/WebViewDelegate;->callDrawGlFunction(Landroid/graphics/Canvas;JLjava/lang/Runnable;)V @@ -1178,8 +1893,12 @@ Landroid/webkit/WebView;->emulateShiftHeld()V Landroid/webkit/WebView;->enablePlatformNotifications()V Landroid/webkit/WebViewFactory;->getLoadedPackageInfo()Landroid/content/pm/PackageInfo; Landroid/webkit/WebViewFactory;->getProvider()Landroid/webkit/WebViewFactoryProvider; +Landroid/webkit/WebViewFactory;->getWebViewContextAndSetProvider()Landroid/content/Context; Landroid/webkit/WebViewFactory;->loadWebViewNativeLibraryFromPackage(Ljava/lang/String;Ljava/lang/ClassLoader;)I +Landroid/webkit/WebViewFactoryProvider;->getStatics()Landroid/webkit/WebViewFactoryProvider$Statics; +Landroid/webkit/WebViewFactoryProvider$Statics;->getDefaultUserAgent(Landroid/content/Context;)Ljava/lang/String; Landroid/webkit/WebViewFactory;->sPackageInfo:Landroid/content/pm/PackageInfo; +Landroid/webkit/WebViewFactory;->sProviderInstance:Landroid/webkit/WebViewFactoryProvider; Landroid/webkit/WebView;->getVisibleTitleHeight()I Landroid/webkit/WebView;->getWebViewProvider()Landroid/webkit/WebViewProvider; Landroid/webkit/WebView$HitTestResult;-><init>()V @@ -1204,7 +1923,10 @@ Landroid/webkit/WebView$PrivateAccess;->super_startActivityForResult(Landroid/co Landroid/webkit/WebView;->restorePicture(Landroid/os/Bundle;Ljava/io/File;)Z Landroid/webkit/WebView;->savePicture(Landroid/os/Bundle;Ljava/io/File;)Z Landroid/webkit/WebView;->sEnforceThreadChecking:Z +Landroid/webkit/WebViewUpdateService;->getCurrentWebViewPackageName()Ljava/lang/String; Landroid/widget/AbsListView$FlingRunnable;->endFling()V +Landroid/widget/AbsListView$FlingRunnable;->mScroller:Landroid/widget/OverScroller; +Landroid/widget/AbsListView$FlingRunnable;->start(I)V Landroid/widget/AbsListView;->invokeOnItemScrollListener()V Landroid/widget/AbsListView;->isVerticalScrollBarHidden()Z Landroid/widget/AbsListView;->mAdapter:Landroid/widget/ListAdapter; @@ -1225,6 +1947,9 @@ Landroid/widget/AbsListView;->mTouchSlop:I Landroid/widget/AbsListView;->mVelocityTracker:Landroid/view/VelocityTracker; Landroid/widget/AbsListView;->performLongPress(Landroid/view/View;IJFF)Z Landroid/widget/AbsListView;->performLongPress(Landroid/view/View;IJ)Z +Landroid/widget/AbsListView$RecycleBin;->clear()V +Landroid/widget/AbsListView$RecycleBin;->mRecyclerListener:Landroid/widget/AbsListView$RecyclerListener; +Landroid/widget/AbsListView;->reportScrollStateChange(I)V Landroid/widget/AbsListView;->smoothScrollBy(IIZZ)V Landroid/widget/AbsListView;->trackMotionScroll(II)Z Landroid/widget/AbsSeekBar;->mIsDragging:Z @@ -1233,6 +1958,7 @@ Landroid/widget/AbsSeekBar;->mThumb:Landroid/graphics/drawable/Drawable; Landroid/widget/AbsSeekBar;->mTouchProgressOffset:F Landroid/widget/ActivityChooserView;->setExpandActivityOverflowButtonDrawable(Landroid/graphics/drawable/Drawable;)V Landroid/widget/AdapterView;->mDataChanged:Z +Landroid/widget/AdapterView;->mFirstPosition:I Landroid/widget/AdapterView;->setNextSelectedPositionInt(I)V Landroid/widget/AdapterView;->setSelectedPositionInt(I)V Landroid/widget/AutoCompleteTextView;->doAfterTextChanged()V @@ -1247,23 +1973,41 @@ Landroid/widget/Editor;->mShowCursor:J Landroid/widget/ExpandableListView;->mChildDivider:Landroid/graphics/drawable/Drawable; Landroid/widget/FastScroller;->mThumbDrawable:Landroid/graphics/drawable/Drawable; Landroid/widget/FastScroller;->mTrackDrawable:Landroid/graphics/drawable/Drawable; +Landroid/widget/Gallery;->fillToGalleryLeft()V +Landroid/widget/Gallery;->fillToGalleryRight()V +Landroid/widget/Gallery$FlingRunnable;->startUsingVelocity(I)V +Landroid/widget/Gallery;->makeAndAddView(IIIZ)Landroid/view/View; +Landroid/widget/Gallery;->mDownTouchPosition:I Landroid/widget/Gallery;->mDownTouchView:Landroid/view/View; +Landroid/widget/Gallery;->mFlingRunnable:Landroid/widget/Gallery$FlingRunnable; +Landroid/widget/Gallery;->moveDirection(I)Z +Landroid/widget/Gallery;->mSpacing:I +Landroid/widget/GridView;->fillDown(II)Landroid/view/View; +Landroid/widget/GridView;->fillUp(II)Landroid/view/View; Landroid/widget/GridView;->mColumnWidth:I Landroid/widget/GridView;->mHorizontalSpacing:I Landroid/widget/GridView;->mNumColumns:I Landroid/widget/GridView;->mRequestedNumColumns:I Landroid/widget/GridView;->mVerticalSpacing:I +Landroid/widget/HorizontalScrollView;->mChildToScrollTo:Landroid/view/View; Landroid/widget/HorizontalScrollView;->mEdgeGlowLeft:Landroid/widget/EdgeEffect; Landroid/widget/HorizontalScrollView;->mEdgeGlowRight:Landroid/widget/EdgeEffect; Landroid/widget/HorizontalScrollView;->mScroller:Landroid/widget/OverScroller; Landroid/widget/ImageView;->mAdjustViewBounds:Z Landroid/widget/ImageView;->mAlpha:I +Landroid/widget/ImageView;->mDrawMatrix:Landroid/graphics/Matrix; Landroid/widget/ImageView;->mMaxHeight:I Landroid/widget/ImageView;->mMaxWidth:I +Landroid/widget/ImageView;->mResource:I +Landroid/widget/ImageView;->mUri:Landroid/net/Uri; +Landroid/widget/ImageView;->updateDrawable(Landroid/graphics/drawable/Drawable;)V Landroid/widget/LinearLayout;->mGravity:I Landroid/widget/LinearLayout;->mUseLargestChild:Z Landroid/widget/ListPopupWindow;->mPopup:Landroid/widget/PopupWindow; Landroid/widget/ListPopupWindow;->setForceIgnoreOutsideTouch(Z)V +Landroid/widget/ListView;->fillDown(II)Landroid/view/View; +Landroid/widget/ListView;->fillSpecific(II)Landroid/view/View; +Landroid/widget/ListView;->fillUp(II)Landroid/view/View; Landroid/widget/ListView;->mAreAllItemsSelectable:Z Landroid/widget/ListView;->setSelectionInt(I)V Landroid/widget/MediaController;->mAnchor:Landroid/view/View; @@ -1288,8 +2032,12 @@ Landroid/widget/PopupWindow;->mIsShowing:Z Landroid/widget/PopupWindow;->mLastHeight:I Landroid/widget/PopupWindow;->mLastWidth:I Landroid/widget/PopupWindow;->mOnScrollChangedListener:Landroid/view/ViewTreeObserver$OnScrollChangedListener; +Landroid/widget/PopupWindow;->mOverlapAnchor:Z Landroid/widget/PopupWindow;->mWidthMode:I +Landroid/widget/PopupWindow;->mWindowLayoutType:I Landroid/widget/PopupWindow;->preparePopup(Landroid/view/WindowManager$LayoutParams;)V +Landroid/widget/PopupWindow;->setClipToScreenEnabled(Z)V +Landroid/widget/PopupWindow;->setEpicenterBounds(Landroid/graphics/Rect;)V Landroid/widget/PopupWindow;->setLayoutInScreenEnabled(Z)V Landroid/widget/PopupWindow;->setLayoutInsetDecor(Z)V Landroid/widget/PopupWindow;->setTouchModal(Z)V @@ -1306,9 +2054,16 @@ Landroid/widget/RelativeLayout$LayoutParams;->mTop:I Landroid/widget/RelativeLayout;->mGravity:I Landroid/widget/RemoteViews$Action;->mergeBehavior()I Landroid/widget/RemoteViews$Action;->viewId:I +Landroid/widget/RemoteViews$BitmapCache;->mBitmaps:Ljava/util/ArrayList; Landroid/widget/RemoteViews;->mActions:Ljava/util/ArrayList; Landroid/widget/RemoteViews;->mApplication:Landroid/content/pm/ApplicationInfo; +Landroid/widget/RemoteViews;->mBitmapCache:Landroid/widget/RemoteViews$BitmapCache; +Landroid/widget/RemoteViews;->mergeRemoteViews(Landroid/widget/RemoteViews;)V Landroid/widget/RemoteViews$ReflectionAction;->methodName:Ljava/lang/String; +Landroid/widget/ScrollBarDrawable;->mVerticalThumb:Landroid/graphics/drawable/Drawable; +Landroid/widget/ScrollBarDrawable;->setHorizontalThumbDrawable(Landroid/graphics/drawable/Drawable;)V +Landroid/widget/ScrollBarDrawable;->setVerticalThumbDrawable(Landroid/graphics/drawable/Drawable;)V +Landroid/widget/ScrollView;->mChildToScrollTo:Landroid/view/View; Landroid/widget/ScrollView;->mEdgeGlowBottom:Landroid/widget/EdgeEffect; Landroid/widget/ScrollView;->mEdgeGlowTop:Landroid/widget/EdgeEffect; Landroid/widget/ScrollView;->mIsBeingDragged:Z @@ -1324,6 +2079,7 @@ Landroid/widget/SlidingDrawer;->mTopOffset:I Landroid/widget/Spinner;->mPopup:Landroid/widget/Spinner$SpinnerPopup; Landroid/widget/Switch;->mThumbDrawable:Landroid/graphics/drawable/Drawable; Landroid/widget/Switch;->mTrackDrawable:Landroid/graphics/drawable/Drawable; +Landroid/widget/TabHost$TabSpec;->mContentStrategy:Landroid/widget/TabHost$ContentStrategy; Landroid/widget/TabWidget;->setTabSelectionListener(Landroid/widget/TabWidget$OnTabSelectionChanged;)V Landroid/widget/TextView;->assumeLayout()V Landroid/widget/TextView;->createEditorIfNeeded()V @@ -1335,14 +2091,21 @@ Landroid/widget/TextView;->mMarquee:Landroid/widget/TextView$Marquee; Landroid/widget/TextView;->mMaximum:I Landroid/widget/TextView;->mMaxMode:I Landroid/widget/TextView;->mSingleLine:Z +Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V +Landroid/widget/Toast;->getService()Landroid/app/INotificationManager; +Landroid/widget/Toast;->sService:Landroid/app/INotificationManager; Landroid/widget/VideoView;->mCurrentBufferPercentage:I Landroid/widget/VideoView;->mMediaController:Landroid/widget/MediaController; Landroid/widget/VideoView;->mSHCallback:Landroid/view/SurfaceHolder$Callback; Landroid/widget/VideoView;->mUri:Landroid/net/Uri; Landroid/widget/VideoView;->mVideoHeight:I Landroid/widget/VideoView;->mVideoWidth:I +Lcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I +Lcom/android/internal/app/IAppOpsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Lcom/android/internal/app/IBatteryStats;->getStatistics()[B Lcom/android/internal/app/IBatteryStats$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IBatteryStats; +Lcom/android/internal/app/IVoiceInteractionManagerService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractionManagerService; +Lcom/android/internal/app/IVoiceInteractionManagerService$Stub$Proxy;->showSessionFromSession(Landroid/os/IBinder;Landroid/os/Bundle;I)Z Lcom/android/internal/os/BatterySipper;->add(Lcom/android/internal/os/BatterySipper;)V Lcom/android/internal/os/BatterySipper;->drainType:Lcom/android/internal/os/BatterySipper$DrainType; Lcom/android/internal/os/BatterySipper;->getUid()I @@ -1387,15 +2150,32 @@ Lcom/android/internal/os/FuseAppLoop;->onOpen(JJ)[B Lcom/android/internal/os/PowerProfile;->getAveragePower(Ljava/lang/String;)D Lcom/android/internal/os/PowerProfile;->getAveragePower(Ljava/lang/String;I)D Lcom/android/internal/os/PowerProfile;->getBatteryCapacity()D +Lcom/android/internal/os/PowerProfile;-><init>(Landroid/content/Context;)V Lcom/android/internal/R$array;->config_mobile_hotspot_provision_app:I Lcom/android/internal/R$array;->config_tether_wifi_regexs:I +Lcom/android/internal/R$array;->maps_starting_lat_lng:I +Lcom/android/internal/R$array;->maps_starting_zoom:I +Lcom/android/internal/R$attr;->mapViewStyle:I +Lcom/android/internal/R$attr;->state_focused:I +Lcom/android/internal/R$attr;->state_pressed:I +Lcom/android/internal/R$attr;->state_selected:I Lcom/android/internal/R$attr;->switchStyle:I Lcom/android/internal/R$bool;->config_mms_content_disposition_support:I Lcom/android/internal/R$bool;->config_showNavigationBar:I +Lcom/android/internal/R$dimen;-><init>()V Lcom/android/internal/R$dimen;->navigation_bar_height:I Lcom/android/internal/R$dimen;->navigation_bar_height_landscape:I Lcom/android/internal/R$dimen;->status_bar_height:I +Lcom/android/internal/R$dimen;->toast_y_offset:I +Lcom/android/internal/R$drawable;->btn_check_off:I +Lcom/android/internal/R$drawable;->compass_arrow:I +Lcom/android/internal/R$drawable;->compass_base:I +Lcom/android/internal/R$drawable;->ic_maps_indicator_current_position_anim:I Lcom/android/internal/R$drawable;->ic_menu_close_clear_cancel:I +Lcom/android/internal/R$drawable;->loading_tile_android:I +Lcom/android/internal/R$drawable;->maps_google_logo:I +Lcom/android/internal/R$drawable;->no_tile_256:I +Lcom/android/internal/R$drawable;->reticle:I Lcom/android/internal/R$id;->amPm:I Lcom/android/internal/R$id;->edittext_container:I Lcom/android/internal/R$id;->icon:I @@ -1408,12 +2188,37 @@ Lcom/android/internal/R$id;->timePicker:I Lcom/android/internal/R$id;->title_container:I Lcom/android/internal/R$id;->title:I Lcom/android/internal/R$integer;->config_screenBrightnessDim:I +Lcom/android/internal/R$integer;->config_toastDefaultGravity:I Lcom/android/internal/R$layout;->screen_title:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_enabled:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_hardwareAccelerated:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication:[I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_label:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_largeHeap:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_name:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_permission:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_process:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_supportsRtl:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_theme:I +Lcom/android/internal/R$styleable;->AndroidManifestApplication_uiOptions:I +Lcom/android/internal/R$styleable;->AndroidManifest:[I +Lcom/android/internal/R$styleable;->AndroidManifest_installLocation:I +Lcom/android/internal/R$styleable;->AndroidManifest_sharedUserId:I +Lcom/android/internal/R$styleable;->AndroidManifestUsesPermission:[I +Lcom/android/internal/R$styleable;->AndroidManifestUsesPermission_name:I +Lcom/android/internal/R$styleable;->AndroidManifestUsesSdk:[I +Lcom/android/internal/R$styleable;->AndroidManifestUsesSdk_minSdkVersion:I +Lcom/android/internal/R$styleable;->AndroidManifestUsesSdk_targetSdkVersion:I +Lcom/android/internal/R$styleable;->AndroidManifest_versionCode:I +Lcom/android/internal/R$styleable;->AndroidManifest_versionName:I Lcom/android/internal/R$styleable;->CompoundButton_button:I Lcom/android/internal/R$styleable;->CompoundButton:[I +Lcom/android/internal/R$styleable;->EdgeEffect_colorEdgeEffect:I +Lcom/android/internal/R$styleable;->EdgeEffect:[I Lcom/android/internal/R$styleable;->IconMenuView:[I Lcom/android/internal/R$styleable;->ImageView:[I Lcom/android/internal/R$styleable;->ImageView_src:I +Lcom/android/internal/R$styleable;->ScrollView_fillViewport:I Lcom/android/internal/R$styleable;->ScrollView:[I Lcom/android/internal/R$styleable;->TabWidget:[I Lcom/android/internal/R$styleable;->TextView_drawableBottom:I @@ -1422,31 +2227,54 @@ Lcom/android/internal/R$styleable;->TextView_drawableRight:I Lcom/android/internal/R$styleable;->TextView_drawableTop:I Lcom/android/internal/R$styleable;->TextView:[I Lcom/android/internal/R$styleable;->View_background:I +Lcom/android/internal/R$styleable;->ViewGroup_Layout:[I +Lcom/android/internal/R$styleable;->ViewGroup_Layout_layout_height:I +Lcom/android/internal/R$styleable;->ViewGroup_Layout_layout_width:I Lcom/android/internal/R$styleable;->View:[I Lcom/android/internal/R$styleable;->View_id:I Lcom/android/internal/R$styleable;->ViewStub:[I Lcom/android/internal/R$styleable;->ViewStub_inflatedId:I Lcom/android/internal/R$styleable;->ViewStub_layout:I Lcom/android/internal/R$styleable;->Window_windowActionBarFullscreenDecorLayout:I +Lcom/android/internal/R$style;->Theme:I Lcom/android/internal/R$xml;->power_profile:I Lcom/android/internal/telephony/IPhoneSubInfo$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/IPhoneSubInfo; +Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;-><init>(Landroid/os/IBinder;)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/ITelephony;->call(Ljava/lang/String;Ljava/lang/String;)V Lcom/android/internal/telephony/ITelephony;->endCall()Z Lcom/android/internal/telephony/ITelephony;->isIdle(Ljava/lang/String;)Z Lcom/android/internal/telephony/ITelephony;->silenceRinger()V Lcom/android/internal/telephony/ITelephony$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephony; +Lcom/android/internal/telephony/ITelephony$Stub$Proxy;-><init>(Landroid/os/IBinder;)V +Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_getDeviceId:I Lcom/android/internal/util/XmlUtils;->readMapXml(Ljava/io/InputStream;)Ljava/util/HashMap; +Lcom/android/internal/view/IInputMethodManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodManager; +Lcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getEnabledInputMethodList()Ljava/util/List; +Lcom/android/internal/view/IInputMethodManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Lcom/android/internal/view/InputBindResult;->CREATOR:Landroid/os/Parcelable$Creator; Lcom/android/internal/view/menu/MenuBuilder;->mContext:Landroid/content/Context; Lcom/android/internal/view/menu/MenuBuilder;->setCurrentMenuInfo(Landroid/view/ContextMenu$ContextMenuInfo;)V Lcom/android/internal/view/menu/MenuBuilder;->setOptionalIconsVisible(Z)V Lcom/android/internal/view/menu/MenuItemImpl;->mIconResId:I Lcom/android/internal/view/menu/MenuItemImpl;->setMenuInfo(Landroid/view/ContextMenu$ContextMenuInfo;)V +Lcom/android/internal/view/menu/MenuView$ItemView;->getItemData()Lcom/android/internal/view/menu/MenuItemImpl; +Lcom/android/okhttp/ConnectionPool;->keepAliveDurationNs:J Lcom/android/okhttp/ConnectionPool;->maxIdleConnections:I Lcom/android/okhttp/ConnectionPool;->systemDefault:Lcom/android/okhttp/ConnectionPool; +Lcom/android/okhttp/internal/http/HttpEngine;->httpStream:Lcom/android/okhttp/internal/http/HttpStream; +Lcom/android/okhttp/OkHttpClient;->connectionPool:Lcom/android/okhttp/ConnectionPool; +Lcom/android/okhttp/OkHttpClient;->DEFAULT_PROTOCOLS:Ljava/util/List; +Lcom/android/okhttp/OkHttpClient;->dns:Lcom/android/okhttp/Dns; +Lcom/android/okhttp/OkHttpClient;->setProtocols(Ljava/util/List;)Lcom/android/okhttp/OkHttpClient; Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B +Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getNpnSelectedProtocol()[B Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B)V +Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setHostname(Ljava/lang/String;)V +Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setNpnProtocols([B)V +Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z)V +Lcom/android/org/conscrypt/TrustManagerImpl;-><init>(Ljava/security/KeyStore;)V Ldalvik/system/BaseDexClassLoader;->getLdLibraryPath()Ljava/lang/String; Ldalvik/system/BaseDexClassLoader;->pathList:Ldalvik/system/DexPathList; Ldalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy; @@ -1459,15 +2287,22 @@ Ldalvik/system/DexFile;->loadClassBinaryName(Ljava/lang/String;Ljava/lang/ClassL Ldalvik/system/DexFile;->mCookie:Ljava/lang/Object; Ldalvik/system/DexFile;->mFileName:Ljava/lang/String; Ldalvik/system/DexFile;->openDexFile(Ljava/lang/String;Ljava/lang/String;ILjava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ljava/lang/Object; +Ldalvik/system/DexPathList;->addDexPath(Ljava/lang/String;Ljava/io/File;)V Ldalvik/system/DexPathList;->dexElements:[Ldalvik/system/DexPathList$Element; Ldalvik/system/DexPathList$Element;->dexFile:Ldalvik/system/DexFile; +Ldalvik/system/DexPathList$Element;-><init>(Ldalvik/system/DexFile;Ljava/io/File;)V +Ldalvik/system/DexPathList$Element;-><init>(Ljava/io/File;ZLjava/io/File;Ldalvik/system/DexFile;)V +Ldalvik/system/DexPathList;-><init>(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)V Ldalvik/system/DexPathList;->makeDexElements(Ljava/util/List;Ljava/io/File;Ljava/util/List;Ljava/lang/ClassLoader;)[Ldalvik/system/DexPathList$Element; Ldalvik/system/DexPathList;->makePathElements(Ljava/util/List;)[Ldalvik/system/DexPathList$NativeLibraryElement; Ldalvik/system/DexPathList;->makePathElements(Ljava/util/List;Ljava/io/File;Ljava/util/List;)[Ldalvik/system/DexPathList$Element; Ldalvik/system/DexPathList;->nativeLibraryDirectories:Ljava/util/List; +Ldalvik/system/DexPathList$NativeLibraryElement;-><init>(Ljava/io/File;)V Ldalvik/system/DexPathList;->nativeLibraryPathElements:[Ldalvik/system/DexPathList$NativeLibraryElement; +Ldalvik/system/DexPathList;->splitPaths(Ljava/lang/String;Z)Ljava/util/List; Ldalvik/system/DexPathList;->systemNativeLibraryDirectories:Ljava/util/List; Ldalvik/system/VMDebug;->dumpReferenceTables()V +Ldalvik/system/VMRuntime;->addressOf(Ljava/lang/Object;)J Ldalvik/system/VMRuntime;->clearGrowthLimit()V Ldalvik/system/VMRuntime;->getCurrentInstructionSet()Ljava/lang/String; Ldalvik/system/VMRuntime;->getRuntime()Ldalvik/system/VMRuntime; @@ -1480,32 +2315,55 @@ Ldalvik/system/VMRuntime;->setMinimumHeapSize(J)J Ldalvik/system/VMRuntime;->setTargetHeapUtilization(F)F Ldalvik/system/VMRuntime;->trackExternalAllocation(J)Z Ldalvik/system/VMRuntime;->trackExternalFree(J)V +Ldalvik/system/VMRuntime;->vmInstructionSet()Ljava/lang/String; +Ldalvik/system/VMRuntime;->vmLibrary()Ljava/lang/String; Ldalvik/system/VMStack;->getCallingClassLoader()Ljava/lang/ClassLoader; Ldalvik/system/VMStack;->getStackClass2()Ljava/lang/Class; Ljava/io/FileDescriptor;->descriptor:I Ljava/io/FileDescriptor;->getInt$()I Ljava/io/FileDescriptor;->setInt$(I)V +Ljava/io/FileInputStream;->fd:Ljava/io/FileDescriptor; +Ljava/io/FileOutputStream;->fd:Ljava/io/FileDescriptor; Ljava/io/ObjectStreamClass;->getConstructorId(Ljava/lang/Class;)J Ljava/io/ObjectStreamClass;->newInstance(Ljava/lang/Class;J)Ljava/lang/Object; Ljava/io/ObjectStreamClass;->newInstance()Ljava/lang/Object; +Ljava/lang/AbstractStringBuilder;->value:[C +Ljava/lang/Boolean;->value:Z +Ljava/lang/Byte;->value:B +Ljava/lang/Character;->value:C Ljava/lang/Class;->dexCache:Ljava/lang/Object; Ljava/lang/Class;->dexClassDefIndex:I Ljava/lang/ClassLoader;->parent:Ljava/lang/ClassLoader; +Ljava/lang/Daemons$Daemon;->isRunning()Z +Ljava/lang/Daemons$Daemon;->start()V Ljava/lang/Daemons$Daemon;->stop()V Ljava/lang/Daemons$Daemon;->thread:Ljava/lang/Thread; Ljava/lang/Daemons$FinalizerDaemon;->finalizingObject:Ljava/lang/Object; Ljava/lang/Daemons$FinalizerDaemon;->INSTANCE:Ljava/lang/Daemons$FinalizerDaemon; Ljava/lang/Daemons$FinalizerWatchdogDaemon;->INSTANCE:Ljava/lang/Daemons$FinalizerWatchdogDaemon; +Ljava/lang/Daemons;->MAX_FINALIZE_NANOS:J +Ljava/lang/Daemons$ReferenceQueueDaemon;->INSTANCE:Ljava/lang/Daemons$ReferenceQueueDaemon; Ljava/lang/Daemons;->requestHeapTrim()V Ljava/lang/Daemons;->start()V Ljava/lang/Daemons;->stop()V +Ljava/lang/Double;->value:D +Ljava/lang/Float;->value:F +Ljava/lang/Integer;->value:I +Ljava/lang/Long;->value:J Ljava/lang/ref/FinalizerReference;->add(Ljava/lang/Object;)V +Ljava/lang/ref/FinalizerReference;->head:Ljava/lang/ref/FinalizerReference; +Ljava/lang/ref/FinalizerReference;->next:Ljava/lang/ref/FinalizerReference; +Ljava/lang/ref/FinalizerReference;->queue:Ljava/lang/ref/ReferenceQueue; +Ljava/lang/ref/FinalizerReference;->remove(Ljava/lang/ref/FinalizerReference;)V Ljava/lang/reflect/Executable;->artMethod:J Ljava/lang/reflect/Parameter;-><init>(Ljava/lang/String;ILjava/lang/reflect/Executable;I)V +Ljava/lang/reflect/Proxy;->invoke(Ljava/lang/reflect/Proxy;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object; Ljava/lang/ref/ReferenceQueue;->add(Ljava/lang/ref/Reference;)V +Ljava/lang/ref/Reference;->referent:Ljava/lang/Object; Ljava/lang/Runtime;->loadLibrary(Ljava/lang/String;Ljava/lang/ClassLoader;)V Ljava/lang/Runtime;->load(Ljava/lang/String;Ljava/lang/ClassLoader;)V Ljava/lang/Runtime;->nativeLoad(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/String; +Ljava/lang/Short;->value:S Ljava/lang/String;-><init>(II[C)V Ljava/lang/Thread;->daemon:Z Ljava/lang/Thread;->dispatchUncaughtException(Ljava/lang/Throwable;)V @@ -1529,21 +2387,42 @@ Ljava/lang/Throwable;->cause:Ljava/lang/Throwable; Ljava/lang/Throwable;->detailMessage:Ljava/lang/String; Ljava/lang/Throwable;->stackTrace:[Ljava/lang/StackTraceElement; Ljava/lang/Throwable;->suppressedExceptions:Ljava/util/List; +Ljava/lang/Void;-><init>()V Ljava/net/Authenticator;->theAuthenticator:Ljava/net/Authenticator; Ljava/net/DatagramSocket;->impl:Ljava/net/DatagramSocketImpl; +Ljava/net/HttpCookie;->httpOnly:Z +Ljava/net/Inet4Address;-><init>()V +Ljava/net/Inet6Address;->holder6:Ljava/net/Inet6Address$Inet6AddressHolder; +Ljava/net/Inet6Address$Inet6AddressHolder;->ipaddress:[B +Ljava/net/Inet6Address$Inet6AddressHolder;->scope_id:I +Ljava/net/Inet6Address$Inet6AddressHolder;->scope_id_set:Z +Ljava/net/Inet6Address$Inet6AddressHolder;->scope_ifname:Ljava/net/NetworkInterface; +Ljava/net/Inet6Address;-><init>()V Ljava/net/InetAddress;->clearDnsCache()V +Ljava/net/InetAddress;->holder:Ljava/net/InetAddress$InetAddressHolder; +Ljava/net/InetAddress$InetAddressHolder;->address:I +Ljava/net/InetAddress$InetAddressHolder;->family:I +Ljava/net/InetAddress$InetAddressHolder;->hostName:Ljava/lang/String; +Ljava/net/InetAddress$InetAddressHolder;->originalHostName:Ljava/lang/String; Ljava/net/InetAddress;->isNumeric(Ljava/lang/String;)Z Ljava/net/InetAddress;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress; +Ljava/net/Socket;->getFileDescriptor$()Ljava/io/FileDescriptor; Ljava/net/Socket;->impl:Ljava/net/SocketImpl; Ljava/net/URI;->host:Ljava/lang/String; +Ljava/net/URL;->handlers:Ljava/util/Hashtable; Ljava/nio/Buffer;->address:J Ljava/nio/Buffer;->capacity:I +Ljava/nio/Buffer;->_elementSizeShift:I Ljava/nio/Buffer;->limit:I +Ljava/nio/Buffer;->position:I Ljava/nio/ByteBuffer;->hb:[B Ljava/nio/ByteBuffer;->isReadOnly:Z Ljava/nio/ByteBuffer;->offset:I Ljava/nio/charset/CharsetEncoder;->canEncode(Ljava/nio/CharBuffer;)Z Ljava/nio/DirectByteBuffer;-><init>(JI)V +Ljava/nio/NIOAccess;->getBaseArray(Ljava/nio/Buffer;)Ljava/lang/Object; +Ljava/nio/NIOAccess;->getBaseArrayOffset(Ljava/nio/Buffer;)I +Ljava/nio/NIOAccess;->getBasePointer(Ljava/nio/Buffer;)J Ljava/security/spec/ECParameterSpec;->getCurveName()Ljava/lang/String; Ljava/security/spec/ECParameterSpec;->setCurveName(Ljava/lang/String;)V Ljava/util/ArrayList;->elementData:[Ljava/lang/Object; @@ -1553,11 +2432,37 @@ Ljava/util/ArrayList$SubList;->parentOffset:I Ljava/util/ArrayList$SubList;->size:I Ljava/util/Arrays$ArrayList;->a:[Ljava/lang/Object; Ljava/util/Calendar;->zone:Ljava/util/TimeZone; +Ljava/util/Collections$EmptyList;-><init>()V +Ljava/util/Collections$SynchronizedCollection;->c:Ljava/util/Collection; +Ljava/util/Collections$SynchronizedMap;->m:Ljava/util/Map; +Ljava/util/Collections$UnmodifiableCollection;->c:Ljava/util/Collection; +Ljava/util/Collections$UnmodifiableMap;->m:Ljava/util/Map; Ljava/util/concurrent/FutureTask;->callable:Ljava/util/concurrent/Callable; +Ljava/util/concurrent/LinkedBlockingQueue;->capacity:I +Ljava/util/HashMap$HashIterator;->hasNext()Z +Ljava/util/LinkedHashMap;->eldest()Ljava/util/Map$Entry; Ljava/util/Locale;->createConstant(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; +Ljava/util/regex/Matcher;->appendPos:I +Ljava/util/zip/Deflater;->buf:[B +Ljava/util/zip/Deflater;->finished:Z +Ljava/util/zip/Deflater;->finish:Z +Ljava/util/zip/Deflater;->len:I +Ljava/util/zip/Deflater;->level:I +Ljava/util/zip/Deflater;->off:I +Ljava/util/zip/Deflater;->setParams:Z +Ljava/util/zip/Deflater;->strategy:I +Ljava/util/zip/Inflater;->buf:[B +Ljava/util/zip/Inflater;->finished:Z +Ljava/util/zip/Inflater;->len:I +Ljava/util/zip/Inflater;->needDict:Z +Ljava/util/zip/Inflater;->off:I +Ljava/util/zip/ZipEntry;-><init>(Ljava/lang/String;Ljava/lang/String;JJJII[BJ)V +Ljava/util/zip/ZipFile;->jzfile:J Ljavax/net/ssl/SSLServerSocketFactory;->defaultServerSocketFactory:Ljavax/net/ssl/SSLServerSocketFactory; Ljavax/net/ssl/SSLSocketFactory;->defaultSocketFactory:Ljavax/net/ssl/SSLSocketFactory; Llibcore/util/ZoneInfo;->mTransitions:[J Lorg/apache/http/conn/ssl/SSLSocketFactory;-><init>(Ljavax/net/ssl/SSLSocketFactory;)V +Lorg/apache/http/conn/ssl/SSLSocketFactory;-><init>()V Lorg/json/JSONArray;->values:Ljava/util/List; +Lorg/json/JSONObject;->writeTo(Lorg/json/JSONStringer;)V Lsun/misc/Unsafe;->theUnsafe:Lsun/misc/Unsafe; diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index 4626cb274c0e..b365d52313ca 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -219,6 +219,9 @@ public abstract class ActivityManagerInternal { /** * Start activity {@code intents} as if {@code packageName} on user {@code userId} did it. * + * - DO NOT call it with the calling UID cleared. + * - All the necessary caller permission checks must be done at callsites. + * * @return error codes used by {@link IActivityManager#startActivity} and its siblings. */ public abstract int startActivitiesAsPackage(String packageName, diff --git a/core/java/android/app/admin/DeviceAdminReceiver.java b/core/java/android/app/admin/DeviceAdminReceiver.java index 28e845a04e44..8c30fc403713 100644 --- a/core/java/android/app/admin/DeviceAdminReceiver.java +++ b/core/java/android/app/admin/DeviceAdminReceiver.java @@ -19,6 +19,8 @@ package android.app.admin; import android.accounts.AccountManager; import android.annotation.BroadcastBehavior; import android.annotation.IntDef; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; @@ -34,9 +36,6 @@ import android.os.Process; import android.os.UserHandle; import android.security.KeyChain; -import libcore.util.NonNull; -import libcore.util.Nullable; - import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -928,29 +927,29 @@ public class DeviceAdminReceiver extends BroadcastReceiver { int networkLogsCount) { } - /** - * Called when a user or profile is created. - * - * <p>This callback is only applicable to device owners. - * - * @param context The running context as per {@link #onReceive}. - * @param intent The received intent as per {@link #onReceive}. - * @param newUser The {@link UserHandle} of the user that has just been added. - */ - public void onUserAdded(Context context, Intent intent, UserHandle newUser) { - } - - /** - * Called when a user or profile is removed. - * - * <p>This callback is only applicable to device owners. - * - * @param context The running context as per {@link #onReceive}. - * @param intent The received intent as per {@link #onReceive}. - * @param removedUser The {@link UserHandle} of the user that has just been removed. - */ - public void onUserRemoved(Context context, Intent intent, UserHandle removedUser) { - } + /** + * Called when a user or profile is created. + * + * <p>This callback is only applicable to device owners. + * + * @param context The running context as per {@link #onReceive}. + * @param intent The received intent as per {@link #onReceive}. + * @param newUser The {@link UserHandle} of the user that has just been added. + */ + public void onUserAdded(Context context, Intent intent, @NonNull UserHandle newUser) { + } + + /** + * Called when a user or profile is removed. + * + * <p>This callback is only applicable to device owners. + * + * @param context The running context as per {@link #onReceive}. + * @param intent The received intent as per {@link #onReceive}. + * @param removedUser The {@link UserHandle} of the user that has just been removed. + */ + public void onUserRemoved(Context context, Intent intent, @NonNull UserHandle removedUser) { + } /** * Called when a user or profile is started. @@ -961,7 +960,7 @@ public class DeviceAdminReceiver extends BroadcastReceiver { * @param intent The received intent as per {@link #onReceive}. * @param startedUser The {@link UserHandle} of the user that has just been started. */ - public void onUserStarted(Context context, Intent intent, UserHandle startedUser) { + public void onUserStarted(Context context, Intent intent, @NonNull UserHandle startedUser) { } /** @@ -973,7 +972,7 @@ public class DeviceAdminReceiver extends BroadcastReceiver { * @param intent The received intent as per {@link #onReceive}. * @param stoppedUser The {@link UserHandle} of the user that has just been stopped. */ - public void onUserStopped(Context context, Intent intent, UserHandle stoppedUser) { + public void onUserStopped(Context context, Intent intent, @NonNull UserHandle stoppedUser) { } /** @@ -985,7 +984,7 @@ public class DeviceAdminReceiver extends BroadcastReceiver { * @param intent The received intent as per {@link #onReceive}. * @param switchedUser The {@link UserHandle} of the user that has just been switched to. */ - public void onUserSwitched(Context context, Intent intent, UserHandle switchedUser) { + public void onUserSwitched(Context context, Intent intent, @NonNull UserHandle switchedUser) { } /** diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 77e118ccb1bf..b29644bcf320 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -3444,9 +3444,6 @@ public class DevicePolicyManager { /** * Flag for {@link #wipeData(int)}: also erase the device's eUICC data. - * - * TODO(b/35851809): make this public. - * @hide */ public static final int WIPE_EUICC = 0x0004; diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java index a1ad825c3a29..ee13880c9016 100644 --- a/core/java/android/app/job/JobInfo.java +++ b/core/java/android/app/job/JobInfo.java @@ -365,9 +365,7 @@ public class JobInfo implements Parcelable { /** @hide */ public boolean isExemptedFromAppStandby() { - return ((flags & FLAG_EXEMPT_FROM_APP_STANDBY) != 0) - && !hasEarlyConstraint() - && !hasLateConstraint(); + return ((flags & FLAG_EXEMPT_FROM_APP_STANDBY) != 0) && !isPeriodic(); } /** diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 15f3777b99cc..a738312fe0dc 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -3671,10 +3671,8 @@ public abstract class Context { * * @see #getSystemService(String) * @see android.telephony.euicc.EuiccManager - * TODO(b/35851809): Unhide this API. - * @hide */ - public static final String EUICC_SERVICE = "euicc_service"; + public static final String EUICC_SERVICE = "euicc"; /** * Use with {@link #getSystemService(String)} to retrieve a @@ -3682,10 +3680,10 @@ public abstract class Context { * * @see #getSystemService(String) * @see android.telephony.euicc.EuiccCardManager - * TODO(b/35851809): Make this a SystemApi. * @hide */ - public static final String EUICC_CARD_SERVICE = "euicc_card_service"; + @SystemApi + public static final String EUICC_CARD_SERVICE = "euicc_card"; /** * Use with {@link #getSystemService(String)} to retrieve a diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 12d4079ce1f0..e7aead17d6ed 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -2498,6 +2498,9 @@ public class Intent implements Parcelable, Cloneable { * off, not sleeping). Once the broadcast is complete, the final shutdown * will proceed and all unsaved data lost. Apps will not normally need * to handle this, since the foreground activity will be paused as well. + * <p>As of {@link Build.VERSION_CODES#P} this broadcast is only sent to receivers registered + * through {@link Context#registerReceiver(BroadcastReceiver, IntentFilter) + * Context.registerReceiver}. * * <p class="note">This is a protected intent that can only be sent * by the system. diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 486c86cedba3..08fccab6a5b2 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -2108,8 +2108,6 @@ public abstract class PackageManager { /** * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device * supports embedded subscriptions on eUICCs. - * TODO(b/35851809): Make this public. - * @hide */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TELEPHONY_EUICC = "android.hardware.telephony.euicc"; diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index 96d043c2a894..3f8eaa902cb2 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -1372,9 +1372,6 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri * <p>The origin for {@link CameraCharacteristics#LENS_POSE_TRANSLATION android.lens.poseTranslation}.</p> * <p>Different calibration methods and use cases can produce better or worse results * depending on the selected coordinate origin.</p> - * <p>For devices designed to support the MOTION_TRACKING capability, the GYROSCOPE origin - * makes device calibration and later usage by applications combining camera and gyroscope - * information together simpler.</p> * <p><b>Possible values:</b> * <ul> * <li>{@link #LENS_POSE_REFERENCE_PRIMARY_CAMERA PRIMARY_CAMERA}</li> diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java index df644012ffb7..fd285aef864f 100644 --- a/core/java/android/hardware/camera2/CameraDevice.java +++ b/core/java/android/hardware/camera2/CameraDevice.java @@ -145,37 +145,6 @@ public abstract class CameraDevice implements AutoCloseable { */ public static final int TEMPLATE_MANUAL = 6; - /** - * A template for selecting camera parameters that match TEMPLATE_PREVIEW as closely as - * possible while improving the camera output for motion tracking use cases. - * - * <p>This template is best used by applications that are frequently switching between motion - * tracking use cases and regular still capture use cases, to minimize the IQ changes - * when swapping use cases.</p> - * - * <p>This template is guaranteed to be supported on camera devices that support the - * {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING MOTION_TRACKING} - * capability.</p> - * - * @see #createCaptureRequest - */ - public static final int TEMPLATE_MOTION_TRACKING_PREVIEW = 7; - - /** - * A template for selecting camera parameters that maximize the quality of camera output for - * motion tracking use cases. - * - * <p>This template is best used by applications dedicated to motion tracking applications, - * which aren't concerned about fast switches between motion tracking and other use cases.</p> - * - * <p>This template is guaranteed to be supported on camera devices that support the - * {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING MOTION_TRACKING} - * capability.</p> - * - * @see #createCaptureRequest - */ - public static final int TEMPLATE_MOTION_TRACKING_BEST = 8; - /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"TEMPLATE_"}, value = @@ -184,9 +153,7 @@ public abstract class CameraDevice implements AutoCloseable { TEMPLATE_RECORD, TEMPLATE_VIDEO_SNAPSHOT, TEMPLATE_ZERO_SHUTTER_LAG, - TEMPLATE_MANUAL, - TEMPLATE_MOTION_TRACKING_PREVIEW, - TEMPLATE_MOTION_TRACKING_BEST}) + TEMPLATE_MANUAL}) public @interface RequestTemplate {}; /** @@ -420,27 +387,6 @@ public abstract class CameraDevice implements AutoCloseable { * </table><br> * </p> * - * <p>MOTION_TRACKING-capability ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} - * includes - * {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING MOTION_TRACKING}) - * devices support at least the below stream combinations in addition to those for - * {@link CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} devices. The - * {@code FULL FOV 640} entry means that the device will support a resolution that's 640 pixels - * wide, with the height set so that the resolution aspect ratio matches the MAXIMUM output - * aspect ratio, rounded down. So for a device with a 4:3 image sensor, this will be 640x480, - * and for a device with a 16:9 sensor, this will be 640x360, and so on. And the - * {@code MAX 30FPS} entry means the largest JPEG resolution on the device for which - * {@link android.hardware.camera2.params.StreamConfigurationMap#getOutputMinFrameDuration} - * returns a value less than or equal to 1/30s. - * - * <table> - * <tr><th colspan="7">MOTION_TRACKING-capability additional guaranteed configurations</th></tr> - * <tr><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th colspan="2" id="rb">Target 3</th><th rowspan="2">Sample use case(s)</th> </tr> - * <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th></tr> - * <tr> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code FULL FOV 640}</td> <td>{@code JPEG}</td><td id="rb">{@code MAX 30FPS}</td> <td>Preview with a tracking YUV output and a as-large-as-possible JPEG for still captures.</td> </tr> - * </table><br> - * </p> - * * <p>BURST-capability ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} includes * {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE BURST_CAPTURE}) devices * support at least the below stream combinations in addition to those for diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index e7c8961186ec..732f6a519781 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -342,7 +342,7 @@ public abstract class CameraMetadata<TKey> { /** * <p>The value of {@link CameraCharacteristics#LENS_POSE_TRANSLATION android.lens.poseTranslation} is relative to the optical center of * the largest camera device facing the same direction as this camera.</p> - * <p>This default value for API levels before Android P.</p> + * <p>This is the default value for API levels before Android P.</p> * * @see CameraCharacteristics#LENS_POSE_TRANSLATION * @see CameraCharacteristics#LENS_POSE_REFERENCE @@ -352,7 +352,6 @@ public abstract class CameraMetadata<TKey> { /** * <p>The value of {@link CameraCharacteristics#LENS_POSE_TRANSLATION android.lens.poseTranslation} is relative to the position of the * primary gyroscope of this Android device.</p> - * <p>This is the value reported by all devices that support the MOTION_TRACKING capability.</p> * * @see CameraCharacteristics#LENS_POSE_TRANSLATION * @see CameraCharacteristics#LENS_POSE_REFERENCE @@ -801,46 +800,12 @@ public abstract class CameraMetadata<TKey> { public static final int REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO = 9; /** - * <p>The device supports controls and metadata required for accurate motion tracking for - * use cases such as augmented reality, electronic image stabilization, and so on.</p> - * <p>This means this camera device has accurate optical calibration and timestamps relative - * to the inertial sensors.</p> - * <p>This capability requires the camera device to support the following:</p> - * <ul> - * <li>Capture request templates {@link android.hardware.camera2.CameraDevice#TEMPLATE_MOTION_TRACKING_PREVIEW } and {@link android.hardware.camera2.CameraDevice#TEMPLATE_MOTION_TRACKING_BEST } are defined.</li> - * <li>The stream configurations listed in {@link android.hardware.camera2.CameraDevice#createCaptureSession } for MOTION_TRACKING are - * supported, either at 30 or 60fps maximum frame rate.</li> - * <li>The following camera characteristics and capture result metadata are provided:<ul> - * <li>{@link CameraCharacteristics#LENS_INTRINSIC_CALIBRATION android.lens.intrinsicCalibration}</li> - * <li>{@link CameraCharacteristics#LENS_RADIAL_DISTORTION android.lens.radialDistortion}</li> - * <li>{@link CameraCharacteristics#LENS_POSE_ROTATION android.lens.poseRotation}</li> - * <li>{@link CameraCharacteristics#LENS_POSE_TRANSLATION android.lens.poseTranslation}</li> - * <li>{@link CameraCharacteristics#LENS_POSE_REFERENCE android.lens.poseReference} with value GYROSCOPE</li> - * </ul> - * </li> - * <li>The {@link CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE android.sensor.info.timestampSource} field has value <code>REALTIME</code>. When compared to - * timestamps from the device's gyroscopes, the clock difference for events occuring at - * the same actual time instant will be less than 1 ms.</li> - * <li>The value of the {@link CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW android.sensor.rollingShutterSkew} field is accurate to within 1 ms.</li> - * <li>The value of {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime} is guaranteed to be available in the - * capture result.</li> - * <li>The {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} control supports MOTION_TRACKING to limit maximum - * exposure to 20 milliseconds.</li> - * <li>The stream configurations required for MOTION_TRACKING (listed at {@link android.hardware.camera2.CameraDevice#createCaptureSession }) can operate at least at - * 30fps; optionally, they can operate at 60fps, and '[60, 60]' is listed in - * {@link CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES android.control.aeAvailableTargetFpsRanges}.</li> - * </ul> + * <p>The camera device supports the MOTION_TRACKING value for + * {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent}, which limits maximum exposure time to 20 ms.</p> + * <p>This limits the motion blur of capture images, resulting in better image tracking + * results for use cases such as image stabilization or augmented reality.</p> * - * @see CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES * @see CaptureRequest#CONTROL_CAPTURE_INTENT - * @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION - * @see CameraCharacteristics#LENS_POSE_REFERENCE - * @see CameraCharacteristics#LENS_POSE_ROTATION - * @see CameraCharacteristics#LENS_POSE_TRANSLATION - * @see CameraCharacteristics#LENS_RADIAL_DISTORTION - * @see CaptureRequest#SENSOR_EXPOSURE_TIME - * @see CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE - * @see CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES */ public static final int REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING = 10; diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java index 481b7649610a..3ed533a4efcb 100644 --- a/core/java/android/hardware/camera2/CaptureRequest.java +++ b/core/java/android/hardware/camera2/CaptureRequest.java @@ -2757,11 +2757,11 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>> new Key<Integer>("android.statistics.lensShadingMapMode", int.class); /** - * <p>Whether the camera device outputs the OIS data in output + * <p>A control for selecting whether OIS position information is included in output * result metadata.</p> * <p>When set to ON, * {@link CaptureResult#STATISTICS_OIS_TIMESTAMPS android.statistics.oisTimestamps}, android.statistics.oisShiftPixelX, - * android.statistics.oisShiftPixelY will provide OIS data in the output result metadata.</p> + * and android.statistics.oisShiftPixelY provide OIS data in the output result metadata.</p> * <p><b>Possible values:</b> * <ul> * <li>{@link #STATISTICS_OIS_DATA_MODE_OFF OFF}</li> diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java index d730fa8a31cf..c332d3028aed 100644 --- a/core/java/android/hardware/camera2/CaptureResult.java +++ b/core/java/android/hardware/camera2/CaptureResult.java @@ -3909,11 +3909,11 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> { new Key<Integer>("android.statistics.lensShadingMapMode", int.class); /** - * <p>Whether the camera device outputs the OIS data in output + * <p>A control for selecting whether OIS position information is included in output * result metadata.</p> * <p>When set to ON, * {@link CaptureResult#STATISTICS_OIS_TIMESTAMPS android.statistics.oisTimestamps}, android.statistics.oisShiftPixelX, - * android.statistics.oisShiftPixelY will provide OIS data in the output result metadata.</p> + * and android.statistics.oisShiftPixelY provide OIS data in the output result metadata.</p> * <p><b>Possible values:</b> * <ul> * <li>{@link #STATISTICS_OIS_DATA_MODE_OFF OFF}</li> diff --git a/core/java/android/preference/OWNERS b/core/java/android/preference/OWNERS new file mode 100644 index 000000000000..d20511fcfdf2 --- /dev/null +++ b/core/java/android/preference/OWNERS @@ -0,0 +1,2 @@ +pavlis@google.com +clarabayarri@google.com diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index a183895d1f19..021c22c763af 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -8563,9 +8563,8 @@ public final class Settings { * * @see android.service.euicc.EuiccService * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ + @SystemApi public static final String DEFAULT_SM_DP_PLUS = "default_sm_dp_plus"; /** diff --git a/core/java/android/service/euicc/EuiccProfileInfo.java b/core/java/android/service/euicc/EuiccProfileInfo.java index 8e752d1c6c1d..cb4f10455ec9 100644 --- a/core/java/android/service/euicc/EuiccProfileInfo.java +++ b/core/java/android/service/euicc/EuiccProfileInfo.java @@ -17,6 +17,7 @@ package android.service.euicc; import android.annotation.IntDef; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.service.carrier.CarrierIdentifier; @@ -26,15 +27,15 @@ import android.text.TextUtils; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Arrays; +import java.util.List; import java.util.Objects; /** * Information about an embedded profile (subscription) on an eUICC. * * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ +@SystemApi public final class EuiccProfileInfo implements Parcelable { /** Profile policy rules (bit mask) */ @@ -44,6 +45,7 @@ public final class EuiccProfileInfo implements Parcelable { POLICY_RULE_DO_NOT_DELETE, POLICY_RULE_DELETE_AFTER_DISABLING }) + /** @hide */ public @interface PolicyRule {} /** Once this profile is enabled, it cannot be disabled. */ public static final int POLICY_RULE_DO_NOT_DISABLE = 1; @@ -60,6 +62,7 @@ public final class EuiccProfileInfo implements Parcelable { PROFILE_CLASS_OPERATIONAL, PROFILE_CLASS_UNSET }) + /** @hide */ public @interface ProfileClass {} /** Testing profiles */ public static final int PROFILE_CLASS_TESTING = 0; @@ -80,6 +83,7 @@ public final class EuiccProfileInfo implements Parcelable { PROFILE_STATE_ENABLED, PROFILE_STATE_UNSET }) + /** @hide */ public @interface ProfileState {} /** Disabled profiles */ public static final int PROFILE_STATE_DISABLED = 0; @@ -92,34 +96,34 @@ public final class EuiccProfileInfo implements Parcelable { public static final int PROFILE_STATE_UNSET = -1; /** The iccid of the subscription. */ - public final String iccid; + private final String mIccid; /** An optional nickname for the subscription. */ - public final @Nullable String nickname; + private final @Nullable String mNickname; /** The service provider name for the subscription. */ - public final String serviceProviderName; + private final String mServiceProviderName; /** The profile name for the subscription. */ - public final String profileName; + private final String mProfileName; /** Profile class for the subscription. */ - @ProfileClass public final int profileClass; + @ProfileClass private final int mProfileClass; /** The profile state of the subscription. */ - @ProfileState public final int state; + @ProfileState private final int mState; /** The operator Id of the subscription. */ - public final CarrierIdentifier carrierIdentifier; + private final CarrierIdentifier mCarrierIdentifier; /** The policy rules of the subscription. */ - @PolicyRule public final int policyRules; + @PolicyRule private final int mPolicyRules; /** * Optional access rules defining which apps can manage this subscription. If unset, only the * platform can manage it. */ - public final @Nullable UiccAccessRule[] accessRules; + private final @Nullable UiccAccessRule[] mAccessRules; public static final Creator<EuiccProfileInfo> CREATOR = new Creator<EuiccProfileInfo>() { @Override @@ -144,51 +148,51 @@ public final class EuiccProfileInfo implements Parcelable { if (!TextUtils.isDigitsOnly(iccid)) { throw new IllegalArgumentException("iccid contains invalid characters: " + iccid); } - this.iccid = iccid; - this.accessRules = accessRules; - this.nickname = nickname; - - this.serviceProviderName = null; - this.profileName = null; - this.profileClass = PROFILE_CLASS_UNSET; - this.state = PROFILE_CLASS_UNSET; - this.carrierIdentifier = null; - this.policyRules = 0; + this.mIccid = iccid; + this.mAccessRules = accessRules; + this.mNickname = nickname; + + this.mServiceProviderName = null; + this.mProfileName = null; + this.mProfileClass = PROFILE_CLASS_UNSET; + this.mState = PROFILE_STATE_UNSET; + this.mCarrierIdentifier = null; + this.mPolicyRules = 0; } private EuiccProfileInfo(Parcel in) { - iccid = in.readString(); - nickname = in.readString(); - serviceProviderName = in.readString(); - profileName = in.readString(); - profileClass = in.readInt(); - state = in.readInt(); + mIccid = in.readString(); + mNickname = in.readString(); + mServiceProviderName = in.readString(); + mProfileName = in.readString(); + mProfileClass = in.readInt(); + mState = in.readInt(); byte exist = in.readByte(); if (exist == (byte) 1) { - carrierIdentifier = CarrierIdentifier.CREATOR.createFromParcel(in); + mCarrierIdentifier = CarrierIdentifier.CREATOR.createFromParcel(in); } else { - carrierIdentifier = null; + mCarrierIdentifier = null; } - policyRules = in.readInt(); - accessRules = in.createTypedArray(UiccAccessRule.CREATOR); + mPolicyRules = in.readInt(); + mAccessRules = in.createTypedArray(UiccAccessRule.CREATOR); } @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeString(iccid); - dest.writeString(nickname); - dest.writeString(serviceProviderName); - dest.writeString(profileName); - dest.writeInt(profileClass); - dest.writeInt(state); - if (carrierIdentifier != null) { + dest.writeString(mIccid); + dest.writeString(mNickname); + dest.writeString(mServiceProviderName); + dest.writeString(mProfileName); + dest.writeInt(mProfileClass); + dest.writeInt(mState); + if (mCarrierIdentifier != null) { dest.writeByte((byte) 1); - carrierIdentifier.writeToParcel(dest, flags); + mCarrierIdentifier.writeToParcel(dest, flags); } else { dest.writeByte((byte) 0); } - dest.writeInt(policyRules); - dest.writeTypedArray(accessRules, flags); + dest.writeInt(mPolicyRules); + dest.writeTypedArray(mAccessRules, flags); } @Override @@ -198,45 +202,50 @@ public final class EuiccProfileInfo implements Parcelable { /** The builder to build a new {@link EuiccProfileInfo} instance. */ public static final class Builder { - public String iccid; - public UiccAccessRule[] accessRules; - public String nickname; - public String serviceProviderName; - public String profileName; - @ProfileClass public int profileClass; - @ProfileState public int state; - public CarrierIdentifier carrierIdentifier; - @PolicyRule public int policyRules; - - public Builder() {} + private String mIccid; + private List<UiccAccessRule> mAccessRules; + private String mNickname; + private String mServiceProviderName; + private String mProfileName; + @ProfileClass private int mProfileClass; + @ProfileState private int mState; + private CarrierIdentifier mCarrierIdentifier; + @PolicyRule private int mPolicyRules; + + public Builder(String value) { + if (!TextUtils.isDigitsOnly(value)) { + throw new IllegalArgumentException("iccid contains invalid characters: " + value); + } + mIccid = value; + } public Builder(EuiccProfileInfo baseProfile) { - iccid = baseProfile.iccid; - nickname = baseProfile.nickname; - serviceProviderName = baseProfile.serviceProviderName; - profileName = baseProfile.profileName; - profileClass = baseProfile.profileClass; - state = baseProfile.state; - carrierIdentifier = baseProfile.carrierIdentifier; - policyRules = baseProfile.policyRules; - accessRules = baseProfile.accessRules; + mIccid = baseProfile.mIccid; + mNickname = baseProfile.mNickname; + mServiceProviderName = baseProfile.mServiceProviderName; + mProfileName = baseProfile.mProfileName; + mProfileClass = baseProfile.mProfileClass; + mState = baseProfile.mState; + mCarrierIdentifier = baseProfile.mCarrierIdentifier; + mPolicyRules = baseProfile.mPolicyRules; + mAccessRules = Arrays.asList(baseProfile.mAccessRules); } /** Builds the profile instance. */ public EuiccProfileInfo build() { - if (iccid == null) { + if (mIccid == null) { throw new IllegalStateException("ICCID must be set for a profile."); } return new EuiccProfileInfo( - iccid, - nickname, - serviceProviderName, - profileName, - profileClass, - state, - carrierIdentifier, - policyRules, - accessRules); + mIccid, + mNickname, + mServiceProviderName, + mProfileName, + mProfileClass, + mState, + mCarrierIdentifier, + mPolicyRules, + mAccessRules); } /** Sets the iccId of the subscription. */ @@ -244,55 +253,55 @@ public final class EuiccProfileInfo implements Parcelable { if (!TextUtils.isDigitsOnly(value)) { throw new IllegalArgumentException("iccid contains invalid characters: " + value); } - iccid = value; + mIccid = value; return this; } /** Sets the nickname of the subscription. */ public Builder setNickname(String value) { - nickname = value; + mNickname = value; return this; } /** Sets the service provider name of the subscription. */ public Builder setServiceProviderName(String value) { - serviceProviderName = value; + mServiceProviderName = value; return this; } /** Sets the profile name of the subscription. */ public Builder setProfileName(String value) { - profileName = value; + mProfileName = value; return this; } /** Sets the profile class of the subscription. */ public Builder setProfileClass(@ProfileClass int value) { - profileClass = value; + mProfileClass = value; return this; } /** Sets the state of the subscription. */ public Builder setState(@ProfileState int value) { - state = value; + mState = value; return this; } /** Sets the carrier identifier of the subscription. */ public Builder setCarrierIdentifier(CarrierIdentifier value) { - carrierIdentifier = value; + mCarrierIdentifier = value; return this; } /** Sets the policy rules of the subscription. */ public Builder setPolicyRules(@PolicyRule int value) { - policyRules = value; + mPolicyRules = value; return this; } /** Sets the access rules of the subscription. */ - public Builder setUiccAccessRule(@Nullable UiccAccessRule[] value) { - accessRules = value; + public Builder setUiccAccessRule(@Nullable List<UiccAccessRule> value) { + mAccessRules = value; return this; } } @@ -306,75 +315,81 @@ public final class EuiccProfileInfo implements Parcelable { @ProfileState int state, CarrierIdentifier carrierIdentifier, @PolicyRule int policyRules, - @Nullable UiccAccessRule[] accessRules) { - this.iccid = iccid; - this.nickname = nickname; - this.serviceProviderName = serviceProviderName; - this.profileName = profileName; - this.profileClass = profileClass; - this.state = state; - this.carrierIdentifier = carrierIdentifier; - this.policyRules = policyRules; - this.accessRules = accessRules; + @Nullable List<UiccAccessRule> accessRules) { + this.mIccid = iccid; + this.mNickname = nickname; + this.mServiceProviderName = serviceProviderName; + this.mProfileName = profileName; + this.mProfileClass = profileClass; + this.mState = state; + this.mCarrierIdentifier = carrierIdentifier; + this.mPolicyRules = policyRules; + if (accessRules != null && accessRules.size() > 0) { + this.mAccessRules = accessRules.toArray(new UiccAccessRule[accessRules.size()]); + } else { + this.mAccessRules = null; + } } /** Gets the ICCID string. */ public String getIccid() { - return iccid; + return mIccid; } /** Gets the access rules. */ @Nullable - public UiccAccessRule[] getUiccAccessRules() { - return accessRules; + public List<UiccAccessRule> getUiccAccessRules() { + if (mAccessRules == null) return null; + return Arrays.asList(mAccessRules); } /** Gets the nickname. */ + @Nullable public String getNickname() { - return nickname; + return mNickname; } /** Gets the service provider name. */ public String getServiceProviderName() { - return serviceProviderName; + return mServiceProviderName; } /** Gets the profile name. */ public String getProfileName() { - return profileName; + return mProfileName; } /** Gets the profile class. */ @ProfileClass public int getProfileClass() { - return profileClass; + return mProfileClass; } /** Gets the state of the subscription. */ @ProfileState public int getState() { - return state; + return mState; } /** Gets the carrier identifier. */ public CarrierIdentifier getCarrierIdentifier() { - return carrierIdentifier; + return mCarrierIdentifier; } /** Gets the policy rules. */ @PolicyRule public int getPolicyRules() { - return policyRules; + return mPolicyRules; } /** Returns whether any policy rule exists. */ public boolean hasPolicyRules() { - return policyRules != 0; + return mPolicyRules != 0; } /** Checks whether a certain policy rule exists. */ public boolean hasPolicyRule(@PolicyRule int policy) { - return (policyRules & policy) != 0; + return (mPolicyRules & policy) != 0; } @Override @@ -387,50 +402,50 @@ public final class EuiccProfileInfo implements Parcelable { } EuiccProfileInfo that = (EuiccProfileInfo) obj; - return Objects.equals(iccid, that.iccid) - && Objects.equals(nickname, that.nickname) - && Objects.equals(serviceProviderName, that.serviceProviderName) - && Objects.equals(profileName, that.profileName) - && profileClass == that.profileClass - && state == that.state - && Objects.equals(carrierIdentifier, that.carrierIdentifier) - && policyRules == that.policyRules - && Arrays.equals(accessRules, that.accessRules); + return Objects.equals(mIccid, that.mIccid) + && Objects.equals(mNickname, that.mNickname) + && Objects.equals(mServiceProviderName, that.mServiceProviderName) + && Objects.equals(mProfileName, that.mProfileName) + && mProfileClass == that.mProfileClass + && mState == that.mState + && Objects.equals(mCarrierIdentifier, that.mCarrierIdentifier) + && mPolicyRules == that.mPolicyRules + && Arrays.equals(mAccessRules, that.mAccessRules); } @Override public int hashCode() { int result = 1; - result = 31 * result + Objects.hashCode(iccid); - result = 31 * result + Objects.hashCode(nickname); - result = 31 * result + Objects.hashCode(serviceProviderName); - result = 31 * result + Objects.hashCode(profileName); - result = 31 * result + profileClass; - result = 31 * result + state; - result = 31 * result + Objects.hashCode(carrierIdentifier); - result = 31 * result + policyRules; - result = 31 * result + Arrays.hashCode(accessRules); + result = 31 * result + Objects.hashCode(mIccid); + result = 31 * result + Objects.hashCode(mNickname); + result = 31 * result + Objects.hashCode(mServiceProviderName); + result = 31 * result + Objects.hashCode(mProfileName); + result = 31 * result + mProfileClass; + result = 31 * result + mState; + result = 31 * result + Objects.hashCode(mCarrierIdentifier); + result = 31 * result + mPolicyRules; + result = 31 * result + Arrays.hashCode(mAccessRules); return result; } @Override public String toString() { return "EuiccProfileInfo (nickname=" - + nickname + + mNickname + ", serviceProviderName=" - + serviceProviderName + + mServiceProviderName + ", profileName=" - + profileName + + mProfileName + ", profileClass=" - + profileClass + + mProfileClass + ", state=" - + state + + mState + ", CarrierIdentifier=" - + carrierIdentifier.toString() + + mCarrierIdentifier.toString() + ", policyRules=" - + policyRules + + mPolicyRules + ", accessRules=" - + Arrays.toString(accessRules) + + Arrays.toString(mAccessRules) + ")"; } } diff --git a/core/java/android/service/euicc/EuiccService.java b/core/java/android/service/euicc/EuiccService.java index be8580074f73..b87faef5bb44 100644 --- a/core/java/android/service/euicc/EuiccService.java +++ b/core/java/android/service/euicc/EuiccService.java @@ -17,6 +17,7 @@ package android.service.euicc; import android.annotation.CallSuper; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.app.Service; import android.content.Intent; import android.os.IBinder; @@ -41,8 +42,11 @@ import java.util.concurrent.atomic.AtomicInteger; * <p>To implement the LPA backend, you must extend this class and declare this service in your * manifest file. The service must require the * {@link android.Manifest.permission#BIND_EUICC_SERVICE} permission and include an intent filter - * with the {@link #EUICC_SERVICE_INTERFACE} action. The priority of the intent filter must be set - * to a non-zero value in case multiple implementations are present on the device. For example: + * with the {@link #EUICC_SERVICE_INTERFACE} action. It's suggested that the priority of the intent + * filter to be set to a non-zero value in case multiple implementations are present on the device. + * See the below example. Note that there will be problem if two LPAs are present and they have the + * same priority. + * Example: * * <pre>{@code * <service android:name=".MyEuiccService" @@ -65,9 +69,9 @@ import java.util.concurrent.atomic.AtomicInteger; * filter with the appropriate action, the {@link #CATEGORY_EUICC_UI} category, and a non-zero * priority. * - * TODO(b/35851809): Make this a SystemApi. * @hide */ +@SystemApi public abstract class EuiccService extends Service { /** Action which must be included in this service's intent filter. */ public static final String EUICC_SERVICE_INTERFACE = "android.service.euicc.EuiccService"; @@ -77,7 +81,10 @@ public abstract class EuiccService extends Service { // LUI actions. These are passthroughs of the corresponding EuiccManager actions. - /** @see android.telephony.euicc.EuiccManager#ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS */ + /** + * @see android.telephony.euicc.EuiccManager#ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS + * The difference is this one is used by system to bring up the LUI. + */ public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS"; /** @see android.telephony.euicc.EuiccManager#ACTION_PROVISION_EMBEDDED_SUBSCRIPTION */ @@ -88,7 +95,10 @@ public abstract class EuiccService extends Service { // require user interaction. // TODO(b/33075886): Define extras for any input parameters to these dialogs once they are // more scoped out. - /** Alert the user that this action will result in an active SIM being deactivated. */ + /** + * Alert the user that this action will result in an active SIM being deactivated. + * To implement the LUI triggered by the system, you need to define this in AndroidManifest.xml. + */ public static final String ACTION_RESOLVE_DEACTIVATE_SIM = "android.service.euicc.action.RESOLVE_DEACTIVATE_SIM"; /** @@ -102,7 +112,11 @@ public abstract class EuiccService extends Service { public static final String ACTION_RESOLVE_CONFIRMATION_CODE = "android.service.euicc.action.RESOLVE_CONFIRMATION_CODE"; - /** Intent extra set for resolution requests containing the package name of the calling app. */ + /** + * Intent extra set for resolution requests containing the package name of the calling app. + * This is used by the above actions including ACTION_RESOLVE_DEACTIVATE_SIM, + * ACTION_RESOLVE_NO_PRIVILEGES and ACTION_RESOLVE_CONFIRMATION_CODE. + */ public static final String EXTRA_RESOLUTION_CALLING_PACKAGE = "android.service.euicc.extra.RESOLUTION_CALLING_PACKAGE"; @@ -136,10 +150,18 @@ public abstract class EuiccService extends Service { RESOLUTION_ACTIONS.add(EuiccService.ACTION_RESOLVE_CONFIRMATION_CODE); } - /** Boolean extra for resolution actions indicating whether the user granted consent. */ - public static final String RESOLUTION_EXTRA_CONSENT = "consent"; - /** String extra for resolution actions indicating the carrier confirmation code. */ - public static final String RESOLUTION_EXTRA_CONFIRMATION_CODE = "confirmation_code"; + /** + * Boolean extra for resolution actions indicating whether the user granted consent. + * This is used and set by the implementation and used in {@code EuiccOperation}. + */ + public static final String EXTRA_RESOLUTION_CONSENT = + "android.service.euicc.extra.RESOLUTION_CONSENT"; + /** + * String extra for resolution actions indicating the carrier confirmation code. + * This is used and set by the implementation and used in {@code EuiccOperation}. + */ + public static final String EXTRA_RESOLUTION_CONFIRMATION_CODE = + "android.service.euicc.extra.RESOLUTION_CONFIRMATION_CODE"; private final IEuiccService.Stub mStubWrapper; @@ -199,9 +221,9 @@ public abstract class EuiccService extends Service { * * @see IEuiccService#startOtaIfNecessary */ - public interface OtaStatusChangedCallback { + public abstract static class OtaStatusChangedCallback { /** Called when OTA status is changed. */ - void onOtaStatusChanged(int status); + public abstract void onOtaStatusChanged(int status); } /** @@ -238,8 +260,7 @@ public abstract class EuiccService extends Service { /** * Populate {@link DownloadableSubscription} metadata for the given downloadable subscription. * - * @param slotId ID of the SIM slot to use for the operation. This is currently not populated - * but is here to future-proof the APIs. + * @param slotId ID of the SIM slot to use for the operation. * @param subscription A subscription whose metadata needs to be populated. * @param forceDeactivateSim If true, and if an active SIM must be deactivated to access the * eUICC, perform this action automatically. Otherwise, {@link #RESULT_MUST_DEACTIVATE_SIM)} @@ -267,8 +288,7 @@ public abstract class EuiccService extends Service { /** * Download the given subscription. * - * @param slotId ID of the SIM slot to use for the operation. This is currently not populated - * but is here to future-proof the APIs. + * @param slotId ID of the SIM slot to use for the operation. * @param subscription The subscription to download. * @param switchAfterDownload If true, the subscription should be enabled upon successful * download. @@ -286,8 +306,7 @@ public abstract class EuiccService extends Service { /** * Return a list of all @link EuiccProfileInfo}s. * - * @param slotId ID of the SIM slot to use for the operation. This is currently not populated - * but is here to future-proof the APIs. + * @param slotId ID of the SIM slot to use for the operation. * @return The result of the operation. * @see android.telephony.SubscriptionManager#getAvailableSubscriptionInfoList * @see android.telephony.SubscriptionManager#getAccessibleSubscriptionInfoList @@ -297,8 +316,7 @@ public abstract class EuiccService extends Service { /** * Return info about the eUICC chip/device. * - * @param slotId ID of the SIM slot to use for the operation. This is currently not populated - * but is here to future-proof the APIs. + * @param slotId ID of the SIM slot to use for the operation. * @return the {@link EuiccInfo} for the eUICC chip/device. * @see android.telephony.euicc.EuiccManager#getEuiccInfo */ @@ -310,8 +328,7 @@ public abstract class EuiccService extends Service { * <p>If the subscription is currently active, it should be deactivated first (equivalent to a * physical SIM being ejected). * - * @param slotId ID of the SIM slot to use for the operation. This is currently not populated - * but is here to future-proof the APIs. + * @param slotId ID of the SIM slot to use for the operation. * @param iccid the ICCID of the subscription to delete. * @return the result of the delete operation. May be one of the predefined {@code RESULT_} * constants or any implementation-specific code starting with {@link #RESULT_FIRST_USER}. @@ -322,8 +339,7 @@ public abstract class EuiccService extends Service { /** * Switch to the given subscription. * - * @param slotId ID of the SIM slot to use for the operation. This is currently not populated - * but is here to future-proof the APIs. + * @param slotId ID of the SIM slot to use for the operation. * @param iccid the ICCID of the subscription to enable. May be null, in which case the current * profile should be deactivated and no profile should be activated to replace it - this is * equivalent to a physical SIM being ejected. @@ -340,8 +356,7 @@ public abstract class EuiccService extends Service { /** * Update the nickname of the given subscription. * - * @param slotId ID of the SIM slot to use for the operation. This is currently not populated - * but is here to future-proof the APIs. + * @param slotId ID of the SIM slot to use for the operation. * @param iccid the ICCID of the subscription to update. * @param nickname the new nickname to apply. * @return the result of the update operation. May be one of the predefined {@code RESULT_} diff --git a/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java b/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java index 5a24492007f3..e2171ae6bc76 100644 --- a/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java +++ b/core/java/android/service/euicc/GetDefaultDownloadableSubscriptionListResult.java @@ -16,16 +16,19 @@ package android.service.euicc; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.telephony.euicc.DownloadableSubscription; +import java.util.Arrays; +import java.util.List; + /** * Result of a {@link EuiccService#onGetDefaultDownloadableSubscriptionList} operation. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ +@SystemApi public final class GetDefaultDownloadableSubscriptionListResult implements Parcelable { public static final Creator<GetDefaultDownloadableSubscriptionListResult> CREATOR = @@ -42,20 +45,35 @@ public final class GetDefaultDownloadableSubscriptionListResult implements Parce }; /** - * Result of the operation. + * @hide + * @deprecated - Do no use. Use getResult() instead. + */ + @Deprecated + public final int result; + + @Nullable + private final DownloadableSubscription[] mSubscriptions; + + /** + * Gets the result of the operation. * * <p>May be one of the predefined {@code RESULT_} constants in EuiccService or any * implementation-specific code starting with {@link EuiccService#RESULT_FIRST_USER}. */ - public final int result; + public int getResult() { + return result; + } /** - * The available {@link DownloadableSubscription}s (with filled-in metadata). + * Gets the available {@link DownloadableSubscription}s (with filled-in metadata). * * <p>Only non-null if {@link #result} is {@link EuiccService#RESULT_OK}. */ @Nullable - public final DownloadableSubscription[] subscriptions; + public List<DownloadableSubscription> getDownloadableSubscriptions() { + if (mSubscriptions == null) return null; + return Arrays.asList(mSubscriptions); + } /** * Construct a new {@link GetDefaultDownloadableSubscriptionListResult}. @@ -70,25 +88,25 @@ public final class GetDefaultDownloadableSubscriptionListResult implements Parce @Nullable DownloadableSubscription[] subscriptions) { this.result = result; if (this.result == EuiccService.RESULT_OK) { - this.subscriptions = subscriptions; + this.mSubscriptions = subscriptions; } else { if (subscriptions != null) { throw new IllegalArgumentException( "Error result with non-null subscriptions: " + result); } - this.subscriptions = null; + this.mSubscriptions = null; } } private GetDefaultDownloadableSubscriptionListResult(Parcel in) { this.result = in.readInt(); - this.subscriptions = in.createTypedArray(DownloadableSubscription.CREATOR); + this.mSubscriptions = in.createTypedArray(DownloadableSubscription.CREATOR); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(result); - dest.writeTypedArray(subscriptions, flags); + dest.writeTypedArray(mSubscriptions, flags); } @Override diff --git a/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java b/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java index de8a30706945..1edb5398add4 100644 --- a/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java +++ b/core/java/android/service/euicc/GetDownloadableSubscriptionMetadataResult.java @@ -16,6 +16,7 @@ package android.service.euicc; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.telephony.euicc.DownloadableSubscription; @@ -23,9 +24,8 @@ import android.telephony.euicc.DownloadableSubscription; /** * Result of a {@link EuiccService#onGetDownloadableSubscriptionMetadata} operation. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ +@SystemApi public final class GetDownloadableSubscriptionMetadataResult implements Parcelable { public static final Creator<GetDownloadableSubscriptionMetadataResult> CREATOR = @@ -42,20 +42,34 @@ public final class GetDownloadableSubscriptionMetadataResult implements Parcelab }; /** - * Result of the operation. + * @hide + * @deprecated - Do no use. Use getResult() instead. + */ + @Deprecated + public final int result; + + @Nullable + private final DownloadableSubscription mSubscription; + + /** + * Gets the result of the operation. * * <p>May be one of the predefined {@code RESULT_} constants in EuiccService or any * implementation-specific code starting with {@link EuiccService#RESULT_FIRST_USER}. */ - public final int result; + public int getResult() { + return result; + } /** - * The {@link DownloadableSubscription} with filled-in metadata. + * Gets the {@link DownloadableSubscription} with filled-in metadata. * * <p>Only non-null if {@link #result} is {@link EuiccService#RESULT_OK}. */ @Nullable - public final DownloadableSubscription subscription; + public DownloadableSubscription getDownloadableSubscription() { + return mSubscription; + } /** * Construct a new {@link GetDownloadableSubscriptionMetadataResult}. @@ -70,25 +84,25 @@ public final class GetDownloadableSubscriptionMetadataResult implements Parcelab @Nullable DownloadableSubscription subscription) { this.result = result; if (this.result == EuiccService.RESULT_OK) { - this.subscription = subscription; + this.mSubscription = subscription; } else { if (subscription != null) { throw new IllegalArgumentException( "Error result with non-null subscription: " + result); } - this.subscription = null; + this.mSubscription = null; } } private GetDownloadableSubscriptionMetadataResult(Parcel in) { this.result = in.readInt(); - this.subscription = in.readTypedObject(DownloadableSubscription.CREATOR); + this.mSubscription = in.readTypedObject(DownloadableSubscription.CREATOR); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(result); - dest.writeTypedObject(this.subscription, flags); + dest.writeTypedObject(this.mSubscription, flags); } @Override diff --git a/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java b/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java index 7ad84888dc82..464d136e70e5 100644 --- a/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java +++ b/core/java/android/service/euicc/GetEuiccProfileInfoListResult.java @@ -16,15 +16,18 @@ package android.service.euicc; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; +import java.util.Arrays; +import java.util.List; + /** * Result of a {@link EuiccService#onGetEuiccProfileInfoList} operation. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ +@SystemApi public final class GetEuiccProfileInfoListResult implements Parcelable { public static final Creator<GetEuiccProfileInfoListResult> CREATOR = @@ -41,19 +44,38 @@ public final class GetEuiccProfileInfoListResult implements Parcelable { }; /** - * Result of the operation. + * @hide + * @deprecated - Do no use. Use getResult() instead. + */ + @Deprecated + public final int result; + + @Nullable + private final EuiccProfileInfo[] mProfiles; + + private final boolean mIsRemovable; + + /** + * Gets the result of the operation. * * <p>May be one of the predefined {@code RESULT_} constants in EuiccService or any * implementation-specific code starting with {@link EuiccService#RESULT_FIRST_USER}. */ - public final int result; + public int getResult() { + return result; + } - /** The profile list (only upon success). */ + /** Gets the profile list (only upon success). */ @Nullable - public final EuiccProfileInfo[] profiles; + public List<EuiccProfileInfo> getProfiles() { + if (mProfiles == null) return null; + return Arrays.asList(mProfiles); + } - /** Whether the eUICC is removable. */ - public final boolean isRemovable; + /** Gets whether the eUICC is removable. */ + public boolean getIsRemovable() { + return mIsRemovable; + } /** * Construct a new {@link GetEuiccProfileInfoListResult}. @@ -71,30 +93,29 @@ public final class GetEuiccProfileInfoListResult implements Parcelable { public GetEuiccProfileInfoListResult( int result, @Nullable EuiccProfileInfo[] profiles, boolean isRemovable) { this.result = result; - this.isRemovable = isRemovable; + this.mIsRemovable = isRemovable; if (this.result == EuiccService.RESULT_OK) { - this.profiles = profiles; + this.mProfiles = profiles; } else { if (profiles != null) { throw new IllegalArgumentException( "Error result with non-null profiles: " + result); } - this.profiles = null; + this.mProfiles = null; } - } private GetEuiccProfileInfoListResult(Parcel in) { this.result = in.readInt(); - this.profiles = in.createTypedArray(EuiccProfileInfo.CREATOR); - this.isRemovable = in.readBoolean(); + this.mProfiles = in.createTypedArray(EuiccProfileInfo.CREATOR); + this.mIsRemovable = in.readBoolean(); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(result); - dest.writeTypedArray(profiles, flags); - dest.writeBoolean(isRemovable); + dest.writeTypedArray(mProfiles, flags); + dest.writeBoolean(mIsRemovable); } @Override diff --git a/core/java/android/util/MemoryIntArray.java b/core/java/android/util/MemoryIntArray.java index 597089235e6b..bf335196edef 100644 --- a/core/java/android/util/MemoryIntArray.java +++ b/core/java/android/util/MemoryIntArray.java @@ -16,18 +16,12 @@ package android.util; -import static android.os.Process.FIRST_APPLICATION_UID; - import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.Parcelable; -import android.os.Process; - -import com.android.internal.annotations.GuardedBy; - -import dalvik.system.CloseGuard; import libcore.io.IoUtils; +import dalvik.system.CloseGuard; import java.io.Closeable; import java.io.IOException; @@ -55,18 +49,13 @@ import java.util.UUID; */ public final class MemoryIntArray implements Parcelable, Closeable { private static final String TAG = "MemoryIntArray"; - private static final boolean DEBUG = Process.myUid() < FIRST_APPLICATION_UID; private static final int MAX_SIZE = 1024; - private final Object mLock = new Object(); private final CloseGuard mCloseGuard = CloseGuard.get(); private final boolean mIsOwner; private final long mMemoryAddr; - - /** Fd for the shared memory object, -1 when closed */ - @GuardedBy("mLock") private int mFd = -1; /** @@ -85,7 +74,6 @@ public final class MemoryIntArray implements Parcelable, Closeable { mFd = nativeCreate(name, size); mMemoryAddr = nativeOpen(mFd, mIsOwner); mCloseGuard.open("close"); - if (DEBUG) Log.i(TAG, "created " + getString()); } private MemoryIntArray(Parcel parcel) throws IOException { @@ -97,8 +85,6 @@ public final class MemoryIntArray implements Parcelable, Closeable { mFd = pfd.detachFd(); mMemoryAddr = nativeOpen(mFd, mIsOwner); mCloseGuard.open("close"); - - if (DEBUG) Log.i(TAG, "created from parcel " + getString()); } /** @@ -155,33 +141,13 @@ public final class MemoryIntArray implements Parcelable, Closeable { */ @Override public void close() throws IOException { - synchronized (mLock) { - if (!isClosed()) { - if (DEBUG) { - try { - throw new Exception(); - } catch (Exception here) { - Log.i(TAG, "closing " + getString(), here); - } - } - nativeClose(mFd, mMemoryAddr, mIsOwner); - mFd = -1; - mCloseGuard.close(); - } else { - try { - throw new Exception(); - } catch (Exception here) { - if (DEBUG) Log.i(TAG, getString() + " already closed", here); - } - } + if (!isClosed()) { + nativeClose(mFd, mMemoryAddr, mIsOwner); + mFd = -1; + mCloseGuard.close(); } } - private String getString() { - return this.getClass().getSimpleName() + "@" + System.identityHashCode(this) - + " mMemoryAddr=" + mMemoryAddr + " mFd=" + mFd; - } - /** * @return Whether this array is closed and shouldn't be used. */ @@ -196,9 +162,7 @@ public final class MemoryIntArray implements Parcelable, Closeable { mCloseGuard.warnIfOpen(); } - if (!isClosed()) { - IoUtils.closeQuietly(this); - } + IoUtils.closeQuietly(this); } finally { super.finalize(); } @@ -242,8 +206,7 @@ public final class MemoryIntArray implements Parcelable, Closeable { private void enforceNotClosed() { if (isClosed()) { - throw new IllegalStateException("cannot interact with a closed instance " - + getString()); + throw new IllegalStateException("cannot interact with a closed instance"); } } diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 713b6cd88763..2af246758812 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -8371,6 +8371,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } + // If the app developer explicitly set hints for it, it's important. + if (getAutofillHints() != null) { + return true; + } + // Otherwise, assume it's not important... return false; } diff --git a/core/java/com/android/internal/os/RuntimeInit.java b/core/java/com/android/internal/os/RuntimeInit.java index 66475e445efa..895be082c679 100644 --- a/core/java/com/android/internal/os/RuntimeInit.java +++ b/core/java/com/android/internal/os/RuntimeInit.java @@ -71,10 +71,11 @@ public class RuntimeInit { public void uncaughtException(Thread t, Throwable e) { // Don't re-enter if KillApplicationHandler has already run if (mCrashing) return; - if (mApplicationObject == null) { - // The "FATAL EXCEPTION" string is still used on Android even though - // apps can set a custom UncaughtExceptionHandler that renders uncaught - // exceptions non-fatal. + + // mApplicationObject is null for non-zygote java programs (e.g. "am") + // There are also apps running with the system UID. We don't want the + // first clause in either of these two cases, only for system_server. + if (mApplicationObject == null && (Process.SYSTEM_UID == Process.myUid())) { Clog_e(TAG, "*** FATAL EXCEPTION IN SYSTEM PROCESS: " + t.getName(), e); } else { StringBuilder message = new StringBuilder(); diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 86129165741d..6f3c25fa8194 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1827,19 +1827,20 @@ <permission android:name="android.permission.BIND_TELEPHONY_NETWORK_SERVICE" android:protectionLevel="signature" /> - <!-- Allows an application to manage embedded subscriptions (those on a eUICC) through - EuiccManager APIs. + <!-- @SystemApi Allows an application to manage embedded subscriptions (those on a eUICC) + through EuiccManager APIs. <p>Protection level: signature|privileged|development - TODO(b/35851809): Mark this as a SystemApi and remove com. prefix. - @hide --> - <permission android:name="com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS" + @hide + --> + <permission android:name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS" android:protectionLevel="signature|privileged|development" /> - <!-- Must be required by an EuiccService to ensure that only the system can bind to it. + <!-- @SystemApi Must be required by an EuiccService to ensure that only the system can bind to + it. <p>Protection level: signature - TODO(b/35851809): Mark this as a SystemApi and remove com. prefix. - @hide --> - <permission android:name="com.android.permission.BIND_EUICC_SERVICE" + @hide + --> + <permission android:name="android.permission.BIND_EUICC_SERVICE" android:protectionLevel="signature" /> <!-- ================================== --> diff --git a/core/tests/coretests/src/android/service/euicc/EuiccProfileInfoTest.java b/core/tests/coretests/src/android/service/euicc/EuiccProfileInfoTest.java index 1e3ddf3226af..e69d1e7505d1 100644 --- a/core/tests/coretests/src/android/service/euicc/EuiccProfileInfoTest.java +++ b/core/tests/coretests/src/android/service/euicc/EuiccProfileInfoTest.java @@ -30,14 +30,15 @@ import android.telephony.UiccAccessRule; import org.junit.Test; import org.junit.runner.RunWith; +import java.util.Arrays; + @SmallTest @RunWith(AndroidJUnit4.class) public class EuiccProfileInfoTest { @Test public void testWriteToParcel() { EuiccProfileInfo p = - new EuiccProfileInfo.Builder() - .setIccid("21430000000000006587") + new EuiccProfileInfo.Builder("21430000000000006587") .setNickname("profile nickname") .setServiceProviderName("service provider") .setProfileName("profile name") @@ -50,9 +51,7 @@ public class EuiccProfileInfoTest { "45")) .setPolicyRules(EuiccProfileInfo.POLICY_RULE_DO_NOT_DELETE) .setUiccAccessRule( - new UiccAccessRule[] { - new UiccAccessRule(new byte[] {}, "package", 12345L) - }) + Arrays.asList(new UiccAccessRule(new byte[] {}, "package", 12345L))) .build(); Parcel parcel = Parcel.obtain(); @@ -68,8 +67,7 @@ public class EuiccProfileInfoTest { @Test public void testWriteToParcelNullCarrierId() { EuiccProfileInfo p = - new EuiccProfileInfo.Builder() - .setIccid("21430000000000006587") + new EuiccProfileInfo.Builder("21430000000000006587") .setNickname("profile nickname") .setServiceProviderName("service provider") .setProfileName("profile name") @@ -77,9 +75,8 @@ public class EuiccProfileInfoTest { .setState(EuiccProfileInfo.PROFILE_STATE_ENABLED) .setPolicyRules(EuiccProfileInfo.POLICY_RULE_DO_NOT_DELETE) .setUiccAccessRule( - new UiccAccessRule[] { - new UiccAccessRule(new byte[] {}, "package", 12345L) - }) + Arrays.asList(new UiccAccessRule(new byte[] {}, "package", 12345L)) + ) .build(); Parcel parcel = Parcel.obtain(); @@ -95,8 +92,7 @@ public class EuiccProfileInfoTest { @Test public void testBuilderAndGetters() { EuiccProfileInfo p = - new EuiccProfileInfo.Builder() - .setIccid("21430000000000006587") + new EuiccProfileInfo.Builder("21430000000000006587") .setNickname("profile nickname") .setProfileName("profile name") .setServiceProviderName("service provider") @@ -108,10 +104,7 @@ public class EuiccProfileInfoTest { .setState(EuiccProfileInfo.PROFILE_STATE_ENABLED) .setProfileClass(EuiccProfileInfo.PROFILE_CLASS_OPERATIONAL) .setPolicyRules(EuiccProfileInfo.POLICY_RULE_DO_NOT_DELETE) - .setUiccAccessRule( - new UiccAccessRule[] { - new UiccAccessRule(new byte[0], null, 0) - }) + .setUiccAccessRule(Arrays.asList(new UiccAccessRule(new byte[0], null, 0))) .build(); assertEquals("21430000000000006587", p.getIccid()); @@ -130,14 +123,13 @@ public class EuiccProfileInfoTest { assertFalse(p.hasPolicyRule(EuiccProfileInfo.POLICY_RULE_DO_NOT_DISABLE)); assertArrayEquals( new UiccAccessRule[] {new UiccAccessRule(new byte[0], null, 0)}, - p.getUiccAccessRules()); + p.getUiccAccessRules().toArray()); } @Test public void testBuilder_BasedOnAnotherProfile() { EuiccProfileInfo p = - new EuiccProfileInfo.Builder() - .setIccid("21430000000000006587") + new EuiccProfileInfo.Builder("21430000000000006587") .setNickname("profile nickname") .setProfileName("profile name") .setServiceProviderName("service provider") @@ -150,9 +142,7 @@ public class EuiccProfileInfoTest { .setProfileClass(EuiccProfileInfo.PROFILE_CLASS_OPERATIONAL) .setPolicyRules(EuiccProfileInfo.POLICY_RULE_DO_NOT_DELETE) .setUiccAccessRule( - new UiccAccessRule[] { - new UiccAccessRule(new byte[0], null, 0) - }) + Arrays.asList(new UiccAccessRule(new byte[] {}, "package", 12345L))) .build(); EuiccProfileInfo copied = new EuiccProfileInfo.Builder(p).build(); @@ -164,8 +154,7 @@ public class EuiccProfileInfoTest { @Test public void testEqualsHashCode() { EuiccProfileInfo p = - new EuiccProfileInfo.Builder() - .setIccid("21430000000000006587") + new EuiccProfileInfo.Builder("21430000000000006587") .setNickname("profile nickname") .setProfileName("profile name") .setServiceProviderName("service provider") @@ -177,10 +166,7 @@ public class EuiccProfileInfoTest { .setState(EuiccProfileInfo.PROFILE_STATE_ENABLED) .setProfileClass(EuiccProfileInfo.PROFILE_STATE_ENABLED) .setPolicyRules(EuiccProfileInfo.POLICY_RULE_DO_NOT_DELETE) - .setUiccAccessRule( - new UiccAccessRule[] { - new UiccAccessRule(new byte[0], null, 0) - }) + .setUiccAccessRule(Arrays.asList(new UiccAccessRule(new byte[0], null, 0))) .build(); assertTrue(p.equals(p)); @@ -229,13 +215,13 @@ public class EuiccProfileInfoTest { } @Test(expected = IllegalStateException.class) - public void testBuilderBuild_NoIccid() { - new EuiccProfileInfo.Builder().build(); + public void testBuilderBuild_IllegalIccid() { + new EuiccProfileInfo.Builder("abc").build(); } @Test(expected = IllegalArgumentException.class) public void testBuilderSetOperatorMccMnc_Illegal() { - new EuiccProfileInfo.Builder() + new EuiccProfileInfo.Builder("21430000000000006587") .setCarrierIdentifier(new CarrierIdentifier(new byte[] {1, 2, 3, 4}, null, null)); } diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml index 3495b84e0ab9..9d1fdbd157d7 100644 --- a/data/etc/privapp-permissions-platform.xml +++ b/data/etc/privapp-permissions-platform.xml @@ -176,7 +176,7 @@ applications that come with the platform <permission name="android.permission.UPDATE_LOCK"/> <permission name="android.permission.WRITE_APN_SETTINGS"/> <permission name="android.permission.WRITE_SECURE_SETTINGS"/> - <permission name="com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"/> + <permission name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"/> <permission name="com.android.voicemail.permission.READ_VOICEMAIL"/> <permission name="com.android.voicemail.permission.WRITE_VOICEMAIL"/> </privapp-permissions> @@ -381,7 +381,7 @@ applications that come with the platform <permission name="android.permission.WRITE_DREAM_STATE"/> <permission name="android.permission.WRITE_MEDIA_STORAGE"/> <permission name="android.permission.WRITE_SECURE_SETTINGS"/> - <permission name="com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"/> + <permission name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"/> </privapp-permissions> <privapp-permissions package="com.android.tv"> diff --git a/media/java/android/media/MediaBrowser2.java b/media/java/android/media/MediaBrowser2.java index 5cb831356472..32d31621aa27 100644 --- a/media/java/android/media/MediaBrowser2.java +++ b/media/java/android/media/MediaBrowser2.java @@ -53,51 +53,68 @@ public class MediaBrowser2 extends MediaController2 { @Nullable Bundle rootExtra) { } /** - * Called when the item has been returned by the library service for the previous - * {@link MediaBrowser2#getItem} call. - * <p> - * Result can be null if there had been error. + * Called when there's change in the parent's children. * - * @param mediaId media id - * @param result result. Can be {@code null} + * @param parentId parent id that you've specified with {@link #subscribe(String, Bundle)} + * @param extras extra bundle that you've specified with {@link #subscribe(String, Bundle)} */ - public void onItemLoaded(@NonNull String mediaId, @Nullable MediaItem2 result) { } + public void onChildrenChanged(@NonNull String parentId, @Nullable Bundle extras) { } /** * Called when the list of items has been returned by the library service for the previous * {@link MediaBrowser2#getChildren(String, int, int, Bundle)}. * * @param parentId parent id - * @param page page number that you've specified - * @param pageSize page size that you've specified - * @param options optional bundle that you've specified + * @param page page number that you've specified with + * {@link #getChildren(String, int, int, Bundle)} + * @param pageSize page size that you've specified with + * {@link #getChildren(String, int, int, Bundle)} + * @param extras extra bundle that you've specified with + * {@link #getChildren(String, int, int, Bundle)} * @param result result. Can be {@code null} */ public void onChildrenLoaded(@NonNull String parentId, int page, int pageSize, - @Nullable Bundle options, @Nullable List<MediaItem2> result) { } + @Nullable Bundle extras, @Nullable List<MediaItem2> result) { } /** - * Called when there's change in the parent's children. + * Called when the item has been returned by the library service for the previous + * {@link MediaBrowser2#getItem(String)} call. + * <p> + * Result can be null if there had been error. * - * @param parentId parent id that you've specified with subscribe - * @param options optional bundle that you've specified with subscribe + * @param mediaId media id + * @param result result. Can be {@code null} */ - public void onChildrenChanged(@NonNull String parentId, @Nullable Bundle options) { } + public void onItemLoaded(@NonNull String mediaId, @Nullable MediaItem2 result) { } + + /** + * Called when there's change in the search result. + * + * @param query search query that you've specified with {@link #search(String, Bundle)} + * @param extras extra bundle that you've specified with {@link #search(String, Bundle)} + * @param totalItemCount The total item count for the search result + */ + public void onSearchResultChanged(@NonNull String query, @Nullable Bundle extras, + int totalItemCount) { } /** * Called when the search result has been returned by the library service for the previous - * {@link MediaBrowser2#search(String, int, int, Bundle)}. + * {@link MediaBrowser2#getSearchResult(String, int, int, Bundle)}. * <p> * Result can be null if there had been error. * - * @param query query string that you've specified - * @param page page number that you've specified - * @param pageSize page size that you've specified - * @param options optional bundle that you've specified - * @param result result. Can be {@code null} + * @param query search query that you've specified with + * {@link #getSearchResult(String, int, int, Bundle)} + * @param page page number that you've specified with + * {@link #getSearchResult(String, int, int, Bundle)} + * @param pageSize page size that you've specified with + * {@link #getSearchResult(String, int, int, Bundle)} + * @param extras extra bundle that you've specified with + * {@link #getSearchResult(String, int, int, Bundle)} + * @param result result. Can be {@code null}. */ - public void onSearchResult(@NonNull String query, int page, int pageSize, - @Nullable Bundle options, @Nullable List<MediaItem2> result) { } + public void onSearchResultLoaded(@NonNull String query, int page, int pageSize, + @Nullable Bundle extras, @Nullable List<MediaItem2> result) { } } public MediaBrowser2(@NonNull Context context, @NonNull SessionToken2 token, @@ -131,10 +148,10 @@ public class MediaBrowser2 extends MediaController2 { * the actual contents for the parent. * * @param parentId parent id - * @param options optional bundle + * @param extras extra bundle */ - public void subscribe(String parentId, @Nullable Bundle options) { - mProvider.subscribe_impl(parentId, options); + public void subscribe(String parentId, @Nullable Bundle extras) { + mProvider.subscribe_impl(parentId, extras); } /** @@ -142,43 +159,59 @@ public class MediaBrowser2 extends MediaController2 { * {@link #subscribe(String, Bundle)}. * * @param parentId parent id - * @param options optional bundle + * @param extras extra bundle + */ + public void unsubscribe(String parentId, @Nullable Bundle extras) { + mProvider.unsubscribe_impl(parentId, extras); + } + + /** + * Get list of children under the parent. Result would be sent back asynchronously with the + * {@link BrowserCallback#onChildrenLoaded(String, int, int, Bundle, List)}. + * + * @param parentId parent id for getting the children. + * @param page page number to get the result. Starts from {@code 1} + * @param pageSize page size. Should be greater or equal to {@code 1} + * @param extras extra bundle */ - public void unsubscribe(String parentId, @Nullable Bundle options) { - mProvider.unsubscribe_impl(parentId, options); + public void getChildren(String parentId, int page, int pageSize, @Nullable Bundle extras) { + mProvider.getChildren_impl(parentId, page, pageSize, extras); } /** * Get the media item with the given media id. Result would be sent back asynchronously with the * {@link BrowserCallback#onItemLoaded(String, MediaItem2)}. * - * @param mediaId media id + * @param mediaId media id for specifying the item */ public void getItem(String mediaId) { mProvider.getItem_impl(mediaId); } /** - * Get list of children under the parent. Result would be sent back asynchronously with the - * {@link BrowserCallback#onChildrenLoaded(String, int, int, Bundle, List)}. + * Send a search request to the library service. When there's a change, + * {@link BrowserCallback#onSearchResultChanged(String, Bundle, int)} will be called with the + * bundle that you've specified. You should call + * {@link #getSearchResult(String, int, int, Bundle)} to get the actual search result. * - * @param parentId - * @param page - * @param pageSize - * @param options + * @param query search query. Should not be an empty string. + * @param extras extra bundle */ - public void getChildren(String parentId, int page, int pageSize, @Nullable Bundle options) { - mProvider.getChildren_impl(parentId, page, pageSize, options); + public void search(@NonNull String query, @Nullable Bundle extras) { + mProvider.search_impl(query, extras); } /** + * Get the search result from lhe library service. Result would be sent back asynchronously with + * the {@link BrowserCallback#onSearchResultLoaded(String, int, int, Bundle, List)}. * - * @param query search query deliminated by string + * @param query search query that you've specified with {@link #search(String, Bundle)} * @param page page number to get search result. Starts from {@code 1} * @param pageSize page size. Should be greater or equal to {@code 1} * @param extras extra bundle */ - public void search(String query, int page, int pageSize, Bundle extras) { - mProvider.search_impl(query, page, pageSize, extras); + public void getSearchResult(@NonNull String query, int page, int pageSize, + @Nullable Bundle extras) { + mProvider.getSearchResult_impl(query, page, pageSize, extras); } } diff --git a/media/java/android/media/MediaItem2.java b/media/java/android/media/MediaItem2.java index eae4436cae78..667aac1b426a 100644 --- a/media/java/android/media/MediaItem2.java +++ b/media/java/android/media/MediaItem2.java @@ -123,27 +123,26 @@ public class MediaItem2 { } /** - * Set a metadata. Metadata shouldn't be {@code null} and its id should be match - * with this instance's id. + * Set a metadata. If the metadata is not null, its id should be matched with this instance's + * media id. * * @param metadata metadata to update */ - public void setMetadata(@NonNull MediaMetadata2 metadata) { + public void setMetadata(@Nullable MediaMetadata2 metadata) { mProvider.setMetadata_impl(metadata); } /** * Returns the metadata of the media. */ - public @NonNull MediaMetadata2 getMetadata() { + public @Nullable MediaMetadata2 getMetadata() { return mProvider.getMetadata_impl(); } /** - * Returns the media id in the {@link MediaMetadata2} for this item. - * @see MediaMetadata2#METADATA_KEY_MEDIA_ID + * Returns the media id for this item. */ - public @Nullable String getMediaId() { + public @NonNull String getMediaId() { return mProvider.getMediaId_impl(); } diff --git a/media/java/android/media/MediaLibraryService2.java b/media/java/android/media/MediaLibraryService2.java index a11768e69b9d..7a05d3c0724a 100644 --- a/media/java/android/media/MediaLibraryService2.java +++ b/media/java/android/media/MediaLibraryService2.java @@ -82,22 +82,22 @@ public abstract class MediaLibraryService2 extends MediaSessionService2 { * * @param controller controller to notify * @param parentId - * @param options + * @param extras */ public void notifyChildrenChanged(@NonNull ControllerInfo controller, - @NonNull String parentId, @NonNull Bundle options) { - mProvider.notifyChildrenChanged_impl(controller, parentId, options); + @NonNull String parentId, @NonNull Bundle extras) { + mProvider.notifyChildrenChanged_impl(controller, parentId, extras); } /** * Notify subscribed controller about change in a parent's children. * * @param parentId parent id - * @param options optional bundle + * @param extras extra bundle */ // This is for the backward compatibility. - public void notifyChildrenChanged(@NonNull String parentId, @Nullable Bundle options) { - mProvider.notifyChildrenChanged_impl(parentId, options); + public void notifyChildrenChanged(@NonNull String parentId, @Nullable Bundle extras) { + mProvider.notifyChildrenChanged_impl(parentId, extras); } } @@ -134,27 +134,12 @@ public abstract class MediaLibraryService2 extends MediaSessionService2 { } /** - * Called to get the search result. Return search result here for the browser. + * Called to get an item. Return result here for the browser. * <p> - * Return an empty list for no search result, and return {@code null} for the error. - * - * @param query The search query sent from the media browser. It contains keywords separated - * by space. - * @param extras The bundle of service-specific arguments sent from the media browser. - * @return search result. {@code null} for error. - */ - public @Nullable List<MediaItem2> onSearch(@NonNull ControllerInfo controllerInfo, - @NonNull String query, @Nullable Bundle extras) { - return null; - } - - /** - * Called to get the search result . Return result here for the browser. - * <p> - * Return an empty list for no search result, and return {@code null} for the error. + * Return {@code null} for no result or error. * * @param itemId item id to get media item. - * @return media item2. {@code null} for error. + * @return a media item. {@code null} for no result or error. */ public @Nullable MediaItem2 onLoadItem(@NonNull ControllerInfo controllerInfo, @NonNull String itemId) { @@ -162,18 +147,18 @@ public abstract class MediaLibraryService2 extends MediaSessionService2 { } /** - * Called to get the search result. Return search result here for the browser. + * Called to get children of given parent id. Return the children here for the browser. * <p> - * Return an empty list for no search result, and return {@code null} for the error. + * Return an empty list for no children, and return {@code null} for the error. * * @param parentId parent id to get children * @param page number of page * @param pageSize size of the page - * @param options + * @param extras extra bundle * @return list of children. Can be {@code null}. */ public @Nullable List<MediaItem2> onLoadChildren(@NonNull ControllerInfo controller, - @NonNull String parentId, int page, int pageSize, @Nullable Bundle options) { + @NonNull String parentId, int page, int pageSize, @Nullable Bundle extras) { return null; } @@ -182,10 +167,10 @@ public abstract class MediaLibraryService2 extends MediaSessionService2 { * * @param controller controller * @param parentId parent id - * @param options optional bundle + * @param extras extra bundle */ - public void onSubscribed(@NonNull ControllerInfo controller, - String parentId, @Nullable Bundle options) { + public void onSubscribed(@NonNull ControllerInfo controller, String parentId, + @Nullable Bundle extras) { } /** @@ -193,10 +178,41 @@ public abstract class MediaLibraryService2 extends MediaSessionService2 { * * @param controller controller * @param parentId parent id - * @param options optional bundle + * @param extras extra bundle */ - public void onUnsubscribed(@NonNull ControllerInfo controller, - String parentId, @Nullable Bundle options) { + public void onUnsubscribed(@NonNull ControllerInfo controller, String parentId, + @Nullable Bundle extras) { + } + + /** + * Called when a controller requests search. + * + * @param query The search query sent from the media browser. It contains keywords separated + * by space. + * @param extras The bundle of service-specific arguments sent from the media browser. + */ + public void onSearch(@NonNull ControllerInfo controllerInfo, @NonNull String query, + @Nullable Bundle extras) { + + } + + /** + * Called to get the search result. Return search result here for the browser which has + * requested search previously. + * <p> + * Return an empty list for no search result, and return {@code null} for the error. + * + * @param controllerInfo Information of the controller requesting the search result. + * @param query The search query which was previously sent through + * {@link #onSearch(ControllerInfo, String, Bundle)} call. + * @param page page number. Starts from {@code 1}. + * @param pageSize page size. Should be greater or equal to {@code 1}. + * @param extras The bundle of service-specific arguments sent from the media browser. + * @return search result. {@code null} for error. + */ + public @Nullable List<MediaItem2> onLoadSearchResult(@NonNull ControllerInfo controllerInfo, + @NonNull String query, int page, int pageSize, @Nullable Bundle extras) { + return null; } } diff --git a/media/java/android/media/MediaPlayer2Impl.java b/media/java/android/media/MediaPlayer2Impl.java index 49bbc2b34858..b805eb4482cd 100644 --- a/media/java/android/media/MediaPlayer2Impl.java +++ b/media/java/android/media/MediaPlayer2Impl.java @@ -17,7 +17,6 @@ package android.media; import android.annotation.CallbackExecutor; -import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityThread; @@ -26,7 +25,6 @@ import android.content.ContentResolver; import android.content.Context; import android.content.res.AssetFileDescriptor; import android.net.Uri; -import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; @@ -48,17 +46,8 @@ import android.view.Surface; import android.view.SurfaceHolder; import android.widget.VideoView; import android.graphics.SurfaceTexture; -import android.media.AudioManager; -import android.media.MediaDrm; -import android.media.MediaFormat; -import android.media.MediaPlayer2; -import android.media.MediaTimeProvider; -import android.media.PlaybackParams; -import android.media.SubtitleController; import android.media.SubtitleController.Anchor; -import android.media.SubtitleData; import android.media.SubtitleTrack.RenderingWidget; -import android.media.SyncParams; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; @@ -74,16 +63,12 @@ import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.lang.AutoCloseable; import java.lang.Runnable; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; import java.lang.ref.WeakReference; import java.net.CookieHandler; import java.net.CookieManager; import java.net.HttpCookie; import java.net.HttpURLConnection; -import java.net.InetSocketAddress; import java.net.URL; import java.nio.ByteOrder; import java.util.ArrayList; @@ -2190,6 +2175,13 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { private native final void native_setup(Object mediaplayer2_this); private native final void native_finalize(); + private static native final void native_stream_event_onTearDown( + long nativeCallbackPtr, long userDataPtr); + private static native final void native_stream_event_onStreamPresentationEnd( + long nativeCallbackPtr, long userDataPtr); + private static native final void native_stream_event_onStreamDataRequest( + long jAudioTrackPtr, long nativeCallbackPtr, long userDataPtr); + /** * Class for MediaPlayer2 to return each audio/video/subtitle track's metadata. * @@ -4228,6 +4220,65 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { } + // Called from the native side + @SuppressWarnings("unused") + private static boolean setAudioOutputDeviceById(AudioTrack track, int deviceId) { + if (track == null) { + return false; + } + + if (deviceId == 0) { + // Use default routing. + track.setPreferredDevice(null); + return true; + } + + // TODO: Unhide AudioManager.getDevicesStatic. + AudioDeviceInfo[] outputDevices = + AudioManager.getDevicesStatic(AudioManager.GET_DEVICES_OUTPUTS); + + boolean success = false; + for (AudioDeviceInfo device : outputDevices) { + if (device.getId() == deviceId) { + track.setPreferredDevice(device); + success = true; + break; + } + } + return success; + } + + // Instantiated from the native side + @SuppressWarnings("unused") + private static class StreamEventCallback extends AudioTrack.StreamEventCallback { + public long mJAudioTrackPtr; + public long mNativeCallbackPtr; + public long mUserDataPtr; + + public StreamEventCallback(long jAudioTrackPtr, long nativeCallbackPtr, long userDataPtr) { + super(); + mJAudioTrackPtr = jAudioTrackPtr; + mNativeCallbackPtr = nativeCallbackPtr; + mUserDataPtr = userDataPtr; + } + + @Override + public void onTearDown(AudioTrack track) { + native_stream_event_onTearDown(mNativeCallbackPtr, mUserDataPtr); + } + + @Override + public void onStreamPresentationEnd(AudioTrack track) { + native_stream_event_onStreamPresentationEnd(mNativeCallbackPtr, mUserDataPtr); + } + + @Override + public void onStreamDataRequest(AudioTrack track) { + native_stream_event_onStreamDataRequest( + mJAudioTrackPtr, mNativeCallbackPtr, mUserDataPtr); + } + } + private class ProvisioningThread extends Thread { public static final int TIMEOUT_MS = 60000; diff --git a/media/java/android/media/update/MediaBrowser2Provider.java b/media/java/android/media/update/MediaBrowser2Provider.java index 17256a891277..f2e73132a13a 100644 --- a/media/java/android/media/update/MediaBrowser2Provider.java +++ b/media/java/android/media/update/MediaBrowser2Provider.java @@ -16,7 +16,6 @@ package android.media.update; -import android.annotation.SystemApi; import android.os.Bundle; /** @@ -29,6 +28,7 @@ public interface MediaBrowser2Provider extends MediaController2Provider { void unsubscribe_impl(String parentId, Bundle options); void getItem_impl(String mediaId); - void getChildren_impl(String parentId, int page, int pageSize, Bundle options); - void search_impl(String query, int page, int pageSize, Bundle extras); + void getChildren_impl(String parentId, int page, int pageSize, Bundle extras); + void search_impl(String query, Bundle options); + void getSearchResult_impl(String query, int page, int pageSize, Bundle extras); } diff --git a/media/jni/android_media_MediaPlayer2.cpp b/media/jni/android_media_MediaPlayer2.cpp index e73b2f8c496d..51bc33069802 100644 --- a/media/jni/android_media_MediaPlayer2.cpp +++ b/media/jni/android_media_MediaPlayer2.cpp @@ -28,6 +28,7 @@ #include <media/NdkWrapper.h> #include <media/stagefright/Utils.h> #include <media/stagefright/foundation/ByteUtils.h> // for FOURCC definition +#include <mediaplayer2/JAudioTrack.h> #include <mediaplayer2/mediaplayer2.h> #include <stdio.h> #include <assert.h> @@ -1387,6 +1388,65 @@ static void android_media_MediaPlayer2_enableDeviceCallback( // AudioRouting end // ---------------------------------------------------------------------------- +///////////////////////////////////////////////////////////////////////////////////// +// AudioTrack.StreamEventCallback begin +static void android_media_MediaPlayer2_native_on_tear_down(JNIEnv *env __unused, + jobject thiz __unused, jlong callbackPtr, jlong userDataPtr) +{ + JAudioTrack::callback_t callback = (JAudioTrack::callback_t) callbackPtr; + if (callback != NULL) { + callback(JAudioTrack::EVENT_NEW_IAUDIOTRACK, (void *) userDataPtr, NULL); + } +} + +static void android_media_MediaPlayer2_native_on_stream_presentation_end(JNIEnv *env __unused, + jobject thiz __unused, jlong callbackPtr, jlong userDataPtr) +{ + JAudioTrack::callback_t callback = (JAudioTrack::callback_t) callbackPtr; + if (callback != NULL) { + callback(JAudioTrack::EVENT_STREAM_END, (void *) userDataPtr, NULL); + } +} + +static void android_media_MediaPlayer2_native_on_stream_data_request(JNIEnv *env __unused, + jobject thiz __unused, jlong jAudioTrackPtr, jlong callbackPtr, jlong userDataPtr) +{ + JAudioTrack::callback_t callback = (JAudioTrack::callback_t) callbackPtr; + JAudioTrack* track = (JAudioTrack *) jAudioTrackPtr; + if (callback != NULL && track != NULL) { + JAudioTrack::Buffer* buffer = new JAudioTrack::Buffer(); + + size_t bufferSizeInFrames = track->frameCount(); + audio_format_t format = track->format(); + + size_t bufferSizeInBytes; + if (audio_has_proportional_frames(format)) { + bufferSizeInBytes = + bufferSizeInFrames * audio_bytes_per_sample(format) * track->channelCount(); + } else { + // See Javadoc of AudioTrack::getBufferSizeInFrames(). + bufferSizeInBytes = bufferSizeInFrames; + } + + uint8_t* byteBuffer = new uint8_t[bufferSizeInBytes]; + buffer->mSize = bufferSizeInBytes; + buffer->mData = (void *) byteBuffer; + + callback(JAudioTrack::EVENT_MORE_DATA, (void *) userDataPtr, buffer); + + if (buffer->mSize > 0 && buffer->mData == byteBuffer) { + track->write(buffer->mData, buffer->mSize, true /* Blocking */); + } + + delete[] byteBuffer; + delete buffer; + } +} + + +// AudioTrack.StreamEventCallback end +// ---------------------------------------------------------------------------- + static const JNINativeMethod gMethods[] = { { "nativeSetDataSource", @@ -1443,6 +1503,11 @@ static const JNINativeMethod gMethods[] = { {"native_setOutputDevice", "(I)Z", (void *)android_media_MediaPlayer2_setOutputDevice}, {"native_getRoutedDeviceId", "()I", (void *)android_media_MediaPlayer2_getRoutedDeviceId}, {"native_enableDeviceCallback", "(Z)V", (void *)android_media_MediaPlayer2_enableDeviceCallback}, + + // StreamEventCallback for JAudioTrack + {"native_stream_event_onTearDown", "(JJ)V", (void *)android_media_MediaPlayer2_native_on_tear_down}, + {"native_stream_event_onStreamPresentationEnd", "(JJ)V", (void *)android_media_MediaPlayer2_native_on_stream_presentation_end}, + {"native_stream_event_onStreamDataRequest", "(JJJ)V", (void *)android_media_MediaPlayer2_native_on_stream_data_request}, }; // This function only registers the native methods diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index fa6006ee1976..dda6799b6b22 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -53,16 +53,25 @@ <string name="bluetooth_disconnected" msgid="6557104142667339895">"Déconnecté"</string> <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Déconnexion…"</string> <string name="bluetooth_connecting" msgid="8555009514614320497">"Connexion en cours…"</string> - <string name="bluetooth_connected" msgid="6038755206916626419">"Connecté"</string> + <!-- no translation found for bluetooth_connected (5427152882755735944) --> + <skip /> <string name="bluetooth_pairing" msgid="1426882272690346242">"Association…"</string> - <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"Connecté (sans audio pour appels tél.)"</string> - <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"Connecté (sans audio contenu mutimédia)"</string> - <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Connecté (sans accès aux messages)"</string> - <string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"Connecté (sans audio tel./multimédia)"</string> - <string name="bluetooth_connected_battery_level" msgid="7049181126136692368">"Connecté. Pile : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"Connecté (sans téléphone). Pile : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_a2dp_battery_level" msgid="4751724026365870779">"Connecté (sans média). Pile : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1549265779323455261">"Connecté (sans téléphone ni média). Pile : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> + <!-- no translation found for bluetooth_connected_no_headset (616068069034994802) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_a2dp (3736431800395923868) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_map (3200033913678466453) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_headset_no_a2dp (2047403011284187056) --> + <skip /> + <!-- no translation found for bluetooth_connected_battery_level (5162924691231307748) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_headset_battery_level (1610296229139400266) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_a2dp_battery_level (3908466636369853652) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_headset_no_a2dp_battery_level (1163440823807659316) --> + <skip /> <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Paramètres audio du support"</string> <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Appels téléphoniques"</string> <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Transfert de fichier"</string> @@ -327,9 +336,12 @@ <item msgid="8280754435979370728">"Couleurs naturelles, comme l\'œil les voit"</item> <item msgid="5363960654009010371">"Couleurs optimisées pour le contenu numérique"</item> </string-array> - <string name="inactive_apps_title" msgid="1317817863508274533">"Applications inactives"</string> + <!-- no translation found for inactive_apps_title (9042996804461901648) --> + <skip /> <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Application inactive. Touchez ici pour l\'activer."</string> <string name="inactive_app_active_summary" msgid="4174921824958516106">"Application active. Touchez ici pour la désactiver."</string> + <!-- no translation found for standby_bucket_summary (6567835350910684727) --> + <skip /> <string name="runningservices_settings_title" msgid="8097287939865165213">"Services en cours d\'exécution"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Afficher et contrôler les services en cours d\'exécution"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Mise en œuvre WebView"</string> @@ -351,16 +363,34 @@ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Correction des couleurs"</string> <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Cette fonctionnalité est expérimentale et peut affecter les performances."</string> <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Remplacé par <xliff:g id="TITLE">%1$s</xliff:g>"</string> - <string name="power_remaining_duration_only" msgid="845431008899029842">"Il reste environ <xliff:g id="TIME">^1</xliff:g>"</string> - <string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Il reste environ <xliff:g id="TIME">^1</xliff:g> en fonction de votre usage"</string> - <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"<xliff:g id="TIME">^1</xliff:g> jusqu\'à la charge complète"</string> - <string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Temps restant : <xliff:g id="TIME">^1</xliff:g>"</string> - <string name="power_remaining_duration_only_short_enhanced" msgid="7450425624026394823">"Il reste <xliff:g id="TIME">^1</xliff:g> en fonction de votre usage"</string> - <string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">^1</xliff:g> : il reste environ <xliff:g id="TIME">^2</xliff:g>"</string> - <string name="power_discharging_duration_enhanced" msgid="4401782117770255046">"<xliff:g id="LEVEL">^1</xliff:g> : il reste environ <xliff:g id="TIME">^2</xliff:g> en fonction de votre usage"</string> - <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – Temps restant : <xliff:g id="TIME">^2</xliff:g>"</string> + <string name="power_remaining_duration_only" msgid="845431008899029842">"Il reste environ <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Il reste environ <xliff:g id="TIME">%1$s</xliff:g> en fonction de votre usage"</string> + <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"<xliff:g id="TIME">%1$s</xliff:g> jusqu\'à la charge complète"</string> + <string name="power_remaining_duration_only_short" msgid="5329694252258605547">"Temps restant : <xliff:g id="TIME">%1$s</xliff:g>"</string> + <!-- no translation found for power_remaining_less_than_duration_only (5996752448813295329) --> + <skip /> + <!-- no translation found for power_remaining_less_than_duration (7967078125657859046) --> + <skip /> + <!-- no translation found for power_remaining_more_than_subtext (6846716609975752316) --> + <skip /> + <!-- no translation found for power_remaining_only_more_than_subtext (8884488700395194194) --> + <skip /> + <!-- no translation found for power_remaining_duration_only_shutdown_imminent (8168317165722752881) --> + <skip /> + <!-- no translation found for power_remaining_duration_only_shutdown_imminent (5957064378548718872) --> + <skip /> + <!-- no translation found for power_remaining_duration_only_shutdown_imminent (9055596817716471373) --> + <skip /> + <string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">%1$s</xliff:g> : il reste environ <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_discharging_duration_enhanced" msgid="4401782117770255046">"<xliff:g id="LEVEL">%1$s</xliff:g> : il reste environ <xliff:g id="TIME">%2$s</xliff:g> en fonction de votre usage"</string> + <!-- no translation found for power_remaining_duration_shutdown_imminent (7679005631124015335) --> + <skip /> + <!-- no translation found for power_remaining_duration_shutdown_imminent (261050880878965621) --> + <skip /> + <!-- no translation found for power_remaining_duration_shutdown_imminent (2020049829798578618) --> + <skip /> <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string> - <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> : <xliff:g id="TIME">^2</xliff:g> jusqu\'à la charge complète"</string> + <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> : <xliff:g id="TIME">%2$s</xliff:g> jusqu\'à la charge complète"</string> <string name="battery_info_status_unknown" msgid="196130600938058547">"Inconnu"</string> <string name="battery_info_status_charging" msgid="1705179948350365604">"Charge en cours…"</string> <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"en cours de charge"</string> @@ -414,4 +444,12 @@ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"Jamais"</string> <string name="zen_interruption_level_priority" msgid="2078370238113347720">"Priorités seulement"</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> + <!-- no translation found for zen_alarm_warning_indef (3007988140196673193) --> + <skip /> + <!-- no translation found for zen_alarm_warning (6236690803924413088) --> + <skip /> + <!-- no translation found for alarm_template (4996153414057676512) --> + <skip /> + <!-- no translation found for alarm_template_far (3779172822607461675) --> + <skip /> </resources> diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index 48c7bec5c319..a1cdb8c143e4 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -53,16 +53,25 @@ <string name="bluetooth_disconnected" msgid="6557104142667339895">"Исклучено"</string> <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Се исклучува..."</string> <string name="bluetooth_connecting" msgid="8555009514614320497">"Се поврзува..."</string> - <string name="bluetooth_connected" msgid="6038755206916626419">"Поврзани"</string> + <!-- no translation found for bluetooth_connected (5427152882755735944) --> + <skip /> <string name="bluetooth_pairing" msgid="1426882272690346242">"Поврзување..."</string> - <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"Поврзани (без телефон)"</string> - <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"Поврзани (без медиуми)"</string> - <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Поврзано (без порака за пристап)"</string> - <string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"Поврзан (без телефон или медиуми)"</string> - <string name="bluetooth_connected_battery_level" msgid="7049181126136692368">"Поврзан, ниво на батеријата <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"Поврзан (освен телефонот), ниво на батеријата <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_a2dp_battery_level" msgid="4751724026365870779">"Поврзан (освен аудио-визуелните содржини), ниво на батеријата <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1549265779323455261">"Поврзан (освен телефонот и аудио-визуелните содржини), ниво на батеријата <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> + <!-- no translation found for bluetooth_connected_no_headset (616068069034994802) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_a2dp (3736431800395923868) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_map (3200033913678466453) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_headset_no_a2dp (2047403011284187056) --> + <skip /> + <!-- no translation found for bluetooth_connected_battery_level (5162924691231307748) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_headset_battery_level (1610296229139400266) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_a2dp_battery_level (3908466636369853652) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_headset_no_a2dp_battery_level (1163440823807659316) --> + <skip /> <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Аудио на медиуми"</string> <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Телефонски повици"</string> <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Пренос на датотека"</string> @@ -327,9 +336,12 @@ <item msgid="8280754435979370728">"Природни бои како што со гледаат со голо око"</item> <item msgid="5363960654009010371">"Оптимизирани бои за дигитална содржина"</item> </string-array> - <string name="inactive_apps_title" msgid="1317817863508274533">"Неактивни апликации"</string> + <!-- no translation found for inactive_apps_title (9042996804461901648) --> + <skip /> <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Неактивно. Допрете за да смените."</string> <string name="inactive_app_active_summary" msgid="4174921824958516106">"Активно. Допрете за да смените."</string> + <!-- no translation found for standby_bucket_summary (6567835350910684727) --> + <skip /> <string name="runningservices_settings_title" msgid="8097287939865165213">"Активни услуги"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Погледнете и контролирајте услуги што се моментално активни"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Воведување WebView"</string> @@ -351,16 +363,34 @@ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Корекција на боја"</string> <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Функцијата е експериментална и може да влијае на изведбата."</string> <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Прескокнато според <xliff:g id="TITLE">%1$s</xliff:g>"</string> - <string name="power_remaining_duration_only" msgid="845431008899029842">"Преостануваат околу <xliff:g id="TIME">^1</xliff:g>"</string> - <string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Уште околу <xliff:g id="TIME">^1</xliff:g> според користењето"</string> - <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"Преостануваат <xliff:g id="TIME">^1</xliff:g> дури се наполни целосно"</string> - <string name="power_remaining_duration_only_short" msgid="5329694252258605547">"уште <xliff:g id="TIME">^1</xliff:g>"</string> - <string name="power_remaining_duration_only_short_enhanced" msgid="7450425624026394823">"Уште <xliff:g id="TIME">^1</xliff:g> според користењето"</string> - <string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">^1</xliff:g> - уште околу <xliff:g id="TIME">^2</xliff:g>"</string> - <string name="power_discharging_duration_enhanced" msgid="4401782117770255046">"<xliff:g id="LEVEL">^1</xliff:g> - уште околу <xliff:g id="TIME">^2</xliff:g> според користењето"</string> - <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> - уште <xliff:g id="TIME">^2</xliff:g>"</string> + <string name="power_remaining_duration_only" msgid="845431008899029842">"Преостануваат околу <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Уште околу <xliff:g id="TIME">%1$s</xliff:g> според користењето"</string> + <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"Преостануваат <xliff:g id="TIME">%1$s</xliff:g> дури се наполни целосно"</string> + <string name="power_remaining_duration_only_short" msgid="5329694252258605547">"уште <xliff:g id="TIME">%1$s</xliff:g>"</string> + <!-- no translation found for power_remaining_less_than_duration_only (5996752448813295329) --> + <skip /> + <!-- no translation found for power_remaining_less_than_duration (7967078125657859046) --> + <skip /> + <!-- no translation found for power_remaining_more_than_subtext (6846716609975752316) --> + <skip /> + <!-- no translation found for power_remaining_only_more_than_subtext (8884488700395194194) --> + <skip /> + <!-- no translation found for power_remaining_duration_only_shutdown_imminent (8168317165722752881) --> + <skip /> + <!-- no translation found for power_remaining_duration_only_shutdown_imminent (5957064378548718872) --> + <skip /> + <!-- no translation found for power_remaining_duration_only_shutdown_imminent (9055596817716471373) --> + <skip /> + <string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">%1$s</xliff:g> - уште околу <xliff:g id="TIME">%2$s</xliff:g>"</string> + <string name="power_discharging_duration_enhanced" msgid="4401782117770255046">"<xliff:g id="LEVEL">%1$s</xliff:g> - уште околу <xliff:g id="TIME">%2$s</xliff:g> според користењето"</string> + <!-- no translation found for power_remaining_duration_shutdown_imminent (7679005631124015335) --> + <skip /> + <!-- no translation found for power_remaining_duration_shutdown_imminent (261050880878965621) --> + <skip /> + <!-- no translation found for power_remaining_duration_shutdown_imminent (2020049829798578618) --> + <skip /> <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string> - <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> - <xliff:g id="TIME">^2</xliff:g> дури се наполни целосно"</string> + <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> дури се наполни целосно"</string> <string name="battery_info_status_unknown" msgid="196130600938058547">"Непознато"</string> <string name="battery_info_status_charging" msgid="1705179948350365604">"Се полни"</string> <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"се полни"</string> @@ -414,4 +444,12 @@ <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> + <!-- no translation found for zen_alarm_warning_indef (3007988140196673193) --> + <skip /> + <!-- no translation found for zen_alarm_warning (6236690803924413088) --> + <skip /> + <!-- no translation found for alarm_template (4996153414057676512) --> + <skip /> + <!-- no translation found for alarm_template_far (3779172822607461675) --> + <skip /> </resources> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 0a65c1350abe..ecb73f063dcb 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -53,16 +53,25 @@ <string name="bluetooth_disconnected" msgid="6557104142667339895">"Uzildi"</string> <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Uzilyapti…"</string> <string name="bluetooth_connecting" msgid="8555009514614320497">"Ulanmoqda…"</string> - <string name="bluetooth_connected" msgid="6038755206916626419">"Ulandi"</string> + <!-- no translation found for bluetooth_connected (5427152882755735944) --> + <skip /> <string name="bluetooth_pairing" msgid="1426882272690346242">"Biriktirilmoqda"</string> - <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"Ulandi (telefondan tashqari)"</string> - <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"Ulanildi (mediadan tashqari)"</string> - <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Ulangan (xabarlarga kirib bo‘lmaydi)"</string> - <string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"Ulangan (telefon yoki media qurilma emas)"</string> - <string name="bluetooth_connected_battery_level" msgid="7049181126136692368">"Ulangan, batareya quvvati: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_headset_battery_level" msgid="5504193961248406027">"Ulangan (HSP/HFP dan tashqari), batareya quvvati: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_a2dp_battery_level" msgid="4751724026365870779">"Ulangan (A2DP dan tashqari), batareya quvvati: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1549265779323455261">"Ulangan (HSP/HFP/A2DP dan tashqari), batareya quvvati: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string> + <!-- no translation found for bluetooth_connected_no_headset (616068069034994802) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_a2dp (3736431800395923868) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_map (3200033913678466453) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_headset_no_a2dp (2047403011284187056) --> + <skip /> + <!-- no translation found for bluetooth_connected_battery_level (5162924691231307748) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_headset_battery_level (1610296229139400266) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_a2dp_battery_level (3908466636369853652) --> + <skip /> + <!-- no translation found for bluetooth_connected_no_headset_no_a2dp_battery_level (1163440823807659316) --> + <skip /> <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Media audio"</string> <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Telefon chaqiruvlari"</string> <string name="bluetooth_profile_opp" msgid="9168139293654233697">"Fayl uzatish"</string> @@ -327,9 +336,12 @@ <item msgid="8280754435979370728">"Ko‘zga ko‘rinadigan tabiiy ranglar"</item> <item msgid="5363960654009010371">"Raqamli kontentga moslashtirilgan ranglar"</item> </string-array> - <string name="inactive_apps_title" msgid="1317817863508274533">"Nofaol ilovalar"</string> + <!-- no translation found for inactive_apps_title (9042996804461901648) --> + <skip /> <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Nofaol. O‘zgartirish uchun bu yerga bosing."</string> <string name="inactive_app_active_summary" msgid="4174921824958516106">"Faol. O‘zgartirish uchun bu yerga bosing."</string> + <!-- no translation found for standby_bucket_summary (6567835350910684727) --> + <skip /> <string name="runningservices_settings_title" msgid="8097287939865165213">"Ishlab turgan ilovalar"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Ishlab turgan ilovalarni ko‘rish va boshqarish"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView ta’minotchisi"</string> @@ -351,16 +363,34 @@ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Rangni tuzatish"</string> <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Bu funksiya tajribaviy bo‘lib, u qurilma unumdorligiga ta’sir qilishi mumkin."</string> <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> bilan almashtirildi"</string> - <string name="power_remaining_duration_only" msgid="845431008899029842">"Taxminan <xliff:g id="TIME">^1</xliff:g> qoldi"</string> - <string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Joriy holatda taxminan <xliff:g id="TIME">^1</xliff:g> qoldi"</string> - <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"To‘lishiga <xliff:g id="TIME">^1</xliff:g> qoldi"</string> - <string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">^1</xliff:g> qoldi"</string> - <string name="power_remaining_duration_only_short_enhanced" msgid="7450425624026394823">"Joriy holatda <xliff:g id="TIME">^1</xliff:g> qoldi"</string> - <string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">^1</xliff:g> – taxminan <xliff:g id="TIME">^2</xliff:g> qoldi"</string> - <string name="power_discharging_duration_enhanced" msgid="4401782117770255046">"<xliff:g id="LEVEL">^1</xliff:g> (joriy holatda taxminan <xliff:g id="TIME">^2</xliff:g> qoldi)"</string> - <string name="power_discharging_duration_short" msgid="4192244429001842403">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> qoldi"</string> + <string name="power_remaining_duration_only" msgid="845431008899029842">"Taxminan <xliff:g id="TIME">%1$s</xliff:g> qoldi"</string> + <string name="power_remaining_duration_only_enhanced" msgid="5992456722677973678">"Joriy holatda taxminan <xliff:g id="TIME">%1$s</xliff:g> qoldi"</string> + <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"To‘lishiga <xliff:g id="TIME">%1$s</xliff:g> qoldi"</string> + <string name="power_remaining_duration_only_short" msgid="5329694252258605547">"<xliff:g id="TIME">%1$s</xliff:g> qoldi"</string> + <!-- no translation found for power_remaining_less_than_duration_only (5996752448813295329) --> + <skip /> + <!-- no translation found for power_remaining_less_than_duration (7967078125657859046) --> + <skip /> + <!-- no translation found for power_remaining_more_than_subtext (6846716609975752316) --> + <skip /> + <!-- no translation found for power_remaining_only_more_than_subtext (8884488700395194194) --> + <skip /> + <!-- no translation found for power_remaining_duration_only_shutdown_imminent (8168317165722752881) --> + <skip /> + <!-- no translation found for power_remaining_duration_only_shutdown_imminent (5957064378548718872) --> + <skip /> + <!-- no translation found for power_remaining_duration_only_shutdown_imminent (9055596817716471373) --> + <skip /> + <string name="power_discharging_duration" msgid="2843747179907396142">"<xliff:g id="LEVEL">%1$s</xliff:g> – taxminan <xliff:g id="TIME">%2$s</xliff:g> qoldi"</string> + <string name="power_discharging_duration_enhanced" msgid="4401782117770255046">"<xliff:g id="LEVEL">%1$s</xliff:g> (joriy holatda taxminan <xliff:g id="TIME">%2$s</xliff:g> qoldi)"</string> + <!-- no translation found for power_remaining_duration_shutdown_imminent (7679005631124015335) --> + <skip /> + <!-- no translation found for power_remaining_duration_shutdown_imminent (261050880878965621) --> + <skip /> + <!-- no translation found for power_remaining_duration_shutdown_imminent (2020049829798578618) --> + <skip /> <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string> - <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">^1</xliff:g> – <xliff:g id="TIME">^2</xliff:g> ichida to‘ladi"</string> + <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> ichida to‘ladi"</string> <string name="battery_info_status_unknown" msgid="196130600938058547">"Noma’lum"</string> <string name="battery_info_status_charging" msgid="1705179948350365604">"Quvvat olmoqda"</string> <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"quvvat olmoqda"</string> @@ -414,4 +444,12 @@ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"Hech qachon"</string> <string name="zen_interruption_level_priority" msgid="2078370238113347720">"Faqat muhimlari"</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> + <!-- no translation found for zen_alarm_warning_indef (3007988140196673193) --> + <skip /> + <!-- no translation found for zen_alarm_warning (6236690803924413088) --> + <skip /> + <!-- no translation found for alarm_template (4996153414057676512) --> + <skip /> + <!-- no translation found for alarm_template_far (3779172822607461675) --> + <skip /> </resources> diff --git a/packages/SettingsLib/tests/robotests/Android.mk b/packages/SettingsLib/tests/robotests/Android.mk index 7cf716305887..f5c42b68e32b 100644 --- a/packages/SettingsLib/tests/robotests/Android.mk +++ b/packages/SettingsLib/tests/robotests/Android.mk @@ -12,12 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. - ############################################################ # SettingsLib Shell app just for Robolectric test target. # ############################################################ LOCAL_PATH := $(call my-dir) - include $(CLEAR_VARS) LOCAL_PACKAGE_NAME := SettingsLibShell @@ -25,8 +23,7 @@ LOCAL_MODULE_TAGS := optional LOCAL_PRIVILEGED_MODULE := true -LOCAL_RESOURCE_DIR := \ - $(LOCAL_PATH)/res +LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res LOCAL_USE_AAPT2 := true @@ -35,43 +32,44 @@ include frameworks/base/packages/SettingsLib/common.mk include $(BUILD_PACKAGE) ############################################# -# SettingsLib Robolectric test target. # +# SettingsLib Robolectric test target. # ############################################# include $(CLEAR_VARS) +LOCAL_MODULE := SettingsLibRoboTests + LOCAL_SRC_FILES := $(call all-java-files-under, src) -# Include the testing libraries (JUnit4 + Robolectric libs). -LOCAL_STATIC_JAVA_LIBRARIES := \ - mockito-robolectric-prebuilt \ - platform-robolectric-android-all-stubs \ - truth-prebuilt +LOCAL_JAVA_RESOURCE_DIRS := config LOCAL_JAVA_LIBRARIES := \ - junit \ - platform-robolectric-3.6.1-prebuilt + robolectric_android-all-stub \ + Robolectric_all-target \ + mockito-robolectric-prebuilt \ + truth-prebuilt LOCAL_INSTRUMENTATION_FOR := SettingsLibShell -LOCAL_MODULE := SettingsLibRoboTests LOCAL_MODULE_TAGS := optional include $(BUILD_STATIC_JAVA_LIBRARY) ############################################################# -# SettingsLib runner target to run the previous target. # +# SettingsLib runner target to run the previous target. # ############################################################# include $(CLEAR_VARS) LOCAL_MODULE := RunSettingsLibRoboTests -LOCAL_SDK_VERSION := current - -LOCAL_STATIC_JAVA_LIBRARIES := \ - SettingsLibRoboTests +LOCAL_JAVA_LIBRARIES := \ + SettingsLibRoboTests \ + robolectric_android-all-stub \ + Robolectric_all-target \ + mockito-robolectric-prebuilt \ + truth-prebuilt LOCAL_TEST_PACKAGE := SettingsLibShell LOCAL_ROBOTEST_TIMEOUT := 36000 -include prebuilts/misc/common/robolectric/3.6.1/run_robotests.mk +include external/robolectric-shadows/run_robotests.mk
\ No newline at end of file diff --git a/packages/SettingsLib/tests/robotests/config/robolectric.properties b/packages/SettingsLib/tests/robotests/config/robolectric.properties new file mode 100644 index 000000000000..34a2a1a28ada --- /dev/null +++ b/packages/SettingsLib/tests/robotests/config/robolectric.properties @@ -0,0 +1,2 @@ +manifest=frameworks/base/packages/SettingsLib/tests/robotests/AndroidManifest.xml +sdk=NEWEST_SDK
\ No newline at end of file diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/CustomEditTextPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/CustomEditTextPreferenceTest.java index 7e374931b767..9d7f59a78fa5 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/CustomEditTextPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/CustomEditTextPreferenceTest.java @@ -31,11 +31,9 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class CustomEditTextPreferenceTest { @Mock diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/DeviceInfoUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/DeviceInfoUtilsTest.java index 82604f767c47..19a916cf85da 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/DeviceInfoUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/DeviceInfoUtilsTest.java @@ -25,10 +25,8 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class DeviceInfoUtilsTest { private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java index fdc42bf6724a..e153c3ed1edf 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/HelpUtilsTest.java @@ -16,6 +16,13 @@ package com.android.settingslib; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -27,6 +34,7 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.provider.Settings; import android.view.MenuItem; + import com.android.internal.R; import org.junit.Before; @@ -37,20 +45,11 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; - -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; /** * Tests for {@link HelpUtils}. */ @RunWith(RobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class HelpUtilsTest { private static final String TEST_HELP_URL = "intent:#Intent;action=com.android.test;end"; private static final String PACKAGE_NAME_KEY = "package-name-key"; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java index 64de63520f87..5f6086897d76 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedLockUtilsTest.java @@ -20,11 +20,8 @@ import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_NO import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT; import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_REMOTE_INPUT; import static android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS; - import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; - import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; @@ -43,12 +40,10 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; import java.util.Arrays; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class RestrictedLockUtilsTest { @Mock diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedPreferenceHelperTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedPreferenceHelperTest.java index 79d99f75b5bf..a8821ba60785 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedPreferenceHelperTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/RestrictedPreferenceHelperTest.java @@ -17,6 +17,12 @@ package com.android.settingslib; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.content.Context; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; @@ -28,19 +34,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; - -import static org.mockito.Mockito.RETURNS_DEEP_STUBS; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class RestrictedPreferenceHelperTest { - @Mock private Context mContext; @Mock diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingsLibRobolectricTestRunner.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingsLibRobolectricTestRunner.java index df850bee13df..8778ae949e20 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingsLibRobolectricTestRunner.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/SettingsLibRobolectricTestRunner.java @@ -15,6 +15,8 @@ */ package com.android.settingslib; +import android.annotation.NonNull; + import org.junit.runners.model.InitializationError; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; @@ -22,6 +24,8 @@ import org.robolectric.manifest.AndroidManifest; import org.robolectric.res.Fs; import org.robolectric.res.ResourcePath; +import java.net.MalformedURLException; +import java.net.URL; import java.util.List; public class SettingsLibRobolectricTestRunner extends RobolectricTestRunner { @@ -30,33 +34,40 @@ public class SettingsLibRobolectricTestRunner extends RobolectricTestRunner { super(testClass); } + /** + * We are going to create our own custom manifest so we can add multiple resource paths to it. + */ @Override protected AndroidManifest getAppManifest(Config config) { - // Using the manifest file's relative path, we can figure out the application directory. - final String appRoot = "frameworks/base/packages/SettingsLib"; - final String manifestPath = appRoot + "/AndroidManifest.xml"; - final String resDir = appRoot + "/tests/robotests/res"; - final String assetsDir = appRoot + config.assetDir(); - - return new AndroidManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resDir), - Fs.fileFromPath(assetsDir), "com.android.settingslib") { - @Override - public List<ResourcePath> getIncludedResourcePaths() { - List<ResourcePath> paths = super.getIncludedResourcePaths(); - paths.add(new ResourcePath( - null, - Fs.fileFromPath("./frameworks/base/packages/SettingsLib/res"), - null)); - paths.add(new ResourcePath( - null, - Fs.fileFromPath("./frameworks/base/core/res/res"), - null)); - paths.add(new ResourcePath( - null, - Fs.fileFromPath("./frameworks/support/v7/appcompat/res"), - null)); - return paths; - } - }; + try { + // Using the manifest file's relative path, we can figure out the application directory. + final URL appRoot = + new URL("file:frameworks/base/packages/SettingsLib/tests/robotests"); + final URL manifestPath = new URL(appRoot, "AndroidManifest.xml"); + final URL resDir = new URL(appRoot, "res"); + final URL assetsDir = new URL(appRoot, "assets"); + + return new AndroidManifest(Fs.fromURL(manifestPath), Fs.fromURL(resDir), + Fs.fromURL(assetsDir), "com.android.settingslib") { + @Override + public List<ResourcePath> getIncludedResourcePaths() { + final List<ResourcePath> paths = super.getIncludedResourcePaths(); + paths.add(resourcePath("file:frameworks/base/packages/SettingsLib/res")); + paths.add(resourcePath("file:frameworks/base/core/res/res")); + paths.add(resourcePath("file:frameworks/support/v7/appcompat/res")); + return paths; + } + }; + } catch (MalformedURLException e) { + throw new RuntimeException("SettingsLibRobolectricTestRunner failure", e); + } + } + + private static ResourcePath resourcePath(@NonNull String spec) { + try { + return new ResourcePath(null, Fs.fromURL(new URL(spec)), null); + } catch (MalformedURLException e) { + throw new RuntimeException("SettingsLibRobolectricTestRunner failure", e); + } } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TestConfig.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TestConfig.java deleted file mode 100644 index 1f9070c266a0..000000000000 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TestConfig.java +++ /dev/null @@ -1,25 +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. - */ - -package com.android.settingslib; - -import android.os.Build; - -public class TestConfig { - public static final int SDK_VERSION = Build.VERSION_CODES.O; - public static final String MANIFEST_PATH = - "frameworks/base/packages/SettingsLib/tests/robotests/AndroidManifest.xml"; -} diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TetherUtilTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TetherUtilTest.java index 8bd31d4789db..0109f48e0c5d 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TetherUtilTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TetherUtilTest.java @@ -16,6 +16,8 @@ package com.android.settingslib; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; import android.content.Context; @@ -24,13 +26,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; - -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.when; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class TetherUtilTest { @Mock diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TwoTargetPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TwoTargetPreferenceTest.java index b5ee5adc8135..c5e93f009bf3 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TwoTargetPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/TwoTargetPreferenceTest.java @@ -31,10 +31,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class TwoTargetPreferenceTest { private PreferenceViewHolder mViewHolder; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java index 5459fb7a47cb..12d3106cfe61 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java @@ -34,9 +34,9 @@ import android.os.UserHandle; import android.provider.Settings; import android.provider.Settings.Secure; import android.text.TextUtils; + import com.android.settingslib.wrapper.LocationManagerWrapper; -import java.util.HashMap; -import java.util.Map; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -50,11 +50,11 @@ import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.shadows.ShadowSettings; +import java.util.HashMap; +import java.util.Map; + @RunWith(SettingsLibRobolectricTestRunner.class) -@Config( - manifest = TestConfig.MANIFEST_PATH, - sdk = TestConfig.SDK_VERSION, - shadows = { +@Config(shadows = { UtilsTest.ShadowSecure.class, UtilsTest.ShadowLocationManagerWrapper.class}) public class UtilsTest { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/applications/ServiceListingTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/applications/ServiceListingTest.java index fa31a7d22ae3..060b716bb435 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/applications/ServiceListingTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/applications/ServiceListingTest.java @@ -17,7 +17,6 @@ package com.android.settingslib.applications; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @@ -27,24 +26,17 @@ import android.content.ComponentName; import android.provider.Settings; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; -import com.android.settingslib.testutils.shadow.ShadowPackageManagerWrapper; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = {ShadowPackageManagerWrapper.class}) public class ServiceListingTest { private static final String TEST_SETTING = "testSetting"; private static final String TEST_INTENT = "com.example.intent"; - private static final String TEST_PERMISSION = "testPermission"; private ServiceListing mServiceListing; @@ -59,11 +51,6 @@ public class ServiceListingTest { .build(); } - @After - public void tearDown() { - ShadowPackageManagerWrapper.reset(); - } - @Test public void testCallback() { ServiceListing.Callback callback = mock(ServiceListing.Callback.class); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java index 590bc90ca818..334ea16d608e 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/A2dpProfileTest.java @@ -15,6 +15,13 @@ */ package com.android.settingslib.bluetooth; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import android.bluetooth.BluetoothA2dp; import android.bluetooth.BluetoothCodecConfig; import android.bluetooth.BluetoothCodecStatus; @@ -24,30 +31,16 @@ import android.content.Context; import android.content.res.Resources; import com.android.settingslib.R; -import com.android.settingslib.TestConfig; import com.android.settingslib.wrapper.BluetoothA2dpWrapper; 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 org.mockito.stubbing.Answer; import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class A2dpProfileTest { @Mock Context mContext; 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 1481161bcb6c..92c68e63fa0d 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 @@ -16,7 +16,6 @@ package com.android.settingslib.bluetooth; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doAnswer; @@ -30,9 +29,6 @@ import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.content.Context; -import com.android.settingslib.R; -import com.android.settingslib.TestConfig; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -43,8 +39,7 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, resourceDir = - "../../res") +@Config(resourceDir = "../../res") public class CachedBluetoothDeviceTest { private final static String DEVICE_NAME = "TestName"; private final static String DEVICE_ALIAS = "TestAlias"; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/UtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/UtilsTest.java index 5eb543ba3bae..baba267cdf55 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/UtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/UtilsTest.java @@ -22,18 +22,13 @@ import android.graphics.drawable.Drawable; import com.android.settingslib.R; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.graph.BluetoothDeviceLayerDrawable; -import com.android.settingslib.testutils.shadow.SettingsLibShadowResources; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = SettingsLibShadowResources.class) public class UtilsTest { @Test diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/AbstractPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/AbstractPreferenceControllerTest.java index 26970e1c7aff..8767923b2b39 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/AbstractPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/AbstractPreferenceControllerTest.java @@ -22,8 +22,6 @@ import android.content.Context; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; -import com.android.settingslib.TestConfig; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -31,10 +29,8 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class AbstractPreferenceControllerTest { @Mock diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java index 8bea51d1696d..5c19e61d44dc 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java @@ -28,7 +28,6 @@ import android.content.Intent; import android.util.Pair; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settingslib.TestConfig; import com.android.settingslib.SettingsLibRobolectricTestRunner; import org.junit.Before; @@ -39,14 +38,12 @@ import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; import java.util.List; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class MetricsFeatureProviderTest { private static int CATEGORY = 10; private static boolean SUBTYPE_BOOLEAN = true; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java index d558a645aeb7..ebafc594c122 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/SharedPreferenceLoggerTest.java @@ -30,9 +30,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.Pair; -import com.android.settingslib.TestConfig; import com.android.settingslib.SettingsLibRobolectricTestRunner; - import com.google.common.truth.Platform; import org.junit.Before; @@ -42,10 +40,8 @@ import org.mockito.Answers; import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class SharedPreferenceLoggerTest { private static final String TEST_TAG = "tag"; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/VisibilityLoggerMixinTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/VisibilityLoggerMixinTest.java index 1ab6afe5b99d..8b31450f8a3f 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/VisibilityLoggerMixinTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/VisibilityLoggerMixinTest.java @@ -16,7 +16,6 @@ package com.android.settingslib.core.instrumentation; import static com.android.settingslib.core.instrumentation.Instrumentable.METRICS_CATEGORY_UNKNOWN; - import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; @@ -30,12 +29,11 @@ import static org.mockito.Mockito.when; import android.app.Activity; import android.content.Context; import android.content.Intent; - import android.os.Bundle; import android.support.v4.app.FragmentActivity; + import com.android.internal.logging.nano.MetricsProto; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; @@ -44,11 +42,9 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.android.controller.ActivityController; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class VisibilityLoggerMixinTest { @Mock diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/lifecycle/LifecycleTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/lifecycle/LifecycleTest.java index ae24c079e37b..2b2bf5b6cc8b 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/lifecycle/LifecycleTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/lifecycle/LifecycleTest.java @@ -25,7 +25,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.core.lifecycle.events.OnAttach; import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu; import com.android.settingslib.core.lifecycle.events.OnDestroy; @@ -42,10 +41,8 @@ import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.android.controller.ActivityController; import org.robolectric.android.controller.FragmentController; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class LifecycleTest { private LifecycleOwner mLifecycleOwner; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/DevelopmentSettingsEnablerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/DevelopmentSettingsEnablerTest.java index 708353ebb7a0..a15f5fce558e 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/DevelopmentSettingsEnablerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/DevelopmentSettingsEnablerTest.java @@ -22,7 +22,6 @@ import android.content.Context; import android.provider.Settings; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.testutils.shadow.ShadowUserManager; import org.junit.After; @@ -33,9 +32,7 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { - ShadowUserManager.class -}) +@Config(shadows = ShadowUserManager.class) public class DevelopmentSettingsEnablerTest { private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java index aac736a94832..475e7d8c2209 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java @@ -31,18 +31,15 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class EnableAdbPreferenceControllerTest { @Mock(answer = RETURNS_DEEP_STUBS) private PreferenceScreen mScreen; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/LogdSizePreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/LogdSizePreferenceControllerTest.java index 26d357018a75..72c8d1ad3642 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/LogdSizePreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/LogdSizePreferenceControllerTest.java @@ -45,20 +45,15 @@ import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.R; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; -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.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = SystemPropertiesTestImpl.class) public class LogdSizePreferenceControllerTest { @Mock @@ -95,11 +90,6 @@ public class LogdSizePreferenceControllerTest { mController.displayPreference(mPreferenceScreen); } - @After - public void tearDown() { - SystemPropertiesTestImpl.clear(); - } - @Test public void testUpdateLogdSizeValues_lowRamEntries() { SystemProperties.set(LOW_RAM_CONFIG_PROPERTY_KEY, "true"); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/LogpersistPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/LogpersistPreferenceControllerTest.java index 050877d3ebfe..4b9bfc3f37ca 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/LogpersistPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/LogpersistPreferenceControllerTest.java @@ -28,7 +28,6 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -37,11 +36,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = SystemPropertiesTestImpl.class) public class LogpersistPreferenceControllerTest { private LifecycleOwner mLifecycleOwner; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/SystemPropPokerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/SystemPropPokerTest.java index fa7961be7979..40db478f2dc7 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/SystemPropPokerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/SystemPropPokerTest.java @@ -20,7 +20,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -29,7 +28,6 @@ import android.os.IBinder; import android.os.Parcel; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; @@ -37,10 +35,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.Spy; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class SystemPropPokerTest { @Spy diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/SystemPropertiesTestImpl.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/SystemPropertiesTestImpl.java deleted file mode 100644 index 6977e09180c5..000000000000 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/SystemPropertiesTestImpl.java +++ /dev/null @@ -1,61 +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. - */ - -package com.android.settingslib.development; - -import android.text.TextUtils; -import android.util.ArrayMap; - -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.shadows.ShadowSystemProperties; - -import java.util.Map; - -@Implements(className = "android.os.SystemProperties") -public class SystemPropertiesTestImpl extends ShadowSystemProperties { - - private static Map<String, String> sProperties = new ArrayMap<>(); - - @Implementation - public static String get(String key) { - String value = sProperties.get(key); - if (!TextUtils.isEmpty(value)) { - return value; - } else { - return ShadowSystemProperties.get(key); - } - } - - @Implementation - public static String get(String key, String def) { - String value = sProperties.get(key); - if (!TextUtils.isEmpty(value)) { - return value; - } else { - return ShadowSystemProperties.get(key, def); - } - } - - @Implementation - public static void set(String key, String val) { - sProperties.put(key, val); - } - - public static synchronized void clear() { - sProperties.clear(); - } -} diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/BluetoothAddressPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/BluetoothAddressPreferenceControllerTest.java index 1de7a7a9fb39..0385f4bd29af 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/BluetoothAddressPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/BluetoothAddressPreferenceControllerTest.java @@ -26,7 +26,6 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -39,7 +38,6 @@ import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class BluetoothAddressPreferenceControllerTest { @Mock private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/ConnectivityPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/ConnectivityPreferenceControllerTest.java index 362dbd944525..7c127e5cd5b7 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/ConnectivityPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/ConnectivityPreferenceControllerTest.java @@ -17,7 +17,6 @@ package com.android.settingslib.deviceinfo; import static com.google.common.truth.Truth.assertWithMessage; - import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doReturn; @@ -31,7 +30,6 @@ import android.content.IntentFilter; import android.os.Handler; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -40,10 +38,8 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class ConnectivityPreferenceControllerTest { @Mock private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/ImsStatusPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/ImsStatusPreferenceControllerTest.java index 112ee64a6468..d600c2093c77 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/ImsStatusPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/ImsStatusPreferenceControllerTest.java @@ -17,7 +17,6 @@ package com.android.settingslib.deviceinfo; import static com.google.common.truth.Truth.assertWithMessage; - import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -30,7 +29,6 @@ import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -43,7 +41,6 @@ import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class ImsStatusPreferenceControllerTest { @Mock private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/IpAddressPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/IpAddressPreferenceControllerTest.java index d0ecae37c849..99e582cae60a 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/IpAddressPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/IpAddressPreferenceControllerTest.java @@ -27,7 +27,6 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -35,13 +34,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; import java.util.Arrays; import java.util.List; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class IpAddressPreferenceControllerTest { @Mock private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SerialNumberPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SerialNumberPreferenceControllerTest.java index 34bbf4f14d07..a4fa7aa29bef 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SerialNumberPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SerialNumberPreferenceControllerTest.java @@ -24,7 +24,6 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; @@ -32,10 +31,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class SerialNumberPreferenceControllerTest { @Mock diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SimStatusImeiInfoPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SimStatusImeiInfoPreferenceControllerTest.java index 28409fae45e6..eaae40553d6e 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SimStatusImeiInfoPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SimStatusImeiInfoPreferenceControllerTest.java @@ -17,7 +17,6 @@ package com.android.settingslib.deviceinfo; import static com.google.common.truth.Truth.assertThat; - import static org.robolectric.shadow.api.Shadow.extract; import android.net.ConnectivityManager; @@ -25,7 +24,6 @@ import android.os.UserManager; import android.util.SparseBooleanArray; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; @@ -36,8 +34,7 @@ import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = {SimStatusImeiInfoPreferenceControllerTest.ShadowUserManager.class, +@Config(shadows = {SimStatusImeiInfoPreferenceControllerTest.ShadowUserManager.class, SimStatusImeiInfoPreferenceControllerTest.ShadowConnectivityManager.class}) public class SimStatusImeiInfoPreferenceControllerTest { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/UptimePreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/UptimePreferenceControllerTest.java index f68533ba4081..39e05faddc1a 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/UptimePreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/UptimePreferenceControllerTest.java @@ -28,7 +28,6 @@ import android.support.v7.preference.PreferenceScreen; import android.text.format.DateUtils; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -36,11 +35,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowLooper; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class UptimePreferenceControllerTest { @Mock private Context mContext; @@ -98,5 +95,4 @@ public class UptimePreferenceControllerTest { super(context, lifecycle); } } - } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java index 265a60b3325a..d546f11d9998 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/WifiMacAddressPreferenceControllerTest.java @@ -17,7 +17,6 @@ package com.android.settingslib.deviceinfo; import static com.google.common.truth.Truth.assertWithMessage; - import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -32,7 +31,6 @@ import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.R; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -40,14 +38,12 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; import java.util.Arrays; import java.util.List; @SuppressLint("HardwareIds") @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class WifiMacAddressPreferenceControllerTest { @Mock private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java index 6be44cc07194..b90f37ad5256 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java @@ -16,21 +16,17 @@ package com.android.settingslib.drawer; -import android.util.ArraySet; +import static com.google.common.truth.Truth.assertThat; -import com.android.settingslib.TestConfig; +import android.util.ArraySet; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; import java.util.Set; -import static com.google.common.truth.Truth.assertThat; - @RunWith(RobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class CategoryKeyTest { @Test @@ -64,5 +60,4 @@ public class CategoryKeyTest { assertThat(allKeys.size()).isEqualTo(15); } - } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryManagerTest.java index f099c90fc760..4efcb7ed3cde 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryManagerTest.java @@ -16,27 +16,24 @@ package com.android.settingslib.drawer; +import static com.google.common.truth.Truth.assertThat; + import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.util.Pair; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; import java.util.HashMap; import java.util.Map; -import static com.google.common.truth.Truth.assertThat; - @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class CategoryManagerTest { private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java index a395a4ab1477..fc1b22385b49 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java @@ -17,7 +17,6 @@ package com.android.settingslib.drawer; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; @@ -54,7 +53,6 @@ import android.util.Pair; import android.widget.RemoteViews; import com.android.settingslib.R; -import com.android.settingslib.TestConfig; import com.android.settingslib.suggestions.SuggestionParser; import org.junit.Before; @@ -74,9 +72,7 @@ import java.util.List; import java.util.Map; @RunWith(RobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, - sdk = TestConfig.SDK_VERSION, - shadows = {TileUtilsTest.TileUtilsShadowRemoteViews.class}) +@Config(shadows = TileUtilsTest.TileUtilsShadowRemoteViews.class) public class TileUtilsTest { private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java index fc0019d09c41..c6a1428fa34e 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java @@ -17,7 +17,6 @@ package com.android.settingslib.fuelgauge; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.doNothing; @@ -27,17 +26,14 @@ import static org.mockito.Mockito.verify; import android.os.IDeviceIdleController; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class PowerWhitelistBackendTest { private static final String PACKAGE_ONE = "com.example.packageone"; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BatteryMeterDrawableBaseTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BatteryMeterDrawableBaseTest.java index e0222329f231..49dde0e6fcfa 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BatteryMeterDrawableBaseTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BatteryMeterDrawableBaseTest.java @@ -26,8 +26,6 @@ import android.graphics.Canvas; import android.graphics.Paint; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; -import com.android.settingslib.testutils.shadow.SettingsLibShadowResources; import org.junit.Before; import org.junit.Test; @@ -35,12 +33,9 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = SettingsLibShadowResources.class) public class BatteryMeterDrawableBaseTest { private static final int CRITICAL_LEVEL = 5; private static final int PADDING = 5; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawableTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawableTest.java index 94f80d3d0ac7..37d4d1d845f5 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawableTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/graph/BluetoothDeviceLayerDrawableTest.java @@ -19,23 +19,17 @@ package com.android.settingslib.graph; import static com.google.common.truth.Truth.assertThat; import android.content.Context; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.VectorDrawable; import com.android.settingslib.R; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; -import com.android.settingslib.testutils.shadow.SettingsLibShadowResources; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = SettingsLibShadowResources.class) public class BluetoothDeviceLayerDrawableTest { private static final int RES_ID = R.drawable.ic_bt_cellphone; private static final int BATTERY_LEVEL = 15; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXmlTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXmlTest.java index c7e9262ec4d8..96b2a1433f53 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXmlTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlGeneratorFromXmlTest.java @@ -18,12 +18,10 @@ package com.android.settingslib.license; import static com.google.common.truth.Truth.assertThat; -import com.android.settingslib.TestConfig; import com.android.settingslib.SettingsLibRobolectricTestRunner; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.annotation.Config; import org.xmlpull.v1.XmlPullParserException; import java.io.ByteArrayInputStream; @@ -35,7 +33,6 @@ import java.util.HashMap; import java.util.Map; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class LicenseHtmlGeneratorFromXmlTest { private static final String VALILD_XML_STRING = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderTest.java index 1a6f30c49e46..5095f508997e 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/license/LicenseHtmlLoaderTest.java @@ -17,7 +17,6 @@ package com.android.settingslib.license; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; @@ -26,7 +25,6 @@ import static org.mockito.Mockito.verify; import android.content.Context; -import com.android.settingslib.TestConfig; import com.android.settingslib.SettingsLibRobolectricTestRunner; import org.junit.Before; @@ -34,13 +32,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; import java.io.File; import java.util.ArrayList; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class LicenseHtmlLoaderTest { @Mock private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAppsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAppsTest.java index 226166b3e632..5e0fcefc5209 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAppsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/location/RecentLocationAppsTest.java @@ -1,8 +1,8 @@ package com.android.settingslib.location; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.when; -import static com.google.common.truth.Truth.assertThat; import android.app.AppOpsManager; import android.app.AppOpsManager.OpEntry; @@ -15,23 +15,21 @@ import android.content.res.Resources; import android.os.Process; import android.os.UserHandle; import android.os.UserManager; + import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.TimeUnit; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config( - manifest = TestConfig.MANIFEST_PATH, - sdk = TestConfig.SDK_VERSION) public class RecentLocationAppsTest { private static final int TEST_UID = 1234; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/EnableZenModeDialogTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/EnableZenModeDialogTest.java index 777cd98e2ef7..9b5da4ae1f95 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/EnableZenModeDialogTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/EnableZenModeDialogTest.java @@ -18,21 +18,18 @@ package com.android.settingslib.notification; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; - import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; -import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.net.Uri; import android.service.notification.Condition; import android.view.LayoutInflater; -import com.android.settingslib.TestConfig; import com.android.settingslib.SettingsLibRobolectricTestRunner; import org.junit.Before; @@ -41,10 +38,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class EnableZenModeDialogTest { private EnableZenModeDialog mController; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionControllerMixinTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionControllerMixinTest.java index ed1c405f8a81..cfa16b8a952a 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionControllerMixinTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionControllerMixinTest.java @@ -18,9 +18,7 @@ package com.android.settingslib.suggestions; import static android.arch.lifecycle.Lifecycle.Event.ON_START; import static android.arch.lifecycle.Lifecycle.Event.ON_STOP; - import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -30,7 +28,6 @@ import android.arch.lifecycle.LifecycleOwner; import android.content.ComponentName; import android.content.Context; -import com.android.settingslib.TestConfig; import com.android.settingslib.SettingsLibRobolectricTestRunner; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -44,10 +41,7 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = { - ShadowSuggestionController.class - }) +@Config(shadows = ShadowSuggestionController.class) public class SuggestionControllerMixinTest { @Mock diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java index db599a776d23..d05bcfd31685 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java @@ -17,11 +17,9 @@ package com.android.settingslib.suggestions; import static com.google.common.truth.Truth.assertThat; - import static org.robolectric.RuntimeEnvironment.application; import static org.robolectric.shadow.api.Shadow.extract; -import android.app.ApplicationPackageManager; import android.content.ComponentName; import android.content.Intent; import android.content.SharedPreferences; @@ -30,28 +28,22 @@ import android.os.Bundle; import android.preference.PreferenceManager; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.TileUtilsTest; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.shadows.ShadowApplicationPackageManager; +import org.robolectric.shadows.ShadowPackageManager; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, - shadows = SuggestionParserTest.TestPackageManager.class) public class SuggestionParserTest { - private TestPackageManager mPackageManager; + private ShadowPackageManager mPackageManager; private SuggestionParser mSuggestionParser; private SuggestionCategory mMultipleCategory; private SuggestionCategory mExclusiveCategory; @@ -205,13 +197,4 @@ public class SuggestionParserTest { mSuggestionParser.readSuggestions( mMultipleCategory, mSuggestionsAfterDismiss, isSmartSuggestionEnabled); } - - @Implements(ApplicationPackageManager.class) - public static class TestPackageManager extends ShadowApplicationPackageManager { - - @Implementation - public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, int flags, int userId) { - return super.queryIntentActivities(intent, flags); - } - } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/SettingsLibShadowResources.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/SettingsLibShadowResources.java deleted file mode 100644 index b53cc371c641..000000000000 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/SettingsLibShadowResources.java +++ /dev/null @@ -1,49 +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. - */ - -package com.android.settingslib.testutils.shadow; - -import static org.robolectric.shadow.api.Shadow.directlyOn; - -import android.content.res.Resources; -import android.content.res.Resources.NotFoundException; -import android.support.annotation.ArrayRes; - -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.annotation.RealObject; -import org.robolectric.shadows.ShadowResources; - -/** - * Shadow Resources to handle resource references that Robolectric shadows cannot - * handle because they are too new or private. - */ -@Implements(Resources.class) -public class SettingsLibShadowResources extends ShadowResources { - - @RealObject - public Resources realResources; - - @Implementation - public int[] getIntArray(@ArrayRes int id) throws NotFoundException { - // The Robolectric has resource mismatch for these values, so we need to stub it here - if (id == com.android.settingslib.R.array.batterymeter_bolt_points - || id == com.android.settingslib.R.array.batterymeter_plus_points) { - return new int[2]; - } - return directlyOn(realResources, Resources.class).getIntArray(id); - } -} diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowPackageManagerWrapper.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowPackageManagerWrapper.java deleted file mode 100644 index 1fdca27259e2..000000000000 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowPackageManagerWrapper.java +++ /dev/null @@ -1,54 +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. - */ - -package com.android.settingslib.testutils.shadow; - -import android.content.Intent; -import android.content.pm.ResolveInfo; -import android.util.ArrayMap; - -import com.android.settingslib.wrapper.PackageManagerWrapper; - -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * Shadow for {@link PackageManagerWrapper} to allow stubbing hidden methods. - */ -@Implements(PackageManagerWrapper.class) -public class ShadowPackageManagerWrapper { - private static final Map<Intent, List<ResolveInfo>> intentServices = new ArrayMap<>(); - - @Implementation - public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int i, int user) { - List<ResolveInfo> list = intentServices.get(intent); - return list != null ? list : Collections.emptyList(); - } - - public static void addResolveInfoForIntent(Intent intent, ResolveInfo info) { - List<ResolveInfo> infoList = intentServices.computeIfAbsent(intent, k -> new ArrayList<>()); - infoList.add(info); - } - - public static void reset() { - intentServices.clear(); - } -} diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowUserManager.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowUserManager.java index c8b3269da09b..a3e1bc8418c7 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowUserManager.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/testutils/shadow/ShadowUserManager.java @@ -25,7 +25,7 @@ import org.robolectric.annotation.Implements; import org.robolectric.annotation.Resetter; import org.robolectric.shadow.api.Shadow; -@Implements(UserManager.class) +@Implements(value = UserManager.class, inheritImplementationMethods = true) public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager { private boolean mAdminUser; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java index f93210f264ff..9285148f7ae2 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/PowerUtilTest.java @@ -20,20 +20,19 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; import android.content.Context; + import com.android.settingslib.R; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; -import com.android.settingslib.utils.PowerUtil; -import java.time.Duration; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; + +import java.time.Duration; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class PowerUtilTest { public static final String TEST_BATTERY_LEVEL_10 = "10%"; public static final String FIFTEEN_MIN_FORMATTED = "15m"; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/StringUtilTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/StringUtilTest.java index d5e3cdb654e5..47dd02290ea1 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/StringUtilTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/StringUtilTest.java @@ -23,16 +23,15 @@ import android.content.Context; import android.text.SpannableStringBuilder; import android.text.format.DateUtils; import android.text.style.TtsSpan; + import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class StringUtilTest { private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/ThreadUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/ThreadUtilsTest.java index 5f6a5c8bcbd1..83a9d5be0ae7 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/ThreadUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/utils/ThreadUtilsTest.java @@ -19,16 +19,12 @@ package com.android.settingslib.utils; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; -import com.android.settingslib.TestConfig; - import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowLooper; @RunWith(RobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class ThreadUtilsTest { @Test diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AnimatedImageViewTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AnimatedImageViewTest.java index 2c9c8685af50..36abd204d088 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AnimatedImageViewTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AnimatedImageViewTest.java @@ -16,21 +16,19 @@ package com.android.settingslib.widget; +import static com.google.common.truth.Truth.assertThat; + import android.app.Activity; import android.graphics.drawable.AnimatedRotateDrawable; import android.view.View; -import com.android.settingslib.TestConfig; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; - -import static com.google.common.truth.Truth.assertThat; @RunWith(RobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class AnimatedImageViewTest { private AnimatedImageView mAnimatedImageView; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceMixinTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceMixinTest.java index 88c57b50f87e..8071c6db4cfd 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceMixinTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceMixinTest.java @@ -29,7 +29,6 @@ import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -37,11 +36,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class FooterPreferenceMixinTest { @Mock diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java index 5d01027f9505..ff11b803c053 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/FooterPreferenceTest.java @@ -16,6 +16,8 @@ package com.android.settingslib.widget; +import static com.google.common.truth.Truth.assertThat; + import android.content.Context; import android.support.v7.preference.PreferenceViewHolder; import android.text.method.LinkMovementMethod; @@ -24,18 +26,13 @@ import android.widget.TextView; import com.android.settingslib.R; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; -import static com.google.common.truth.Truth.assertThat; - @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class FooterPreferenceTest { private Context mContext; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java index 3fee16bd12ac..ee2c2ffc4b4b 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/AccessPointPreferenceTest.java @@ -25,7 +25,6 @@ import android.content.Context; import android.graphics.drawable.ColorDrawable; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; @@ -33,10 +32,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class AccessPointPreferenceTest { private Context mContext = RuntimeEnvironment.application; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/TimestampedScoredNetworkTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/TimestampedScoredNetworkTest.java index b2d9d67bd104..f0e8c66e8544 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/TimestampedScoredNetworkTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/TimestampedScoredNetworkTest.java @@ -23,16 +23,14 @@ import android.net.WifiKey; import android.os.Parcel; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; -import java.util.Date; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; + +import java.util.Date; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class TimestampedScoredNetworkTest { private TimestampedScoredNetwork impl; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiUtilsTest.java index 9310b73afdcc..ea8ecbad99bd 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiUtilsTest.java @@ -16,7 +16,6 @@ package com.android.settingslib.wifi; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.any; import static org.mockito.Mockito.when; @@ -35,7 +34,6 @@ import android.text.format.DateUtils; import com.android.settingslib.R; import com.android.settingslib.SettingsLibRobolectricTestRunner; -import com.android.settingslib.TestConfig; import org.junit.Before; import org.junit.Test; @@ -43,12 +41,10 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; import java.util.ArrayList; @RunWith(SettingsLibRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class WifiUtilsTest { private static final String TEST_SSID = "\"test_ssid\""; private static final String TEST_BSSID = "00:00:00:00:00:00"; diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index f13d9f7ec806..35c4d59752d3 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -110,7 +110,7 @@ <uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> <!-- Keyguard --> - <uses-permission android:name="com.android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS" /> + <uses-permission android:name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS" /> <uses-permission android:name="android.permission.CONTROL_KEYGUARD" /> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml index 156da2e3cc2d..d9075aa1b72c 100644 --- a/packages/SystemUI/res-keyguard/values-da/strings.xml +++ b/packages/SystemUI/res-keyguard/values-da/strings.xml @@ -53,6 +53,8 @@ <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Næste alarm er indstillet til <xliff:g id="ALARM">%1$s</xliff:g>"</string> <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"Slet"</string> <string name="disable_carrier_button_text" msgid="6914341927421916114">"Deaktiver eSIM"</string> + <string name="error_disable_esim_title" msgid="4852978431156228006">"eSIM kan ikke deaktiveres"</string> + <string name="error_disable_esim_msg" msgid="676694908770135639">"eSIM kan ikke deaktiveres på grund af en fejl."</string> <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"Enter"</string> <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"Har du glemt mønsteret?"</string> <string name="kg_wrong_pattern" msgid="7620081431514773802">"Forkert mønster"</string> @@ -65,7 +67,7 @@ <string name="kg_pattern_instructions" msgid="5547646893001491340">"Tegn dit mønster"</string> <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"Angiv pinkoden til SIM-kortet."</string> <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"Angiv pinkoden til SIM-kortet fra \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string> - <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"Deaktiver eSIM for at bruge enheden uden mobiltjeneste."</string> + <string name="kg_sim_lock_esim_instructions" msgid="4416732549172148542">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> Deaktiver eSIM for at bruge enheden uden mobiltjeneste."</string> <string name="kg_pin_instructions" msgid="4069609316644030034">"Indtast pinkode"</string> <string name="kg_password_instructions" msgid="136952397352976538">"Angiv adgangskode"</string> <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"SIM-kortet er nu deaktiveret. Indtast PUK-koden for at fortsætte. Kontakt mobilselskabet for at få flere oplysninger."</string> diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml index 3d79ae2a4825..a5aa06e476d9 100644 --- a/packages/SystemUI/res-keyguard/values-eu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml @@ -53,6 +53,8 @@ <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Hurrengo alarmak ordu honetan joko du: <xliff:g id="ALARM">%1$s</xliff:g>"</string> <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"Ezabatu"</string> <string name="disable_carrier_button_text" msgid="6914341927421916114">"Desgaitu eSIM txartela"</string> + <string name="error_disable_esim_title" msgid="4852978431156228006">"Ezin da desgaitu eSIM txartela"</string> + <string name="error_disable_esim_msg" msgid="676694908770135639">"Errore bat gertatu da eta ezin da desgaitu eSIM txartela."</string> <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"Sartu"</string> <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"Eredua ahaztu zaizu"</string> <string name="kg_wrong_pattern" msgid="7620081431514773802">"Eredu hori ez da zuzena"</string> @@ -65,7 +67,7 @@ <string name="kg_pattern_instructions" msgid="5547646893001491340">"Marraztu eredua"</string> <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"Idatzi SIM txartelaren PIN kodea."</string> <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"Idatzi \"<xliff:g id="CARRIER">%1$s</xliff:g>\" operadorearen SIM txartelaren PIN kodea."</string> - <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"Desgaitu eSIM txartela gailua zerbitzu mugikorrik gabe erabiltzeko."</string> + <string name="kg_sim_lock_esim_instructions" msgid="4416732549172148542">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> Desgaitu eSIM txartela gailua zerbitzu mugikorrik gabe erabiltzeko."</string> <string name="kg_pin_instructions" msgid="4069609316644030034">"Idatzi PIN kodea"</string> <string name="kg_password_instructions" msgid="136952397352976538">"Idatzi pasahitza"</string> <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"Desgaitu egin da SIM txartela. Aurrera egiteko, idatzi PUK kodea. Xehetasunak lortzeko, jarri operadorearekin harremanetan."</string> diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml index 29369351f8a6..fec903ef295f 100644 --- a/packages/SystemUI/res-keyguard/values-hy/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml @@ -53,6 +53,8 @@ <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Հաջորդ զարթուցիչը դրված է <xliff:g id="ALARM">%1$s</xliff:g>-ի վրա"</string> <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"Ջնջել"</string> <string name="disable_carrier_button_text" msgid="6914341927421916114">"Անջատել էլեկտրոնային SIM քարտը"</string> + <string name="error_disable_esim_title" msgid="4852978431156228006">"Չհաջողվեց անջատել eSIM-ը"</string> + <string name="error_disable_esim_msg" msgid="676694908770135639">"Սխալի պատճառով չհաջողվեց անջատել eSIM-ը։"</string> <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"Մուտքի ստեղն"</string> <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"Մոռացել եմ նախշը"</string> <string name="kg_wrong_pattern" msgid="7620081431514773802">"Նախշը սխալ է"</string> @@ -65,7 +67,7 @@ <string name="kg_pattern_instructions" msgid="5547646893001491340">"Մուտքագրեք նախշը"</string> <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"Մուտքագրեք SIM քարտի PIN կոդը։"</string> <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"Մուտքագրեք SIM քարտի PIN կոդը «<xliff:g id="CARRIER">%1$s</xliff:g>»-ի համար:"</string> - <string name="kg_sim_lock_instructions_esim" msgid="4957650659201013804">"Անջատել էլեկտրոնային SIM քարտը՝ սարքն առանց բջջային ծառայությունների օգտագործելու համար:"</string> + <string name="kg_sim_lock_esim_instructions" msgid="4416732549172148542">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> Անջատեք eSIM-ը՝ սարքն առանց բջջային կապի օգտագործելու համար։"</string> <string name="kg_pin_instructions" msgid="4069609316644030034">"Մուտքագրեք PIN-ը"</string> <string name="kg_password_instructions" msgid="136952397352976538">"Մուտքագրեք գաղտնաբառը"</string> <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"SIM քարտն այժմ անջատված է: Շարունակելու համար մուտքագրեք PUK կոդը: Մանրամասն տեղեկություններ ստանալու համար դիմեք օպերատորին:"</string> diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml index 3272cb28aa5b..07198c7cf7ba 100644 --- a/packages/SystemUI/res-keyguard/values-uz/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml @@ -53,10 +53,8 @@ <string name="keyguard_accessibility_next_alarm" msgid="5835196989158584991">"Signal <xliff:g id="ALARM">%1$s</xliff:g> da chalinadi."</string> <string name="keyboardview_keycode_delete" msgid="6883116827512721630">"O‘chirib tashlash"</string> <string name="disable_carrier_button_text" msgid="6914341927421916114">"eSIMni faolsizlantirish"</string> - <!-- no translation found for error_disable_esim_title (4852978431156228006) --> - <skip /> - <!-- no translation found for error_disable_esim_msg (676694908770135639) --> - <skip /> + <string name="error_disable_esim_title" msgid="4852978431156228006">"eSIM faolsizlantirilmadi"</string> + <string name="error_disable_esim_msg" msgid="676694908770135639">"Xatolik tufayli eSIM faolsizlantirilmadi."</string> <string name="keyboardview_keycode_enter" msgid="4505833604411016668">"Enter tugmasi"</string> <string name="kg_forgot_pattern_button_text" msgid="534245177645252620">"Grafik kalit esimdan chiqdi"</string> <string name="kg_wrong_pattern" msgid="7620081431514773802">"Grafik kalit xato"</string> @@ -69,8 +67,7 @@ <string name="kg_pattern_instructions" msgid="5547646893001491340">"Grafik kalit chizing"</string> <string name="kg_sim_pin_instructions" msgid="6389000973113699187">"SIM karta PIN kodini kiriting."</string> <string name="kg_sim_pin_instructions_multi" msgid="1643757228644271861">"“<xliff:g id="CARRIER">%1$s</xliff:g>” SIM kartasi PIN kodini kiriting."</string> - <!-- no translation found for kg_sim_lock_esim_instructions (4416732549172148542) --> - <skip /> + <string name="kg_sim_lock_esim_instructions" msgid="4416732549172148542">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> Qurilmadan mobil xizmatlarsiz foydalanish uchun eSIMni faolsizlantiring."</string> <string name="kg_pin_instructions" msgid="4069609316644030034">"PIN kodni kiriting"</string> <string name="kg_password_instructions" msgid="136952397352976538">"Parol kiriting"</string> <string name="kg_puk_enter_puk_hint" msgid="2288964170039899277">"SIM karta hozir o‘chirilgan. Davom etish uchun PUK kodni kiriting. Batafsil axborot olish uchun tarmoq operatori bilan bog‘laning."</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 39895acb1b94..9ebd49245a76 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -103,12 +103,9 @@ <string name="camera_label" msgid="7261107956054836961">"åbn kamera"</string> <string name="recents_caption_resize" msgid="3517056471774958200">"Vælg nyt opgavelayout"</string> <string name="cancel" msgid="6442560571259935130">"Annuller"</string> - <!-- no translation found for accessibility_fingerprint_dialog_fingerprint_icon (3125122495414253226) --> - <skip /> - <!-- no translation found for accessibility_fingerprint_dialog_app_icon (3228052542929174609) --> - <skip /> - <!-- no translation found for accessibility_fingerprint_dialog_help_area (5730471601819225159) --> - <skip /> + <string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Ikon for fingeraftryk"</string> + <string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Appens ikon"</string> + <string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Område med hjælpemeddelelse"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knap for kompatibilitetszoom."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom mindre til større skærm."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth tilsluttet."</string> @@ -311,6 +308,7 @@ <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi slået fra"</string> <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi er slået til"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Der er ingen tilgængelige Wi-Fi-netværk"</string> + <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Alarm"</string> <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Caster"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Enhed uden navn"</string> @@ -327,9 +325,11 @@ <string name="quick_settings_connecting" msgid="47623027419264404">"Opretter forbindelse…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Netdeling"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> - <!-- no translation found for quick_settings_hotspot_secondary_label_transient (7161046712706277215) --> - <skip /> - <!-- no translation found for quick_settings_hotspot_secondary_label_num_devices (2324635800672199428) --> + <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Aktiverer…"</string> + <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428"> + <item quantity="one">%d enhed</item> + <item quantity="other">%d enheder</item> + </plurals> <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Underretninger"</string> <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Lommelygte"</string> <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Mobildata"</string> @@ -339,10 +339,8 @@ <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> brugt"</string> <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Grænse: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advarsel ved <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> - <!-- no translation found for quick_settings_work_mode_on_label (3421274215098764735) --> - <skip /> - <!-- no translation found for quick_settings_work_mode_off_label (8856918707867192186) --> - <skip /> + <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Arbejdsprofil"</string> + <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Underretninger og apps er slået fra"</string> <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Nattelys"</string> <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Tænd ved solnedgang"</string> <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Indtil solopgang"</string> @@ -360,8 +358,6 @@ <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> er deaktiveret i sikker tilstand."</string> <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Ryd alle"</string> <string name="recents_drag_hint_message" msgid="2649739267073203985">"Træk hertil for at bruge delt skærm"</string> - <!-- no translation found for recents_swipe_up_onboarding (3824607135920170001) --> - <skip /> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Opdel vandret"</string> <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Opdel lodret"</string> <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Opdel brugerdefineret"</string> @@ -502,11 +498,18 @@ <string name="volume_zen_end_now" msgid="6930243045593601084">"Deaktiver nu"</string> <string name="accessibility_volume_expand" msgid="5946812790999244205">"Udvid"</string> <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Skjul"</string> + <string name="accessibility_output_chooser" msgid="8185317493017988680">"Skift enhed til lydudgang"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Skærmen er fastgjort"</string> <string name="screen_pinning_description" msgid="8909878447196419623">"Dette fastholder skærmen i visningen, indtil du frigør den. Tryk på Tilbage og Overblik, og hold fingeren nede for at frigøre skærmen."</string> + <string name="screen_pinning_description_recents_invisible" msgid="8281145542163727971">"Dette fastholder skærmen i visningen, indtil du frigør den. Hold Tilbage og Startskærm nede for at frigøre skærmen."</string> <string name="screen_pinning_description_accessible" msgid="426190689254018656">"Dette fastholder skærmen i visningen, indtil du frigør den. Tryk på Tilbage, og hold fingeren nede for at frigøre skærmen."</string> + <string name="screen_pinning_description_recents_invisible_accessible" msgid="6134833683151189507">"Dette fastholder skærmen i visningen, indtil du frigør den. Hold Startskærm nede for at frigøre skærmen."</string> + <string name="screen_pinning_toast" msgid="2266705122951934150">"Hold knapperne Tilbage og Oversigt nede for at frigøre skærmen"</string> + <string name="screen_pinning_toast_recents_invisible" msgid="8252402309499161281">"Hold knapperne Tilbage og Startskærm nede for at frigøre skærmen"</string> <string name="screen_pinning_positive" msgid="3783985798366751226">"OK, det er forstået"</string> <string name="screen_pinning_negative" msgid="3741602308343880268">"Nej tak"</string> + <string name="screen_pinning_start" msgid="1022122128489278317">"Skærmen blev fastgjort"</string> + <string name="screen_pinning_exit" msgid="5187339744262325372">"Skærmen blev frigjort"</string> <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vil du skjule <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Den vises igen, næste gang du aktiverer den i indstillingerne."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skjul"</string> @@ -586,8 +589,7 @@ <string name="power_notification_controls_description" msgid="4372459941671353358">"Med kontrolelementer til underretninger om strøm kan du konfigurere et vigtighedsniveau fra 0 til 5 for en apps underretninger. \n\n"<b>"Niveau 5"</b>\n"- Vis øverst på listen over underretninger \n- Tillad afbrydelse af fuld skærm \n- Se altid smugkig \n\n"<b>"Niveau 4"</b>\n"- Ingen afbrydelse af fuld skærm \n- Se altid smugkig \n\n"<b>"Niveau 3"</b>\n"- Ingen afbrydelse af fuld skærm \n- Se aldrig smugkig \n\n"<b>"Niveau 2"</b>\n"- Ingen afbrydelse af fuld skærm \n Se aldrig smugkig \n- Ingen lyd og vibration \n\n"<b>"Niveau 1"</b>\n"- Ingen afbrydelse af fuld skærm \n- Se aldrig smugkig \n- Ingen lyd eller vibration \n- Skjul fra låseskærm og statusbjælke \n- Vis nederst på listen over underretninger \n\n"<b>"Niveau 0"</b>\n"- Bloker alle underretninger fra appen."</string> <string name="notification_header_default_channel" msgid="7506845022070889909">"Underretninger"</string> <string name="notification_channel_disabled" msgid="344536703863700565">"Du får ikke længere vist disse underretninger"</string> - <!-- no translation found for inline_blocking_helper (3055064577771478591) --> - <skip /> + <string name="inline_blocking_helper" msgid="3055064577771478591">"Du afviser som regel disse underretninger. \nVil du blive ved med at se dem?"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"Vil du fortsætte med at se disse underretninger?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"Stop underretninger"</string> <string name="inline_keep_button" msgid="6665940297019018232">"Fortsæt med at vise underretninger"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 1c46eba1d988..9b52656d04a5 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -103,12 +103,9 @@ <string name="camera_label" msgid="7261107956054836961">"ireki kamera"</string> <string name="recents_caption_resize" msgid="3517056471774958200">"Hautatu zereginen diseinua"</string> <string name="cancel" msgid="6442560571259935130">"Utzi"</string> - <!-- no translation found for accessibility_fingerprint_dialog_fingerprint_icon (3125122495414253226) --> - <skip /> - <!-- no translation found for accessibility_fingerprint_dialog_app_icon (3228052542929174609) --> - <skip /> - <!-- no translation found for accessibility_fingerprint_dialog_help_area (5730471601819225159) --> - <skip /> + <string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Hatz-markaren ikonoa"</string> + <string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Aplikazioaren ikonoa"</string> + <string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Laguntza-mezuaren eremua"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Zoom-bateragarritasunaren botoia."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Handiagotu pantaila txikia."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetootha konektatuta."</string> @@ -313,6 +310,7 @@ <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi konexioa desaktibatuta"</string> <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Aktibatuta dago Wi-Fi konexioa"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Ez dago Wi-Fi sarerik erabilgarri"</string> + <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Alarma"</string> <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Igortzen"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Izenik gabeko gailua"</string> @@ -329,9 +327,11 @@ <string name="quick_settings_connecting" msgid="47623027419264404">"Konektatzen…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Konexioa partekatzea"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Sare publikoa"</string> - <!-- no translation found for quick_settings_hotspot_secondary_label_transient (7161046712706277215) --> - <skip /> - <!-- no translation found for quick_settings_hotspot_secondary_label_num_devices (2324635800672199428) --> + <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Aktibatzen…"</string> + <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428"> + <item quantity="other">%d gailu</item> + <item quantity="one">%d gailu</item> + </plurals> <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Jakinarazpenak"</string> <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Linterna"</string> <string name="quick_settings_cellular_detail_title" msgid="3661194685666477347">"Datu mugikorrak"</string> @@ -341,10 +341,8 @@ <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> erabilita"</string> <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Muga: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Abisua: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> - <!-- no translation found for quick_settings_work_mode_on_label (3421274215098764735) --> - <skip /> - <!-- no translation found for quick_settings_work_mode_off_label (8856918707867192186) --> - <skip /> + <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Laneko profila"</string> + <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Jakinarazpenak eta aplikazioak desaktibatuta daude"</string> <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Gaueko argia"</string> <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Ilunabarrean"</string> <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Ilunabarrera arte"</string> @@ -362,8 +360,6 @@ <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> desgaituta dago modu seguruan."</string> <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Garbitu guztiak"</string> <string name="recents_drag_hint_message" msgid="2649739267073203985">"Arrastatu hau pantaila zatitzeko"</string> - <!-- no translation found for recents_swipe_up_onboarding (3824607135920170001) --> - <skip /> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Zatitze horizontala"</string> <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Zatitze bertikala"</string> <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Zatitze pertsonalizatua"</string> @@ -504,11 +500,18 @@ <string name="volume_zen_end_now" msgid="6930243045593601084">"Desaktibatu"</string> <string name="accessibility_volume_expand" msgid="5946812790999244205">"Zabaldu"</string> <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Tolestu"</string> + <string name="accessibility_output_chooser" msgid="8185317493017988680">"Aldatu irteerako gailua"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Pantaila ainguratuta dago"</string> <string name="screen_pinning_description" msgid="8909878447196419623">"Horrela, ikusgai egongo da aingura kendu arte. Aingura kentzeko, eduki sakatuta \"Atzera\" eta \"Ikuspegi orokorra\" botoiak."</string> + <string name="screen_pinning_description_recents_invisible" msgid="8281145542163727971">"Horrela, ikusgai egongo da aingura kendu arte. Aingura kentzeko, eduki sakatuta Atzera eta Hasiera botoiak."</string> <string name="screen_pinning_description_accessible" msgid="426190689254018656">"Horrela, ikusgai egongo da aingura kendu arte. Aingura kentzeko, eduki sakatuta \"Ikuspegi orokorra\" botoia."</string> + <string name="screen_pinning_description_recents_invisible_accessible" msgid="6134833683151189507">"Horrela, ikusgai egongo da aingura kendu arte. Aingura kentzeko, eduki sakatuta Hasiera botoia."</string> + <string name="screen_pinning_toast" msgid="2266705122951934150">"Pantailari aingura kentzeko, eduki sakatuta Atzera eta Ikuspegi orokorra botoiak"</string> + <string name="screen_pinning_toast_recents_invisible" msgid="8252402309499161281">"Pantailari aingura kentzeko, eduki sakatuta Atzera eta Hasiera botoiak"</string> <string name="screen_pinning_positive" msgid="3783985798366751226">"Ados"</string> <string name="screen_pinning_negative" msgid="3741602308343880268">"Ez, eskerrik asko"</string> + <string name="screen_pinning_start" msgid="1022122128489278317">"Ainguratu da pantaila"</string> + <string name="screen_pinning_exit" msgid="5187339744262325372">"Kendu zaio aingura pantailari"</string> <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ezkutatu nahi duzu?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ezarpenetan aktibatzen duzun hurrengoan agertuko da berriro."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ezkutatu"</string> @@ -588,8 +591,7 @@ <string name="power_notification_controls_description" msgid="4372459941671353358">"Bateria-mailaren arabera jakinarazpenak kontrolatzeko aukerekin, 0 eta 5 bitarteko garrantzi-mailetan sailka ditzakezu aplikazioen jakinarazpenak. \n\n"<b>"5. maila"</b>" \n- Erakutsi jakinarazpenen zerrendaren goialdean. \n- Baimendu etetea pantaila osoko moduan zaudenean. \n- Agerrarazi beti jakinarazpenak. \n\n"<b>"4. maila"</b>" \n- Galarazi etetea pantaila osoko moduan zaudenean. \n- Agerrarazi beti jakinarazpenak. \n\n"<b>"3. maila"</b>" \n- Galarazi etetea pantaila osoko moduan zaudenean. \n- Ez agerrarazi jakinarazpenik inoiz. \n\n"<b>"2. maila"</b>" \n- Galarazi etetea pantaila osoko moduan zaudenean. \n- Ez agerrarazi jakinarazpenik inoiz. \n- Ez egin soinurik edo dardararik inoiz. \n\n"<b>"1. maila"</b>" \n- Galarazi etetea pantaila osoko moduan zaudenean. \n- Ez agerrarazi jakinarazpenik inoiz. \n- Ez egin soinurik edo dardararik inoiz. \n- Ezkutatu pantaila blokeatutik eta egoera-barratik. \n- Erakutsi jakinarazpenen zerrendaren behealdean. \n\n"<b>"0. maila"</b>" \n- Blokeatu aplikazioaren jakinarazpen guztiak."</string> <string name="notification_header_default_channel" msgid="7506845022070889909">"Jakinarazpenak"</string> <string name="notification_channel_disabled" msgid="344536703863700565">"Aurrerantzean ez duzu ikusiko horrelako jakinarazpenik"</string> - <!-- no translation found for inline_blocking_helper (3055064577771478591) --> - <skip /> + <string name="inline_blocking_helper" msgid="3055064577771478591">"Baztertu egin ohi dituzu jakinarazpen hauek. \nHaiek erakusten jarraitzea nahi duzu?"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"Jakinarazpenak erakusten jarraitzea nahi duzu?"</string> <string name="inline_stop_button" msgid="4172980096860941033">"Blokeatu jakinarazpenak"</string> <string name="inline_keep_button" msgid="6665940297019018232">"Jarraitu erakusten"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 56ca97c2a67f..fe8f6d55193a 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -310,8 +310,7 @@ <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi désactivé"</string> <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi activé"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Aucun réseau Wi-Fi à proximité"</string> - <!-- no translation found for quick_settings_alarm_title (2416759007342260676) --> - <skip /> + <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Alarme"</string> <string name="quick_settings_cast_title" msgid="7709016546426454729">"Diffuser"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Diffusion"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Appareil sans nom"</string> @@ -361,7 +360,6 @@ <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> est désactivée en mode sans échec."</string> <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Effacer tout"</string> <string name="recents_drag_hint_message" msgid="2649739267073203985">"Glissez l\'élément ici pour utiliser l\'écran partagé"</string> - <string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Balayez vers le haut pour changer d\'application"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string> <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string> <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string> @@ -505,21 +503,15 @@ <string name="accessibility_output_chooser" msgid="8185317493017988680">"Changer d\'appareil de sortie"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"L\'écran est épinglé"</string> <string name="screen_pinning_description" msgid="8909878447196419623">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur « Retour » et « Aperçu »."</string> - <!-- no translation found for screen_pinning_description_recents_invisible (8281145542163727971) --> - <skip /> + <string name="screen_pinning_description_recents_invisible" msgid="8281145542163727971">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur les touches Retour et Accueil."</string> <string name="screen_pinning_description_accessible" msgid="426190689254018656">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur « Aperçu »."</string> - <!-- no translation found for screen_pinning_description_recents_invisible_accessible (6134833683151189507) --> - <skip /> - <!-- no translation found for screen_pinning_toast (2266705122951934150) --> - <skip /> - <!-- no translation found for screen_pinning_toast_recents_invisible (8252402309499161281) --> - <skip /> + <string name="screen_pinning_description_recents_invisible_accessible" msgid="6134833683151189507">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur la touche Accueil."</string> + <string name="screen_pinning_toast" msgid="2266705122951934150">"Pour annuler l\'épinglage de cet écran, maintenez le doigt sur les touches Retour et Aperçu."</string> + <string name="screen_pinning_toast_recents_invisible" msgid="8252402309499161281">"Pour annuler l\'épinglage de cet écran, maintenez le doigt sur les touches Retour et Accueil."</string> <string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string> <string name="screen_pinning_negative" msgid="3741602308343880268">"Non, merci"</string> - <!-- no translation found for screen_pinning_start (1022122128489278317) --> - <skip /> - <!-- no translation found for screen_pinning_exit (5187339744262325372) --> - <skip /> + <string name="screen_pinning_start" msgid="1022122128489278317">"Écran épinglé"</string> + <string name="screen_pinning_exit" msgid="5187339744262325372">"Épinglage d\'écran annulé"</string> <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Masquer <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Cet élément réapparaîtra la prochaine fois que vous l\'activerez dans les paramètres."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Masquer"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 33d88217e270..5dc1dfae6619 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -103,12 +103,9 @@ <string name="camera_label" msgid="7261107956054836961">"բացել ֆոտոխցիկը"</string> <string name="recents_caption_resize" msgid="3517056471774958200">"Ընտրել առաջադրանքի նոր դասավորություն"</string> <string name="cancel" msgid="6442560571259935130">"Չեղարկել"</string> - <!-- no translation found for accessibility_fingerprint_dialog_fingerprint_icon (3125122495414253226) --> - <skip /> - <!-- no translation found for accessibility_fingerprint_dialog_app_icon (3228052542929174609) --> - <skip /> - <!-- no translation found for accessibility_fingerprint_dialog_help_area (5730471601819225159) --> - <skip /> + <string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="3125122495414253226">"Մատնահետքի պատկերակ"</string> + <string name="accessibility_fingerprint_dialog_app_icon" msgid="3228052542929174609">"Հավելվածի պատկերակ"</string> + <string name="accessibility_fingerprint_dialog_help_area" msgid="5730471601819225159">"Օգնության հաղորդագրության դաշտ"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Համատեղելիության խոշորացման կոճակը:"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Դիտափոխել փոքրից ավելի մեծ էկրան:"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-ը միացված է:"</string> @@ -311,6 +308,7 @@ <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi-ը անջատված է"</string> <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_alarm_title" msgid="2416759007342260676">"Զարթուցիչ"</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> @@ -327,9 +325,11 @@ <string name="quick_settings_connecting" msgid="47623027419264404">"Միանում է..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Մոդեմի ռեժիմ"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Թեժ կետ"</string> - <!-- no translation found for quick_settings_hotspot_secondary_label_transient (7161046712706277215) --> - <skip /> - <!-- no translation found for quick_settings_hotspot_secondary_label_num_devices (2324635800672199428) --> + <string name="quick_settings_hotspot_secondary_label_transient" msgid="7161046712706277215">"Միանում է..."</string> + <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="2324635800672199428"> + <item quantity="one">%d սարք</item> + <item quantity="other">%d սարք</item> + </plurals> <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> @@ -339,10 +339,8 @@ <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Օգտագործված է՝ <xliff:g id="DATA_USED">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Սահմանաչափ՝ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string> <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> զգուշացում"</string> - <!-- no translation found for quick_settings_work_mode_on_label (3421274215098764735) --> - <skip /> - <!-- no translation found for quick_settings_work_mode_off_label (8856918707867192186) --> - <skip /> + <string name="quick_settings_work_mode_on_label" msgid="3421274215098764735">"Աշխատանքային պրոֆիլ"</string> + <string name="quick_settings_work_mode_off_label" msgid="8856918707867192186">"Ծանուցումներն ու հավելվածներն անջատված են"</string> <string name="quick_settings_night_display_label" msgid="3577098011487644395">"Գիշերային լույս"</string> <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="8483259341596943314">"Կմիացվի մայրամուտին"</string> <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4453017157391574402">"Մինչև լուսաբաց"</string> @@ -360,8 +358,6 @@ <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> հավելվածը անվտանգ ռեժիմում անջատված է:"</string> <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Մաքրել բոլորը"</string> <string name="recents_drag_hint_message" msgid="2649739267073203985">"Քաշեք այստեղ՝ էկրանի տրոհումն օգտագործելու համար"</string> - <!-- no translation found for recents_swipe_up_onboarding (3824607135920170001) --> - <skip /> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Հորիզոնական տրոհում"</string> <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Ուղղահայաց տրոհում"</string> <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Հատուկ տրոհում"</string> @@ -502,11 +498,18 @@ <string name="volume_zen_end_now" msgid="6930243045593601084">"Անջատել հիմա"</string> <string name="accessibility_volume_expand" msgid="5946812790999244205">"Ընդարձակել"</string> <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Կոծկել"</string> + <string name="accessibility_output_chooser" msgid="8185317493017988680">"Փոխել արտածման սարքը"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Էկրանն ամրացված է"</string> <string name="screen_pinning_description" msgid="8909878447196419623">"Էկրանը կմնա տեսադաշտում, մինչև այն ապամրացնեք: Ապամրացնելու համար հպեք և պահեք Հետ և Համատեսք կոճակները:"</string> + <string name="screen_pinning_description_recents_invisible" msgid="8281145542163727971">"Էկրանը կցուցադրվի այնքան ժամանակ, մինչև որ չապամրացնեք այն: Ապամրացնելու համար հպեք և պահեք Հետ և գլխավոր էկրանի կոճակները:"</string> <string name="screen_pinning_description_accessible" msgid="426190689254018656">"Էկրանը կմնա տեսադաշտում, մինչև այն ապամրացնեք: Ապամրացնելու համար հպեք և պահեք Համատեսք կոճակը:"</string> + <string name="screen_pinning_description_recents_invisible_accessible" msgid="6134833683151189507">"Էկրանը կցուցադրվի այնքան ժամանակ, մինչև որ չապամրացնեք այն: Ապամրացնելու համար հպեք և պահեք գլխավոր էկրանի կոճակը:"</string> + <string name="screen_pinning_toast" msgid="2266705122951934150">"Էկրանն ապամրացնելու համար հպեք և պահեք Հետ և Համատեսք կոճակները"</string> + <string name="screen_pinning_toast_recents_invisible" msgid="8252402309499161281">"Էկրանն ապամրացնելու համար հպեք և պահեք Հետ և գլխավոր էկրանի կոճակները"</string> <string name="screen_pinning_positive" msgid="3783985798366751226">"Եղավ"</string> <string name="screen_pinning_negative" msgid="3741602308343880268">"Ոչ"</string> + <string name="screen_pinning_start" msgid="1022122128489278317">"Էկրանն ամրացված է"</string> + <string name="screen_pinning_exit" msgid="5187339744262325372">"Էկրանն ապամրացված է"</string> <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Թաքցնե՞լ <xliff:g id="TILE_LABEL">%1$s</xliff:g>-ը:"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Այն դարձյալ կհայտնվի, երբ նորից միացնեք կարգավորումներում:"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Թաքցնել"</string> @@ -586,8 +589,7 @@ <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> - <!-- no translation found for inline_blocking_helper (3055064577771478591) --> - <skip /> + <string name="inline_blocking_helper" msgid="3055064577771478591">"Դուք սովորաբար փակում եք այս ծանուցումները: \nՇարունակե՞լ ցուցադրել դրանք:"</string> <string name="inline_keep_showing" msgid="8945102997083836858">"Ցուցադրե՞լ այս ծանուցումները։"</string> <string name="inline_stop_button" msgid="4172980096860941033">"Չցուցադրել ծանուցումներ"</string> <string name="inline_keep_button" msgid="6665940297019018232">"Ցուցադրել"</string> @@ -766,7 +768,7 @@ <string name="pip_skip_to_prev" msgid="1955311326688637914">"Վերադառնալ նախորդին"</string> <string name="thermal_shutdown_title" msgid="4458304833443861111">"Հեռախոսն անջատվել է տաքանալու պատճառով"</string> <string name="thermal_shutdown_message" msgid="9006456746902370523">"Հեռախոսն այժմ նորմալ աշխատում է"</string> - <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Ձեր հեռախոսը չափազանց տաք էր, այդ պատճառով այն անջատվել է՝ սառելու համար: Հեռախոսն այժմ նորմալ աշխատում է:\n\nՀեռախոսը կարող է տաքանալ, եթե՝\n • Օգտագործում եք ռեսուրսատար հավելվածներ (օրինակ՝ խաղեր, տեսանյութեր կամ նավարկման հավելվածներ)\n • Ներբեռնում կամ վերբեռնում եք ծանր ֆայլեր\n • Օգտագործում եք ձեր հեռախոսը բարձր ջերմային պայմաններում"</string> + <string name="thermal_shutdown_dialog_message" msgid="566347880005304139">"Ձեր հեռախոսը չափազանց տաք էր, այդ պատճառով այն անջատվել է՝ հովանալու համար: Հեռախոսն այժմ նորմալ աշխատում է:\n\nՀեռախոսը կարող է տաքանալ, եթե՝\n • Օգտագործում եք ռեսուրսատար հավելվածներ (օրինակ՝ խաղեր, տեսանյութեր կամ նավարկման հավելվածներ)\n • Ներբեռնում կամ վերբեռնում եք ծանր ֆայլեր\n • Օգտագործում եք ձեր հեռախոսը բարձր ջերմային պայմաններում"</string> <string name="high_temp_title" msgid="4589508026407318374">"Հեռախոսը տաքանում է"</string> <string name="high_temp_notif_message" msgid="5642466103153429279">"Հովանալու ընթացքում հեռախոսի որոշ գործառույթներ սահմանափակ են"</string> <string name="high_temp_dialog_message" msgid="6840700639374113553">"Ձեր հեռախոսն ավտոմատ կերպով կփորձի hովանալ: Կարող եք շարունակել օգտագործել հեռախոսը, սակայն հնարավոր է, որ այն ավելի դանդաղ աշխատի:\n\nՀովանալուց հետո հեռախոսը կաշխատի կանոնավոր կերպով:"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 37d81182c5bd..0279d16770a0 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -310,8 +310,7 @@ <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi o‘chiq"</string> <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi yoqilgan"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Hech qanday Wi-Fi tarmog‘i mavjud emas"</string> - <!-- no translation found for quick_settings_alarm_title (2416759007342260676) --> - <skip /> + <string name="quick_settings_alarm_title" msgid="2416759007342260676">"Signal"</string> <string name="quick_settings_cast_title" msgid="7709016546426454729">"Translatsiya"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Translatsiya qilinmoqda"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nomsiz qurilma"</string> @@ -361,7 +360,6 @@ <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Xavfsiz rejimda <xliff:g id="APP">%s</xliff:g> ilovasi o‘chirib qo‘yildi."</string> <string name="recents_stack_action_button_label" msgid="6593727103310426253">"Hammasini tozalash"</string> <string name="recents_drag_hint_message" msgid="2649739267073203985">"Ekranni bo‘lish xususiyatidan foydalanish uchun bu yerga torting"</string> - <string name="recents_swipe_up_onboarding" msgid="3824607135920170001">"Ilovalarni almashtirish uchun ekranni tepaga suring"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gorizontal yo‘nalishda bo‘lish"</string> <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikal yo‘nalishda bo‘lish"</string> <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Boshqa usulda bo‘lish"</string> @@ -502,25 +500,18 @@ <string name="volume_zen_end_now" msgid="6930243045593601084">"O‘chiring"</string> <string name="accessibility_volume_expand" msgid="5946812790999244205">"Yoyish"</string> <string name="accessibility_volume_collapse" msgid="3609549593031810875">"Yig‘ish"</string> - <!-- no translation found for accessibility_output_chooser (8185317493017988680) --> - <skip /> + <string name="accessibility_output_chooser" msgid="8185317493017988680">"Audiochiqish qurilmasini almashtirish"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Ekran qadaldi"</string> <string name="screen_pinning_description" msgid="8909878447196419623">"Ekran yechilmaguncha u o‘zgarmas holatda qoladi. Uni yechish uchun “Orqaga” va “Umumiy ma’lumot” tugmalarini bosib turing."</string> - <!-- no translation found for screen_pinning_description_recents_invisible (8281145542163727971) --> - <skip /> + <string name="screen_pinning_description_recents_invisible" msgid="8281145542163727971">"Ekran yechilmaguncha u o‘zgarmas holatda qoladi. Uni yechish uchun Orqaga va Boshi tugmalarini bosib turing."</string> <string name="screen_pinning_description_accessible" msgid="426190689254018656">"Ekran yechilmaguncha u o‘zgarmas holatda qoladi. Uni yechish uchun “Umumiy ma’lumot” tugmasini bosib turing."</string> - <!-- no translation found for screen_pinning_description_recents_invisible_accessible (6134833683151189507) --> - <skip /> - <!-- no translation found for screen_pinning_toast (2266705122951934150) --> - <skip /> - <!-- no translation found for screen_pinning_toast_recents_invisible (8252402309499161281) --> - <skip /> + <string name="screen_pinning_description_recents_invisible_accessible" msgid="6134833683151189507">"Ekran yechilmaguncha u o‘zgarmas holatda qoladi. Uni yechish uchun Orqaga va Boshi tugmlarini bosib turing."</string> + <string name="screen_pinning_toast" msgid="2266705122951934150">"Bu ekrandan chiqish uchun Orqaga va Menyu tugmalarini bosib turing"</string> + <string name="screen_pinning_toast_recents_invisible" msgid="8252402309499161281">"Bu ekrandan chiqish uchun Orqaga va Boshi tugmalarini bosib turing"</string> <string name="screen_pinning_positive" msgid="3783985798366751226">"OK"</string> <string name="screen_pinning_negative" msgid="3741602308343880268">"Yo‘q, kerakmas"</string> - <!-- no translation found for screen_pinning_start (1022122128489278317) --> - <skip /> - <!-- no translation found for screen_pinning_exit (5187339744262325372) --> - <skip /> + <string name="screen_pinning_start" msgid="1022122128489278317">"Ekran mahkamlandi"</string> + <string name="screen_pinning_exit" msgid="5187339744262325372">"Ekran olib tashlandi"</string> <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> berkitilsinmi?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Keyingi safar sozlamalardan yoqilgan paydo bo‘ladi."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Berkitish"</string> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index fc5ea4581a01..dc082a99d53e 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1340,8 +1340,7 @@ <string name="volume_stream_content_description_vibrate_a11y">%1$s. Tap to set to vibrate.</string> <string name="volume_stream_content_description_mute_a11y">%1$s. Tap to mute.</string> - <string name="volume_dialog_accessibility_shown_message">%s volume controls shown. Swipe up to dismiss.</string> - <string name="volume_dialog_accessibility_dismissed_message">Volume controls hidden</string> + <string name="volume_dialog_title">%s volume controls</string> <string name="output_title">Media output</string> <string name="output_calls_title">Phone call output</string> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java index 735f4fd82dec..afe906c28ea5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java @@ -50,7 +50,6 @@ import com.android.settingslib.Utils; import com.android.systemui.Interpolators; import com.android.systemui.R; -import java.lang.IllegalArgumentException; import java.util.List; import java.util.Set; @@ -274,7 +273,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G } private void saveImportance() { - if (mNonblockable || !hasImportanceChanged()) { + if (mNonblockable) { return; } MetricsLogger.action(mContext, MetricsEvent.ACTION_SAVE_IMPORTANCE, @@ -409,7 +408,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G final int centerY = v.getHeight() / 2; final int x = targetLoc[0] - parentLoc[0] + centerX; final int y = targetLoc[1] - parentLoc[1] + centerY; - mGutsContainer.closeControls(x, y, false /* save */, false /* force */); + mGutsContainer.closeControls(x, y, true /* save */, false /* force */); } @Override @@ -429,7 +428,9 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G @Override public boolean handleCloseControls(boolean save, boolean force) { - if (save && hasImportanceChanged()) { + // Save regardless of the importance so we can lock the importance field if the user wants + // to keep getting notifications + if (save) { if (mCheckSaveListener != null) { mCheckSaveListener.checkSave(this::saveImportance, mSbn); } else { diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 8881ee94092e..1e8e98ca2e42 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -178,7 +178,6 @@ public class VolumeDialogImpl implements VolumeDialog { | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); - mWindow.setTitle(VolumeDialogImpl.class.getSimpleName()); mWindow.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); mWindow.setWindowAnimations(com.android.internal.R.style.Animation_Toast); final WindowManager.LayoutParams lp = mWindow.getAttributes(); @@ -410,6 +409,7 @@ public class VolumeDialogImpl implements VolumeDialog { final boolean hasVibrator = mController.hasVibrator(); if (mState.ringerModeInternal == AudioManager.RINGER_MODE_NORMAL) { if (hasVibrator) { + mController.vibrate(); mController.setRingerMode(AudioManager.RINGER_MODE_VIBRATE, false); } else { mController.setRingerMode(AudioManager.RINGER_MODE_SILENT, false); @@ -491,15 +491,6 @@ public class VolumeDialogImpl implements VolumeDialog { }, 50)) .start(); - if (mAccessibilityMgr.isEnabled()) { - AccessibilityEvent event = - AccessibilityEvent.obtain(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); - event.setPackageName(mContext.getPackageName()); - event.setClassName(CustomDialog.class.getSuperclass().getName()); - event.getText().add(mContext.getString( - R.string.volume_dialog_accessibility_dismissed_message)); - mAccessibilityMgr.sendAccessibilityEvent(event); - } Events.writeEvent(mContext, Events.EVENT_DISMISS_DIALOG, reason); mController.notifyVisible(false); synchronized (mSafetyWarningLock) { @@ -670,6 +661,8 @@ public class VolumeDialogImpl implements VolumeDialog { updateVolumeRowH(row); } updateRingerH(); + mWindow.setTitle(mContext.getString(R.string.volume_dialog_title, + getStreamLabelH(getActiveRow().ss))); } private void updateVolumeRowH(VolumeRow row) { @@ -1065,22 +1058,6 @@ public class VolumeDialogImpl implements VolumeDialog { } return false; } - - @Override - public boolean dispatchPopulateAccessibilityEvent(@NonNull AccessibilityEvent event) { - event.setClassName(getClass().getSuperclass().getName()); - event.setPackageName(mContext.getPackageName()); - - if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { - if (mShowing) { - event.getText().add(mContext.getString( - R.string.volume_dialog_accessibility_shown_message, - getStreamLabelH(getActiveRow().ss))); - return true; - } - } - return false; - } } private final class VolumeSeekBarChangeListener implements OnSeekBarChangeListener { 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 8e8b3e0f131b..b8d9b192aac4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java @@ -16,7 +16,9 @@ package com.android.systemui.statusbar; +import static android.app.NotificationChannel.USER_LOCKED_IMPORTANCE; import static android.app.NotificationManager.IMPORTANCE_LOW; +import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; import static android.print.PrintManager.PRINT_SPOOLER_PACKAGE_NAME; import static android.view.View.GONE; import static android.view.View.VISIBLE; @@ -95,6 +97,7 @@ public class NotificationInfoTest extends SysuiTestCase { final LayoutInflater layoutInflater = LayoutInflater.from(mContext); mNotificationInfo = (NotificationInfo) layoutInflater.inflate(R.layout.notification_info, null); + mNotificationInfo.setGutsParent(mock(NotificationGuts.class)); // PackageManager must return a packageInfo and applicationInfo. final PackageInfo packageInfo = new PackageInfo(); @@ -323,24 +326,27 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testHandleCloseControls_DoesNotUpdateNotificationChannelIfUnchanged() throws Exception { + int originalImportance = mNotificationChannel.getImportance(); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); mNotificationInfo.handleCloseControls(true, false); - verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( + verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( anyString(), eq(TEST_UID), any()); + assertEquals(originalImportance, mNotificationChannel.getImportance()); } @Test public void testHandleCloseControls_DoesNotUpdateNotificationChannelIfUnspecified() throws Exception { - mNotificationChannel.setImportance(NotificationManager.IMPORTANCE_UNSPECIFIED); + mNotificationChannel.setImportance(IMPORTANCE_UNSPECIFIED); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); mNotificationInfo.handleCloseControls(true, false); - verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( + verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( anyString(), eq(TEST_UID), any()); + assertEquals(IMPORTANCE_UNSPECIFIED, mNotificationChannel.getImportance()); } @Test @@ -370,16 +376,30 @@ public class NotificationInfoTest extends SysuiTestCase { verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( anyString(), eq(TEST_UID), updated.capture()); assertTrue((updated.getValue().getUserLockedFields() - & NotificationChannel.USER_LOCKED_IMPORTANCE) != 0); + & USER_LOCKED_IMPORTANCE) != 0); } @Test - public void testBlockUndoDoesNotCallUpdateNotificationChannel() throws Exception { + public void testKeepUpdatesNotificationChannel() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, - Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + + mNotificationInfo.handleCloseControls(true, false); + + ArgumentCaptor<NotificationChannel> updated = + ArgumentCaptor.forClass(NotificationChannel.class); + verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( + anyString(), eq(TEST_UID), updated.capture()); + assertTrue(0 != (mNotificationChannel.getUserLockedFields() & USER_LOCKED_IMPORTANCE)); + assertEquals(IMPORTANCE_LOW, mNotificationChannel.getImportance()); + } + @Test + public void testBlockUndoDoesNotBlockNotificationChannel() throws Exception { + mNotificationChannel.setImportance(IMPORTANCE_LOW); + mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -389,8 +409,9 @@ public class NotificationInfoTest extends SysuiTestCase { ArgumentCaptor<NotificationChannel> updated = ArgumentCaptor.forClass(NotificationChannel.class); - verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( + verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( anyString(), eq(TEST_UID), updated.capture()); + assertTrue(0 != (mNotificationChannel.getUserLockedFields() & USER_LOCKED_IMPORTANCE)); assertEquals(IMPORTANCE_LOW, mNotificationChannel.getImportance()); } diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 10fad6273ac6..a422b7ccd274 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -2584,7 +2584,7 @@ class AlarmManagerService extends SystemService { if (mAlarmBatches.size() > 0) { final Batch firstWakeup = findFirstWakeupBatchLocked(); final Batch firstBatch = mAlarmBatches.get(0); - if (firstWakeup != null && mNextWakeup != firstWakeup.start) { + if (firstWakeup != null) { mNextWakeup = firstWakeup.start; mLastWakeupSet = SystemClock.elapsedRealtime(); setLocked(ELAPSED_REALTIME_WAKEUP, firstWakeup.start); @@ -2598,7 +2598,7 @@ class AlarmManagerService extends SystemService { nextNonWakeup = mNextNonWakeupDeliveryTime; } } - if (nextNonWakeup != 0 && mNextNonWakeup != nextNonWakeup) { + if (nextNonWakeup != 0) { mNextNonWakeup = nextNonWakeup; setLocked(ELAPSED_REALTIME, nextNonWakeup); } @@ -3229,6 +3229,8 @@ class AlarmManagerService extends SystemService { expectedMaxWhenElapsed, nowELAPSED, pw); pw.print(" whenElapsed="); TimeUtils.formatDuration(whenElapsed, nowELAPSED, pw); + pw.print(" maxWhenElapsed="); TimeUtils.formatDuration(maxWhenElapsed, + nowELAPSED, pw); pw.print(" when="); if (isRtc) { pw.print(sdf.format(new Date(when))); diff --git a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java index 0a7d3fdb5973..87e8121a474d 100644 --- a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java +++ b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java @@ -65,7 +65,7 @@ class ActivityManagerDebugConfig { static final boolean DEBUG_NETWORK = DEBUG_ALL || false; static final boolean DEBUG_OOM_ADJ = DEBUG_ALL || false; static final boolean DEBUG_OOM_ADJ_REASON = DEBUG_ALL || false; - static final boolean DEBUG_PAUSE = DEBUG_ALL || false; + static final boolean DEBUG_PAUSE = DEBUG_ALL || true; static final boolean DEBUG_POWER = DEBUG_ALL || false; static final boolean DEBUG_POWER_QUICK = DEBUG_POWER || false; static final boolean DEBUG_PROCESS_OBSERVERS = DEBUG_ALL || false; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 99904b5a79a2..c958b6765358 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -25683,9 +25683,11 @@ public class ActivityManagerService extends IActivityManager.Stub } synchronized (ActivityManagerService.this) { - return mActivityStartController.startActivitiesInPackage(packageUid, packageName, + return mActivityStartController.startActivitiesInPackage( + packageUid, packageName, intents, resolvedTypes, null /* resultTo */, - SafeActivityOptions.fromBundle(bOptions), userId); + SafeActivityOptions.fromBundle(bOptions), userId, + false /* validateIncomingUser */); } } diff --git a/services/core/java/com/android/server/am/ActivityStartController.java b/services/core/java/com/android/server/am/ActivityStartController.java index 5551914f7063..f24809a097e1 100644 --- a/services/core/java/com/android/server/am/ActivityStartController.java +++ b/services/core/java/com/android/server/am/ActivityStartController.java @@ -245,11 +245,25 @@ public class ActivityStartController { .execute(); } + /** + * Start intents as a package. + * + * @param uid make a call as if this UID did. + * @param callingPackage make a call as if this package did. + * @param intents intents to start. + * @param userId start the intents on this user. + * @param validateIncomingUser set true to skip checking {@code userId} with the calling UID. + */ final int startActivitiesInPackage(int uid, String callingPackage, Intent[] intents, - String[] resolvedTypes, IBinder resultTo, SafeActivityOptions options, int userId) { + String[] resolvedTypes, IBinder resultTo, SafeActivityOptions options, int userId, + boolean validateIncomingUser) { final String reason = "startActivityInPackage"; - userId = mService.mUserController.handleIncomingUser(Binder.getCallingPid(), - Binder.getCallingUid(), userId, false, ALLOW_FULL_ONLY, reason, null); + if (validateIncomingUser) { + userId = mService.mUserController.handleIncomingUser(Binder.getCallingPid(), + Binder.getCallingUid(), userId, false, ALLOW_FULL_ONLY, reason, null); + } else { + mService.mUserController.ensureNotSpecialUser(userId); + } // TODO: Switch to user app stacks here. return startActivities(null, uid, callingPackage, intents, resolvedTypes, resultTo, options, userId, reason); diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java index 8e9d85d60479..264609f89ec5 100644 --- a/services/core/java/com/android/server/am/PendingIntentRecord.java +++ b/services/core/java/com/android/server/am/PendingIntentRecord.java @@ -335,7 +335,8 @@ final class PendingIntentRecord extends IIntentSender.Stub { allResolvedTypes[allResolvedTypes.length-1] = resolvedType; res = owner.getActivityStartController().startActivitiesInPackage( uid, key.packageName, allIntents, allResolvedTypes, - resultTo, mergedOptions, userId); + resultTo, mergedOptions, userId, + true /* validateIncomingUser */); } else { res = owner.getActivityStartController().startActivityInPackage(uid, callingPid, callingUid, key.packageName, finalIntent, diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index d54e2640ceed..bfc787e45fbf 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -1489,9 +1489,8 @@ class UserController implements Handler.Callback { } } } - if (!allowAll && targetUserId < 0) { - throw new IllegalArgumentException( - "Call does not support special user #" + targetUserId); + if (!allowAll) { + ensureNotSpecialUser(targetUserId); } // Check shell permission if (callingUid == Process.SHELL_UID && targetUserId >= UserHandle.USER_SYSTEM) { @@ -1508,6 +1507,13 @@ class UserController implements Handler.Callback { ? getCurrentUserId(): userId; } + void ensureNotSpecialUser(int userId) { + if (userId >= 0) { + return; + } + throw new IllegalArgumentException("Call does not support special user #" + userId); + } + void registerUserSwitchObserver(IUserSwitchObserver observer, String name) { Preconditions.checkNotNull(name, "Observer name cannot be null"); if (mInjector.checkCallingPermission(INTERACT_ACROSS_USERS_FULL) diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java index 47a4fb24201c..be48f69e1545 100644 --- a/services/core/java/com/android/server/job/JobSchedulerService.java +++ b/services/core/java/com/android/server/job/JobSchedulerService.java @@ -2337,9 +2337,9 @@ public final class JobSchedulerService extends com.android.server.SystemService if (callingUid != Process.SYSTEM_UID) { throw new SecurityException("Job has invalid flags"); } - if (job.hasLateConstraint() || job.hasEarlyConstraint()) { - Slog.wtf(TAG, "Jobs with time-constraints mustn't have" - +" FLAG_EXEMPT_FROM_APP_STANDBY. Job=" + job); + if (job.isPeriodic()) { + Slog.wtf(TAG, "Periodic jobs mustn't have" + + " FLAG_EXEMPT_FROM_APP_STANDBY. Job=" + job); } } } diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java index 1ad8c74a831c..8d2f0dd3c00c 100644 --- a/services/core/java/com/android/server/notification/NotificationRecord.java +++ b/services/core/java/com/android/server/notification/NotificationRecord.java @@ -15,6 +15,7 @@ */ package com.android.server.notification; +import static android.app.NotificationChannel.USER_LOCKED_IMPORTANCE; import static android.app.NotificationManager.IMPORTANCE_MIN; import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; import static android.app.NotificationManager.IMPORTANCE_DEFAULT; @@ -22,6 +23,8 @@ import static android.app.NotificationManager.IMPORTANCE_HIGH; import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.service.notification.NotificationListenerService.Ranking .USER_SENTIMENT_NEUTRAL; +import static android.service.notification.NotificationListenerService.Ranking + .USER_SENTIMENT_POSITIVE; import android.app.Notification; import android.app.NotificationChannel; @@ -163,6 +166,7 @@ public final class NotificationRecord { mLight = calculateLights(); mAdjustments = new ArrayList<>(); mStats = new NotificationStats(); + calculateUserSentiment(); } private boolean isPreChannelsNotification() { @@ -320,7 +324,7 @@ public final class NotificationRecord { if (mPreChannelsNotification && (importance == IMPORTANCE_UNSPECIFIED || (getChannel().getUserLockedFields() - & NotificationChannel.USER_LOCKED_IMPORTANCE) == 0)) { + & USER_LOCKED_IMPORTANCE) == 0)) { if (!stats.isNoisy && requestedImportance > IMPORTANCE_LOW) { requestedImportance = IMPORTANCE_LOW; } @@ -585,8 +589,12 @@ public final class NotificationRecord { setOverrideGroupKey(groupOverrideKey); } if (signals.containsKey(Adjustment.KEY_USER_SENTIMENT)) { - setUserSentiment(adjustment.getSignals().getInt( - Adjustment.KEY_USER_SENTIMENT, USER_SENTIMENT_NEUTRAL)); + // Only allow user sentiment update from assistant if user hasn't already + // expressed a preference for this channel + if ((getChannel().getUserLockedFields() & USER_LOCKED_IMPORTANCE) == 0) { + setUserSentiment(adjustment.getSignals().getInt( + Adjustment.KEY_USER_SENTIMENT, USER_SENTIMENT_NEUTRAL)); + } } } } @@ -845,10 +853,6 @@ public final class NotificationRecord { } } - public boolean isImportanceFromUser() { - return mImportance == mUserImportance; - } - public NotificationChannel getChannel() { return mChannel; } @@ -857,6 +861,7 @@ public final class NotificationRecord { if (channel != null) { mChannel = channel; calculateImportance(); + calculateUserSentiment(); } } @@ -900,6 +905,12 @@ public final class NotificationRecord { mSnoozeCriteria = snoozeCriteria; } + private void calculateUserSentiment() { + if ((getChannel().getUserLockedFields() & USER_LOCKED_IMPORTANCE) != 0) { + mUserSentiment = USER_SENTIMENT_POSITIVE; + } + } + private void setUserSentiment(int userSentiment) { mUserSentiment = userSentiment; } diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java index b0e3820f5887..dc936d247dbf 100644 --- a/services/core/java/com/android/server/notification/RankingHelper.java +++ b/services/core/java/com/android/server/notification/RankingHelper.java @@ -640,9 +640,11 @@ public class RankingHelper implements RankingConfig { if (updatedChannel.getLockscreenVisibility() == Notification.VISIBILITY_PUBLIC) { updatedChannel.setLockscreenVisibility(Ranking.VISIBILITY_NO_OVERRIDE); } - updatedChannel.unlockFields(updatedChannel.getUserLockedFields()); - updatedChannel.lockFields(channel.getUserLockedFields()); + if (!fromUser) { + updatedChannel.unlockFields(updatedChannel.getUserLockedFields()); + } if (fromUser) { + updatedChannel.lockFields(channel.getUserLockedFields()); lockFieldsForUpdate(channel, updatedChannel); } r.channels.put(updatedChannel.getId(), updatedChannel); diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java index bd4aa1cce355..0a6b38fb2e9a 100644 --- a/services/core/java/com/android/server/power/ShutdownThread.java +++ b/services/core/java/com/android/server/power/ShutdownThread.java @@ -451,7 +451,7 @@ public final class ShutdownThread extends Thread { // First send the high-level shut down broadcast. mActionDone = false; Intent intent = new Intent(Intent.ACTION_SHUTDOWN); - intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); + intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND | Intent.FLAG_RECEIVER_REGISTERED_ONLY); mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, null, br, mHandler, 0, null, null); diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java index 8101b56334e7..4bc94047b24e 100644 --- a/services/core/java/com/android/server/stats/StatsCompanionService.java +++ b/services/core/java/com/android/server/stats/StatsCompanionService.java @@ -290,7 +290,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { public final static class AnomalyAlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - Slog.i(TAG, "StatsCompanionService believes an anomaly has occurred."); + Slog.i(TAG, "StatsCompanionService believes an anomaly has occurred at time " + + System.currentTimeMillis() + "ms."); synchronized (sStatsdLock) { if (sStatsd == null) { Slog.w(TAG, "Could not access statsd to inform it of anomaly alarm firing"); @@ -361,9 +362,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { final long callingToken = Binder.clearCallingIdentity(); try { // using RTC, not RTC_WAKEUP, so if device is asleep, will only fire when it awakens. - // This alarm is inexact, leaving its exactness completely up to the OS optimizations. // AlarmManager will automatically cancel any previous mAnomalyAlarmIntent alarm. - mAlarmManager.set(AlarmManager.RTC, timestampMs, mAnomalyAlarmIntent); + mAlarmManager.setExact(AlarmManager.RTC, timestampMs, mAnomalyAlarmIntent); } finally { Binder.restoreCallingIdentity(callingToken); } 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 a5fa903c4f00..a566327c77cc 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java @@ -15,10 +15,13 @@ */ package com.android.server.notification; +import static android.app.NotificationChannel.USER_LOCKED_IMPORTANCE; 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 junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; @@ -315,7 +318,7 @@ public class NotificationRecordTest extends UiServiceTestCase { @Test public void testImportance_locked_preUpgrade() throws Exception { defaultChannel.setImportance(NotificationManager.IMPORTANCE_LOW); - defaultChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE); + defaultChannel.lockFields(USER_LOCKED_IMPORTANCE); StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, false /* lights */, false /* defaultLights */, null /* group */); @@ -327,7 +330,7 @@ public class NotificationRecordTest extends UiServiceTestCase { @Test public void testImportance_locked_unspecified_preUpgrade() throws Exception { defaultChannel.setImportance(NotificationManager.IMPORTANCE_UNSPECIFIED); - defaultChannel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE); + defaultChannel.lockFields(USER_LOCKED_IMPORTANCE); StatusBarNotification sbn = getNotification(true /*preO */, true /* noisy */, true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, false /* lights */, false /* defaultLights */, null /* group */); @@ -549,4 +552,23 @@ public class NotificationRecordTest extends UiServiceTestCase { assertEquals(USER_SENTIMENT_NEGATIVE, record.getUserSentiment()); } + + @Test + public void testUserSentiment_userLocked() throws Exception { + channel.lockFields(USER_LOCKED_IMPORTANCE); + StatusBarNotification sbn = getNotification(false /*preO */, true /* noisy */, + true /* defaultSound */, false /* buzzy */, false /* defaultBuzz */, + false /* lights */, false /* defaultLights */, groupId /* group */); + NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel); + + assertEquals(USER_SENTIMENT_POSITIVE, record.getUserSentiment()); + + Bundle signals = new Bundle(); + signals.putInt(Adjustment.KEY_USER_SENTIMENT, USER_SENTIMENT_NEGATIVE); + record.addAdjustment(new Adjustment(pkg, record.getKey(), signals, null, sbn.getUserId())); + + record.applyAdjustments(); + + assertEquals(USER_SENTIMENT_POSITIVE, record.getUserSentiment()); + } } 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 abfc54d19068..9ebce71e8900 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java @@ -914,16 +914,18 @@ public class RankingHelperTest extends UiServiceTestCase { final NotificationChannel update1 = getChannel(); update1.setSound(new Uri.Builder().scheme("test").build(), new AudioAttributes.Builder().build()); - update1.lockFields(NotificationChannel.USER_LOCKED_PRIORITY); // should be ignored + update1.lockFields(NotificationChannel.USER_LOCKED_PRIORITY); mHelper.updateNotificationChannel(PKG, UID, update1, true); - assertEquals(NotificationChannel.USER_LOCKED_SOUND, + assertEquals(NotificationChannel.USER_LOCKED_PRIORITY + | NotificationChannel.USER_LOCKED_SOUND, mHelper.getNotificationChannel(PKG, UID, update1.getId(), false) .getUserLockedFields()); NotificationChannel update2 = getChannel(); update2.enableVibration(true); mHelper.updateNotificationChannel(PKG, UID, update2, true); - assertEquals(NotificationChannel.USER_LOCKED_SOUND + assertEquals(NotificationChannel.USER_LOCKED_PRIORITY + | NotificationChannel.USER_LOCKED_SOUND | NotificationChannel.USER_LOCKED_VIBRATION, mHelper.getNotificationChannel(PKG, UID, update2.getId(), false) .getUserLockedFields()); diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index 24184e033c66..d8599e8ca1fa 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -2743,7 +2743,20 @@ public abstract class Connection extends Conferenceable { /** * Notifies this Connection, which is in {@link #STATE_RINGING}, of * a request to accept. - * + * <p> + * For managed {@link ConnectionService}s, this will be called when the user answers a call via + * the default dialer's {@link InCallService}. + * <p> + * Although a self-managed {@link ConnectionService} provides its own incoming call UI, the + * Telecom framework may request that the call is answered in the following circumstances: + * <ul> + * <li>The user chooses to answer an incoming call via a Bluetooth device.</li> + * <li>A car mode {@link InCallService} is in use which has declared + * {@link TelecomManager#METADATA_INCLUDE_SELF_MANAGED_CALLS} in its manifest. Such an + * {@link InCallService} will be able to see calls from self-managed + * {@link ConnectionService}s, and will be able to display an incoming call UI on their + * behalf.</li> + * </ul> * @param videoState The video state in which to answer the connection. */ public void onAnswer(int videoState) {} @@ -2751,6 +2764,20 @@ public abstract class Connection extends Conferenceable { /** * Notifies this Connection, which is in {@link #STATE_RINGING}, of * a request to accept. + * <p> + * For managed {@link ConnectionService}s, this will be called when the user answers a call via + * the default dialer's {@link InCallService}. + * <p> + * Although a self-managed {@link ConnectionService} provides its own incoming call UI, the + * Telecom framework may request that the call is answered in the following circumstances: + * <ul> + * <li>The user chooses to answer an incoming call via a Bluetooth device.</li> + * <li>A car mode {@link InCallService} is in use which has declared + * {@link TelecomManager#METADATA_INCLUDE_SELF_MANAGED_CALLS} in its manifest. Such an + * {@link InCallService} will be able to see calls from self-managed + * {@link ConnectionService}s, and will be able to display an incoming call UI on their + * behalf.</li> + * </ul> */ public void onAnswer() { onAnswer(VideoProfile.STATE_AUDIO_ONLY); @@ -2765,6 +2792,20 @@ public abstract class Connection extends Conferenceable { /** * Notifies this Connection, which is in {@link #STATE_RINGING}, of * a request to reject. + * <p> + * For managed {@link ConnectionService}s, this will be called when the user rejects a call via + * the default dialer's {@link InCallService}. + * <p> + * Although a self-managed {@link ConnectionService} provides its own incoming call UI, the + * Telecom framework may request that the call is rejected in the following circumstances: + * <ul> + * <li>The user chooses to reject an incoming call via a Bluetooth device.</li> + * <li>A car mode {@link InCallService} is in use which has declared + * {@link TelecomManager#METADATA_INCLUDE_SELF_MANAGED_CALLS} in its manifest. Such an + * {@link InCallService} will be able to see calls from self-managed + * {@link ConnectionService}s, and will be able to display an incoming call UI on their + * behalf.</li> + * </ul> */ public void onReject() {} @@ -2847,9 +2888,10 @@ public abstract class Connection extends Conferenceable { * should show its own incoming call user interface. * <p> * Where there are ongoing calls in other self-managed {@link ConnectionService}s, or in a - * regular {@link ConnectionService}, the Telecom framework will display its own incoming call - * user interface to allow the user to choose whether to answer the new incoming call and - * disconnect other ongoing calls, or to reject the new incoming call. + * regular {@link ConnectionService}, and it is not possible to hold these other calls, the + * Telecom framework will display its own incoming call user interface to allow the user to + * choose whether to answer the new incoming call and disconnect other ongoing calls, or to + * reject the new incoming call. * <p> * You should trigger the display of the incoming call user interface for your application by * showing a {@link Notification} with a full-screen {@link Intent} specified. diff --git a/telephony/java/android/telephony/OWNERS b/telephony/java/android/telephony/OWNERS new file mode 100644 index 000000000000..68dedce89272 --- /dev/null +++ b/telephony/java/android/telephony/OWNERS @@ -0,0 +1,14 @@ +set noparent + +amitmahajan@google.com +breadley@google.com +fionaxu@google.com +jackyu@google.com +hallliu@google.com +rgreenwalt@google.com +tgunn@google.com +jminjie@google.com +mpq@google.com +shuoq@google.com +refuhoo@google.com + diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java index 38408fe3d0fd..77413d9c730d 100644 --- a/telephony/java/android/telephony/SubscriptionInfo.java +++ b/telephony/java/android/telephony/SubscriptionInfo.java @@ -17,6 +17,7 @@ package android.telephony; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -34,6 +35,8 @@ import android.os.Parcelable; import android.util.DisplayMetrics; import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; /** * A Parcelable class for Subscription Information. @@ -332,12 +335,7 @@ public class SubscriptionInfo implements Parcelable { return this.mCountryIso; } - /** - * @return whether the subscription is an embedded one. - * @hide - * - * TODO(b/35851809): Make this public. - */ + /** @return whether the subscription is an embedded one. */ public boolean isEmbedded() { return this.mIsEmbedded; } @@ -351,9 +349,9 @@ public class SubscriptionInfo implements Parcelable { * @return whether the app is authorized to manage this subscription per its metadata. * @throws UnsupportedOperationException if this subscription is not embedded. * @hide - * - * TODO(b/35851809): Make this public. + * @deprecated - Do not use. */ + @Deprecated public boolean canManageSubscription(Context context) { return canManageSubscription(context, context.getPackageName()); } @@ -367,7 +365,9 @@ public class SubscriptionInfo implements Parcelable { * @return whether the app is authorized to manage this subscription per its metadata. * @throws UnsupportedOperationException if this subscription is not embedded. * @hide + * @deprecated - Do not use. */ + @Deprecated public boolean canManageSubscription(Context context, String packageName) { if (!isEmbedded()) { throw new UnsupportedOperationException("Not an embedded subscription"); @@ -395,14 +395,14 @@ public class SubscriptionInfo implements Parcelable { * @return the {@link UiccAccessRule}s dictating who is authorized to manage this subscription. * @throws UnsupportedOperationException if this subscription is not embedded. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ - public @Nullable UiccAccessRule[] getAccessRules() { + @SystemApi + public @Nullable List<UiccAccessRule> getAccessRules() { if (!isEmbedded()) { throw new UnsupportedOperationException("Not an embedded subscription"); } - return mAccessRules; + if (mAccessRules == null) return null; + return Arrays.asList(mAccessRules); } /** diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index debf43da79b4..11a1984e8934 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -30,6 +30,7 @@ import android.annotation.SystemService; import android.app.BroadcastOptions; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; @@ -822,10 +823,13 @@ public class SubscriptionManager { * if the list is non-empty the list is sorted by {@link SubscriptionInfo#getSimSlotIndex} * then by {@link SubscriptionInfo#getSubscriptionId}. * </ul> - * @hide * - * TODO(b/35851809): Make this a SystemApi. + * <p> + * Permissions android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE is required + * for #getAvailableSubscriptionInfoList to be invoked. + * @hide */ + @SystemApi public List<SubscriptionInfo> getAvailableSubscriptionInfoList() { List<SubscriptionInfo> result = null; @@ -863,9 +867,6 @@ public class SubscriptionManager { * if the list is non-empty the list is sorted by {@link SubscriptionInfo#getSimSlotIndex} * then by {@link SubscriptionInfo#getSubscriptionId}. * </ul> - * @hide - * - * TODO(b/35851809): Make this public. */ public List<SubscriptionInfo> getAccessibleSubscriptionInfoList() { List<SubscriptionInfo> result = null; @@ -891,9 +892,8 @@ public class SubscriptionManager { * * <p>Requires the {@link android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ + @SystemApi public void requestEmbeddedSubscriptionInfoListRefresh() { try { ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); @@ -1892,4 +1892,51 @@ public class SubscriptionManager { options.setTemporaryAppWhitelistDuration(TimeUnit.MINUTES.toMillis(1)); mContext.sendBroadcast(intent, null, options.toBundle()); } + + /** + * Checks whether the app with the given context is authorized to manage the given subscription + * according to its metadata. Only supported for embedded subscriptions (if + * {@code SubscriptionInfo#isEmbedded} returns true). + * + * @param info The subscription to check. + * @return whether the app is authorized to manage this subscription per its metadata. + * @throws UnsupportedOperationException if this subscription is not embedded. + */ + public boolean canManageSubscription(SubscriptionInfo info) { + return canManageSubscription(info, mContext.getPackageName()); + } + + /** + * Checks whether the given app is authorized to manage the given subscription according to its + * metadata. Only supported for embedded subscriptions (if {@code SubscriptionInfo#isEmbedded} + * returns true). + * + * @param info The subscription to check. + * @param packageName Package name of the app to check. + * @return whether the app is authorized to manage this subscription per its metadata. + * @throws UnsupportedOperationException if this subscription is not embedded. + * @hide + */ + public boolean canManageSubscription(SubscriptionInfo info, String packageName) { + if (!info.isEmbedded()) { + throw new UnsupportedOperationException("Not an embedded subscription"); + } + if (info.getAccessRules() == null) { + return false; + } + PackageManager packageManager = mContext.getPackageManager(); + PackageInfo packageInfo; + try { + packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES); + } catch (PackageManager.NameNotFoundException e) { + throw new IllegalArgumentException("Unknown package: " + packageName, e); + } + for (UiccAccessRule rule : info.getAccessRules()) { + if (rule.getCarrierPrivilegeStatus(packageInfo) + == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) { + return true; + } + } + return false; + } } diff --git a/telephony/java/android/telephony/UiccAccessRule.java b/telephony/java/android/telephony/UiccAccessRule.java index 39372019c20f..c3f8a1930409 100644 --- a/telephony/java/android/telephony/UiccAccessRule.java +++ b/telephony/java/android/telephony/UiccAccessRule.java @@ -16,6 +16,7 @@ package android.telephony; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.content.pm.PackageInfo; import android.content.pm.Signature; import android.os.Parcel; @@ -39,9 +40,8 @@ import java.util.Objects; * specification. * * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ +@SystemApi public final class UiccAccessRule implements Parcelable { private static final String TAG = "UiccAccessRule"; diff --git a/telephony/java/android/telephony/euicc/DownloadableSubscription.java b/telephony/java/android/telephony/euicc/DownloadableSubscription.java index 01041c8b1360..88db22b82c5c 100644 --- a/telephony/java/android/telephony/euicc/DownloadableSubscription.java +++ b/telephony/java/android/telephony/euicc/DownloadableSubscription.java @@ -16,18 +16,17 @@ package android.telephony.euicc; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.telephony.UiccAccessRule; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import com.android.internal.util.Preconditions; -/** - * Information about a subscription which is available for download. - * - * TODO(b/35851809): Make this public. - * @hide - */ +/** Information about a subscription which is available for download. */ public final class DownloadableSubscription implements Parcelable { public static final Creator<DownloadableSubscription> CREATOR = @@ -46,11 +45,12 @@ public final class DownloadableSubscription implements Parcelable { /** * Activation code. May be null for subscriptions which are not based on activation codes, e.g. * to download a default subscription assigned to this device. + * Should use getEncodedActivationCode() instead. * @hide - * - * TODO(b/35851809): Make this a SystemApi. + * @deprecated - Do not use. This will be private. Use getEncodedActivationCode() instead. */ @Nullable + @Deprecated public final String encodedActivationCode; @Nullable private String confirmationCode; @@ -58,8 +58,16 @@ public final class DownloadableSubscription implements Parcelable { // see getCarrierName and setCarrierName @Nullable private String carrierName; + // see getAccessRules and setAccessRules - private UiccAccessRule[] accessRules; + @Nullable + private List<UiccAccessRule> accessRules; + + /** Gets the activation code. */ + @Nullable + public String getEncodedActivationCode() { + return encodedActivationCode; + } /** @hide */ private DownloadableSubscription(String encodedActivationCode) { @@ -70,7 +78,59 @@ public final class DownloadableSubscription implements Parcelable { encodedActivationCode = in.readString(); confirmationCode = in.readString(); carrierName = in.readString(); - accessRules = in.createTypedArray(UiccAccessRule.CREATOR); + accessRules = new ArrayList<UiccAccessRule>(); + in.readTypedList(accessRules, UiccAccessRule.CREATOR); + } + + private DownloadableSubscription(String encodedActivationCode, String confirmationCode, + String carrierName, List<UiccAccessRule> accessRules) { + this.encodedActivationCode = encodedActivationCode; + this.confirmationCode = confirmationCode; + this.carrierName = carrierName; + this.accessRules = accessRules; + } + + /** @hide */ + @SystemApi + public static final class Builder { + @Nullable private String encodedActivationCode; + @Nullable private String confirmationCode; + @Nullable private String carrierName; + List<UiccAccessRule> accessRules; + + public Builder() {} + + public Builder(DownloadableSubscription baseSubscription) { + encodedActivationCode = baseSubscription.getEncodedActivationCode(); + confirmationCode = baseSubscription.getConfirmationCode(); + carrierName = baseSubscription.getCarrierName(); + accessRules = baseSubscription.getAccessRules(); + } + + public DownloadableSubscription build() { + return new DownloadableSubscription(encodedActivationCode, confirmationCode, + carrierName, accessRules); + } + + public Builder setEncodedActivationCode(String value) { + encodedActivationCode = value; + return this; + } + + public Builder setConfirmationCode(String value) { + confirmationCode = value; + return this; + } + + public Builder setCarrierName(String value) { + carrierName = value; + return this; + } + + public Builder setAccessRules(List<UiccAccessRule> value) { + accessRules = value; + return this; + } } /** @@ -87,7 +147,10 @@ public final class DownloadableSubscription implements Parcelable { /** * Sets the confirmation code. + * @hide + * @deprecated - Do not use. */ + @Deprecated public void setConfirmationCode(String confirmationCode) { this.confirmationCode = confirmationCode; } @@ -103,9 +166,9 @@ public final class DownloadableSubscription implements Parcelable { /** * Set the user-visible carrier name. * @hide - * - * TODO(b/35851809): Make this a SystemApi. + * @deprecated - Do not use. */ + @Deprecated public void setCarrierName(String carrierName) { this.carrierName = carrierName; } @@ -117,44 +180,51 @@ public final class DownloadableSubscription implements Parcelable { * those created with {@link #forActivationCode}). May be populated with * {@link EuiccManager#getDownloadableSubscriptionMetadata}. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ + @SystemApi @Nullable public String getCarrierName() { return carrierName; } /** - * Returns the {@link UiccAccessRule}s dictating access to this subscription. + * Returns the {@link UiccAccessRule}s in list dictating access to this subscription. * * <p>Only present for downloadable subscriptions that were queried from a server (as opposed to * those created with {@link #forActivationCode}). May be populated with * {@link EuiccManager#getDownloadableSubscriptionMetadata}. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ - public UiccAccessRule[] getAccessRules() { + @SystemApi + public List<UiccAccessRule> getAccessRules() { return accessRules; } /** * Set the {@link UiccAccessRule}s dictating access to this subscription. * @hide - * - * TODO(b/35851809): Make this a SystemApi. + * @deprecated - Do not use. */ - public void setAccessRules(UiccAccessRule[] accessRules) { + @Deprecated + public void setAccessRules(List<UiccAccessRule> accessRules) { this.accessRules = accessRules; } + /** + * @hide + * @deprecated - Do not use. + */ + @Deprecated + public void setAccessRules(UiccAccessRule[] accessRules) { + this.accessRules = Arrays.asList(accessRules); + } + @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(encodedActivationCode); dest.writeString(confirmationCode); dest.writeString(carrierName); - dest.writeTypedArray(accessRules, flags); + dest.writeTypedList(accessRules); } @Override diff --git a/telephony/java/android/telephony/euicc/EuiccCardManager.java b/telephony/java/android/telephony/euicc/EuiccCardManager.java index a1a6a5a4d5bb..c3f40074308b 100644 --- a/telephony/java/android/telephony/euicc/EuiccCardManager.java +++ b/telephony/java/android/telephony/euicc/EuiccCardManager.java @@ -17,6 +17,7 @@ package android.telephony.euicc; import android.annotation.IntDef; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; @@ -49,14 +50,14 @@ import com.android.internal.telephony.euicc.ISwitchToProfileCallback; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import android.annotation.CallbackExecutor; +import java.util.concurrent.Executor; /** * EuiccCardManager is the application interface to an eSIM card. - * * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ +@SystemApi public class EuiccCardManager { private static final String TAG = "EuiccCardManager"; @@ -68,6 +69,7 @@ public class EuiccCardManager { CANCEL_REASON_TIMEOUT, CANCEL_REASON_PPR_NOT_ALLOWED }) + /** @hide */ public @interface CancelReason {} /** @@ -96,6 +98,7 @@ public class EuiccCardManager { RESET_OPTION_DELETE_FIELD_LOADED_TEST_PROFILES, RESET_OPTION_RESET_DEFAULT_SMDP_ADDRESS }) + /** @hide */ public @interface ResetOption {} /** Deletes all operational profiles. */ @@ -143,18 +146,20 @@ public class EuiccCardManager { } /** - * Gets all the profiles on eUicc. + * Requests all the profiles on eUicc. * * @param cardId The Id of the eUICC. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code and all the profiles. */ - public void getAllProfiles(String cardId, ResultCallback<EuiccProfileInfo[]> callback) { + public void requestAllProfiles(String cardId, @CallbackExecutor Executor executor, + ResultCallback<EuiccProfileInfo[]> callback) { try { getIEuiccCardController().getAllProfiles(mContext.getOpPackageName(), cardId, new IGetAllProfilesCallback.Stub() { @Override public void onComplete(int resultCode, EuiccProfileInfo[] profiles) { - callback.onComplete(resultCode, profiles); + executor.execute(() -> callback.onComplete(resultCode, profiles)); } }); } catch (RemoteException e) { @@ -164,19 +169,21 @@ public class EuiccCardManager { } /** - * Gets the profile of the given iccid. + * Requests the profile of the given iccid. * * @param cardId The Id of the eUICC. * @param iccid The iccid of the profile. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code and profile. */ - public void getProfile(String cardId, String iccid, ResultCallback<EuiccProfileInfo> callback) { + public void requestProfile(String cardId, String iccid, @CallbackExecutor Executor executor, + ResultCallback<EuiccProfileInfo> callback) { try { getIEuiccCardController().getProfile(mContext.getOpPackageName(), cardId, iccid, new IGetProfileCallback.Stub() { @Override public void onComplete(int resultCode, EuiccProfileInfo profile) { - callback.onComplete(resultCode, profile); + executor.execute(() -> callback.onComplete(resultCode, profile)); } }); } catch (RemoteException e) { @@ -191,16 +198,17 @@ public class EuiccCardManager { * @param cardId The Id of the eUICC. * @param iccid The iccid of the profile. * @param refresh Whether sending the REFRESH command to modem. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code. */ public void disableProfile(String cardId, String iccid, boolean refresh, - ResultCallback<Void> callback) { + @CallbackExecutor Executor executor, ResultCallback<Void> callback) { try { getIEuiccCardController().disableProfile(mContext.getOpPackageName(), cardId, iccid, refresh, new IDisableProfileCallback.Stub() { @Override public void onComplete(int resultCode) { - callback.onComplete(resultCode, null); + executor.execute(() -> callback.onComplete(resultCode, null)); } }); } catch (RemoteException e) { @@ -216,16 +224,17 @@ public class EuiccCardManager { * @param cardId The Id of the eUICC. * @param iccid The iccid of the profile to switch to. * @param refresh Whether sending the REFRESH command to modem. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code and the EuiccProfileInfo enabled. */ public void switchToProfile(String cardId, String iccid, boolean refresh, - ResultCallback<EuiccProfileInfo> callback) { + @CallbackExecutor Executor executor, ResultCallback<EuiccProfileInfo> callback) { try { getIEuiccCardController().switchToProfile(mContext.getOpPackageName(), cardId, iccid, refresh, new ISwitchToProfileCallback.Stub() { @Override public void onComplete(int resultCode, EuiccProfileInfo profile) { - callback.onComplete(resultCode, profile); + executor.execute(() -> callback.onComplete(resultCode, profile)); } }); } catch (RemoteException e) { @@ -240,16 +249,17 @@ public class EuiccCardManager { * @param cardId The Id of the eUICC. * @param iccid The iccid of the profile. * @param nickname The nickname of the profile. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code. */ public void setNickname(String cardId, String iccid, String nickname, - ResultCallback<Void> callback) { + @CallbackExecutor Executor executor, ResultCallback<Void> callback) { try { getIEuiccCardController().setNickname(mContext.getOpPackageName(), cardId, iccid, nickname, new ISetNicknameCallback.Stub() { @Override public void onComplete(int resultCode) { - callback.onComplete(resultCode, null); + executor.execute(() -> callback.onComplete(resultCode, null)); } }); } catch (RemoteException e) { @@ -263,15 +273,17 @@ public class EuiccCardManager { * * @param cardId The Id of the eUICC. * @param iccid The iccid of the profile. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code. */ - public void deleteProfile(String cardId, String iccid, ResultCallback<Void> callback) { + public void deleteProfile(String cardId, String iccid, @CallbackExecutor Executor executor, + ResultCallback<Void> callback) { try { getIEuiccCardController().deleteProfile(mContext.getOpPackageName(), cardId, iccid, new IDeleteProfileCallback.Stub() { @Override public void onComplete(int resultCode) { - callback.onComplete(resultCode, null); + executor.execute(() -> callback.onComplete(resultCode, null)); } }); } catch (RemoteException e) { @@ -286,15 +298,17 @@ public class EuiccCardManager { * @param cardId The Id of the eUICC. * @param options Bits of the options of resetting which parts of the eUICC memory. See * EuiccCard for details. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code. */ - public void resetMemory(String cardId, @ResetOption int options, ResultCallback<Void> callback) { + public void resetMemory(String cardId, @ResetOption int options, + @CallbackExecutor Executor executor, ResultCallback<Void> callback) { try { getIEuiccCardController().resetMemory(mContext.getOpPackageName(), cardId, options, new IResetMemoryCallback.Stub() { @Override public void onComplete(int resultCode) { - callback.onComplete(resultCode, null); + executor.execute(() -> callback.onComplete(resultCode, null)); } }); } catch (RemoteException e) { @@ -304,18 +318,20 @@ public class EuiccCardManager { } /** - * Gets the default SM-DP+ address from eUICC. + * Requests the default SM-DP+ address from eUICC. * * @param cardId The Id of the eUICC. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code and the default SM-DP+ address. */ - public void getDefaultSmdpAddress(String cardId, ResultCallback<String> callback) { + public void requestDefaultSmdpAddress(String cardId, @CallbackExecutor Executor executor, + ResultCallback<String> callback) { try { getIEuiccCardController().getDefaultSmdpAddress(mContext.getOpPackageName(), cardId, new IGetDefaultSmdpAddressCallback.Stub() { @Override public void onComplete(int resultCode, String address) { - callback.onComplete(resultCode, address); + executor.execute(() -> callback.onComplete(resultCode, address)); } }); } catch (RemoteException e) { @@ -325,18 +341,20 @@ public class EuiccCardManager { } /** - * Gets the SM-DS address from eUICC. + * Requests the SM-DS address from eUICC. * * @param cardId The Id of the eUICC. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code and the SM-DS address. */ - public void getSmdsAddress(String cardId, ResultCallback<String> callback) { + public void requestSmdsAddress(String cardId, @CallbackExecutor Executor executor, + ResultCallback<String> callback) { try { getIEuiccCardController().getSmdsAddress(mContext.getOpPackageName(), cardId, new IGetSmdsAddressCallback.Stub() { @Override public void onComplete(int resultCode, String address) { - callback.onComplete(resultCode, address); + executor.execute(() -> callback.onComplete(resultCode, address)); } }); } catch (RemoteException e) { @@ -350,16 +368,18 @@ public class EuiccCardManager { * * @param cardId The Id of the eUICC. * @param defaultSmdpAddress The default SM-DP+ address to set. + * @param executor The executor through which the callback should be invode. * @param callback The callback to get the result code. */ - public void setDefaultSmdpAddress(String cardId, String defaultSmdpAddress, ResultCallback<Void> callback) { + public void setDefaultSmdpAddress(String cardId, String defaultSmdpAddress, + @CallbackExecutor Executor executor, ResultCallback<Void> callback) { try { getIEuiccCardController().setDefaultSmdpAddress(mContext.getOpPackageName(), cardId, defaultSmdpAddress, new ISetDefaultSmdpAddressCallback.Stub() { @Override public void onComplete(int resultCode) { - callback.onComplete(resultCode, null); + executor.execute(() -> callback.onComplete(resultCode, null)); } }); } catch (RemoteException e) { @@ -369,18 +389,20 @@ public class EuiccCardManager { } /** - * Gets Rules Authorisation Table. + * Requests Rules Authorisation Table. * * @param cardId The Id of the eUICC. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and the rule authorisation table. */ - public void getRulesAuthTable(String cardId, ResultCallback<EuiccRulesAuthTable> callback) { + public void requestRulesAuthTable(String cardId, @CallbackExecutor Executor executor, + ResultCallback<EuiccRulesAuthTable> callback) { try { getIEuiccCardController().getRulesAuthTable(mContext.getOpPackageName(), cardId, new IGetRulesAuthTableCallback.Stub() { @Override public void onComplete(int resultCode, EuiccRulesAuthTable rat) { - callback.onComplete(resultCode, rat); + executor.execute(() -> callback.onComplete(resultCode, rat)); } }); } catch (RemoteException e) { @@ -390,18 +412,20 @@ public class EuiccCardManager { } /** - * Gets the eUICC challenge for new profile downloading. + * Requests the eUICC challenge for new profile downloading. * * @param cardId The Id of the eUICC. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and the challenge. */ - public void getEuiccChallenge(String cardId, ResultCallback<byte[]> callback) { + public void requestEuiccChallenge(String cardId, @CallbackExecutor Executor executor, + ResultCallback<byte[]> callback) { try { getIEuiccCardController().getEuiccChallenge(mContext.getOpPackageName(), cardId, new IGetEuiccChallengeCallback.Stub() { @Override public void onComplete(int resultCode, byte[] challenge) { - callback.onComplete(resultCode, challenge); + executor.execute(() -> callback.onComplete(resultCode, challenge)); } }); } catch (RemoteException e) { @@ -411,18 +435,20 @@ public class EuiccCardManager { } /** - * Gets the eUICC info1 defined in GSMA RSP v2.0+ for new profile downloading. + * Requests the eUICC info1 defined in GSMA RSP v2.0+ for new profile downloading. * * @param cardId The Id of the eUICC. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and the info1. */ - public void getEuiccInfo1(String cardId, ResultCallback<byte[]> callback) { + public void requestEuiccInfo1(String cardId, @CallbackExecutor Executor executor, + ResultCallback<byte[]> callback) { try { getIEuiccCardController().getEuiccInfo1(mContext.getOpPackageName(), cardId, new IGetEuiccInfo1Callback.Stub() { @Override public void onComplete(int resultCode, byte[] info) { - callback.onComplete(resultCode, info); + executor.execute(() -> callback.onComplete(resultCode, info)); } }); } catch (RemoteException e) { @@ -435,15 +461,17 @@ public class EuiccCardManager { * Gets the eUICC info2 defined in GSMA RSP v2.0+ for new profile downloading. * * @param cardId The Id of the eUICC. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and the info2. */ - public void getEuiccInfo2(String cardId, ResultCallback<byte[]> callback) { + public void requestEuiccInfo2(String cardId, @CallbackExecutor Executor executor, + ResultCallback<byte[]> callback) { try { getIEuiccCardController().getEuiccInfo2(mContext.getOpPackageName(), cardId, new IGetEuiccInfo2Callback.Stub() { @Override public void onComplete(int resultCode, byte[] info) { - callback.onComplete(resultCode, info); + executor.execute(() -> callback.onComplete(resultCode, info)); } }); } catch (RemoteException e) { @@ -466,12 +494,13 @@ public class EuiccCardManager { * GSMA RSP v2.0+. * @param serverCertificate ASN.1 data in byte array indicating SM-DP+ Certificate returned by * SM-DP+ server. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and a byte array which represents a * {@code AuthenticateServerResponse} defined in GSMA RSP v2.0+. */ public void authenticateServer(String cardId, String matchingId, byte[] serverSigned1, byte[] serverSignature1, byte[] euiccCiPkIdToBeUsed, byte[] serverCertificate, - ResultCallback<byte[]> callback) { + @CallbackExecutor Executor executor, ResultCallback<byte[]> callback) { try { getIEuiccCardController().authenticateServer( mContext.getOpPackageName(), @@ -484,7 +513,7 @@ public class EuiccCardManager { new IAuthenticateServerCallback.Stub() { @Override public void onComplete(int resultCode, byte[] response) { - callback.onComplete(resultCode, response); + executor.execute(() -> callback.onComplete(resultCode, response)); } }); } catch (RemoteException e) { @@ -505,11 +534,13 @@ public class EuiccCardManager { * SM-DP+ server. * @param smdpCertificate ASN.1 data in byte array indicating the SM-DP+ Certificate returned * by SM-DP+ server. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and a byte array which represents a * {@code PrepareDownloadResponse} defined in GSMA RSP v2.0+ */ public void prepareDownload(String cardId, @Nullable byte[] hashCc, byte[] smdpSigned2, - byte[] smdpSignature2, byte[] smdpCertificate, ResultCallback<byte[]> callback) { + byte[] smdpSignature2, byte[] smdpCertificate, @CallbackExecutor Executor executor, + ResultCallback<byte[]> callback) { try { getIEuiccCardController().prepareDownload( mContext.getOpPackageName(), @@ -521,7 +552,7 @@ public class EuiccCardManager { new IPrepareDownloadCallback.Stub() { @Override public void onComplete(int resultCode, byte[] response) { - callback.onComplete(resultCode, response); + executor.execute(() -> callback.onComplete(resultCode, response)); } }); } catch (RemoteException e) { @@ -535,11 +566,12 @@ public class EuiccCardManager { * * @param cardId The Id of the eUICC. * @param boundProfilePackage the Bound Profile Package data returned by SM-DP+ server. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and a byte array which represents a * {@code LoadBoundProfilePackageResponse} defined in GSMA RSP v2.0+. */ public void loadBoundProfilePackage(String cardId, byte[] boundProfilePackage, - ResultCallback<byte[]> callback) { + @CallbackExecutor Executor executor, ResultCallback<byte[]> callback) { try { getIEuiccCardController().loadBoundProfilePackage( mContext.getOpPackageName(), @@ -548,7 +580,7 @@ public class EuiccCardManager { new ILoadBoundProfilePackageCallback.Stub() { @Override public void onComplete(int resultCode, byte[] response) { - callback.onComplete(resultCode, response); + executor.execute(() -> callback.onComplete(resultCode, response)); } }); } catch (RemoteException e) { @@ -563,11 +595,12 @@ public class EuiccCardManager { * @param cardId The Id of the eUICC. * @param transactionId the transaction ID returned by SM-DP+ server. * @param reason the cancel reason. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and an byte[] which represents a * {@code CancelSessionResponse} defined in GSMA RSP v2.0+. */ public void cancelSession(String cardId, byte[] transactionId, @CancelReason int reason, - ResultCallback<byte[]> callback) { + @CallbackExecutor Executor executor, ResultCallback<byte[]> callback) { try { getIEuiccCardController().cancelSession( mContext.getOpPackageName(), @@ -577,7 +610,7 @@ public class EuiccCardManager { new ICancelSessionCallback.Stub() { @Override public void onComplete(int resultCode, byte[] response) { - callback.onComplete(resultCode, response); + executor.execute(() -> callback.onComplete(resultCode, response)); } }); } catch (RemoteException e) { @@ -591,16 +624,17 @@ public class EuiccCardManager { * * @param cardId The Id of the eUICC. * @param events bits of the event types ({@link EuiccNotification.Event}) to list. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and the list of notifications. */ public void listNotifications(String cardId, @EuiccNotification.Event int events, - ResultCallback<EuiccNotification[]> callback) { + @CallbackExecutor Executor executor, ResultCallback<EuiccNotification[]> callback) { try { getIEuiccCardController().listNotifications(mContext.getOpPackageName(), cardId, events, new IListNotificationsCallback.Stub() { @Override public void onComplete(int resultCode, EuiccNotification[] notifications) { - callback.onComplete(resultCode, notifications); + executor.execute(() -> callback.onComplete(resultCode, notifications)); } }); } catch (RemoteException e) { @@ -614,16 +648,17 @@ public class EuiccCardManager { * * @param cardId The Id of the eUICC. * @param events bits of the event types ({@link EuiccNotification.Event}) to list. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and the list of notifications. */ public void retrieveNotificationList(String cardId, @EuiccNotification.Event int events, - ResultCallback<EuiccNotification[]> callback) { + @CallbackExecutor Executor executor, ResultCallback<EuiccNotification[]> callback) { try { getIEuiccCardController().retrieveNotificationList(mContext.getOpPackageName(), cardId, events, new IRetrieveNotificationListCallback.Stub() { @Override public void onComplete(int resultCode, EuiccNotification[] notifications) { - callback.onComplete(resultCode, notifications); + executor.execute(() -> callback.onComplete(resultCode, notifications)); } }); } catch (RemoteException e) { @@ -637,16 +672,17 @@ public class EuiccCardManager { * * @param cardId The Id of the eUICC. * @param seqNumber the sequence number of the notification. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code and the notification. */ public void retrieveNotification(String cardId, int seqNumber, - ResultCallback<EuiccNotification> callback) { + @CallbackExecutor Executor executor, ResultCallback<EuiccNotification> callback) { try { getIEuiccCardController().retrieveNotification(mContext.getOpPackageName(), cardId, seqNumber, new IRetrieveNotificationCallback.Stub() { @Override public void onComplete(int resultCode, EuiccNotification notification) { - callback.onComplete(resultCode, notification); + executor.execute(() -> callback.onComplete(resultCode, notification)); } }); } catch (RemoteException e) { @@ -660,10 +696,11 @@ public class EuiccCardManager { * * @param cardId The Id of the eUICC. * @param seqNumber the sequence number of the notification. + * @param executor The executor through which the callback should be invode. * @param callback the callback to get the result code. */ public void removeNotificationFromList(String cardId, int seqNumber, - ResultCallback<Void> callback) { + @CallbackExecutor Executor executor, ResultCallback<Void> callback) { try { getIEuiccCardController().removeNotificationFromList( mContext.getOpPackageName(), @@ -672,7 +709,7 @@ public class EuiccCardManager { new IRemoveNotificationFromListCallback.Stub() { @Override public void onComplete(int resultCode) { - callback.onComplete(resultCode, null); + executor.execute(() -> callback.onComplete(resultCode, null)); } }); } catch (RemoteException e) { diff --git a/telephony/java/android/telephony/euicc/EuiccInfo.java b/telephony/java/android/telephony/euicc/EuiccInfo.java index 5bfff08f8d45..a4adf0591a00 100644 --- a/telephony/java/android/telephony/euicc/EuiccInfo.java +++ b/telephony/java/android/telephony/euicc/EuiccInfo.java @@ -23,9 +23,6 @@ import android.os.Parcelable; * Information about an eUICC chip/device. * * @see EuiccManager#getEuiccInfo - * @hide - * - * TODO(b/35851809): Make this public. */ // WARNING: Do not add any privacy-sensitive fields to this class (such as an eUICC identifier)! // This API is accessible to all applications. Privacy-sensitive fields should be returned in their @@ -45,12 +42,17 @@ public final class EuiccInfo implements Parcelable { } }; + @Nullable + private final String osVersion; + /** - * Version of the operating system running on the eUICC. This field is hardware-specific and is - * not guaranteed to match any particular format. + * Gets the version of the operating system running on the eUICC. This field is + * hardware-specific and is not guaranteed to match any particular format. */ @Nullable - public final String osVersion; + public String getOsVersion() { + return osVersion; + } public EuiccInfo(@Nullable String osVersion) { this.osVersion = osVersion; diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java index 7f913ceb8165..1637c55c0adf 100644 --- a/telephony/java/android/telephony/euicc/EuiccManager.java +++ b/telephony/java/android/telephony/euicc/EuiccManager.java @@ -42,9 +42,6 @@ import java.lang.annotation.RetentionPolicy; * {@link Context#getSystemService(String)} and {@link Context#EUICC_SERVICE}. * * <p>See {@link #isEnabled} before attempting to use these APIs. - * - * TODO(b/35851809): Make this public. - * @hide */ public class EuiccManager { @@ -56,6 +53,8 @@ public class EuiccManager { * * <p>The activity will immediately finish with {@link android.app.Activity#RESULT_CANCELED} if * {@link #isEnabled} is false. + * + * This is ued by non-LPA app to bring up LUI. */ @SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = @@ -69,8 +68,10 @@ public class EuiccManager { * * <p class="note">This is a protected intent that can only be sent * by the system. - * TODO(b/35851809): Make this a SystemApi. + * + * @hide */ + @SystemApi @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_OTA_STATUS_CHANGED = "android.telephony.euicc.action.OTA_STATUS_CHANGED"; @@ -78,12 +79,10 @@ public class EuiccManager { /** * Broadcast Action: The action sent to carrier app so it knows the carrier setup is not * completed. - * - * TODO(b/35851809): Make this a public API. */ @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION) - public static final String ACTION_NOTIFY_CARRIER_SETUP = - "android.telephony.euicc.action.NOTIFY_CARRIER_SETUP"; + public static final String ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE = + "android.telephony.euicc.action.NOTIFY_CARRIER_SETUP_INCOMPLETE"; /** * Intent action to provision an embedded subscription. @@ -95,8 +94,9 @@ public class EuiccManager { * <p>The activity will immediately finish with {@link android.app.Activity#RESULT_CANCELED} if * {@link #isEnabled} is false. * - * TODO(b/35851809): Make this a SystemApi. + * @hide */ + @SystemApi @SdkConstant(SdkConstant.SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION = "android.telephony.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION"; @@ -143,9 +143,8 @@ public class EuiccManager { * Key for an extra set on {@link #getDownloadableSubscriptionMetadata} PendingIntent result * callbacks providing the downloadable subscription metadata. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ + @SystemApi public static final String EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION"; @@ -153,9 +152,8 @@ public class EuiccManager { * Key for an extra set on {@link #getDefaultDownloadableSubscriptionList} PendingIntent result * callbacks providing the list of available downloadable subscriptions. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ + @SystemApi public static final String EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS"; @@ -201,6 +199,7 @@ public class EuiccManager { * Euicc OTA update status which can be got by {@link #getOtaStatus} * @hide */ + @SystemApi @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"EUICC_OTA_"}, value = { EUICC_OTA_IN_PROGRESS, @@ -215,15 +214,37 @@ public class EuiccManager { /** * An OTA is in progress. During this time, the eUICC is not available and the user may lose * network access. + * @hide */ + @SystemApi public static final int EUICC_OTA_IN_PROGRESS = 1; - /** The OTA update failed. */ + + /** + * The OTA update failed. + * @hide + */ + @SystemApi public static final int EUICC_OTA_FAILED = 2; - /** The OTA update finished successfully. */ + + /** + * The OTA update finished successfully. + * @hide + */ + @SystemApi public static final int EUICC_OTA_SUCCEEDED = 3; - /** The OTA update not needed since current eUICC OS is latest. */ + + /** + * The OTA update not needed since current eUICC OS is latest. + * @hide + */ + @SystemApi public static final int EUICC_OTA_NOT_NEEDED = 4; - /** The OTA status is unavailable since eUICC service is unavailable. */ + + /** + * The OTA status is unavailable since eUICC service is unavailable. + * @hide + */ + @SystemApi public static final int EUICC_OTA_STATUS_UNAVAILABLE = 5; private final Context mContext; @@ -276,8 +297,10 @@ public class EuiccManager { * * @return the status of eUICC OTA. If {@link #isEnabled()} is false or the eUICC is not ready, * {@link OtaStatus#EUICC_OTA_STATUS_UNAVAILABLE} will be returned. - * TODO(b/35851809): Make this a SystemApi. + * + * @hide */ + @SystemApi public int getOtaStatus() { if (!isEnabled()) { return EUICC_OTA_STATUS_UNAVAILABLE; @@ -292,7 +315,7 @@ public class EuiccManager { /** * Attempt to download the given {@link DownloadableSubscription}. * - * <p>Requires the {@link android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission, + * <p>Requires the {@code android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission, * or the calling app must be authorized to manage both the currently-active subscription and * the subscription to be downloaded according to the subscription metadata. Without the former, * an {@link #EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR} will be returned in the callback @@ -354,14 +377,16 @@ public class EuiccManager { * * <p>To be called by the LUI upon completion of a resolvable error flow. * + * <p>Requires that the calling app has the + * {@link android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission. + * * @param resolutionIntent The original intent used to start the LUI. * @param resolutionExtras Resolution-specific extras depending on the result of the resolution. * For example, this may indicate whether the user has consented or may include the input * they provided. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ + @SystemApi public void continueOperation(Intent resolutionIntent, Bundle resolutionExtras) { if (!isEnabled()) { PendingIntent callbackIntent = @@ -395,9 +420,8 @@ public class EuiccManager { * @param subscription the subscription which needs metadata filled in * @param callbackIntent a PendingIntent to launch when the operation completes. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ + @SystemApi public void getDownloadableSubscriptionMetadata( DownloadableSubscription subscription, PendingIntent callbackIntent) { if (!isEnabled()) { @@ -426,9 +450,8 @@ public class EuiccManager { * * @param callbackIntent a PendingIntent to launch when the operation completes. * @hide - * - * TODO(b/35851809): Make this a SystemApi. */ + @SystemApi public void getDefaultDownloadableSubscriptionList(PendingIntent callbackIntent) { if (!isEnabled()) { sendUnavailableError(callbackIntent); @@ -468,7 +491,7 @@ public class EuiccManager { * * <p>Requires that the calling app has carrier privileges according to the metadata of the * profile to be deleted, or the - * {@link android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission. + * {@code android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission. * * @param subscriptionId the ID of the subscription to delete. * @param callbackIntent a PendingIntent to launch when the operation completes. @@ -489,7 +512,7 @@ public class EuiccManager { /** * Switch to (enable) the given subscription. * - * <p>Requires the {@link android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission, + * <p>Requires the {@code android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission, * or the calling app must be authorized to manage both the currently-active subscription and * the subscription to be enabled according to the subscription metadata. Without the former, * an {@link #EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR} will be returned in the callback @@ -599,11 +622,7 @@ public class EuiccManager { } } - /** - * @hide - */ - @TestApi - protected IEuiccController getIEuiccController() { + private static IEuiccController getIEuiccController() { return IEuiccController.Stub.asInterface(ServiceManager.getService("econtroller")); } } diff --git a/telephony/java/android/telephony/euicc/EuiccNotification.java b/telephony/java/android/telephony/euicc/EuiccNotification.java index ef3c1ce8cf3b..43a770748260 100644 --- a/telephony/java/android/telephony/euicc/EuiccNotification.java +++ b/telephony/java/android/telephony/euicc/EuiccNotification.java @@ -17,6 +17,7 @@ package android.telephony.euicc; import android.annotation.IntDef; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; @@ -31,10 +32,9 @@ import java.util.Objects; * disabling, or deleting). * * @hide - * - * TODO(b/35851809): Make this a @SystemApi. */ -public class EuiccNotification implements Parcelable { +@SystemApi +public final class EuiccNotification implements Parcelable { /** Event */ @Retention(RetentionPolicy.SOURCE) @IntDef(flag = true, prefix = { "EVENT_" }, value = { @@ -43,6 +43,7 @@ public class EuiccNotification implements Parcelable { EVENT_DISABLE, EVENT_DELETE }) + /** @hide */ public @interface Event {} /** A profile is downloaded and installed. */ @@ -57,7 +58,7 @@ public class EuiccNotification implements Parcelable { /** A profile is deleted. */ public static final int EVENT_DELETE = 1 << 3; - /** Value of the bits of all above events */ + /** Value of the bits of all the events including install, enable, disable and delete. */ @Event public static final int ALL_EVENTS = EVENT_INSTALL | EVENT_ENABLE | EVENT_DISABLE | EVENT_DELETE; diff --git a/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java b/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java index 7efe04364280..67ae983efeb0 100644 --- a/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java +++ b/telephony/java/android/telephony/euicc/EuiccRulesAuthTable.java @@ -16,6 +16,7 @@ package android.telephony.euicc; import android.annotation.IntDef; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.service.carrier.CarrierIdentifier; @@ -27,20 +28,21 @@ import com.android.internal.annotations.VisibleForTesting; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; /** * This represents the RAT (Rules Authorisation Table) stored on eUICC. - * * @hide - * - * TODO(b/35851809): Make this a @SystemApi. */ +@SystemApi public final class EuiccRulesAuthTable implements Parcelable { /** Profile policy rule flags */ @Retention(RetentionPolicy.SOURCE) @IntDef(flag = true, prefix = { "POLICY_RULE_FLAG_" }, value = { POLICY_RULE_FLAG_CONSENT_REQUIRED }) + /** @hide */ public @interface PolicyRuleFlag {} /** User consent is required to install the profile. */ @@ -89,12 +91,14 @@ public final class EuiccRulesAuthTable implements Parcelable { * @throws ArrayIndexOutOfBoundsException If the {@code mPosition} is larger than the size * this table. */ - public Builder add(int policyRules, CarrierIdentifier[] carrierId, int policyRuleFlags) { + public Builder add(int policyRules, List<CarrierIdentifier> carrierId, int policyRuleFlags) { if (mPosition >= mPolicyRules.length) { throw new ArrayIndexOutOfBoundsException(mPosition); } mPolicyRules[mPosition] = policyRules; - mCarrierIds[mPosition] = carrierId; + if (carrierId != null && carrierId.size() > 0) { + mCarrierIds[mPosition] = carrierId.toArray(new CarrierIdentifier[carrierId.size()]); + } mPolicyRuleFlags[mPosition] = policyRuleFlags; mPosition++; return this; diff --git a/tools/sdkparcelables/src/com/android/sdkparcelables/ParcelableDetector.kt b/tools/sdkparcelables/src/com/android/sdkparcelables/ParcelableDetector.kt index d6a0a4516a6d..45027b51d3ef 100644 --- a/tools/sdkparcelables/src/com/android/sdkparcelables/ParcelableDetector.kt +++ b/tools/sdkparcelables/src/com/android/sdkparcelables/ParcelableDetector.kt @@ -27,6 +27,8 @@ class ParcelableDetector { impl.build() return impl.parcelables } + + const val PARCELABLE_CLASS = "android/os/Parcelable" } private class Impl(val ancestors: Map<String, Ancestors>) { @@ -35,7 +37,7 @@ class ParcelableDetector { fun build() { val classList = ancestors.keys - classList.filterTo(parcelables, this::isParcelable) + classList.filterTo(parcelables, { (it != PARCELABLE_CLASS) && isParcelable(it) }) parcelables.sort() } @@ -44,7 +46,7 @@ class ParcelableDetector { return false } - if (c == "android/os/Parcelable") { + if (c == PARCELABLE_CLASS) { return true } diff --git a/tools/sdkparcelables/tests/com/android/sdkparcelables/ParcelableDetectorTest.kt b/tools/sdkparcelables/tests/com/android/sdkparcelables/ParcelableDetectorTest.kt index c9bcbc9cadcf..f08173d5b2f1 100644 --- a/tools/sdkparcelables/tests/com/android/sdkparcelables/ParcelableDetectorTest.kt +++ b/tools/sdkparcelables/tests/com/android/sdkparcelables/ParcelableDetectorTest.kt @@ -28,7 +28,7 @@ class ParcelableDetectorTest { val parcelables = ParcelableDetector.ancestorsToParcelables(ancestorMap) - assertEquals(parcelables, listOf("android/os/Parcelable", "android/test/Parcelable")) + assertEquals(parcelables, listOf("android/test/Parcelable")) } @Test @@ -39,7 +39,7 @@ class ParcelableDetectorTest { val parcelables = ParcelableDetector.ancestorsToParcelables(ancestorMap) - assertEquals(parcelables, listOf("android/os/Parcelable", "android/test/Parcelable")) + assertEquals(parcelables, listOf("android/test/Parcelable")) } @Test @@ -51,7 +51,7 @@ class ParcelableDetectorTest { val parcelables = ParcelableDetector.ancestorsToParcelables(ancestorMap) - assertEquals(parcelables, listOf("android/os/Parcelable", "android/test/Parcelable", "android/test/SuperParcelable")) + assertEquals(parcelables, listOf("android/test/Parcelable", "android/test/SuperParcelable")) } @Test @@ -63,7 +63,7 @@ class ParcelableDetectorTest { val parcelables = ParcelableDetector.ancestorsToParcelables(ancestorMap) - assertEquals(parcelables, listOf("android/os/Parcelable", "android/test/IParcelable", "android/test/Parcelable")) + assertEquals(parcelables, listOf("android/test/IParcelable", "android/test/Parcelable")) } } diff --git a/wifi/java/android/net/wifi/rtt/RangingResult.java b/wifi/java/android/net/wifi/rtt/RangingResult.java index 201833bff431..f7c85671c220 100644 --- a/wifi/java/android/net/wifi/rtt/RangingResult.java +++ b/wifi/java/android/net/wifi/rtt/RangingResult.java @@ -59,6 +59,19 @@ public final class RangingResult implements Parcelable { */ public static final int STATUS_FAIL = 1; + /** + * Individual range request status, {@link #getStatus()}. Indicates that the ranging operation + * failed because the specified peer does not support IEEE 802.11mc RTT operations. Support by + * an Access Point can be confirmed using + * {@link android.net.wifi.ScanResult#is80211mcResponder()}. + * <p> + * On such a failure, the individual result fields of {@link RangingResult} such as + * {@link RangingResult#getDistanceMm()} are invalid. + * + * @hide + */ + public static final int STATUS_RESPONDER_DOES_NOT_SUPPORT_IEEE80211MC = 2; + private final int mStatus; private final MacAddress mMac; private final PeerHandle mPeerHandle; |