diff options
61 files changed, 3413 insertions, 640 deletions
diff --git a/Android.bp b/Android.bp index f5c0b6d416b8..67822a376ed3 100644 --- a/Android.bp +++ b/Android.bp @@ -201,6 +201,7 @@ java_library { "apex_aidl_interface-java", "packagemanager_aidl-java", "framework-protos", + "libtombstone_proto_java", "updatable-driver-protos", "ota_metadata_proto_java", "android.hidl.base-V1.0-java", diff --git a/ProtoLibraries.bp b/ProtoLibraries.bp index e7adf203334e..d03bbd249b00 100644 --- a/ProtoLibraries.bp +++ b/ProtoLibraries.bp @@ -34,7 +34,6 @@ gensrcs { ":ipconnectivity-proto-src", ":libstats_atom_enum_protos", ":libstats_atom_message_protos", - ":libtombstone_proto-src", "core/proto/**/*.proto", "libs/incident/**/*.proto", ], diff --git a/STABILITY_OWNERS b/STABILITY_OWNERS new file mode 100644 index 000000000000..a7ecb4dfdd44 --- /dev/null +++ b/STABILITY_OWNERS @@ -0,0 +1,2 @@ +gaillard@google.com + diff --git a/api/coverage/tools/ExtractFlaggedApis.kt b/api/coverage/tools/ExtractFlaggedApis.kt index 43caaecebdaf..caa1929abd54 100644 --- a/api/coverage/tools/ExtractFlaggedApis.kt +++ b/api/coverage/tools/ExtractFlaggedApis.kt @@ -43,7 +43,7 @@ fun main(args: Array<String>) { .setClassName(it.fullName()) .setMethodName(method.name()) for (param in method.parameters()) { - api.addParameterTypes(param.type().toTypeString()) + api.addParameters(param.type().toTypeString()) } if (builder.containsFlagToApi(flagValue)) { var updatedApis = diff --git a/api/coverage/tools/extract_flagged_apis.proto b/api/coverage/tools/extract_flagged_apis.proto index 031d621b178f..4db2a8b03de5 100644 --- a/api/coverage/tools/extract_flagged_apis.proto +++ b/api/coverage/tools/extract_flagged_apis.proto @@ -32,6 +32,6 @@ message JavaMethod { string package_name = 1; string class_name = 2; string method_name = 3; - repeated string parameter_types = 4; + repeated string parameters = 4; } diff --git a/config/dirty-image-objects b/config/dirty-image-objects index 2584610e2848..f2e2b82cd82a 100644 --- a/config/dirty-image-objects +++ b/config/dirty-image-objects @@ -16,282 +16,1713 @@ # # # Dirty-image-objects file for boot image. -# -# Objects in this file are known dirty at runtime. Current this includes: -# - classes with known dirty static fields. -# # The image writer will bin these objects together in the image. +# More info about dirty objects format and how to collect the data can be +# found in: art/imgdiag/dirty_image_objects.md +# This particular file was generated by dumping all pre-installed apps. # -# This file can be generated using imgdiag with a command such as: -# adb shell imgdiag --image-diff-pid=<app pid> --zygote-diff-pid=<zygote pid> \ -# --boot-image=/system/framework/boot.art --dump-dirty-objects -# Then, grep for lines containing "Private dirty object" from the output. -# This particular file was generated by dumping systemserver and systemui. -# -Landroid/animation/LayoutTransition; -Landroid/app/ActivityManager; -Landroid/app/ActivityTaskManager; -Landroid/app/ActivityThread; -Landroid/app/AlarmManager; -Landroid/app/AppOpsManager; -Landroid/app/ContextImpl; -Landroid/app/Notification; -Landroid/app/NotificationManager; -Landroid/app/PendingIntent$FinishedDispatcher; -Landroid/app/PropertyInvalidatedCache$NoPreloadHolder; -Landroid/app/QueuedWork; -Landroid/app/ResourcesManager; -Landroid/app/SystemServiceRegistry; -Landroid/app/WallpaperManager; -Landroid/app/backup/BackupManager; -Landroid/compat/Compatibility; -Landroid/content/AsyncQueryHandler; -Landroid/content/ContentProviderClient; -Landroid/content/ContentResolver; -Landroid/content/Context; -Landroid/content/pm/PackageItemInfo; -Landroid/content/pm/UserPackage; -Landroid/content/res/ResourceTimer; -Landroid/database/CursorWindow; -Landroid/database/sqlite/SQLiteCompatibilityWalFlags; -Landroid/database/sqlite/SQLiteDebug$NoPreloadHolder; -Landroid/database/sqlite/SQLiteGlobal; -Landroid/ddm/DdmHandleAppName; -Landroid/graphics/Bitmap; -Landroid/graphics/Canvas; -Landroid/graphics/Compatibility; -Landroid/graphics/HardwareRenderer; -Landroid/graphics/TemporaryBuffer; -Landroid/graphics/Typeface; -Landroid/graphics/drawable/AdaptiveIconDrawable; -Landroid/hardware/SensorPrivacyManager; -Landroid/hardware/SystemSensorManager; -Landroid/hardware/devicestate/DeviceStateManagerGlobal; -Landroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal; -Landroid/hardware/display/DisplayManagerGlobal; -Landroid/hardware/input/InputManagerGlobal; -Landroid/hardware/location/GeofenceHardwareImpl; -Landroid/icu/impl/number/range/StandardPluralRanges; -Landroid/icu/text/Collator; -Landroid/icu/util/TimeZone; -Landroid/location/LocationManager; -Landroid/media/AudioManager; -Landroid/media/AudioPlaybackConfiguration; -Landroid/media/AudioSystem; -Landroid/media/MediaCodec; -Landroid/media/MediaCodecList; -Landroid/media/MediaFrameworkPlatformInitializer; -Landroid/media/MediaRouter2Manager; -Landroid/media/MediaRouter; -Landroid/media/PlayerBase; -Landroid/media/audiopolicy/AudioProductStrategy; -Landroid/media/audiopolicy/AudioVolumeGroup; -Landroid/nfc/NfcAdapter; -Landroid/nfc/NfcFrameworkInitializer; -Landroid/nfc/cardemulation/CardEmulation; -Landroid/os/AsyncTask; -Landroid/os/BaseBundle; -Landroid/os/Binder; -Landroid/os/BinderProxy; -Landroid/os/Environment; -Landroid/os/FileObserver; -Landroid/os/Handler; -Landroid/os/LocaleList; -Landroid/os/Looper; -Landroid/os/Message; -Landroid/os/NullVibrator; -Landroid/os/Parcel; -Landroid/os/Process; -Landroid/os/ServiceManager; -Landroid/os/StrictMode; -Landroid/os/UEventObserver; -Landroid/os/UserManager; -Landroid/os/WorkSource; -Landroid/os/storage/StorageManager; -Landroid/permission/PermissionManager; -Landroid/provider/DeviceConfigInitializer; -Landroid/provider/FontsContract; -Landroid/provider/Settings; -Landroid/renderscript/RenderScript; -Landroid/renderscript/RenderScriptCacheDir; -Landroid/security/keystore2/KeyStoreCryptoOperationUtils; -Landroid/security/net/config/ApplicationConfig; -Landroid/security/net/config/SystemCertificateSource$NoPreloadHolder; -Landroid/security/net/config/UserCertificateSource$NoPreloadHolder; -Landroid/telecom/Log; -Landroid/telecom/TelecomManager; -Landroid/telephony/AnomalyReporter; -Landroid/telephony/TelephonyFrameworkInitializer; -Landroid/telephony/TelephonyLocalConnection; -Landroid/telephony/TelephonyManager; -Landroid/telephony/TelephonyRegistryManager; -Landroid/text/DynamicLayout; -Landroid/text/TextUtils; -Landroid/text/format/DateFormat; -Landroid/text/format/DateUtils; -Landroid/text/method/ArrowKeyMovementMethod; -Landroid/text/method/LinkMovementMethod; -Landroid/text/method/SingleLineTransformationMethod; -Landroid/text/style/ClickableSpan; -Landroid/timezone/TelephonyLookup; -Landroid/timezone/TimeZoneFinder; -Landroid/util/ArrayMap; -Landroid/util/ArraySet; -Landroid/util/EventLog; -Landroid/util/NtpTrustedTime; -Landroid/view/Choreographer; -Landroid/view/CrossWindowBlurListeners; -Landroid/view/DisplayCutout; -Landroid/view/KeyEvent; -Landroid/view/MotionEvent; -Landroid/view/PointerIcon; -Landroid/view/RoundedCorners; -Landroid/view/SurfaceControl; -Landroid/view/View; -Landroid/view/ViewGroup$TouchTarget; -Landroid/view/ViewRootImpl; -Landroid/view/ViewTreeObserver; -Landroid/view/WindowManagerGlobal; -Landroid/view/accessibility/AccessibilityManager; -Landroid/view/accessibility/AccessibilityNodeIdManager; -Landroid/view/autofill/Helper; -Landroid/view/inputmethod/IInputMethodManagerGlobalInvoker; -Landroid/view/inputmethod/InputMethodManager; -Landroid/webkit/CookieSyncManager; -Landroid/webkit/WebView; -Landroid/webkit/WebViewFactory; -Landroid/webkit/WebViewZygote; -Landroid/widget/AbsListView; -Landroid/widget/ImageView; -Landroid/widget/LinearLayout; -Landroid/widget/Toast; -Landroid/window/SurfaceSyncGroup; -Lcom/android/i18n/timezone/TelephonyLookup; -Lcom/android/i18n/timezone/TimeZoneFinder; -Lcom/android/internal/config/appcloning/AppCloningDeviceConfigHelper; -Lcom/android/internal/content/om/OverlayConfig; -Lcom/android/internal/display/BrightnessSynchronizer; -Lcom/android/internal/infra/AndroidFuture; -Lcom/android/internal/inputmethod/ImeTracing; -Lcom/android/internal/inputmethod/InputMethodPrivilegedOperationsRegistry; -Lcom/android/internal/jank/InteractionJankMonitor$InstanceHolder; -Lcom/android/internal/jank/InteractionJankMonitor; -Lcom/android/internal/logging/MetricsLogger; -Lcom/android/internal/os/BackgroundThread; -Lcom/android/internal/os/BinderInternal; -Lcom/android/internal/os/KernelCpuBpfTracking; -Lcom/android/internal/os/RuntimeInit; -Lcom/android/internal/os/SomeArgs; -Lcom/android/internal/os/ZygoteInit; -Lcom/android/internal/policy/AttributeCache; -Lcom/android/internal/protolog/BaseProtoLogImpl; -Lcom/android/internal/protolog/ProtoLogImpl; -Lcom/android/internal/statusbar/NotificationVisibility; -Lcom/android/internal/telephony/CellBroadcastServiceManager; -Lcom/android/internal/telephony/IntentBroadcaster; -Lcom/android/internal/telephony/MccTable; -Lcom/android/internal/telephony/MultiSimSettingController; -Lcom/android/internal/telephony/PackageChangeReceiver; -Lcom/android/internal/telephony/PhoneConfigurationManager; -Lcom/android/internal/telephony/PhoneFactory; -Lcom/android/internal/telephony/ProxyController; -Lcom/android/internal/telephony/RILRequest; -Lcom/android/internal/telephony/RadioConfig; -Lcom/android/internal/telephony/RadioInterfaceCapabilityController; -Lcom/android/internal/telephony/SmsApplication; -Lcom/android/internal/telephony/SmsBroadcastUndelivered; -Lcom/android/internal/telephony/SomeArgs; -Lcom/android/internal/telephony/TelephonyComponentFactory; -Lcom/android/internal/telephony/TelephonyDevController; -Lcom/android/internal/telephony/cat/CatService; -Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler; -Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager; -Lcom/android/internal/telephony/euicc/EuiccCardController; -Lcom/android/internal/telephony/euicc/EuiccController; -Lcom/android/internal/telephony/ims/ImsResolver; -Lcom/android/internal/telephony/metrics/TelephonyMetrics; -Lcom/android/internal/telephony/nano/PersistAtomsProto$CarrierIdMismatch; -Lcom/android/internal/telephony/nano/PersistAtomsProto$CellularDataServiceSwitch; -Lcom/android/internal/telephony/nano/PersistAtomsProto$CellularServiceState; -Lcom/android/internal/telephony/nano/PersistAtomsProto$DataCallSession; -Lcom/android/internal/telephony/nano/PersistAtomsProto$EmergencyNumbersInfo; -Lcom/android/internal/telephony/nano/PersistAtomsProto$GbaEvent; -Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsDedicatedBearerEvent; -Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsDedicatedBearerListenerEvent; -Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsRegistrationFeatureTagStats; -Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsRegistrationServiceDescStats; -Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsRegistrationStats; -Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsRegistrationTermination; -Lcom/android/internal/telephony/nano/PersistAtomsProto$IncomingSms; -Lcom/android/internal/telephony/nano/PersistAtomsProto$NetworkRequests; -Lcom/android/internal/telephony/nano/PersistAtomsProto$NetworkRequestsV2; -Lcom/android/internal/telephony/nano/PersistAtomsProto$OutgoingShortCodeSms; -Lcom/android/internal/telephony/nano/PersistAtomsProto$OutgoingSms; -Lcom/android/internal/telephony/nano/PersistAtomsProto$PresenceNotifyEvent; -Lcom/android/internal/telephony/nano/PersistAtomsProto$RcsAcsProvisioningStats; -Lcom/android/internal/telephony/nano/PersistAtomsProto$RcsClientProvisioningStats; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteController; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteIncomingDatagram; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteOutgoingDatagram; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteProvision; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteSession; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteSosMessageRecommender; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SipDelegateStats; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SipMessageResponse; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SipTransportFeatureTagStats; -Lcom/android/internal/telephony/nano/PersistAtomsProto$SipTransportSession; -Lcom/android/internal/telephony/nano/PersistAtomsProto$UceEventStats; -Lcom/android/internal/telephony/nano/PersistAtomsProto$UnmeteredNetworks; -Lcom/android/internal/telephony/nano/PersistAtomsProto$VoiceCallRatUsage; -Lcom/android/internal/telephony/nano/PersistAtomsProto$VoiceCallSession; -Lcom/android/internal/telephony/nano/TelephonyProto$RilDataCall; -Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession$Event$RilCall; -Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState$NetworkRegistrationInfo; -Lcom/android/internal/telephony/satellite/PointingAppController; -Lcom/android/internal/telephony/satellite/SatelliteModemInterface; -Lcom/android/internal/telephony/uicc/UiccController; -Lcom/android/internal/telephony/uicc/UiccStateChangedLauncher; -Lcom/android/internal/util/ContrastColorUtil; -Lcom/android/internal/view/WindowManagerPolicyThread; -Lcom/android/org/bouncycastle/crypto/CryptoServicesRegistrar; -Lcom/android/phone/ecc/nano/ProtobufEccData$CountryInfo; -Lcom/android/phone/ecc/nano/ProtobufEccData$EccInfo; -Lcom/android/server/AppWidgetBackupBridge; -Ldalvik/system/BaseDexClassLoader; -Ldalvik/system/BlockGuard; -Ldalvik/system/CloseGuard; -Ldalvik/system/RuntimeHooks; -Ldalvik/system/SocketTagger; -Ldalvik/system/VMRuntime; -Ldalvik/system/ZipPathValidator; -Ldalvik/system/ZygoteHooks; -Ljava/lang/System; -Ljava/lang/Thread; -Ljava/lang/Throwable; -Ljava/lang/ref/FinalizerReference; -Ljava/lang/ref/ReferenceQueue; -Ljava/net/ResponseCache; -Ljava/nio/Bits; -Ljava/nio/charset/Charset; -Ljava/security/Provider; -Ljava/util/Collections; -Ljava/util/GregorianCalendar; -Ljava/util/Locale$NoImagePreloadHolder; -Ljava/util/Locale; -Ljava/util/Scanner; -Ljava/util/TimeZone; -Ljava/util/concurrent/ForkJoinPool; -Ljava/util/concurrent/ThreadLocalRandom; -Ljavax/net/ServerSocketFactory; -Ljavax/net/SocketFactory; -Ljavax/net/ssl/HttpsURLConnection$NoPreloadHolder; -Ljavax/net/ssl/HttpsURLConnection; -Ljavax/net/ssl/SSLContext; -Ljavax/net/ssl/SSLServerSocketFactory; -Ljavax/net/ssl/SSLSocketFactory; -Llibcore/io/Libcore; -Llibcore/net/NetworkSecurityPolicy; -Lsun/misc/Cleaner; -Lsun/nio/ch/FileChannelImpl$Unmapper; -Lsun/nio/ch/FileChannelImpl; -Lsun/security/jca/Providers; +Landroid/text/style/URLSpan; 0 +Landroid/content/res/Resources$NotFoundException; 1 +Landroid/os/PowerManager$WakeLock; 2 +Landroid/os/BatterySaverPolicyConfig; 2 +Landroid/content/ContextWrapper; 2 +Landroid/app/WallpaperInfo; 2 +Landroid/content/pm/PackageManager; 2 +Landroid/app/IWallpaperManager; 2 +Ljava/lang/BootClassLoader; 2 +Ljava/time/Duration; 2 +Landroid/util/Printer; 2 +Landroid/app/WallpaperManager$OnColorsChangedListener; 2 +Landroid/app/WallpaperColors; 2 +Landroid/content/pm/ServiceInfo; 2 +Landroid/app/KeyguardManager$KeyguardDismissCallback; 2 +Ljava/lang/CharSequence; 3 +Landroid/widget/Switch; 4 +Lcom/android/internal/util/ContrastColorUtil; 4 +Landroid/view/SurfaceControl; 4 +Landroid/graphics/ColorMatrix;.dexCache:Ljava/lang/Object; 4 +Lcom/android/internal/widget/CachingIconView; 4 +Landroid/window/IRemoteTransition$Stub$Proxy; 4 +Landroid/app/trust/TrustManager$TrustListener; 4 +Landroid/view/NotificationHeaderView; 4 +Lcom/android/internal/widget/ImageResolver; 4 +Landroid/window/WindowContainerTransaction$Change; 4 +Lcom/android/internal/widget/MessagingLayout; 4 +Ljava/util/concurrent/ConcurrentLinkedQueue; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap;.root:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.left:Ljava/util/TreeMap$TreeMapEntry; 4 +Landroid/view/RemotableViewMethod; 4 +Landroid/app/IApplicationThread$Stub$Proxy; 4 +Landroid/os/FileUtils; 4 +Landroid/view/View;.SCALE_X:Landroid/util/Property; 4 +Landroid/widget/GridLayout;.UNDEFINED_ALIGNMENT:Landroid/widget/GridLayout$Alignment; 4 +Landroid/media/MediaPlayer$EventHandler; 4 +Landroid/widget/DateTimeView; 4 +Llibcore/util/ZoneInfo; 4 +Lcom/android/internal/statusbar/IStatusBarService; 4 +Ljava/lang/invoke/MethodType;.internTable:Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet;.stale:Ljava/lang/ref/ReferenceQueue; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap;.root:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry; 4 +Lcom/android/internal/logging/UiEventLogger; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap;.root:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.left:Ljava/util/TreeMap$TreeMapEntry; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap;.root:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry; 4 +Landroid/renderscript/RenderScript; 4 +Landroid/view/ViewTreeObserver$OnWindowVisibilityChangeListener; 4 +Lcom/android/internal/widget/RemeasuringLinearLayout; 4 +Landroid/widget/DateTimeView$ReceiverInfo$1; 4 +Landroid/view/View;.TRANSLATION_Y:Landroid/util/Property; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap;.root:Ljava/util/TreeMap$TreeMapEntry; 4 +Lcom/android/internal/widget/NotificationExpandButton; 4 +Lcom/android/internal/view/menu/ActionMenuItemView; 4 +Landroid/view/animation/AnimationSet; 4 +Landroid/hardware/biometrics/BiometricSourceType;.FINGERPRINT:Landroid/hardware/biometrics/BiometricSourceType; 4 +Landroid/window/WindowOrganizer;.IWindowOrganizerControllerSingleton:Landroid/util/Singleton; 4 +Ljava/lang/Runnable; 4 +Lorg/apache/harmony/dalvik/ddmc/DdmServer;.mHandlerMap:Ljava/util/HashMap; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap;.root:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry; 4 +Lcom/android/internal/widget/ImageFloatingTextView; 4 +Landroid/window/IWindowContainerToken$Stub$Proxy; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap;.root:Ljava/util/TreeMap$TreeMapEntry;.left:Ljava/util/TreeMap$TreeMapEntry; 4 +Landroid/content/res/ColorStateList; 4 +Landroid/view/View;.SCALE_Y:Landroid/util/Property; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap; 4 +Lcom/android/internal/widget/ConversationLayout; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap;.root:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry;.right:Ljava/util/TreeMap$TreeMapEntry; 4 +Lcom/android/internal/colorextraction/ColorExtractor$OnColorsChangedListener; 4 +Landroid/hardware/face/FaceManager$FaceDetectionCallback; 4 +Landroid/widget/RemoteViews;.sLookupKey:Landroid/widget/RemoteViews$MethodKey; 4 +Landroid/widget/ViewSwitcher;.dexCache:Ljava/lang/Object; 4 +Lcom/android/internal/widget/NotificationActionListLayout; 4 +Ljava/util/concurrent/ConcurrentLinkedQueue$Node; 4 +Landroid/hardware/biometrics/BiometricSourceType;.FACE:Landroid/hardware/biometrics/BiometricSourceType; 4 +Landroid/hardware/biometrics/BiometricSourceType;.IRIS:Landroid/hardware/biometrics/BiometricSourceType; 4 +Landroid/view/NotificationTopLineView; 4 +Lcom/android/internal/protolog/BaseProtoLogImpl;.LOG_GROUPS:Ljava/util/TreeMap;.root:Ljava/util/TreeMap$TreeMapEntry;.left:Ljava/util/TreeMap$TreeMapEntry;.left:Ljava/util/TreeMap$TreeMapEntry;.left:Ljava/util/TreeMap$TreeMapEntry;.left:Ljava/util/TreeMap$TreeMapEntry;.left:Ljava/util/TreeMap$TreeMapEntry; 4 +Landroid/widget/RemoteViews;.sMethods:Landroid/util/ArrayMap; 4 +Lcom/android/internal/os/BinderInternal$BinderProxyLimitListener; 5 +Landroid/app/AppOpsManager$OnOpNotedInternalListener; 5 +Lcom/android/internal/R$styleable;.WindowAnimation:[I 5 +Lcom/android/internal/logging/UiEventLogger$UiEventEnum; 5 +Lcom/android/internal/policy/AttributeCache; 5 +Landroid/app/Notification$CallStyle; 5 +Landroid/app/AppOpsManager$OnOpNotedListener; 5 +Lcom/android/internal/protolog/BaseProtoLogImpl; 5 +Landroid/app/AppOpsManager$OnOpStartedListener; 5 +Lcom/android/internal/util/ScreenshotHelper$1; 5 +Landroid/app/Notification$DecoratedCustomViewStyle; 5 +Landroid/view/DisplayCutout; 5 +Landroid/view/InputEvent;.mNextSeq:Ljava/util/concurrent/atomic/AtomicInteger; 5 +Lcom/android/internal/statusbar/NotificationVisibility; 5 +Landroid/telephony/DataSpecificRegistrationInfo; 6 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle; 7 +Landroid/telephony/VoiceSpecificRegistrationInfo; 8 +Landroid/telephony/AnomalyReporter; 8 +Landroid/telephony/TelephonyRegistryManager;.sCarrierPrivilegeCallbacks:Ljava/util/WeakHashMap; 8 +Landroid/app/PropertyInvalidatedCache;.sCaches:Ljava/util/WeakHashMap;.table:[Ljava/util/WeakHashMap$Entry;.1:Ljava/util/WeakHashMap$Entry; 8 +Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection; 8 +Landroid/content/ContentProvider$Transport; 8 +Landroid/telephony/NetworkRegistrationInfo; 8 +Landroid/net/MatchAllNetworkSpecifier; 8 +Landroid/telephony/TelephonyRegistryManager;.sCarrierPrivilegeCallbacks:Ljava/util/WeakHashMap;.table:[Ljava/util/WeakHashMap$Entry; 8 +Landroid/app/PropertyInvalidatedCache;.sInvalidates:Ljava/util/HashMap; 9 +Landroid/app/PropertyInvalidatedCache$NoPreloadHolder; 9 +Landroid/app/PropertyInvalidatedCache;.sDisabledKeys:Ljava/util/HashSet;.map:Ljava/util/HashMap; 10 +Landroid/media/AudioSystem$AudioRecordingCallback; 11 +Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedString; 11 +Landroid/net/metrics/IpManagerEvent; 11 +Lcom/android/internal/os/ProcessCpuTracker$FilterStats; 11 +Lcom/android/internal/infra/AbstractRemoteService$AsyncRequest; 11 +Landroid/content/pm/RegisteredServicesCache$3; 11 +Lcom/android/internal/os/LooperStats; 11 +Lcom/android/server/AppWidgetBackupBridge; 11 +Landroid/hardware/display/DisplayManagerInternal; 11 +Landroid/content/pm/PackageInfo; 11 +Landroid/hardware/soundtrigger/SoundTriggerModule$EventHandlerDelegate; 11 +Landroid/app/servertransaction/ResumeActivityItem; 11 +Lcom/android/internal/widget/AlertDialogLayout; 11 +Landroid/content/pm/FallbackCategoryProvider;.sFallbacks:Landroid/util/ArrayMap; 11 +Landroid/os/RemoteCallback$1; 11 +Landroid/content/pm/SharedLibraryInfo; 11 +Landroid/util/MemoryIntArray; 11 +Landroid/net/metrics/DhcpErrorEvent; 11 +Lcom/android/internal/util/function/DodecConsumer; 11 +Landroid/provider/Settings; 11 +Landroid/app/PropertyInvalidatedCache;.sCorkLock:Ljava/lang/Object; 11 +Lcom/android/internal/os/CachedDeviceState$Readonly; 11 +Landroid/app/job/JobServiceEngine$JobHandler; 11 +Landroid/app/SystemServiceRegistry; 11 +Lcom/android/internal/os/BinderInternal$CallStatsObserver; 11 +Lcom/android/internal/statusbar/IStatusBar$Stub$Proxy; 11 +Landroid/hardware/location/IActivityRecognitionHardwareClient; 11 +Landroid/telecom/Logging/EventManager$EventListener; 11 +Landroid/accounts/AccountManagerInternal; 11 +Lcom/android/internal/os/KernelCpuBpfTracking; 11 +Lcom/android/internal/statusbar/NotificationVisibility$NotificationLocation; 11 +Landroid/hardware/camera2/CameraManager$CameraManagerGlobal; 11 +Landroid/os/ServiceSpecificException; 11 +Landroid/net/Uri$PathPart;.NULL:Landroid/net/Uri$PathPart; 11 +Landroid/app/ActivityManagerInternal; 11 +Landroid/media/AudioSystem; 11 +Landroid/service/dreams/DreamManagerInternal; 11 +Landroid/debug/AdbManagerInternal; 11 +Landroid/graphics/Bitmap$CompressFormat; 11 +Landroid/hardware/location/NanoAppMessage; 11 +Landroid/os/storage/StorageManagerInternal; 11 +Landroid/app/AppOpsManagerInternal; 11 +Ljava/security/cert/CertificateException; 11 +Ldalvik/system/VMRuntime; 11 +Landroid/content/pm/SigningInfo; 11 +Landroid/view/KeyEvent; 11 +Lcom/android/internal/view/WindowManagerPolicyThread; 11 +Landroid/graphics/Region;.sPool:Landroid/util/Pools$SynchronizedPool;.mPool:[Ljava/lang/Object; 11 +Landroid/content/res/ResourceTimer; 11 +Landroid/view/autofill/AutofillManagerInternal; 11 +Lcom/android/internal/util/Parcelling$Cache;.sCache:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object; 11 +Landroid/graphics/Region;.sPool:Landroid/util/Pools$SynchronizedPool; 11 +Landroid/app/LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0; 11 +Lcom/android/server/LocalServices;.sLocalServiceObjects:Landroid/util/ArrayMap; 11 +Landroid/app/admin/DevicePolicyManagerInternal$OnCrossProfileWidgetProvidersChangeListener; 11 +Landroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener; 11 +Landroid/content/pm/PermissionInfo; 11 +Landroid/view/WindowManagerPolicyConstants$PointerEventListener; 11 +Landroid/os/UEventObserver; 11 +Landroid/media/AudioManagerInternal$RingerModeDelegate; 11 +Landroid/view/Display$HdrCapabilities; 11 +Landroid/service/notification/Condition; 11 +Landroid/content/pm/UserPackage; 11 +Landroid/app/AppOpsManager$SamplingStrategy; 11 +Landroid/telephony/ServiceState; 11 +Landroid/app/servertransaction/PauseActivityItem; 11 +Lcom/android/internal/util/function/pooled/PooledLambdaImpl;.sMessageCallbacksPool:Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;.mLock:Ljava/lang/Object; 11 +Landroid/view/KeyCharacterMap$FallbackAction; 11 +Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringArray; 11 +Landroid/hardware/display/DeviceProductInfo; 11 +Lcom/android/internal/util/Parcelling$Cache;.sCache:Landroid/util/ArrayMap;.mHashes:[I 11 +Landroid/content/pm/RegisteredServicesCache$2; 11 +Landroid/content/pm/PackageManager;.sCacheAutoCorker:Landroid/app/PropertyInvalidatedCache$AutoCorker; 11 +Landroid/app/PropertyInvalidatedCache;.sCorks:Ljava/util/HashMap; 11 +Landroid/service/notification/StatusBarNotification; 11 +Landroid/app/servertransaction/ConfigurationChangeItem; 11 +Landroid/app/ActivityManager$RecentTaskInfo; 11 +Landroid/app/Notification; 11 +Landroid/app/servertransaction/DestroyActivityItem; 11 +Landroid/webkit/WebViewLibraryLoader$RelroFileCreator; 11 +Landroid/net/metrics/NetworkEvent; 11 +Landroid/media/AudioPlaybackConfiguration; 11 +Landroid/accessibilityservice/AccessibilityServiceInfo; 11 +Landroid/hardware/display/DeviceProductInfo$ManufactureDate; 11 +Landroid/os/storage/StorageVolume; 11 +Landroid/os/BatteryManagerInternal; 11 +Landroid/appwidget/AppWidgetManagerInternal; 11 +Landroid/app/servertransaction/NewIntentItem; 11 +Landroid/content/pm/ShortcutServiceInternal; 11 +Landroid/app/assist/ActivityId; 11 +Landroid/window/DisplayAreaAppearedInfo; 11 +Landroid/os/Process;.ZYGOTE_PROCESS:Landroid/os/ZygoteProcess;.mLock:Ljava/lang/Object; 11 +Landroid/app/usage/UsageStats; 11 +Landroid/app/Notification$MediaStyle; 11 +Landroid/media/AudioSystem$DynamicPolicyCallback; 11 +Landroid/content/pm/ProviderInfo; 11 +Landroid/os/PowerManagerInternal; 11 +Landroid/service/voice/VoiceInteractionManagerInternal; 11 +Landroid/content/pm/FeatureInfo; 11 +Landroid/app/servertransaction/TopResumedActivityChangeItem; 11 +Landroid/app/Notification$DecoratedMediaCustomViewStyle; 11 +Landroid/appwidget/AppWidgetProviderInfo; 11 +Landroid/app/AppOpsManager$NoteOpEvent; 11 +Landroid/graphics/GraphicsStatsService; 11 +Landroid/view/DisplayAddress$Physical; 11 +Landroid/content/ComponentName$WithComponentName; 11 +Landroid/app/admin/DevicePolicyManagerInternal; 11 +Landroid/os/ResultReceiver$MyResultReceiver; 11 +Landroid/content/ContentProviderClient; 11 +Landroid/content/pm/RegisteredServicesCache$1; 11 +Landroid/app/PendingIntent$FinishedDispatcher; 11 +Landroid/location/LocationManager; 11 +Landroid/hardware/location/ContextHubInfo; 11 +Landroid/content/pm/ShortcutServiceInternal$ShortcutChangeListener; 11 +Lcom/android/server/usage/AppStandbyInternal; 11 +Landroid/content/pm/RegisteredServicesCacheListener; 11 +Landroid/app/servertransaction/LaunchActivityItem; 11 +Landroid/content/pm/BaseParceledListSlice$1; 11 +Landroid/annotation/StringRes; 11 +Lcom/android/internal/R$styleable;.Window:[I 11 +Landroid/service/notification/ZenModeConfig; 11 +Landroid/telecom/Logging/SessionManager$ISessionListener; 11 +Landroid/app/time/TimeZoneConfiguration; 11 +Landroid/net/metrics/ValidationProbeEvent; 11 +Landroid/content/pm/PackageInstaller$SessionInfo; 11 +Landroid/content/pm/UserPackage;.sCache:Landroid/util/SparseArrayMap;.mData:Landroid/util/SparseArray; 11 +Landroid/content/pm/PermissionGroupInfo; 11 +Landroid/hardware/sidekick/SidekickInternal; 11 +Lcom/android/internal/widget/ButtonBarLayout; 11 +Landroid/content/pm/LauncherActivityInfoInternal; 11 +Lcom/android/internal/util/Parcelling$Cache;.sCache:Landroid/util/ArrayMap; 11 +Lcom/android/internal/widget/LockSettingsInternal; 11 +Landroid/media/AudioManagerInternal; 11 +Landroid/app/AppOpsManager$AttributedOpEntry; 11 +Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringList; 11 +Landroid/telecom/Log; 11 +Landroid/app/time/TimeZoneCapabilities; 11 +Landroid/attention/AttentionManagerInternal; 11 +Landroid/view/WindowManagerPolicyConstants; 11 +Landroid/content/pm/CrossProfileAppsInternal; 11 +Landroid/hardware/location/GeofenceHardwareService; 11 +Landroid/content/pm/dex/ArtManagerInternal; 11 +Landroid/net/metrics/IpReachabilityEvent; 11 +Landroid/content/pm/LauncherApps$ShortcutQuery$QueryFlags; 11 +Landroid/media/AudioAttributes; 11 +Landroid/app/PropertyInvalidatedCache$AutoCorker$1; 11 +Landroid/net/metrics/ApfProgramEvent; 11 +Landroid/content/pm/SigningDetails; 11 +Lcom/android/internal/protolog/ProtoLogImpl; 11 +Landroid/hardware/biometrics/ComponentInfoInternal; 11 +Lcom/android/internal/util/ToBooleanFunction; 11 +Landroid/app/ActivityThread$H; 11 +Landroid/hardware/location/GeofenceHardwareImpl; 11 +Landroid/net/wifi/nl80211/WifiNl80211Manager$ScanEventHandler; 11 +Landroid/util/NtpTrustedTime; 11 +Landroid/hardware/soundtrigger/SoundTrigger$StatusListener; 11 +Lcom/android/internal/app/procstats/AssociationState;.sTmpSourceKey:Lcom/android/internal/app/procstats/AssociationState$SourceKey; 11 +Ljava/util/zip/ZipFile$ZipFileInflaterInputStream; 11 +Landroid/app/job/JobInfo; 11 +Lcom/android/internal/content/om/OverlayConfig; 11 +Landroid/webkit/WebViewZygote; 11 +Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringSet; 11 +Lcom/android/internal/infra/AbstractRemoteService$VultureCallback; 11 +Landroid/permission/PermissionManagerInternal; 11 +Lcom/android/server/WidgetBackupProvider; 11 +Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper; 11 +Landroid/app/PropertyInvalidatedCache;.sCorkedInvalidates:Ljava/util/HashMap; 11 +Landroid/media/AudioPlaybackConfiguration$PlayerDeathMonitor; 11 +Landroid/net/wifi/nl80211/WifiNl80211Manager$ScanEventCallback; 11 +Landroid/service/notification/NotificationListenerService$RankingMap; 11 +Landroid/os/UserHandle;.sExtraUserHandleCache:Landroid/util/SparseArray; 11 +Ljava/time/DateTimeException; 11 +Ljava/lang/NumberFormatException; 11 +Ljava/security/Provider;.knownEngines:Ljava/util/Map;.table:[Ljava/util/HashMap$Node;.125:Ljava/util/HashMap$Node;.value:Ljava/lang/Object; 11 +Landroid/app/LoadedApk$ServiceDispatcher$RunConnection; 11 +Landroid/view/RoundedCorners; 11 +Landroid/os/Process;.ZYGOTE_PROCESS:Landroid/os/ZygoteProcess; 11 +Landroid/media/audiopolicy/AudioVolumeGroup; 11 +Landroid/media/AudioSystem$ErrorCallback; 11 +Landroid/app/servertransaction/ActivityResultItem; 11 +Lcom/android/internal/widget/DialogTitle; 11 +Lcom/android/internal/os/StoragedUidIoStatsReader$Callback; 11 +Landroid/view/ViewRootImpl$W; 11 +Landroid/app/ServiceStartArgs; 11 +Landroid/window/TaskAppearedInfo; 11 +Lcom/android/internal/listeners/ListenerExecutor$FailureCallback; 11 +Landroid/app/ApplicationExitInfo; 11 +Landroid/content/pm/PackageManager;.sCacheAutoCorker:Landroid/app/PropertyInvalidatedCache$AutoCorker;.mLock:Ljava/lang/Object; 11 +Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringValueMap; 11 +Landroid/content/pm/ResolveInfo; 11 +Lcom/android/internal/display/BrightnessSynchronizer; 11 +Landroid/window/IOnBackInvokedCallback$Stub$Proxy; 12 +Landroid/graphics/drawable/PictureDrawable; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.126:Ljava/lang/Byte; 13 +Landroid/view/ViewDebug$ExportedProperty; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.41:Ljava/lang/Byte; 13 +Landroid/view/inputmethod/DeleteGesture; 13 +Landroid/view/ViewDebug$IntToString; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.56:Ljava/lang/Byte; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.65:Ljava/lang/Byte; 13 +Landroid/webkit/WebViewFactory;.sProviderLock:Ljava/lang/Object; 13 +Ljava/lang/IllegalAccessError; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.51:Ljava/lang/Byte; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.52:Ljava/lang/Byte; 13 +Landroid/view/inputmethod/DeleteRangeGesture; 13 +Landroid/window/WindowContext; 13 +Ljava/util/concurrent/ConcurrentSkipListMap$Node; 13 +Landroid/view/inputmethod/SelectRangeGesture; 13 +Landroid/util/MalformedJsonException; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.131:Ljava/lang/Byte; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.120:Ljava/lang/Byte; 13 +Ljava/lang/Enum;.sharedConstantsCache:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap;.tail:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry; 13 +Ljava/nio/file/StandardOpenOption;.TRUNCATE_EXISTING:Ljava/nio/file/StandardOpenOption; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.121:Ljava/lang/Byte; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.16:Ljava/lang/Byte; 13 +Ljava/util/concurrent/ConcurrentSkipListMap$Index; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.139:Ljava/lang/Byte; 13 +Landroid/view/ViewDebug$FlagToString; 13 +Landroid/view/inputmethod/SelectGesture; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.20:Ljava/lang/Byte; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.94:Ljava/lang/Byte; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.64:Ljava/lang/Byte; 13 +Landroid/webkit/WebViewFactoryProvider$Statics; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.95:Ljava/lang/Byte; 13 +Landroid/service/media/MediaBrowserService$ServiceBinder$1; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.7:Ljava/lang/Byte; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.23:Ljava/lang/Byte; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.46:Ljava/lang/Byte; 13 +Landroid/provider/Settings$SettingNotFoundException; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.74:Ljava/lang/Byte; 13 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.8:Ljava/lang/Byte; 13 +Landroid/widget/TextView;.TEMP_POSITION:[F 13 +Ljava/io/ByteArrayInputStream; 14 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.93:Ljava/lang/Byte; 14 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.134:Ljava/lang/Byte; 14 +Landroid/text/style/ImageSpan; 14 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.154:Ljava/lang/Byte; 15 +Landroid/view/TextureView$SurfaceTextureListener; 16 +Landroid/media/AudioManager$OnAudioFocusChangeListener; 17 +Ljava/util/Locale;.JAPAN:Ljava/util/Locale; 18 +Ljava/util/Locale;.GERMANY:Ljava/util/Locale; 19 +Ljava/util/Locale;.CANADA_FRENCH:Ljava/util/Locale; 20 +Ljava/util/Locale;.ITALY:Ljava/util/Locale; 20 +Ljava/util/Locale;.FRANCE:Ljava/util/Locale; 20 +Ljava/util/Locale;.UK:Ljava/util/Locale; 21 +Ljava/util/Locale;.CANADA:Ljava/util/Locale; 21 +Ljava/util/Locale$Cache;.LOCALECACHE:Ljava/util/Locale$Cache;.map:Ljava/util/concurrent/ConcurrentMap; 22 +Ljava/lang/IllegalStateException; 23 +Lcom/android/internal/util/function/pooled/PooledLambdaImpl;.sMessageCallbacksPool:Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool; 24 +Lcom/android/internal/util/function/pooled/PooledLambdaImpl;.sMessageCallbacksPool:Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;.mPool:[Ljava/lang/Object; 24 +Landroid/media/MediaRouter$WifiDisplayStatusChangedReceiver; 25 +Landroid/media/MediaRouter$VolumeChangeReceiver; 25 +Landroid/app/AppOpsManager$OnOpActiveChangedListener; 26 +Landroid/media/PlayerBase; 27 +Landroid/content/pm/Checksum$Type; 28 +Ljava/lang/Class; 29 +Landroid/widget/MediaController$MediaPlayerControl; 30 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.135:Ljava/lang/Long; 30 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.152:Ljava/lang/Long; 30 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.215:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.206:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.137:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.203:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.213:Ljava/lang/Byte; 31 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.549:Ljava/lang/Long; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.201:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.249:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.163:Ljava/lang/Byte; 31 +Ljava/util/HashMap; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.210:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.161:Ljava/lang/Byte; 31 +Landroid/icu/text/MeasureFormat;.hmsTo012:Ljava/util/Map;.table:[Ljava/util/HashMap$Node;.0:Ljava/util/HashMap$Node;.value:Ljava/lang/Object; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.199:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.248:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.252:Ljava/lang/Byte; 31 +Lcom/android/ims/rcs/uce/UceDeviceState;.DEVICE_STATE_DESCRIPTION:Ljava/util/Map;.table:[Ljava/util/HashMap$Node;.3:Ljava/util/HashMap$Node;.key:Ljava/lang/Object; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.159:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.217:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.200:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.240:Ljava/lang/Byte; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.198:Ljava/lang/Byte; 31 +Lcom/android/ims/rcs/uce/UceDeviceState;.DEVICE_STATE_DESCRIPTION:Ljava/util/Map;.table:[Ljava/util/HashMap$Node;.4:Ljava/util/HashMap$Node;.key:Ljava/lang/Object; 31 +Landroid/content/pm/PackageManager$OnChecksumsReadyListener; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.193:Ljava/lang/Byte; 31 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.228:Ljava/lang/Long; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.236:Ljava/lang/Byte; 31 +Landroid/telephony/ims/ImsService;.CAPABILITIES_LOG_MAP:Ljava/util/Map;.table:[Ljava/lang/Object;.2:Ljava/lang/Long; 31 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.211:Ljava/lang/Byte; 31 +Landroid/view/SurfaceView; 32 +Landroid/view/ViewStub$OnInflateListener; 33 +Landroid/graphics/drawable/DrawableInflater;.CONSTRUCTOR_MAP:Ljava/util/HashMap; 34 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.245:Ljava/lang/Byte; 35 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.232:Ljava/lang/Byte; 35 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.12:Ljava/lang/Byte; 35 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.170:Ljava/lang/Long; 35 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.183:Ljava/lang/Long; 35 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.246:Ljava/lang/Byte; 35 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.168:Ljava/lang/Long; 35 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.72:Ljava/lang/Byte; 35 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.243:Ljava/lang/Byte; 35 +Ljava/util/WeakHashMap;.NULL_KEY:Ljava/lang/Object; 35 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.235:Ljava/lang/Byte; 35 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.147:Ljava/lang/Long; 35 +Ljava/io/InterruptedIOException; 35 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.184:Ljava/lang/Long; 35 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.165:Ljava/lang/Long; 35 +Landroid/text/style/ForegroundColorSpan; 35 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.176:Ljava/lang/Long; 35 +Ljava/lang/Long$LongCache;.archivedCache:[Ljava/lang/Long;.173:Ljava/lang/Long; 35 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.181:Ljava/lang/Byte; 35 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.157:Ljava/lang/Byte; 35 +Landroid/content/res/AssetManager$AssetInputStream; 35 +Landroid/graphics/drawable/TransitionDrawable; 36 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.1:Ljava/lang/Boolean; 37 +Landroid/view/ViewOverlay$OverlayViewGroup; 38 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.11:Ljava/lang/Boolean; 39 +Ljava/util/Observer; 40 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.129:Ljava/lang/Byte; 41 +[Ljava/lang/Byte; 41 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.144:Ljava/lang/Byte; 41 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.164:Ljava/lang/Byte; 42 +Landroid/view/OrientationEventListener; 43 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.195:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.233:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.229:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.128:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.242:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.196:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.208:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.212:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.228:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.205:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.197:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.204:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.207:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.223:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.244:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.174:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.194:Ljava/lang/Byte; 44 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.225:Ljava/lang/Byte; 45 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.239:Ljava/lang/Byte; 45 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.238:Ljava/lang/Byte; 45 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.227:Ljava/lang/Byte; 45 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.152:Ljava/lang/Byte; 46 +Landroid/app/RemoteAction; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.168:Ljava/lang/Byte; 46 +Landroid/text/style/QuoteSpan; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.54:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.124:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.142:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.190:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.114:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.69:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.30:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.133:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.49:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.58:Ljava/lang/Byte; 46 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.143:Ljava/lang/Byte; 47 +Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit; 47 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.82:Ljava/lang/Byte; 47 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.140:Ljava/lang/Byte; 47 +Landroid/icu/text/RelativeDateTimeFormatter;.fallbackCache:[Landroid/icu/text/RelativeDateTimeFormatter$Style; 47 +Landroid/icu/text/RelativeDateTimeFormatter$Style; 47 +Landroid/icu/text/RelativeDateTimeFormatter;.cache:Landroid/icu/text/RelativeDateTimeFormatter$Cache;.cache:Landroid/icu/impl/CacheBase;.map:Ljava/util/concurrent/ConcurrentHashMap; 47 +Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit; 47 +Landroid/icu/text/RelativeDateTimeFormatter$Direction; 47 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.130:Ljava/lang/Byte; 47 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.43:Ljava/lang/Byte; 47 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.146:Ljava/lang/Byte; 47 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.138:Ljava/lang/Byte; 47 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.136:Ljava/lang/Byte; 48 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.0:Ljava/lang/Byte; 49 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.160:Ljava/lang/Byte; 49 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.169:Ljava/lang/Byte; 50 +Landroid/widget/Spinner; 50 +Landroid/widget/MultiAutoCompleteTextView; 50 +Ljava/util/ArrayList; 50 +Landroid/widget/CheckBox; 50 +Ljava/io/Serializable; 50 +Landroid/widget/RatingBar; 50 +Ljava/lang/Byte$ByteCache;.archivedCache:[Ljava/lang/Byte;.132:Ljava/lang/Byte; 50 +Landroid/widget/AutoCompleteTextView; 50 +Ljava/util/concurrent/ConcurrentLinkedDeque$Node; 50 +[Ljava/lang/Object; 50 +Landroid/widget/SeekBar; 51 +Ljava/lang/Void; 52 +Landroid/app/ActivityTaskManager;.sInstance:Landroid/util/Singleton; 53 +Landroid/view/ViewRootImpl$$ExternalSyntheticLambda11; 54 +Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener; 55 +Landroid/view/InsetsAnimationThread; 56 +Lcom/android/internal/jank/InteractionJankMonitor$InstanceHolder; 57 +Lcom/android/internal/jank/InteractionJankMonitor; 57 +Landroid/hardware/camera2/CameraCharacteristics;.FLASH_INFO_AVAILABLE:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 58 +Landroid/hardware/display/NightDisplayListener$Callback; 59 +Landroid/media/MediaRouter2Manager; 59 +Landroid/os/HandlerExecutor; 59 +Landroid/os/strictmode/LeakedClosableViolation; 60 +Lcom/android/internal/logging/MetricsLogger; 60 +Lcom/android/internal/os/PowerProfile;.sPowerItemMap:Ljava/util/HashMap; 61 +Lcom/android/internal/os/PowerProfile;.sPowerArrayMap:Ljava/util/HashMap; 61 +Lcom/android/internal/os/PowerProfile;.sModemPowerProfile:Lcom/android/internal/power/ModemPowerProfile;.mPowerConstants:Landroid/util/SparseDoubleArray;.mValues:Landroid/util/SparseLongArray; 61 +Landroid/content/IntentFilter; 62 +Landroid/telecom/TelecomManager; 63 +Ljava/lang/IllegalArgumentException; 64 +Landroid/app/PropertyInvalidatedCache;.sCaches:Ljava/util/WeakHashMap;.table:[Ljava/util/WeakHashMap$Entry;.1:Ljava/util/WeakHashMap$Entry;.referent:Ljava/lang/Object; 65 +Landroid/app/PropertyInvalidatedCache;.sCaches:Ljava/util/WeakHashMap;.table:[Ljava/util/WeakHashMap$Entry;.1:Ljava/util/WeakHashMap$Entry;.referent:Ljava/lang/Object;.mCache:Ljava/util/LinkedHashMap; 65 +Landroid/telephony/VisualVoicemailSmsFilterSettings;.DEFAULT_ORIGINATING_NUMBERS:Ljava/util/List; 66 +Ljava/util/AbstractList; 68 +Ljava/util/AbstractCollection; 68 +Ljava/util/Collections$EmptyList; 69 +Ljava/lang/StackTraceElement; 69 +[Ljava/lang/StackTraceElement; 69 +Landroid/os/strictmode/Violation; 70 +Ljava/util/List; 71 +Ljava/lang/String; 72 +Ljava/io/ObjectInputStream; 73 +Ljava/io/ObjectStreamClass$Caches;.localDescs:Ljava/util/concurrent/ConcurrentMap; 73 +Ljava/io/ObjectStreamClass$Caches;.reflectors:Ljava/util/concurrent/ConcurrentMap; 73 +Ljava/io/ObjectOutputStream; 73 +Ljava/lang/Number; 74 +Ljava/math/BigInteger; 75 +[B 76 +Landroid/os/Handler; 77 +Landroid/view/accessibility/AccessibilityManager; 78 +Landroid/view/ViewConfiguration;.sConfigurations:Landroid/util/SparseArray;.mKeys:[I 79 +Landroid/view/ViewConfiguration;.sConfigurations:Landroid/util/SparseArray;.mValues:[Ljava/lang/Object; 79 +Landroid/view/ViewConfiguration;.sConfigurations:Landroid/util/SparseArray; 79 +Landroid/widget/FrameLayout; 80 +Lcom/android/internal/inputmethod/ImeTracing; 80 +Lcom/android/internal/policy/DecorView; 80 +Landroid/view/accessibility/AccessibilityNodeIdManager; 80 +Landroid/view/ViewTreeObserver; 80 +Landroid/view/ViewRootImpl; 80 +Landroid/os/SystemProperties;.sChangeCallbacks:Ljava/util/ArrayList; 80 +Landroid/transition/ChangeTransform; 80 +Landroid/window/SurfaceSyncGroup; 80 +Landroid/transition/ChangeClipBounds; 80 +Landroid/view/SurfaceControlRegistry; 80 +Landroid/transition/ChangeImageTransform; 80 +Landroid/widget/LinearLayout; 80 +Landroid/view/ViewStub; 81 +Landroid/text/TextLine;.sCached:[Landroid/text/TextLine; 82 +Landroid/text/TextUtils; 82 +Landroid/graphics/TemporaryBuffer; 82 +Landroid/content/res/ColorStateList;.sCache:Landroid/util/SparseArray; 83 +Landroid/text/Layout;.sTempRect:Landroid/graphics/Rect; 84 +Landroid/widget/ImageView; 85 +Landroid/graphics/drawable/ColorDrawable; 86 +Landroid/os/StrictMode$InstanceTracker;.sInstanceCounts:Ljava/util/HashMap; 87 +Landroid/app/ActivityClient;.INTERFACE_SINGLETON:Landroid/app/ActivityClient$ActivityClientControllerSingleton; 88 +Landroid/app/ActivityClient;.sInstance:Landroid/util/Singleton; 88 +Landroid/view/AbsSavedState$1; 89 +Landroid/app/FragmentManagerState; 90 +Landroid/window/OnBackAnimationCallback; 91 +Landroid/animation/AnimatorInflater;.sTmpTypedValue:Landroid/util/TypedValue; 92 +Landroid/graphics/drawable/RippleDrawable; 93 +Landroid/view/inputmethod/IInputMethodManagerGlobalInvoker; 94 +Landroid/app/ActivityTaskManager;.IActivityTaskManagerSingleton:Landroid/util/Singleton; 95 +Landroid/view/Choreographer; 96 +Lcom/android/internal/os/SomeArgs; 97 +Landroid/graphics/Bitmap; 98 +Landroid/view/autofill/AutofillId; 99 +Landroid/view/inputmethod/BaseInputConnection;.COMPOSING:Ljava/lang/Object; 100 +Landroid/text/Selection;.SELECTION_MEMORY:Ljava/lang/Object; 101 +Landroid/text/Selection;.SELECTION_END:Ljava/lang/Object; 101 +Landroid/text/Selection;.SELECTION_START:Ljava/lang/Object; 101 +Landroid/text/SpannableStringBuilder;.sCachedIntBuffer:[[I 102 +Landroid/text/Selection$MemoryTextWatcher; 103 +Landroid/text/SpanWatcher; 104 +Lcom/android/internal/util/ArrayUtils;.sCache:[Ljava/lang/Object; 105 +Ljava/lang/Integer;.SMALL_NEG_VALUES:[Ljava/lang/String; 106 +Ljava/lang/Enum;.sharedConstantsCache:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap;.tail:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry; 107 +Lsun/nio/ch/SharedFileLockTable;.lockMap:Ljava/util/concurrent/ConcurrentHashMap; 108 +Lsun/nio/ch/FileChannelImpl; 108 +Landroid/database/sqlite/SQLiteDatabase$CursorFactory; 109 +Landroid/database/sqlite/SQLiteDebug$NoPreloadHolder; 110 +Landroid/database/sqlite/SQLiteCompatibilityWalFlags; 110 +Landroid/database/sqlite/SQLiteGlobal; 110 +Landroid/database/CursorWindow; 111 +Landroid/content/ContentResolver; 112 +Ljava/nio/charset/Charset; 113 +Landroid/app/ContextImpl; 114 +Ljava/util/concurrent/Executors$DefaultThreadFactory;.poolNumber:Ljava/util/concurrent/atomic/AtomicInteger; 115 +Landroid/content/pm/PackageManager;.sPackageInfoCache:Landroid/app/PropertyInvalidatedCache;.mCache:Ljava/util/LinkedHashMap; 116 +Landroid/content/pm/PackageManager;.sApplicationInfoCache:Landroid/app/PropertyInvalidatedCache;.mCache:Ljava/util/LinkedHashMap; 117 +Ljava/util/logging/LogManager;.manager:Ljava/util/logging/LogManager;.systemContext:Ljava/util/logging/LogManager$LoggerContext;.namedLoggers:Ljava/util/Hashtable;.table:[Ljava/util/Hashtable$HashtableEntry; 118 +Landroid/ddm/DdmHandleAppName; 118 +Landroid/provider/DeviceConfigInitializer; 118 +Lsun/misc/Cleaner; 118 +Ldalvik/system/CloseGuard; 118 +Landroid/graphics/Typeface; 118 +Landroid/os/BinderProxy;.sProxyMap:Landroid/os/BinderProxy$ProxyMap;.mMainIndexKeys:[[Ljava/lang/Long; 118 +Landroid/permission/PermissionManager; 118 +Landroid/media/MediaFrameworkPlatformInitializer; 118 +Ljava/util/TimeZone; 118 +Landroid/os/Environment; 118 +Landroid/compat/Compatibility; 118 +Landroid/os/ServiceManager; 118 +Landroid/content/pm/PackageManager;.sApplicationInfoCache:Landroid/app/PropertyInvalidatedCache; 118 +Ljava/util/Locale$NoImagePreloadHolder; 118 +Ljava/lang/System; 118 +Lcom/android/internal/os/RuntimeInit; 118 +Ljava/util/logging/LogManager;.manager:Ljava/util/logging/LogManager;.systemContext:Ljava/util/logging/LogManager$LoggerContext;.namedLoggers:Ljava/util/Hashtable; 118 +Ldalvik/system/VMRuntime;.THE_ONE:Ldalvik/system/VMRuntime; 118 +Landroid/view/View; 118 +Landroid/hardware/display/DisplayManagerGlobal; 118 +Ljava/util/logging/LogManager;.manager:Ljava/util/logging/LogManager; 118 +Landroid/telephony/TelephonyFrameworkInitializer; 118 +Landroid/se/omapi/SeFrameworkInitializer; 118 +Landroid/app/LoadedApk;.sApplications:Landroid/util/ArrayMap;.mHashes:[I 118 +Landroid/security/net/config/SystemCertificateSource$NoPreloadHolder; 118 +Landroid/security/net/config/ApplicationConfig; 118 +Landroid/content/res/Resources;.sResourcesHistory:Ljava/util/Set;.c:Ljava/util/Collection;.m:Ljava/util/Map; 118 +Ljava/util/Locale; 118 +Landroid/content/res/Resources;.sResourcesHistory:Ljava/util/Set;.c:Ljava/util/Collection;.m:Ljava/util/Map;.table:[Ljava/util/WeakHashMap$Entry; 118 +Ljava/security/Provider; 118 +Ldalvik/system/ZygoteHooks; 118 +Landroid/os/Message; 118 +Landroid/app/LoadedApk;.sApplications:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object; 118 +Landroid/app/LoadedApk;.sApplications:Landroid/util/ArrayMap; 118 +Landroid/app/PropertyInvalidatedCache;.sCaches:Ljava/util/WeakHashMap; 118 +Ljava/util/logging/LogManager;.manager:Ljava/util/logging/LogManager;.userContext:Ljava/util/logging/LogManager$LoggerContext;.namedLoggers:Ljava/util/Hashtable; 118 +Ljava/lang/ThreadGroup;.mainThreadGroup:Ljava/lang/ThreadGroup; 118 +Ldalvik/system/RuntimeHooks; 118 +Landroid/nfc/NfcFrameworkInitializer; 118 +Landroid/os/Looper; 118 +Landroid/os/LocaleList; 118 +Ldalvik/system/SocketTagger; 118 +Landroid/icu/util/TimeZone; 118 +Landroid/util/ArraySet; 118 +Ljava/util/logging/LogManager;.manager:Ljava/util/logging/LogManager;.systemContext:Ljava/util/logging/LogManager$LoggerContext;.root:Ljava/util/logging/LogManager$LogNode; 118 +Landroid/os/BinderProxy;.sProxyMap:Landroid/os/BinderProxy$ProxyMap;.mMainIndexValues:[Ljava/util/ArrayList; 118 +Ljava/util/Random;.seedUniquifier:Ljava/util/concurrent/atomic/AtomicLong; 118 +Landroid/app/ActivityThread; 118 +Landroid/os/Binder; 118 +Ljava/lang/ThreadLocal;.nextHashCode:Ljava/util/concurrent/atomic/AtomicInteger; 119 +Landroid/os/Parcel; 120 +Landroid/system/UnixSocketAddress; 120 +Ljava/lang/ThreadGroup;.systemThreadGroup:Ljava/lang/ThreadGroup; 120 +Ljava/lang/Daemons$FinalizerDaemon;.INSTANCE:Ljava/lang/Daemons$FinalizerDaemon; 120 +Landroid/os/Parcel;.sPairedCreators:Ljava/util/HashMap; 120 +Ljava/lang/Thread; 120 +Landroid/os/Parcel;.mCreators:Ljava/util/HashMap; 120 +Ljava/lang/Daemons$FinalizerDaemon;.INSTANCE:Ljava/lang/Daemons$FinalizerDaemon;.progressCounter:Ljava/util/concurrent/atomic/AtomicInteger; 120 +Landroid/system/StructPollfd; 120 +Ljava/lang/Daemons$HeapTaskDaemon;.INSTANCE:Ljava/lang/Daemons$HeapTaskDaemon; 120 +Landroid/system/StructTimeval; 120 +Ldalvik/system/VMRuntime;.THE_ONE:Ldalvik/system/VMRuntime;.allocationCount:Ljava/util/concurrent/atomic/AtomicInteger; 120 +Ljava/lang/Daemons$ReferenceQueueDaemon;.INSTANCE:Ljava/lang/Daemons$ReferenceQueueDaemon;.progressCounter:Ljava/util/concurrent/atomic/AtomicInteger; 120 +Landroid/os/GraphicsEnvironment;.sInstance:Landroid/os/GraphicsEnvironment; 120 +Ljava/lang/Daemons$FinalizerWatchdogDaemon;.INSTANCE:Ljava/lang/Daemons$FinalizerWatchdogDaemon; 120 +Ljava/lang/ref/FinalizerReference; 120 +Landroid/os/Process; 120 +Ljava/lang/Daemons$ReferenceQueueDaemon;.INSTANCE:Ljava/lang/Daemons$ReferenceQueueDaemon; 120 +Lcom/android/internal/os/BinderInternal; 120 +Landroid/app/ApplicationLoaders;.gApplicationLoaders:Landroid/app/ApplicationLoaders;.mLoaders:Landroid/util/ArrayMap; 121 +Landroid/app/DexLoadReporter;.INSTANCE:Landroid/app/DexLoadReporter;.mDataDirs:Ljava/util/Set;.map:Ljava/util/HashMap; 122 +Ldalvik/system/BaseDexClassLoader; 122 +Landroid/renderscript/RenderScriptCacheDir; 122 +Landroid/graphics/Compatibility; 123 +Llibcore/io/Libcore; 123 +Landroid/provider/FontsContract; 123 +Ljava/security/Security;.version:Ljava/util/concurrent/atomic/AtomicInteger; 123 +Llibcore/net/NetworkSecurityPolicy; 123 +Lsun/security/jca/Providers; 123 +Landroid/graphics/Canvas; 123 +Landroid/os/StrictMode; 124 +Landroid/content/pm/PackageManager;.sPackageInfoCache:Landroid/app/PropertyInvalidatedCache; 125 +Lcom/android/internal/os/StatsdHiddenApiUsageLogger;.sInstance:Lcom/android/internal/os/StatsdHiddenApiUsageLogger; 126 +Ljava/util/logging/LogManager;.manager:Ljava/util/logging/LogManager;.loggerRefQueue:Ljava/lang/ref/ReferenceQueue; 127 +Landroid/view/WindowManagerGlobal; 128 +Lcom/android/internal/util/function/pooled/PooledLambdaImpl;.sPool:Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool; 129 +Lcom/android/internal/util/function/pooled/PooledLambdaImpl;.sPool:Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;.mPool:[Ljava/lang/Object; 129 +Landroid/view/inputmethod/InputMethodManager; 130 +Landroid/media/MediaRouter; 131 +Landroid/hardware/SensorPrivacyManager; 132 +Landroid/os/storage/StorageManager; 133 +Landroid/view/contentcapture/ContentCaptureManager; 134 +Landroid/hardware/input/InputManager; 134 +Landroid/app/people/PeopleManager; 134 +Landroid/media/session/MediaSessionManager; 134 +Landroid/security/attestationverification/AttestationVerificationManager; 134 +Landroid/net/vcn/VcnManager; 134 +Landroid/os/RecoverySystem; 134 +Landroid/net/NetworkPolicyManager; 134 +Landroid/net/wifi/sharedconnectivity/app/SharedConnectivityManager; 134 +Landroid/permission/PermissionControllerManager; 134 +Landroid/app/tare/EconomyManager; 134 +Landroid/view/translation/TranslationManager; 134 +Landroid/view/textclassifier/TextClassificationManager; 134 +Landroid/view/autofill/AutofillManager; 134 +Landroid/os/SystemConfigManager; 134 +Landroid/view/LayoutInflater; 134 +Landroid/credentials/CredentialManager; 134 +Landroid/service/persistentdata/PersistentDataBlockManager; 134 +Landroid/view/textservice/TextServicesManager; 134 +Landroid/app/admin/DevicePolicyManager; 134 +Ljava/lang/StackStreamFactory; 134 +Landroid/view/WindowManager; 134 +Landroid/app/contentsuggestions/ContentSuggestionsManager; 134 +Landroid/media/tv/tunerresourcemanager/TunerResourceManager; 134 +Landroid/telephony/SubscriptionManager; 134 +Landroid/os/HardwarePropertiesManager; 134 +Landroid/media/AudioManager; 135 +Landroid/telephony/TelephonyManager; 136 +Landroid/util/ArrayMap; 137 +Landroid/app/QueuedWork; 138 +Landroid/app/PropertyInvalidatedCache;.sCaches:Ljava/util/WeakHashMap;.table:[Ljava/util/WeakHashMap$Entry;.0:Ljava/util/WeakHashMap$Entry; 139 +Ljava/lang/Enum;.sharedConstantsCache:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap; 140 +Ljava/util/concurrent/ScheduledThreadPoolExecutor;.sequencer:Ljava/util/concurrent/atomic/AtomicLong; 141 +Landroid/util/Log; 142 +Ljava/util/Collections$SynchronizedCollection; 143 +Ljava/util/Set; 143 +Ljava/util/Collections$SynchronizedSet; 143 +Ljava/util/Collection; 143 +Ljava/lang/Integer;.SMALL_NONNEG_VALUES:[Ljava/lang/String; 144 +Landroid/content/ComponentName; 145 +Landroid/view/textclassifier/TextLanguage;.EMPTY:Landroid/view/textclassifier/TextLanguage;.mBundle:Landroid/os/Bundle; 146 +Landroid/os/PersistableBundle;.EMPTY:Landroid/os/PersistableBundle; 147 +Landroid/icu/impl/locale/BaseLocale;.CACHE:Landroid/icu/impl/locale/BaseLocale$Cache;._map:Ljava/util/concurrent/ConcurrentHashMap; 148 +Ljava/util/GregorianCalendar; 149 +Ljava/text/DontCareFieldPosition;.INSTANCE:Ljava/text/FieldPosition; 150 +Landroid/app/UiModeManager; 151 +Ljdk/internal/access/SharedSecrets; 152 +Landroid/icu/impl/ZoneMeta;.CANONICAL_ID_CACHE:Landroid/icu/impl/ICUCache; 153 +Landroid/icu/impl/ZoneMeta;.SYSTEM_ZONE_CACHE:Landroid/icu/impl/ZoneMeta$SystemTimeZoneCache;.map:Ljava/util/concurrent/ConcurrentHashMap; 154 +Ljava/time/ZoneOffset;.ID_CACHE:Ljava/util/concurrent/ConcurrentMap; 155 +Ljava/time/ZoneOffset;.ID_CACHE:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node; 155 +Ljava/time/ZoneOffset;.SECONDS_CACHE:Ljava/util/concurrent/ConcurrentMap; 155 +Ljava/time/ZoneOffset;.SECONDS_CACHE:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.0:Ljava/util/concurrent/ConcurrentHashMap$Node;.next:Ljava/util/concurrent/ConcurrentHashMap$Node; 155 +Ljava/time/ZoneOffset;.SECONDS_CACHE:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node; 155 +Landroid/widget/TextView; 156 +Landroid/view/ViewGroup$ChildListForAutoFillOrContentCapture;.sPool:Landroid/util/Pools$SimplePool;.mPool:[Ljava/lang/Object; 157 +Landroid/view/ViewGroup$ChildListForAutoFillOrContentCapture;.sPool:Landroid/util/Pools$SimplePool; 157 +Landroid/view/ViewGroup; 158 +Landroid/graphics/Rect; 159 +Landroid/view/View$BaseSavedState; 160 +Landroid/widget/Button; 161 +Landroid/widget/ImageButton; 162 +Landroid/view/View$OnHoverListener; 163 +Landroid/widget/Toolbar; 164 +Landroid/hardware/display/ColorDisplayManager$ColorDisplayManagerInternal; 165 +Landroid/app/WallpaperManager; 166 +Landroid/graphics/ColorSpace$Model;.RGB:Landroid/graphics/ColorSpace$Model; 166 +Landroid/graphics/drawable/AdaptiveIconDrawable; 167 +Landroid/animation/ValueAnimator$DurationScaleChangeListener; 168 +Landroid/widget/Toast; 168 +Landroid/app/smartspace/SmartspaceSession$OnTargetsAvailableListener; 168 +Landroid/view/CrossWindowBlurListeners; 168 +Landroid/app/servertransaction/ActivityRelaunchItem; 169 +[Ljava/util/concurrent/ForkJoinTask; 169 +Landroid/view/WindowManager$LayoutParams; 169 +Ljava/util/concurrent/ForkJoinPool$WorkQueue; 169 +Landroid/app/prediction/AppTargetEvent; 169 +Lorg/xmlpull/v1/XmlPullParserException; 169 +Landroid/app/servertransaction/ObjectPool;.sPoolMap:Ljava/util/Map; 170 +Landroid/app/servertransaction/ClientTransaction; 170 +Landroid/app/servertransaction/StopActivityItem; 170 +Landroid/system/ErrnoException; 171 +Landroid/hardware/location/ContextHubTransaction$OnCompleteListener; 172 +Landroid/app/PendingIntent$OnFinished; 172 +Ljava/lang/NullPointerException; 173 +Landroid/os/strictmode/DiskReadViolation; 174 +Lorg/apache/http/params/HttpParams; 175 +Landroid/nfc/cardemulation/CardEmulation; 176 +Ljava/io/FileDescriptor; 177 +Landroid/content/pm/PackageManager$OnPermissionsChangedListener; 178 +Landroid/security/keystore2/KeyStoreCryptoOperationUtils; 179 +Landroid/app/ActivityTaskManager; 180 +Landroid/util/EventLog; 181 +Ljava/net/URLConnection; 181 +Ljava/net/SocketException; 181 +Ljava/lang/reflect/InvocationTargetException; 181 +Ljava/lang/Enum; 182 +Landroid/widget/AbsListView$SelectionBoundsAdjuster; 183 +Ljava/lang/ClassNotFoundException; 183 +Landroid/content/SyncStatusObserver; 184 +Landroid/content/AsyncTaskLoader$LoadTask; 185 +Landroid/app/LoaderManager$LoaderCallbacks; 185 +Landroid/webkit/CookieSyncManager; 186 +Landroid/webkit/WebViewProvider$ViewDelegate; 187 +Landroid/webkit/WebView; 187 +Landroid/webkit/WebViewProvider$ScrollDelegate; 187 +Landroid/webkit/WebViewProvider; 187 +Landroid/webkit/WebViewFactory;.sTimestamps:Landroid/webkit/WebViewFactory$StartupTimestamps; 188 +Landroid/webkit/WebViewFactoryProvider; 189 +Landroid/webkit/WebViewFactory; 190 +Landroid/os/PowerManager$OnThermalStatusChangedListener; 191 +Landroid/os/Bundle; 192 +Landroid/widget/ProgressBar; 193 +Landroid/graphics/Bitmap$Config;.ALPHA_8:Landroid/graphics/Bitmap$Config; 194 +Landroid/graphics/Bitmap$Config;.RGB_565:Landroid/graphics/Bitmap$Config; 194 +Landroid/graphics/Bitmap$Config;.RGBA_1010102:Landroid/graphics/Bitmap$Config; 194 +Landroid/renderscript/Allocation;.mBitmapOptions:Landroid/graphics/BitmapFactory$Options;.inPreferredConfig:Landroid/graphics/Bitmap$Config; 194 +Landroid/graphics/Bitmap$Config;.RGBA_F16:Landroid/graphics/Bitmap$Config; 194 +Landroid/graphics/Bitmap$Config;.ARGB_4444:Landroid/graphics/Bitmap$Config; 194 +Landroid/graphics/Bitmap$Config;.HARDWARE:Landroid/graphics/Bitmap$Config; 194 +Landroid/graphics/drawable/StateListDrawable; 195 +Landroid/view/PointerIcon;.gSystemIconsByDisplay:Landroid/util/SparseArray; 196 +Landroid/view/PointerIcon; 196 +Ljavax/net/ssl/SSLServerSocketFactory; 197 +Ljavax/net/ssl/SSLSocketFactory; 198 +Ljavax/net/ssl/HttpsURLConnection$NoPreloadHolder; 198 +Ljavax/net/ssl/SSLSessionContext; 199 +Lcom/android/org/bouncycastle/crypto/CryptoServicesRegistrar; 200 +Lsun/security/x509/PKIXExtensions;.KeyUsage_Id:Lsun/security/util/ObjectIdentifier; 201 +Lsun/security/x509/PKIXExtensions;.PolicyConstraints_Id:Lsun/security/util/ObjectIdentifier; 201 +Ljava/security/cert/PKIXRevocationChecker$Option;.ONLY_END_ENTITY:Ljava/security/cert/PKIXRevocationChecker$Option; 201 +Lsun/security/x509/PKIXExtensions;.ExtendedKeyUsage_Id:Lsun/security/util/ObjectIdentifier; 201 +Lsun/security/provider/X509Factory;.certCache:Lsun/security/util/Cache; 201 +Lsun/security/x509/PKIXExtensions;.CertificatePolicies_Id:Lsun/security/util/ObjectIdentifier; 201 +Lsun/security/x509/PKIXExtensions;.NameConstraints_Id:Lsun/security/util/ObjectIdentifier; 201 +Lsun/security/x509/PKIXExtensions;.AuthorityKey_Id:Lsun/security/util/ObjectIdentifier; 201 +Lsun/security/provider/X509Factory;.certCache:Lsun/security/util/Cache;.cacheMap:Ljava/util/Map; 201 +Ljava/security/cert/PKIXRevocationChecker$Option;.NO_FALLBACK:Ljava/security/cert/PKIXRevocationChecker$Option; 201 +Lsun/security/x509/PKIXExtensions;.SubjectAlternativeName_Id:Lsun/security/util/ObjectIdentifier; 201 +Lsun/security/x509/PKIXExtensions;.PolicyMappings_Id:Lsun/security/util/ObjectIdentifier; 202 +Lsun/security/x509/PKIXExtensions;.InhibitAnyPolicy_Id:Lsun/security/util/ObjectIdentifier; 202 +Lsun/security/x509/PKIXExtensions;.BasicConstraints_Id:Lsun/security/util/ObjectIdentifier; 202 +Ljava/security/Security;.spiMap:Ljava/util/Map; 203 +Lsun/security/x509/X500Name;.commonName_oid:Lsun/security/util/ObjectIdentifier; 204 +Lsun/security/x509/X500Name;.countryName_oid:Lsun/security/util/ObjectIdentifier; 204 +Lsun/security/x509/X500Name;.orgName_oid:Lsun/security/util/ObjectIdentifier; 204 +Ljava/nio/charset/Charset;.cache2:Ljava/util/HashMap; 205 +Ljava/net/URL;.handlers:Ljava/util/Hashtable;.table:[Ljava/util/Hashtable$HashtableEntry; 206 +Ljava/net/URL;.handlers:Ljava/util/Hashtable; 206 +Ljava/net/Inet6AddressImpl;.addressCache:Ljava/net/AddressCache;.cache:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap; 207 +Ljava/net/Proxy$Type;.DIRECT:Ljava/net/Proxy$Type; 208 +Ljava/net/ProxySelector;.theProxySelector:Ljava/net/ProxySelector; 208 +Lcom/android/okhttp/okio/SegmentPool; 209 +Lcom/android/okhttp/internal/http/AuthenticatorAdapter;.INSTANCE:Lcom/android/okhttp/Authenticator; 209 +Lcom/android/okhttp/HttpsHandler;.HTTP_1_1_ONLY:Ljava/util/List;.element:Ljava/lang/Object; 209 +Lcom/android/okhttp/ConfigAwareConnectionPool;.instance:Lcom/android/okhttp/ConfigAwareConnectionPool;.networkEventDispatcher:Llibcore/net/event/NetworkEventDispatcher;.listeners:Ljava/util/List; 210 +Lcom/android/okhttp/Dns;.SYSTEM:Lcom/android/okhttp/Dns; 210 +Lcom/android/okhttp/ConfigAwareConnectionPool;.instance:Lcom/android/okhttp/ConfigAwareConnectionPool; 210 +Lcom/android/okhttp/okio/AsyncTimeout; 211 +Ljava/lang/IllegalAccessException; 212 +Ljavax/net/ssl/SSLContext; 213 +Ljavax/net/ssl/HttpsURLConnection; 213 +Ljava/security/Security;.props:Ljava/util/Properties;.map:Ljava/util/concurrent/ConcurrentHashMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.12:Ljava/util/concurrent/ConcurrentHashMap$Node;.next:Ljava/util/concurrent/ConcurrentHashMap$Node; 214 +Ljava/security/Security;.props:Ljava/util/Properties;.map:Ljava/util/concurrent/ConcurrentHashMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.30:Ljava/util/concurrent/ConcurrentHashMap$Node; 214 +Landroid/database/sqlite/SQLiteTransactionListener; 215 +Landroid/accounts/OnAccountsUpdateListener; 216 +Landroid/accounts/AccountManager$20; 217 +Lsun/nio/ch/FileChannelImpl$Unmapper; 218 +Landroid/content/res/Resources;.sResourcesHistory:Ljava/util/Set;.c:Ljava/util/Collection;.m:Ljava/util/Map;.queue:Ljava/lang/ref/ReferenceQueue; 219 +Landroid/text/method/SingleLineTransformationMethod; 220 +Landroid/widget/RelativeLayout; 221 +Landroid/graphics/drawable/BitmapDrawable; 222 +Landroid/graphics/drawable/GradientDrawable; 223 +Landroid/animation/PropertyValuesHolder;.sGetterPropertyMap:Ljava/util/HashMap; 224 +Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;.sJNISetterPropertyMap:Ljava/util/HashMap; 225 +Landroid/graphics/drawable/Drawable;.DEFAULT_TINT_MODE:Landroid/graphics/PorterDuff$Mode; 226 +Landroid/text/StaticLayout$Builder;.sPool:Landroid/util/Pools$SynchronizedPool; 227 +Landroid/text/StaticLayout$Builder;.sPool:Landroid/util/Pools$SynchronizedPool;.mPool:[Ljava/lang/Object; 227 +Ljava/util/concurrent/ThreadLocalRandom; 228 +Landroid/widget/Space; 229 +Landroid/widget/ScrollView; 230 +Landroid/text/style/LineHeightSpan; 231 +Landroid/text/style/TabStopSpan; 232 +Landroid/text/style/ReplacementSpan; 233 +Landroid/text/style/MetricAffectingSpan; 233 +Landroid/text/style/LeadingMarginSpan; 233 +Landroid/text/style/LineBackgroundSpan; 234 +Landroid/text/style/CharacterStyle; 235 +Landroid/text/style/SuggestionSpan; 236 +Landroid/widget/TextView$ChangeWatcher; 237 +Landroid/text/DynamicLayout$Builder;.sPool:Landroid/util/Pools$SynchronizedPool;.mPool:[Ljava/lang/Object; 238 +Landroid/text/DynamicLayout; 238 +Landroid/text/DynamicLayout$ChangeWatcher; 238 +Landroid/text/style/WrapTogetherSpan; 238 +Landroid/text/DynamicLayout$Builder;.sPool:Landroid/util/Pools$SynchronizedPool; 238 +Landroid/text/method/LinkMovementMethod; 239 +Landroid/text/style/ClickableSpan; 240 +Ljava/util/logging/LogRecord;.globalSequenceNumber:Ljava/util/concurrent/atomic/AtomicLong; 241 +Ljava/lang/Runtime;.currentRuntime:Ljava/lang/Runtime; 242 +Landroid/content/pm/LauncherActivityInfo; 243 +Landroid/database/sqlite/SQLiteMisuseException; 243 +Landroid/speech/tts/TextToSpeech$Connection$SetupConnectionAsyncTask; 243 +Landroid/database/sqlite/SQLiteCantOpenDatabaseException; 243 +Landroid/database/sqlite/SQLiteDatabaseCorruptException; 243 +Landroid/database/sqlite/SQLiteDatabaseLockedException; 243 +Ljava/util/Map$Entry; 243 +Ljava/util/zip/ZipException; 243 +Landroid/database/sqlite/SQLiteAccessPermException; 243 +Landroid/speech/tts/TextToSpeech$OnInitListener; 243 +Landroid/app/Notification$MessagingStyle; 244 +Landroid/text/TextUtils$TruncateAt; 245 +Landroid/app/smartspace/SmartspaceTarget; 246 +Landroid/app/prediction/AppTarget; 246 +Landroid/app/smartspace/uitemplatedata/BaseTemplateData; 246 +Landroid/location/LocationManager;.sLocationListeners:Ljava/util/WeakHashMap;.table:[Ljava/util/WeakHashMap$Entry; 247 +Landroid/location/LocationManager;.sLocationListeners:Ljava/util/WeakHashMap; 247 +Landroid/service/notification/ConditionProviderService; 248 +Landroid/os/WorkSource; 249 +Landroid/security/keystore2/AndroidKeyStoreProvider; 249 +Ljava/net/Socket; 249 +Lcom/android/internal/listeners/ListenerTransport; 249 +Landroid/os/ParcelUuid; 250 +Landroid/telephony/emergency/EmergencyNumber; 251 +Lcom/android/internal/telephony/uicc/UiccProfile$4; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$IncomingSms; 251 +Lcom/android/internal/telephony/SmsStorageMonitor$1; 251 +Lcom/android/internal/telephony/TelephonyDevController; 251 +Lcom/android/internal/telephony/uicc/UiccController; 251 +Lcom/android/internal/telephony/emergency/EmergencyNumberTracker$1; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$DataCallSession; 251 +Lcom/android/internal/telephony/TelephonyDevController;.mSims:Ljava/util/ArrayList; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$RcsAcsProvisioningStats; 251 +Ljava/lang/UnsupportedOperationException; 251 +Landroid/database/CursorToBulkCursorAdaptor; 251 +Lcom/android/internal/telephony/satellite/PointingAppController; 251 +Landroid/telephony/ModemActivityInfo; 251 +Lcom/android/internal/telephony/imsphone/ImsPhone; 251 +Lcom/android/internal/telephony/ServiceStateTracker; 251 +Lcom/android/internal/telephony/IccSmsInterfaceManager; 251 +Lcom/android/internal/telephony/util/NotificationChannelController$1; 251 +Lcom/android/internal/telephony/RilWakelockInfo; 251 +Lcom/android/internal/telephony/gsm/GsmInboundSmsHandler$GsmCbTestBroadcastReceiver; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SipTransportFeatureTagStats; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$UceEventStats; 251 +Lcom/android/internal/telephony/euicc/EuiccConnector$BindingState; 251 +Lcom/android/internal/telephony/ims/ImsResolver$3; 251 +Landroid/net/NetworkPolicyManager$SubscriptionCallbackProxy; 251 +Lcom/android/internal/telephony/TelephonyDevController;.mModems:Ljava/util/ArrayList; 251 +Landroid/telephony/ims/aidl/IImsServiceController$Stub$Proxy; 251 +Lcom/android/internal/telephony/CarrierPrivilegesTracker$1; 251 +Lcom/android/internal/telephony/CommandException; 251 +Lcom/android/ims/FeatureConnector$1; 251 +Lcom/android/internal/telephony/IWapPushManager; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SipDelegateStats; 251 +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mTtyModeReceivedRegistrants:Lcom/android/internal/telephony/RegistrantList;.registrants:Ljava/util/ArrayList; 251 +Landroid/view/textclassifier/TextLanguage;.EMPTY:Landroid/view/textclassifier/TextLanguage;.mBundle:Landroid/os/Bundle;.mClassLoader:Ljava/lang/ClassLoader; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mMmiCompleteRegistrants:Lcom/android/internal/telephony/RegistrantList;.registrants:Ljava/util/ArrayList; 251 +Lcom/android/i18n/timezone/TelephonyLookup; 251 +Landroid/telephony/BarringInfo$BarringServiceInfo; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$NetworkRequests; 251 +Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState$14; 251 +Lcom/android/internal/telephony/SmsBroadcastUndelivered; 251 +Lcom/android/internal/telephony/LocaleTracker; 251 +Lcom/android/internal/telephony/PhoneSubInfoController; 251 +Lcom/android/internal/telephony/CarrierKeyDownloadManager$1; 251 +Lcom/android/internal/telephony/GsmCdmaCallTracker$1; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.339:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/ServiceStateTracker$1; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.353:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/euicc/EuiccCardController$SimSlotStatusChangedBroadcastReceiver; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$PresenceNotifyEvent; 251 +Lcom/android/internal/telephony/SimActivationTracker$1; 251 +Landroid/telephony/ModemInfo; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.1393:[Ljava/lang/String; 251 +Landroid/telephony/CellSignalStrengthWcdma; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteProvision; 251 +Lcom/android/internal/telephony/PhoneConfigurationManager; 251 +Lcom/android/internal/telephony/SmsApplication$SmsPackageMonitor; 251 +Landroid/telephony/TelephonyRegistryManager$3; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$VoiceCallSession; 251 +Landroid/os/Handler$MessengerImpl; 251 +Lcom/android/internal/telephony/LocaleTracker$1; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$CellularDataServiceSwitch; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mInCallVoicePrivacyOffRegistrants:Lcom/android/internal/telephony/RegistrantList;.registrants:Ljava/util/ArrayList; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteSosMessageRecommender; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsRegistrationServiceDescStats; 251 +Lcom/android/internal/telephony/uicc/UiccPkcs15$Pkcs15Selector; 251 +Lcom/android/internal/telephony/CarrierResolver$2; 251 +Lcom/android/internal/telephony/CarrierActionAgent$1; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mPhones:Ljava/util/ArrayList; 251 +Lcom/android/internal/telephony/SmsController; 251 +Lcom/android/internal/telephony/uicc/euicc/EuiccCardException; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsRegistrationTermination; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.1125:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/NetworkTypeController$1; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.803:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/uicc/asn1/TagNotFoundException; 251 +Lcom/android/internal/telephony/CarrierServiceBindHelper$1; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$CellularServiceState; 251 +Lcom/android/internal/telephony/cdma/CdmaSubscriptionSourceManager; 251 +Lcom/android/internal/telephony/InboundSmsHandler$NewMessageNotificationActionReceiver; 251 +Lcom/android/internal/telephony/CarrierActionAgent; 251 +Lcom/android/i18n/timezone/TimeZoneFinder; 251 +Lcom/android/internal/telephony/RILRequest; 251 +Lcom/android/internal/telephony/RIL;.sRilTimeHistograms:Landroid/util/SparseArray; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.33:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/MccTable; 251 +Lcom/android/internal/telephony/uicc/UiccProfile$2; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$CarrierIdMismatch; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.1235:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/uicc/UiccCarrierPrivilegeRules; 251 +Landroid/telephony/CellSignalStrengthTdscdma; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsDedicatedBearerListenerEvent; 251 +Lcom/android/internal/telephony/SmsDispatchersController; 251 +Landroid/timezone/TelephonyLookup; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteOutgoingDatagram; 251 +Lcom/android/internal/telephony/SMSDispatcher$1; 251 +Lcom/android/internal/telephony/AppSmsManager; 251 +Landroid/timezone/TimeZoneFinder; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mBackgroundCalls:Ljava/util/ArrayList; 251 +Lcom/android/ims/rcs/uce/eab/EabProvider; 251 +Lcom/android/internal/telephony/uicc/PinStorage$1; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsDedicatedBearerEvent; 251 +Landroid/telephony/CellSignalStrengthLte; 251 +Landroid/telephony/ims/ProvisioningManager$Callback$CallbackBinder; 251 +Lcom/android/ims/ImsManager;.IMS_STATS_CALLBACKS:Landroid/util/SparseArray;.mKeys:[I 251 +Landroid/telephony/CellSignalStrengthNr; 251 +Lcom/android/internal/telephony/SomeArgs; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mInCallVoicePrivacyOnRegistrants:Lcom/android/internal/telephony/RegistrantList;.registrants:Ljava/util/ArrayList; 251 +Lcom/android/internal/telephony/StateMachine$SmHandler; 251 +Lcom/android/internal/telephony/PackageChangeReceiver; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$OutgoingShortCodeSms; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$NetworkRequestsV2; 251 +Lcom/android/internal/telephony/nano/TelephonyProto$RilDataCall; 251 +Lcom/android/internal/telephony/euicc/EuiccConnector$AvailableState; 251 +Lcom/android/ims/internal/IImsServiceFeatureCallback$Stub$Proxy; 251 +Landroid/telephony/data/ApnSetting;.APN_TYPE_INT_MAP:Ljava/util/Map; 251 +Lcom/android/internal/telephony/RadioInterfaceCapabilityController; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsRegistrationStats; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$VoiceCallRatUsage; 251 +Lcom/android/internal/telephony/metrics/TelephonyMetrics; 251 +Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyCallSession$Event$RilCall; 251 +Lcom/android/internal/telephony/NetworkRegistrationManager$NetworkRegStateCallback; 251 +Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler; 251 +Lcom/android/internal/telephony/euicc/EuiccConnector$ConnectedState; 251 +Lcom/android/internal/telephony/RadioConfig; 251 +Lcom/android/internal/telephony/euicc/EuiccConnector$DisconnectedState; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteSession; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mDisplayInfoRegistrants:Lcom/android/internal/telephony/RegistrantList;.registrants:Ljava/util/ArrayList; 251 +Lcom/android/phone/ecc/nano/ProtobufEccData$EccInfo; 251 +Lcom/android/internal/telephony/GsmCdmaPhone; 251 +Lcom/android/internal/telephony/TelephonyTester$1; 251 +Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler$CdmaScpTestBroadcastReceiver; 251 +Lcom/android/internal/telephony/NetworkTypeController$DefaultState; 251 +Landroid/net/TelephonyNetworkSpecifier; 251 +Lcom/android/internal/telephony/NitzStateMachine; 251 +Landroid/app/timezonedetector/TimeZoneDetector; 251 +Lcom/android/internal/telephony/IntentBroadcaster$1; 251 +Lcom/android/internal/telephony/uicc/UiccStateChangedLauncher; 251 +Lcom/android/internal/telephony/ims/ImsResolver$1; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$OutgoingSms; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$UnmeteredNetworks; 251 +Landroid/view/textclassifier/TextLanguage;.EMPTY:Landroid/view/textclassifier/TextLanguage;.mBundle:Landroid/os/Bundle;.mClassLoader:Ljava/lang/ClassLoader;.packages:Ljava/util/Map;.m:Ljava/util/Map; 251 +Lcom/android/internal/telephony/euicc/EuiccController; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mForegroundCalls:Ljava/util/ArrayList; 251 +Lcom/android/internal/telephony/satellite/SatelliteModemInterface; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.531:[Ljava/lang/String; 251 +Lcom/android/ims/ImsManager;.IMS_STATS_CALLBACKS:Landroid/util/SparseArray; 251 +Lcom/android/internal/telephony/euicc/EuiccConnector$1; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.467:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SipMessageResponse; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SipTransportSession; 251 +Lcom/android/internal/telephony/euicc/EuiccConnector$UnavailableState; 251 +Lcom/android/internal/telephony/DeviceStateMonitor$3; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mSignalInfoRegistrants:Lcom/android/internal/telephony/RegistrantList;.registrants:Ljava/util/ArrayList; 251 +Lcom/android/ims/ImsManager;.IMS_STATS_CALLBACKS:Landroid/util/SparseArray;.mValues:[Ljava/lang/Object; 251 +Lcom/android/internal/telephony/IccPhoneBookInterfaceManager; 251 +Lcom/android/internal/telephony/DisplayInfoController; 251 +Lcom/android/internal/telephony/ims/ImsResolver$2; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.1377:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/nano/TelephonyProto$TelephonyServiceState$NetworkRegistrationInfo; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteController; 251 +Landroid/telephony/ims/RegistrationManager$RegistrationCallback$RegistrationBinder; 251 +Lcom/android/internal/telephony/imsphone/ImsExternalCallTracker; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$EmergencyNumbersInfo; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$GbaEvent; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.23:[Ljava/lang/String; 251 +Landroid/telephony/CellSignalStrengthCdma; 251 +Landroid/telephony/TelephonyLocalConnection; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteIncomingDatagram; 251 +Lcom/android/internal/telephony/imsphone/ImsPhoneCallTracker$2; 251 +Lcom/android/internal/telephony/ims/ImsResolver; 251 +Lcom/android/internal/telephony/SmsStorageMonitor; 251 +Lcom/android/internal/telephony/uicc/UiccProfile; 251 +Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback$CapabilityBinder; 251 +Lcom/android/internal/telephony/euicc/EuiccCardController; 251 +Lcom/android/internal/telephony/SmsBroadcastUndelivered$1; 251 +Lcom/android/internal/telephony/GsmCdmaCallTracker; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$RcsClientProvisioningStats; 251 +Lcom/android/internal/telephony/cat/CatService; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.761:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/SmsApplication; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mDisconnectRegistrants:Lcom/android/internal/telephony/RegistrantList;.registrants:Ljava/util/ArrayList; 251 +Lcom/android/internal/telephony/PhoneFactory; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mHandlerMap:Ljava/util/HashMap; 251 +Landroid/os/AsyncResult; 251 +Lcom/android/internal/telephony/ProxyController; 251 +Lcom/android/internal/telephony/cdma/CdmaInboundSmsHandler$CdmaCbTestBroadcastReceiver; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.453:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/MultiSimSettingController; 251 +Ljava/io/BufferedReader; 251 +Landroid/telephony/CellSignalStrengthGsm; 251 +Lcom/android/internal/telephony/SimActivationTracker; 251 +Lcom/android/internal/telephony/CellBroadcastServiceManager; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mRingingCalls:Ljava/util/ArrayList; 251 +Lcom/android/internal/telephony/IntentBroadcaster; 251 +Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsRegistrationFeatureTagStats; 251 +Lcom/android/internal/telephony/euicc/EuiccConnector$EuiccPackageMonitor; 251 +Lcom/android/internal/telephony/CallManager;.INSTANCE:Lcom/android/internal/telephony/CallManager;.mSuppServiceFailedRegistrants:Lcom/android/internal/telephony/RegistrantList;.registrants:Ljava/util/ArrayList; 251 +Landroid/view/textclassifier/TextLanguage;.EMPTY:Landroid/view/textclassifier/TextLanguage;.mBundle:Landroid/os/Bundle;.mClassLoader:Ljava/lang/ClassLoader;.packages:Ljava/util/Map;.m:Ljava/util/Map;.table:[Ljava/util/HashMap$Node; 251 +Lcom/android/internal/telephony/CarrierServiceBindHelper$CarrierServicePackageMonitor; 251 +Lcom/android/internal/telephony/TelephonyComponentFactory; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.637:[Ljava/lang/String; 251 +Lcom/android/phone/ecc/nano/ProtobufEccData$CountryInfo; 251 +Landroid/telephony/CarrierConfigManager;.sDefaults:Landroid/os/PersistableBundle;.mMap:Landroid/util/ArrayMap;.mArray:[Ljava/lang/Object;.651:[Ljava/lang/String; 251 +Lcom/android/internal/telephony/SmsUsageMonitor; 251 +Lcom/android/internal/telephony/CommandException$Error;.INVALID_SIM_STATE:Lcom/android/internal/telephony/CommandException$Error; 251 +Landroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback; 252 +Landroid/app/ActivityThread$ApplicationThread; 252 +Landroid/app/ActivityManager$MyUidObserver; 253 +Landroid/media/browse/MediaBrowser$ServiceCallbacks; 253 +Landroid/media/session/MediaController$CallbackStub; 253 +Landroid/media/session/MediaSessionManager$OnMediaKeyEventSessionChangedListener; 253 +Landroid/app/PendingIntent$CancelListener; 253 +Landroid/media/AudioManager$2; 253 +Landroid/database/ContentObserver$Transport; 253 +Landroid/media/session/MediaSessionManager$SessionsChangedWrapper$1; 253 +Landroid/content/ContentProvider$PipeDataWriter; 254 +Landroid/security/net/config/UserCertificateSource$NoPreloadHolder; 255 +Landroid/view/Window$Callback; 256 +Landroid/transition/TransitionManager;.sDefaultTransition:Landroid/transition/Transition;.mTransitions:Ljava/util/ArrayList;.elementData:[Ljava/lang/Object;.1:Landroid/transition/ChangeBounds;.mCurrentAnimators:Ljava/util/ArrayList; 256 +Landroid/transition/TransitionManager;.sDefaultTransition:Landroid/transition/Transition;.mTransitions:Ljava/util/ArrayList;.elementData:[Ljava/lang/Object;.2:Landroid/transition/Fade;.mCurrentAnimators:Ljava/util/ArrayList; 256 +Landroid/transition/TransitionManager;.sPendingTransitions:Ljava/util/ArrayList; 256 +Landroid/transition/TransitionManager;.sDefaultTransition:Landroid/transition/Transition;.mTransitions:Ljava/util/ArrayList;.elementData:[Ljava/lang/Object;.0:Landroid/transition/Fade;.mCurrentAnimators:Ljava/util/ArrayList; 256 +Landroid/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener; 257 +Landroid/webkit/ValueCallback; 258 +Landroid/webkit/WebResourceRequest; 258 +Landroid/webkit/WebChromeClient$CustomViewCallback; 258 +Landroid/hardware/camera2/CameraCharacteristics;.INFO_SUPPORTED_HARDWARE_LEVEL:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 258 +Landroid/accounts/Account; 258 +Landroid/hardware/camera2/CameraCharacteristics;.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 258 +Landroid/hardware/camera2/CameraCharacteristics;.DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.SCALER_AVAILABLE_STALL_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/params/StreamConfigurationDuration; 259 +Landroid/hardware/camera2/CameraCharacteristics;.SCALER_AVAILABLE_STREAM_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_INFO_COLOR_FILTER_ARRANGEMENT:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.SCALER_AVAILABLE_MIN_FRAME_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.HEIC_AVAILABLE_HEIC_STALL_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/params/HighSpeedVideoConfiguration; 259 +Landroid/hardware/camera2/CameraCharacteristics;.DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/CameraCharacteristics;.DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +I 259 +Landroid/hardware/camera2/CameraCharacteristics;.REQUEST_AVAILABLE_CAPABILITIES:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 259 +Landroid/hardware/camera2/params/StreamConfiguration; 259 +Z 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_INFO_PIXEL_ARRAY_SIZE:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.LENS_FOCAL_LENGTH:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.LENS_INFO_AVAILABLE_APERTURES:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.DISTORTION_CORRECTION_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.EXTENSION_STRENGTH:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +J 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_INFO_PHYSICAL_SIZE:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.TONEMAP_PRESET_CURVE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +B 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AF_TRIGGER:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AE_EXPOSURE_COMPENSATION:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +[D 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AWB_REGIONS:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.REQUEST_AVAILABLE_SESSION_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.SENSOR_EXPOSURE_TIME:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_CALIBRATION_TRANSFORM2:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.COLOR_CORRECTION_TRANSFORM:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/content/res/Resources$Theme; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AE_LOCK:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +F 260 +Landroid/hardware/camera2/CaptureRequest;.LENS_FILTER_DENSITY:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.LENS_OPTICAL_STABILIZATION_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.NOISE_REDUCTION_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.SENSOR_FRAME_DURATION:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AE_REGIONS:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_EXTENDED_SCENE_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.STATISTICS_OIS_DATA_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.SENSOR_TEST_PATTERN_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.HOT_PIXEL_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AE_ANTIBANDING_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.STATISTICS_LENS_SHADING_MAP_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.SCALER_CROP_REGION:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.LENS_FOCUS_DISTANCE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.TONEMAP_GAMMA:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_REFERENCE_ILLUMINANT2:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_REFERENCE_ILLUMINANT1:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +[F 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_ZOOM_RATIO:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.COLOR_CORRECTION_ABERRATION_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.TONEMAP_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.REQUEST_AVAILABLE_REQUEST_KEYS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.SCALER_ROTATE_AND_CROP:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.COLOR_CORRECTION_GAINS:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_COLOR_TRANSFORM1:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AF_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.SENSOR_SENSITIVITY:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.LENS_INFO_AVAILABLE_FOCAL_LENGTHS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_OPTICAL_BLACK_REGIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.JPEG_QUALITY:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.FLASH_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_POST_RAW_SENSITIVITY_BOOST:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AE_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_INFO_WHITE_LEVEL:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_SETTINGS_OVERRIDE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +[Landroid/hardware/camera2/params/MeteringRectangle; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AWB_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.LOGICAL_MULTI_CAMERA_PHYSICAL_IDS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_INFO_EXPOSURE_TIME_RANGE:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Ljava/lang/Float; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_ENABLE_ZSL:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.INFO_DEVICE_STATE_ORIENTATIONS:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_CALIBRATION_TRANSFORM1:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.EDGE_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_CAPTURE_INTENT:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_ORIENTATION:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.JPEG_ORIENTATION:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CameraCharacteristics;.SENSOR_COLOR_TRANSFORM2:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +[J 260 +Landroid/hardware/camera2/CameraCharacteristics;.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Ljava/util/concurrent/Phaser; 260 +Landroid/hardware/camera2/CaptureRequest;.BLACK_LEVEL_LOCK:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.COLOR_CORRECTION_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_SCENE_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.JPEG_THUMBNAIL_SIZE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.SHADING_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.STATISTICS_FACE_DETECT_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.STATISTICS_HOT_PIXEL_MAP_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AUTOFRAMING:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AE_TARGET_FPS_RANGE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AWB_LOCK:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.SENSOR_TEST_PATTERN_DATA:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AE_PRECAPTURE_TRIGGER:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.FLASH_STRENGTH_LEVEL:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_VIDEO_STABILIZATION_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.REPROCESS_EFFECTIVE_EXPOSURE_FACTOR:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Ljava/lang/Boolean; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_EFFECT_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.LENS_APERTURE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.JPEG_THUMBNAIL_QUALITY:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Landroid/hardware/camera2/CaptureRequest;.CONTROL_AF_REGIONS:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +Ljava/lang/Long; 260 +Landroid/hardware/camera2/CaptureRequest;.SENSOR_PIXEL_MODE:Landroid/hardware/camera2/CaptureRequest$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 260 +[Ljava/lang/String; 261 +[Z 262 +Ljava/lang/Class$Caches;.genericInterfaces:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap; 263 +Ljava/util/Map; 264 +Ljava/nio/Bits; 265 +Ljava/nio/DirectByteBuffer; 266 +Ljava/io/File; 267 +Ljava/nio/ByteBuffer; 268 +Ljava/io/InputStream; 269 +Landroid/os/ParcelFileDescriptor; 270 +Landroid/os/BinderProxy;.sProxyMap:Landroid/os/BinderProxy$ProxyMap; 271 +Landroid/app/PendingIntent; 272 +Landroid/content/Intent; 273 +Landroid/net/Uri$HierarchicalUri; 274 +Landroid/net/Uri$StringUri; 275 +Landroid/net/Uri$PathPart;.EMPTY:Landroid/net/Uri$PathPart; 276 +Lcom/android/internal/telephony/MccTable;.FALLBACKS:Ljava/util/Map;.table:[Ljava/util/HashMap$Node;.6:Ljava/util/HashMap$Node;.key:Ljava/lang/Object; 277 +Landroid/icu/text/DecimalFormatSymbols;.cachedLocaleData:Landroid/icu/impl/CacheBase;.map:Ljava/util/concurrent/ConcurrentHashMap; 278 +Llibcore/icu/DecimalFormatData;.CACHE:Ljava/util/concurrent/ConcurrentHashMap; 279 +Landroid/icu/impl/CurrencyData;.provider:Landroid/icu/impl/CurrencyData$CurrencyDisplayInfoProvider; 280 +Lcom/android/internal/infra/AndroidFuture; 281 +Lcom/android/internal/util/LatencyTracker$Action; 282 +Landroid/app/AppOpsManager$Mode; 283 +Landroid/view/accessibility/AccessibilityManager$AccessibilityServicesStateChangeListener; 284 +Landroid/annotation/IdRes; 285 +Landroid/content/pm/PackageItemInfo; 286 +Ljava/util/Random; 287 +Landroid/widget/RadioButton; 288 +Lcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState; 289 +Landroid/graphics/Insets; 290 +Landroid/view/View;.sNextGeneratedId:Ljava/util/concurrent/atomic/AtomicInteger; 291 +Landroid/graphics/drawable/LayerDrawable; 292 +Landroid/animation/LayoutTransition; 293 +Llibcore/reflect/AnnotationFactory;.cache:Ljava/util/Map; 294 +Llibcore/reflect/AnnotationFactory;.cache:Ljava/util/Map;.table:[Ljava/util/WeakHashMap$Entry; 294 +Ljava/lang/reflect/Proxy;.proxyClassCache:Ljava/lang/reflect/WeakCache;.reverseMap:Ljava/util/concurrent/ConcurrentMap; 295 +Ljava/lang/reflect/Proxy$ProxyClassFactory;.nextUniqueNumber:Ljava/util/concurrent/atomic/AtomicLong; 295 +Ljava/lang/reflect/Proxy;.proxyClassCache:Ljava/lang/reflect/WeakCache;.map:Ljava/util/concurrent/ConcurrentMap; 296 +Ljava/lang/Object; 297 +Ljava/lang/invoke/MethodType;.internTable:Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet;.map:Ljava/util/concurrent/ConcurrentMap; 298 +Ljava/nio/channels/SocketChannel;.dexCache:Ljava/lang/Object; 298 +Ljava/lang/invoke/MethodType;.objectOnlyTypes:[Ljava/lang/invoke/MethodType; 299 +Ljava/util/concurrent/ForkJoinTask; 300 +Ljava/util/concurrent/CompletableFuture; 301 +Landroid/app/Notification$BigTextStyle; 302 +Landroid/content/pm/ApplicationInfo; 303 +Ljava/security/Signature;.signatureInfo:Ljava/util/Map;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.13:Ljava/util/concurrent/ConcurrentHashMap$Node;.next:Ljava/util/concurrent/ConcurrentHashMap$Node;.next:Ljava/util/concurrent/ConcurrentHashMap$Node; 304 +Lsun/security/x509/X500Name;.stateName_oid:Lsun/security/util/ObjectIdentifier; 305 +Lsun/security/x509/X500Name;.localityName_oid:Lsun/security/util/ObjectIdentifier; 306 +Lsun/security/x509/X500Name;.orgUnitName_oid:Lsun/security/util/ObjectIdentifier; 306 +Ljava/util/UUID; 307 +Landroid/app/slice/Slice; 308 +Ljava/util/Locale;.FRENCH:Ljava/util/Locale; 308 +Landroid/os/NullVibrator; 308 +Ldalvik/system/CloseGuard;.MESSAGE:Ljava/lang/String; 308 +Lsun/util/locale/BaseLocale$Cache;.CACHE:Lsun/util/locale/BaseLocale$Cache;.map:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.22:Ljava/util/concurrent/ConcurrentHashMap$Node;.val:Ljava/lang/Object;.referent:Ljava/lang/Object; 308 +Ljava/util/Locale$Cache;.LOCALECACHE:Ljava/util/Locale$Cache;.map:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.24:Ljava/util/concurrent/ConcurrentHashMap$Node;.val:Ljava/lang/Object;.referent:Ljava/lang/Object; 308 +Landroid/app/Activity$$ExternalSyntheticLambda0; 308 +Landroid/icu/impl/locale/BaseLocale;.CACHE:Landroid/icu/impl/locale/BaseLocale$Cache;._map:Ljava/util/concurrent/ConcurrentHashMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.0:Ljava/util/concurrent/ConcurrentHashMap$Node; 308 +Ljava/util/Locale;.ITALIAN:Ljava/util/Locale; 308 +Landroid/media/MediaRouter2Manager$Callback; 308 +Lsun/util/locale/BaseLocale$Cache;.CACHE:Lsun/util/locale/BaseLocale$Cache;.map:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.29:Ljava/util/concurrent/ConcurrentHashMap$Node;.val:Ljava/lang/Object;.referent:Ljava/lang/Object; 308 +Ljava/util/Locale;.GERMAN:Ljava/util/Locale; 309 +Landroid/icu/impl/StandardPlural; 310 +Landroid/icu/impl/number/range/StandardPluralRanges; 311 +Landroid/icu/impl/PluralRulesLoader;.loader:Landroid/icu/impl/PluralRulesLoader; 311 +Landroid/icu/impl/PluralRulesLoader;.loader:Landroid/icu/impl/PluralRulesLoader;.pluralRulesCache:Ljava/util/Map; 311 +Landroid/icu/text/PluralRules$Operand; 311 +Landroid/icu/util/Calendar;.PATTERN_CACHE:Landroid/icu/impl/ICUCache; 312 +Landroid/icu/impl/DateNumberFormat;.CACHE:Landroid/icu/impl/SimpleCache; 313 +Landroid/text/format/DateFormat; 314 +Landroid/view/View$OnDragListener; 315 +Landroid/hardware/input/InputManager$InputDeviceListener; 316 +Landroid/hardware/input/InputManagerGlobal; 317 +Landroid/hardware/SystemSensorManager; 318 +Lcom/android/internal/os/BackgroundThread; 319 +Ljava/lang/Throwable; 320 +Landroid/app/NotificationManager; 321 +Landroid/app/NotificationChannel; 322 +Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener; 323 +Landroid/content/pm/VersionedPackage; 324 +Landroid/app/AppOpsManager; 325 +Ldalvik/system/ZipPathValidator; 326 +Landroid/content/pm/PackageManager;.sPackageInfoCache:Landroid/app/PropertyInvalidatedCache;.mSkips:[J 327 +Landroid/content/pm/PackageManager;.sApplicationInfoCache:Landroid/app/PropertyInvalidatedCache;.mSkips:[J 328 +Lsun/util/locale/BaseLocale$Cache;.CACHE:Lsun/util/locale/BaseLocale$Cache;.map:Ljava/util/concurrent/ConcurrentMap; 329 +Landroid/content/Context; 330 +Ljava/util/concurrent/Executor; 331 +Ljava/util/concurrent/ScheduledExecutorService; 332 +Ljava/util/concurrent/ExecutorService; 332 +Landroid/view/Window$OnFrameMetricsAvailableListener; 333 +Ljava/lang/annotation/Annotation; 334 +Ljava/lang/Enum;.sharedConstantsCache:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap;.tail:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry; 335 +Ljava/util/concurrent/CancellationException; 336 +Ljava/lang/NoSuchMethodException; 337 +Landroid/os/strictmode/CustomViolation; 338 +Landroid/app/PropertyInvalidatedCache;.sCaches:Ljava/util/WeakHashMap;.table:[Ljava/util/WeakHashMap$Entry;.3:Ljava/util/WeakHashMap$Entry; 339 +Lcom/android/internal/policy/PhoneWindow; 340 +Landroid/view/autofill/AutofillValue; 340 +Landroid/widget/TextView$SavedState; 341 +Landroid/text/method/MetaKeyKeyListener;.SYM:Ljava/lang/Object; 342 +Landroid/text/method/MetaKeyKeyListener;.ALT:Ljava/lang/Object; 342 +Landroid/text/method/MetaKeyKeyListener;.SELECTING:Ljava/lang/Object; 342 +Landroid/text/method/MetaKeyKeyListener;.CAP:Ljava/lang/Object; 342 +Landroid/widget/PopupWindow$PopupBackgroundView; 343 +Landroid/widget/TextView;.TEMP_RECTF:Landroid/graphics/RectF; 343 +Landroid/text/method/ScrollingMovementMethod; 343 +Landroid/icu/impl/locale/UnicodeLocaleExtension;.EMPTY_SORTED_SET:Ljava/util/SortedSet;.m:Ljava/util/NavigableMap; 343 +Landroid/widget/PopupWindow$PopupDecorView; 343 +Landroid/widget/Editor$TextRenderNode; 343 +Landroid/widget/Editor$PositionListener; 344 +Landroid/text/style/SpellCheckSpan; 345 +Landroid/text/method/ArrowKeyMovementMethod; 346 +Landroid/text/method/TextKeyListener;.sInstance:[Landroid/text/method/TextKeyListener; 346 +Landroid/text/TextUtils$TruncateAt;.MARQUEE:Landroid/text/TextUtils$TruncateAt; 347 +Landroid/view/autofill/Helper; 348 +Lcom/android/internal/util/LatencyTracker; 349 +Lcom/android/internal/util/LatencyTracker$SLatencyTrackerHolder; 349 +Landroid/graphics/drawable/Icon; 350 +Landroid/text/style/AlignmentSpan; 351 +Landroid/text/MeasuredParagraph;.sPool:Landroid/util/Pools$SynchronizedPool;.mPool:[Ljava/lang/Object; 352 +Landroid/text/MeasuredParagraph;.sPool:Landroid/util/Pools$SynchronizedPool; 352 +Landroid/icu/impl/ICUResourceBundleReader;.CACHE:Landroid/icu/impl/ICUResourceBundleReader$ReaderCache;.map:Ljava/util/concurrent/ConcurrentHashMap; 353 +Landroid/location/ILocationManager$Stub;.dexCache:Ljava/lang/Object; 354 +Landroid/annotation/CurrentTimeMillisLong; 355 +Ljava/lang/reflect/Method; 356 +Lcom/android/internal/os/ZygoteInit; 356 +Landroid/database/DatabaseUtils; 356 +Landroid/os/HandlerThread; 356 +Ljava/security/Signature;.signatureInfo:Ljava/util/Map;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node; 357 +Ljava/security/Signature;.signatureInfo:Ljava/util/Map; 358 +Landroid/app/PropertyInvalidatedCache;.sCaches:Ljava/util/WeakHashMap;.queue:Ljava/lang/ref/ReferenceQueue; 359 +Landroid/telephony/TelephonyRegistryManager; 360 +Landroid/graphics/HardwareRenderer; 361 +Landroid/os/BinderProxy; 362 +Landroid/app/compat/CompatChanges;.QUERY_CACHE:Landroid/app/compat/ChangeIdStateCache;.mCache:Ljava/util/LinkedHashMap; 363 +Landroid/app/compat/CompatChanges;.QUERY_CACHE:Landroid/app/compat/ChangeIdStateCache; 363 +Landroid/app/AlarmManager; 364 +Landroid/net/metrics/DhcpClientEvent; 365 +[I 366 +Landroid/media/MediaCodecList; 367 +Landroid/graphics/drawable/InsetDrawable; 368 +Landroid/widget/ProgressBar$SavedState; 369 +Landroid/widget/ScrollView$SavedState; 370 +Landroid/graphics/drawable/AnimatedVectorDrawable; 371 +Landroid/widget/ListView; 372 +Landroid/widget/AbsListView; 373 +Landroid/widget/AbsListView$SavedState; 373 +Landroid/widget/CompoundButton$SavedState; 374 +Landroid/widget/HorizontalScrollView$SavedState; 375 +Landroid/widget/HorizontalScrollView; 376 +Landroid/icu/text/MeasureFormat;.hmsTo012:Ljava/util/Map;.table:[Ljava/util/HashMap$Node;.1:Ljava/util/HashMap$Node;.value:Ljava/lang/Object; 377 +Landroid/icu/text/MeasureFormat;.hmsTo012:Ljava/util/Map;.table:[Ljava/util/HashMap$Node;.6:Ljava/util/HashMap$Node;.value:Ljava/lang/Object; 377 +Landroid/view/View$OnSystemUiVisibilityChangeListener; 378 +Ljava/util/AbstractMap; 379 +Landroid/telephony/euicc/EuiccCardManager$ResultCallback; 380 +Ljava/lang/Character$UnicodeBlock;.CJK_SYMBOLS_AND_PUNCTUATION:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.KANBUN:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.HANGUL_COMPATIBILITY_JAMO:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.KATAKANA:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.HANGUL_SYLLABLES:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.ENCLOSED_CJK_LETTERS_AND_MONTHS:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.HANGUL_JAMO:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.BOPOMOFO_EXTENDED:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.CJK_COMPATIBILITY_FORMS:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.BOPOMOFO:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.HIRAGANA:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.HALFWIDTH_AND_FULLWIDTH_FORMS:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.KANGXI_RADICALS:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.CJK_RADICALS_SUPPLEMENT:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.KATAKANA_PHONETIC_EXTENSIONS:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.CJK_COMPATIBILITY:Ljava/lang/Character$UnicodeBlock; 381 +Ljava/lang/Character$UnicodeBlock;.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT:Ljava/lang/Character$UnicodeBlock; 382 +Ljava/lang/Character$UnicodeBlock;.CJK_COMPATIBILITY_IDEOGRAPHS:Ljava/lang/Character$UnicodeBlock; 382 +Ljava/lang/Character$UnicodeBlock;.CJK_UNIFIED_IDEOGRAPHS:Ljava/lang/Character$UnicodeBlock; 382 +Ljava/lang/Character$UnicodeBlock;.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A:Ljava/lang/Character$UnicodeBlock; 382 +Ljava/lang/Character$UnicodeBlock;.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B:Ljava/lang/Character$UnicodeBlock; 382 +Lcom/android/internal/inputmethod/InputMethodPrivilegedOperationsRegistry; 383 +Landroid/view/Window$DecorCallback; 383 +Landroid/view/inputmethod/EditorInfo; 383 +Landroid/view/MenuItem$OnActionExpandListener; 384 +Ljava/util/Locale;.JAPANESE:Ljava/util/Locale; 385 +Ljava/util/Locale;.KOREAN:Ljava/util/Locale; 385 +Lcom/android/internal/config/appcloning/AppCloningDeviceConfigHelper; 386 +Landroid/telecom/PhoneAccountHandle; 387 +Landroid/content/AsyncQueryHandler; 388 +Landroid/speech/RecognitionListener; 389 +Ljava/lang/InstantiationException; 390 +Ljava/util/concurrent/ExecutionException; 391 +Landroid/icu/text/DateIntervalInfo;.DIICACHE:Landroid/icu/impl/ICUCache; 392 +Landroid/text/format/DateIntervalFormat;.CACHED_FORMATTERS:Landroid/util/LruCache;.map:Ljava/util/LinkedHashMap; 392 +Landroid/icu/text/DateIntervalFormat;.LOCAL_PATTERN_CACHE:Landroid/icu/impl/ICUCache; 392 +Landroid/icu/impl/OlsonTimeZone; 392 +Landroid/text/format/DateIntervalFormat;.CACHED_FORMATTERS:Landroid/util/LruCache; 392 +Landroid/graphics/drawable/Drawable; 393 +Ljava/lang/Enum;.sharedConstantsCache:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap;.tail:Ljava/util/LinkedHashMap$LinkedHashMapEntry; 394 +Landroid/app/Activity; 395 +Landroid/icu/text/PluralRules$KeywordStatus;.INVALID:Landroid/icu/text/PluralRules$KeywordStatus;.name:Ljava/lang/String; 396 +Landroid/net/Uri; 396 +Lsun/util/calendar/CalendarSystem;.calendars:Ljava/util/concurrent/ConcurrentMap; 396 +Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;.sJNISetterPropertyMap:Ljava/util/HashMap; 397 +Landroid/graphics/drawable/ShapeDrawable; 398 +Lcom/android/internal/widget/ActionBarContextView; 399 +Landroid/widget/Toolbar$SavedState; 399 +Lcom/android/internal/widget/ActionBarContainer; 399 +Lcom/android/internal/widget/ActionBarOverlayLayout; 399 +Lcom/android/internal/widget/ActionBarContainer$ActionBarBackgroundDrawable; 399 +Landroid/widget/ActionMenuPresenter$OverflowMenuButton; 400 +Landroid/widget/ActionMenuView; 401 +Landroid/content/res/Configuration; 402 +Ljava/util/IdentityHashMap;.NULL_KEY:Ljava/lang/Object; 403 +Ljava/util/concurrent/ForkJoinPool; 404 +Landroid/os/ResultReceiver; 405 +Ljava/util/concurrent/TimeoutException; 406 +Ljava/io/IOException; 407 +Landroid/accounts/AccountAuthenticatorResponse; 408 +Landroid/nfc/NfcAdapter; 409 +Landroid/nfc/NfcAdapter;.sNfcAdapters:Ljava/util/HashMap; 409 +Landroid/app/backup/BackupManager; 410 +Landroid/app/NotificationChannelGroup; 411 +Landroid/content/pm/ParceledListSlice; 411 +Landroid/os/FileObserver; 412 +Landroid/os/UserHandle; 413 +Landroid/content/pm/PackageManager$NameNotFoundException; 414 +[Ljava/lang/Integer; 415 +Landroid/animation/PropertyValuesHolder;.sSetterPropertyMap:Ljava/util/HashMap; 415 +Landroid/content/LocusId; 416 +Landroid/view/contentcapture/ContentCaptureContext; 416 +Landroid/telephony/ims/RegistrationManager;.IMS_REG_TO_ACCESS_TYPE_MAP:Ljava/util/Map;.table:[Ljava/lang/Object;.18:Ljava/lang/Integer; 417 +Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;.pool:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.4:Ljava/util/concurrent/ConcurrentHashMap$Node; 418 +Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;.pool:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node; 418 +Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;.pool:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.2:Ljava/util/concurrent/ConcurrentHashMap$Node;.next:Ljava/util/concurrent/ConcurrentHashMap$Node; 418 +Lcom/android/internal/telephony/cdnr/CarrierDisplayNameResolver;.EF_SOURCE_PRIORITY:Ljava/util/List;.a:[Ljava/lang/Object;.9:Ljava/lang/Integer; 418 +Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;.pool:Ljava/util/concurrent/ConcurrentMap;.table:[Ljava/util/concurrent/ConcurrentHashMap$Node;.56:Ljava/util/concurrent/ConcurrentHashMap$Node; 418 +Lcom/android/internal/telephony/cdnr/CarrierDisplayNameResolver;.EF_SOURCE_PRIORITY:Ljava/util/List;.a:[Ljava/lang/Object;.5:Ljava/lang/Integer; 418 +Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;.pool:Ljava/util/concurrent/ConcurrentMap; 418 +Landroid/widget/EditText; 419 +Landroid/widget/CheckedTextView; 420 +Landroid/os/strictmode/UnsafeIntentLaunchViolation; 421 +Landroid/app/Service; 422 +Ldalvik/system/BlockGuard; 423 +Landroid/hardware/devicestate/DeviceStateManagerGlobal; 424 +Landroid/hardware/camera2/CameraCharacteristics;.SCALER_MULTI_RESOLUTION_STREAM_SUPPORTED:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 425 +Landroid/hardware/camera2/marshal/MarshalRegistry;.sMarshalerMap:Ljava/util/HashMap; 425 +Landroid/hardware/camera2/CameraCharacteristics;.LENS_FACING:Landroid/hardware/camera2/CameraCharacteristics$Key;.mKey:Landroid/hardware/camera2/impl/CameraMetadataNative$Key; 425 +Landroid/content/ClipboardManager$OnPrimaryClipChangedListener; 426 +Landroid/icu/text/BreakIterator;.iterCache:[Landroid/icu/impl/CacheValue; 427 +Landroid/app/PropertyInvalidatedCache;.sCaches:Ljava/util/WeakHashMap;.table:[Ljava/util/WeakHashMap$Entry;.13:Ljava/util/WeakHashMap$Entry; 428 +Landroid/icu/text/Collator; 429 +Landroid/icu/impl/number/parse/NanMatcher;.DEFAULT:Landroid/icu/impl/number/parse/NanMatcher;.uniSet:Landroid/icu/text/UnicodeSet;.strings:Ljava/util/SortedSet;.c:Ljava/util/Collection;.m:Ljava/util/NavigableMap; 430 +Ljava/io/FileNotFoundException; 431 +Landroid/os/BaseBundle; 432 +Landroid/service/watchdog/ExplicitHealthCheckService$PackageConfig; 433 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.116:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.12:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.90:Ljava/lang/String; 434 +Landroid/icu/text/MessageFormat;.rootLocale:Ljava/util/Locale;.baseLocale:Lsun/util/locale/BaseLocale;.language:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.385:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.107:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.112:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.480:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.550:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.143:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._obsoleteLanguages:[Ljava/lang/String;.1:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.473:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.138:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.204:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.71:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._replacementCountries:[Ljava/lang/String;.12:Ljava/lang/String; 434 +Landroid/icu/impl/duration/impl/DataRecord$ETimeLimit;.names:[Ljava/lang/String;.1:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._replacementCountries:[Ljava/lang/String;.9:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.99:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages3:[Ljava/lang/String;.152:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.256:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.170:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.220:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.461:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._replacementLanguages:[Ljava/lang/String;.5:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.190:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.157:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._obsoleteCountries:[Ljava/lang/String;.4:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.196:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.117:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.5:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.499:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.199:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.18:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.324:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.101:Ljava/lang/String; 434 +Landroid/icu/impl/locale/UnicodeLocaleExtension;.CA_JAPANESE:Landroid/icu/impl/locale/UnicodeLocaleExtension;._keywords:Ljava/util/SortedMap;.root:Ljava/util/TreeMap$TreeMapEntry;.key:Ljava/lang/Object; 434 +Landroid/icu/impl/LocaleIDs;._replacementCountries:[Ljava/lang/String;.3:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.140:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.105:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.37:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._replacementCountries:[Ljava/lang/String;.5:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.22:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.103:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.412:Ljava/lang/String; 434 +Landroid/icu/impl/duration/impl/DataRecord$EMilliSupport;.names:[Ljava/lang/String;.1:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.124:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.232:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.219:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.179:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.523:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.75:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.486:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.166:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.112:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.119:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.160:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.298:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.257:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.182:Ljava/lang/String; 434 +Landroid/icu/impl/units/UnitPreferences;.measurementSystem:Ljava/util/Map;.m:Ljava/util/Map;.table:[Ljava/util/HashMap$Node;.5:Ljava/util/HashMap$Node;.next:Ljava/util/HashMap$Node;.value:Ljava/lang/Object; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.47:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.180:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.111:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.358:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.96:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._obsoleteLanguages:[Ljava/lang/String;.0:Ljava/lang/String; 434 +Landroid/icu/text/DateFormat;.HOUR_GENERIC_TZ:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.67:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.254:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.222:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.55:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.349:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.16:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.352:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.443:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.478:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.19:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.401:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.137:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.65:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.474:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.168:Ljava/lang/String; 434 +Landroid/icu/impl/units/UnitPreferences;.measurementSystem:Ljava/util/Map;.m:Ljava/util/Map;.table:[Ljava/util/HashMap$Node;.15:Ljava/util/HashMap$Node;.value:Ljava/lang/Object; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.111:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages3:[Ljava/lang/String;.545:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.30:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.469:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.21:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.69:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.56:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.519:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._replacementLanguages:[Ljava/lang/String;.4:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.107:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.290:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.59:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.220:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.186:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.516:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.181:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.199:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.396:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.117:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.227:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.331:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.447:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.151:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._languages:[Ljava/lang/String;.144:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.132:Ljava/lang/String; 434 +Landroid/icu/impl/LocaleIDs;._countries:[Ljava/lang/String;.230:Ljava/lang/String; 434 +Landroid/icu/text/DateFormat;.MINUTE_SECOND:Ljava/lang/String; 434 +Ljava/lang/Enum;.sharedConstantsCache:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap;.tail:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry; 435 +Ljava/lang/Enum;.sharedConstantsCache:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap;.head:Ljava/util/LinkedHashMap$LinkedHashMapEntry; 436 +Ljava/lang/Enum;.sharedConstantsCache:Llibcore/util/BasicLruCache;.map:Ljava/util/LinkedHashMap;.tail:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry;.before:Ljava/util/LinkedHashMap$LinkedHashMapEntry; 437 +Landroid/graphics/drawable/ColorStateListDrawable; 438 +Ljava/lang/SecurityException; 439 +Ljava/lang/RuntimeException; 440 +Landroid/media/audiopolicy/AudioProductStrategy; 441 +Landroid/os/PersistableBundle; 442 +Landroid/content/pm/ShortcutInfo; 442 +Landroid/icu/text/TimeZoneFormat;._tzfCache:Landroid/icu/text/TimeZoneFormat$TimeZoneFormatCache;.map:Ljava/util/concurrent/ConcurrentHashMap; 443 +Landroid/graphics/LeakyTypefaceStorage;.sStorage:Ljava/util/ArrayList; 443 +Landroid/graphics/LeakyTypefaceStorage;.sTypefaceMap:Landroid/util/ArrayMap; 443 +Landroid/text/TextWatcher; 444 +Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener; 445 +Ljavax/net/SocketFactory; 446 +Ljava/util/Collections; 447 +Ljava/lang/Exception; 448 +Landroid/os/UserManager; 449 +Landroid/os/RemoteException; 450 +Landroid/content/AttributionSource; 451 +Lcom/android/okhttp/internalandroidapi/HttpURLConnectionFactory$DnsAdapter; 452 +Lcom/android/okhttp/Protocol;.HTTP_2:Lcom/android/okhttp/Protocol; 452 +Ljava/net/Inet4Address; 452 +Lcom/android/okhttp/Protocol;.SPDY_3:Lcom/android/okhttp/Protocol; 452 +Lcom/android/okhttp/OkHttpClient; 452 +Landroid/os/storage/VolumeInfo; 453 +Landroid/os/storage/DiskInfo; 453 +Landroid/view/textclassifier/TextLanguage;.EMPTY:Landroid/view/textclassifier/TextLanguage;.mBundle:Landroid/os/Bundle;.mMap:Landroid/util/ArrayMap; 454 +Ljava/nio/file/StandardOpenOption;.WRITE:Ljava/nio/file/StandardOpenOption; 455 +Ljava/nio/file/StandardOpenOption;.APPEND:Ljava/nio/file/StandardOpenOption; 456 +Ljava/util/logging/FileHandler; 457 +Ljava/nio/file/StandardOpenOption;.CREATE_NEW:Ljava/nio/file/StandardOpenOption; 457 +Ljava/util/logging/FileHandler;.locks:Ljava/util/Set;.map:Ljava/util/HashMap; 457 +Lsun/nio/ch/SharedFileLockTable;.queue:Ljava/lang/ref/ReferenceQueue; 458 +Ljavax/net/ServerSocketFactory; 458 +Landroid/os/AsyncTask; 459 +Landroid/os/strictmode/UnbufferedIoViolation; 460 +Landroid/app/usage/AppStandbyInfo; 461 +Landroid/text/format/DateUtils; 462 +Landroid/security/IKeyChainService; 463 +Landroid/util/Log$TerribleFailure; 464 +Lcom/android/internal/os/RuntimeInit$KillApplicationHandler; 464 +Ljava/util/Timer;.nextSerialNumber:Ljava/util/concurrent/atomic/AtomicInteger; 465 +Landroid/telephony/ims/stub/ImsConfigImplBase$ImsConfigStub; 466 +Landroid/telephony/ims/stub/ImsRegistrationImplBase$1; 466 +Landroid/telephony/ims/ImsUtListener; 466 +Landroid/telephony/ims/feature/MmTelFeature$1; 466 +Lcom/android/ims/ImsManager;.IMS_MANAGER_INSTANCES:Landroid/util/SparseArray;.mValues:[Ljava/lang/Object; 467 +Lcom/android/ims/ImsManager;.IMS_MANAGER_INSTANCES:Landroid/util/SparseArray; 467 +Lcom/android/ims/ImsManager;.IMS_MANAGER_INSTANCES:Landroid/util/SparseArray;.mKeys:[I 467 +Landroid/telephony/ims/aidl/IImsConfig$Stub$Proxy; 468 +Landroid/telephony/ims/aidl/IImsRegistration$Stub$Proxy; 468 +Landroid/telephony/NetworkService; 469 +Landroid/telephony/TelephonyCallback$ServiceStateListener; 470 +Landroid/telephony/TelephonyCallback$PhysicalChannelConfigListener; 471 +Landroid/telephony/TelephonyCallback$RadioPowerStateListener; 471 +Lsun/security/x509/X500Name;.internedOIDs:Ljava/util/Map; 472 +Lsun/security/x509/X500Name;.internedOIDs:Ljava/util/Map;.table:[Ljava/util/HashMap$Node; 472 +Landroid/media/MediaCodec; 473 +Ljava/nio/file/StandardOpenOption;.CREATE:Ljava/nio/file/StandardOpenOption; 474 +Ljava/nio/file/NoSuchFileException; 475 +Ljava/text/DateFormatSymbols;.cachedInstances:Ljava/util/concurrent/ConcurrentMap; 476 +Ljava/util/Currency;.instances:Ljava/util/concurrent/ConcurrentMap; 476 +Ljava/util/Calendar;.cachedLocaleData:Ljava/util/concurrent/ConcurrentMap; 476 +Ljava/text/SimpleDateFormat;.cachedNumberFormatData:Ljava/util/concurrent/ConcurrentMap; 476 +Landroid/app/UriGrantsManager;.IUriGrantsManagerSingleton:Landroid/util/Singleton; 477 +Landroid/content/ContentProviderProxy; 478 +Landroid/os/DeadObjectException; 479 +Landroid/app/slice/SliceSpec; 479 +Landroid/database/sqlite/SQLiteDatabase; 480 +Ljava/util/Locale;.CHINA:Ljava/util/Locale; 481 +Ljava/util/Locale;.TAIWAN:Ljava/util/Locale; 481 +Ljava/util/Locale;.KOREA:Ljava/util/Locale; 481 +Ljava/util/Scanner; 482 +Ljava/math/BigDecimal; 483 +Ljava/security/interfaces/RSAPrivateCrtKey; 483 +Ljava/security/interfaces/RSAPrivateKey; 483 +Lcom/android/server/backup/AccountSyncSettingsBackupHelper;.KEY_ACCOUNT_TYPE:Ljava/lang/String; 483 +Landroid/util/UtilConfig; 484 +Ljava/net/ResponseCache; 485 +Landroid/content/ReceiverCallNotAllowedException; 486 +Landroid/app/ReceiverRestrictedContext; 487 +Landroid/os/strictmode/CredentialProtectedWhileLockedViolation; 488 +Landroid/app/Application; 489 +Ljava/util/NoSuchElementException; 490 +Landroid/os/Messenger; 491 +Landroid/telephony/TelephonyCallback$DataEnabledListener; 491 +Landroid/system/StructLinger; 492 diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 95dc07fe04eb..4c2e4fc05949 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10303,8 +10303,8 @@ package android.nfc.cardemulation { method @FlaggedApi("android.nfc.enable_nfc_mainline") @NonNull public java.util.List<java.lang.String> getSubsetAids(); method @FlaggedApi("android.nfc.enable_nfc_mainline") public int getUid(); method @FlaggedApi("android.nfc.enable_nfc_mainline") public boolean hasCategory(@NonNull String); + method @FlaggedApi("android.nfc.enable_nfc_mainline") public boolean isCategoryOtherServiceEnabled(); method @FlaggedApi("android.nfc.enable_nfc_mainline") public boolean isOnHost(); - method @FlaggedApi("android.nfc.enable_nfc_mainline") public boolean isOtherServiceEnabled(); method @FlaggedApi("android.nfc.enable_nfc_mainline") @NonNull public CharSequence loadAppLabel(@NonNull android.content.pm.PackageManager); method @FlaggedApi("android.nfc.enable_nfc_mainline") @NonNull public android.graphics.drawable.Drawable loadBanner(@NonNull android.content.pm.PackageManager); method @FlaggedApi("android.nfc.enable_nfc_mainline") @NonNull public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.pm.PackageManager); @@ -10313,9 +10313,9 @@ package android.nfc.cardemulation { method @FlaggedApi("android.nfc.enable_nfc_mainline") public boolean requiresScreenOn(); method @FlaggedApi("android.nfc.enable_nfc_mainline") public boolean requiresUnlock(); method @FlaggedApi("android.nfc.enable_nfc_mainline") public void resetOffHostSecureElement(); + method @FlaggedApi("android.nfc.enable_nfc_mainline") public void setCategoryOtherServiceEnabled(boolean); method @FlaggedApi("android.nfc.enable_nfc_mainline") public void setDynamicAidGroup(@NonNull android.nfc.cardemulation.AidGroup); method @FlaggedApi("android.nfc.enable_nfc_mainline") public void setOffHostSecureElement(@NonNull String); - method @FlaggedApi("android.nfc.enable_nfc_mainline") public void setOtherServiceEnabled(boolean); method @FlaggedApi("android.nfc.enable_nfc_mainline") public void writeToParcel(@NonNull android.os.Parcel, int); field @FlaggedApi("android.nfc.enable_nfc_mainline") @NonNull public static final android.os.Parcelable.Creator<android.nfc.cardemulation.ApduServiceInfo> CREATOR; } diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java index 98a980f5e7f8..f407fb73534f 100644 --- a/core/java/android/nfc/NfcAdapter.java +++ b/core/java/android/nfc/NfcAdapter.java @@ -284,6 +284,20 @@ public final class NfcAdapter { public static final int STATE_TURNING_OFF = 4; /** + * Possible states from {@link #getAdapterState}. + * + * @hide + */ + @IntDef(prefix = { "STATE_" }, value = { + STATE_OFF, + STATE_TURNING_ON, + STATE_ON, + STATE_TURNING_OFF + }) + @Retention(RetentionPolicy.SOURCE) + public @interface AdapterState{} + + /** * Flag for use with {@link #enableReaderMode(Activity, ReaderCallback, int, Bundle)}. * <p> * Setting this flag enables polling for Nfc-A technology. @@ -948,7 +962,7 @@ public final class NfcAdapter { */ @SystemApi @FlaggedApi(Flags.FLAG_ENABLE_NFC_MAINLINE) - public int getAdapterState() { + public @AdapterState int getAdapterState() { try { return sService.getState(); } catch (RemoteException e) { diff --git a/core/java/android/nfc/cardemulation/ApduServiceInfo.java b/core/java/android/nfc/cardemulation/ApduServiceInfo.java index e331c95288d9..bd087f970426 100644 --- a/core/java/android/nfc/cardemulation/ApduServiceInfo.java +++ b/core/java/android/nfc/cardemulation/ApduServiceInfo.java @@ -130,7 +130,7 @@ public final class ApduServiceInfo implements Parcelable { /** * State of the service for CATEGORY_OTHER selection */ - private boolean mOtherServiceEnabled; + private boolean mCategoryOtherServiceEnabled; /** * @hide @@ -183,7 +183,7 @@ public final class ApduServiceInfo implements Parcelable { this.mBannerResourceId = bannerResource; this.mUid = uid; this.mSettingsActivityName = settingsActivityName; - this.mOtherServiceEnabled = isEnabled; + this.mCategoryOtherServiceEnabled = isEnabled; } @@ -374,7 +374,7 @@ public final class ApduServiceInfo implements Parcelable { // Set uid mUid = si.applicationInfo.uid; - mOtherServiceEnabled = false; // support other category + mCategoryOtherServiceEnabled = false; // support other category } @@ -746,7 +746,7 @@ public final class ApduServiceInfo implements Parcelable { dest.writeInt(mUid); dest.writeString(mSettingsActivityName); - dest.writeInt(mOtherServiceEnabled ? 1 : 0); + dest.writeInt(mCategoryOtherServiceEnabled ? 1 : 0); }; @FlaggedApi(Flags.FLAG_ENABLE_NFC_MAINLINE) @@ -809,7 +809,7 @@ public final class ApduServiceInfo implements Parcelable { pw.println(" Static AID groups:"); for (AidGroup group : mStaticAidGroups.values()) { pw.println(" Category: " + group.getCategory() - + "(enabled: " + mOtherServiceEnabled + ")"); + + "(enabled: " + mCategoryOtherServiceEnabled + ")"); for (String aid : group.getAids()) { pw.println(" AID: " + aid); } @@ -817,7 +817,7 @@ public final class ApduServiceInfo implements Parcelable { pw.println(" Dynamic AID groups:"); for (AidGroup group : mDynamicAidGroups.values()) { pw.println(" Category: " + group.getCategory() - + "(enabled: " + mOtherServiceEnabled + ")"); + + "(enabled: " + mCategoryOtherServiceEnabled + ")"); for (String aid : group.getAids()) { pw.println(" AID: " + aid); } @@ -834,8 +834,8 @@ public final class ApduServiceInfo implements Parcelable { * @param enabled true to indicate if user has enabled this service */ @FlaggedApi(Flags.FLAG_ENABLE_NFC_MAINLINE) - public void setOtherServiceEnabled(boolean enabled) { - mOtherServiceEnabled = enabled; + public void setCategoryOtherServiceEnabled(boolean enabled) { + mCategoryOtherServiceEnabled = enabled; } @@ -845,8 +845,8 @@ public final class ApduServiceInfo implements Parcelable { * @return true to indicate if user has enabled this service */ @FlaggedApi(Flags.FLAG_ENABLE_NFC_MAINLINE) - public boolean isOtherServiceEnabled() { - return mOtherServiceEnabled; + public boolean isCategoryOtherServiceEnabled() { + return mCategoryOtherServiceEnabled; } /** diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java index 218d4bb8514f..0c753a51c508 100644 --- a/core/java/android/os/Binder.java +++ b/core/java/android/os/Binder.java @@ -309,7 +309,11 @@ public class Binder implements IBinder { * If the current thread is not currently executing an incoming transaction, * then its own PID is returned. * - * Warning: oneway transactions do not receive PID. + * Warning: oneway transactions do not receive PID. Even if you expect + * a transaction to be synchronous, a misbehaving client could send it + * as a asynchronous call and result in a 0 PID here. Additionally, if + * there is a race and the calling process dies, the PID may still be + * 0 for a synchronous call. */ @CriticalNative public static final native int getCallingPid(); diff --git a/core/java/android/os/HidlSupport.java b/core/java/android/os/HidlSupport.java index 77160557f5c2..91b796aba655 100644 --- a/core/java/android/os/HidlSupport.java +++ b/core/java/android/os/HidlSupport.java @@ -218,13 +218,6 @@ public class HidlSupport { @SystemApi public static native int getPidIfSharable(); - /** - * Return true if HIDL is supported on this device and false if not. - * - * @hide - */ - public static native boolean isHidlSupported(); - /** @hide */ public HidlSupport() {} } diff --git a/core/java/android/os/HwBinder.java b/core/java/android/os/HwBinder.java index bc19655d1618..feed20800fd4 100644 --- a/core/java/android/os/HwBinder.java +++ b/core/java/android/os/HwBinder.java @@ -18,7 +18,6 @@ package android.os; import android.annotation.SystemApi; import android.compat.annotation.UnsupportedAppUsage; -import android.util.Log; import libcore.util.NativeAllocationRegistry; @@ -79,17 +78,6 @@ public abstract class HwBinder implements IHwBinder { String iface, String serviceName) throws RemoteException, NoSuchElementException { - if (!HidlSupport.isHidlSupported() - && (iface.equals("android.hidl.manager@1.0::IServiceManager") - || iface.equals("android.hidl.manager@1.1::IServiceManager") - || iface.equals("android.hidl.manager@1.2::IServiceManager"))) { - Log.i( - TAG, - "Replacing Java hwservicemanager with a fake HwNoService" - + " because HIDL is not supported on this device."); - return new HwNoService(); - } - return getService(iface, serviceName, false /* retry */); } /** diff --git a/core/java/android/os/HwNoService.java b/core/java/android/os/HwNoService.java deleted file mode 100644 index 117c3ad7ee48..000000000000 --- a/core/java/android/os/HwNoService.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.os; - -/** - * A fake hwservicemanager that is used locally when HIDL isn't supported on the device. - * - * @hide - */ -final class HwNoService implements IHwBinder, IHwInterface { - /** @hide */ - @Override - public void transact(int code, HwParcel request, HwParcel reply, int flags) {} - - /** @hide */ - @Override - public IHwInterface queryLocalInterface(String descriptor) { - return new HwNoService(); - } - - /** @hide */ - @Override - public boolean linkToDeath(DeathRecipient recipient, long cookie) { - return true; - } - - /** @hide */ - @Override - public boolean unlinkToDeath(DeathRecipient recipient) { - return true; - } - - /** @hide */ - @Override - public IHwBinder asBinder() { - return this; - } -} diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 04525e8b8ff7..9b77b798facf 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -1505,7 +1505,7 @@ public class Process { * fully removed, otherwise system resources may leak. * @hide */ - public static final native int sendSignalToProcessGroup(int uid, int pid, int signal); + public static final native boolean sendSignalToProcessGroup(int uid, int pid, int signal); /** * Freeze the cgroup for the given UID. diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java index d12e3b2431d5..4205b2c63563 100644 --- a/core/java/android/os/StrictMode.java +++ b/core/java/android/os/StrictMode.java @@ -2440,11 +2440,12 @@ public final class StrictMode { /** @hide */ public static void onVmPolicyViolation(Violation violation, boolean forceDeath) { - final boolean penaltyDropbox = (sVmPolicy.mask & PENALTY_DROPBOX) != 0; - final boolean penaltyDeath = ((sVmPolicy.mask & PENALTY_DEATH) != 0) || forceDeath; - final boolean penaltyLog = (sVmPolicy.mask & PENALTY_LOG) != 0; + final VmPolicy vmPolicy = getVmPolicy(); + final boolean penaltyDropbox = (vmPolicy.mask & PENALTY_DROPBOX) != 0; + final boolean penaltyDeath = ((vmPolicy.mask & PENALTY_DEATH) != 0) || forceDeath; + final boolean penaltyLog = (vmPolicy.mask & PENALTY_LOG) != 0; - final int penaltyMask = (sVmPolicy.mask & PENALTY_ALL); + final int penaltyMask = (vmPolicy.mask & PENALTY_ALL); final ViolationInfo info = new ViolationInfo(violation, penaltyMask); // Erase stuff not relevant for process-wide violations @@ -2497,10 +2498,10 @@ public final class StrictMode { // If penaltyDeath, we can't guarantee this callback finishes before the process dies for // all executors. penaltyDeath supersedes penaltyCallback. - if (sVmPolicy.mListener != null && sVmPolicy.mCallbackExecutor != null) { - final OnVmViolationListener listener = sVmPolicy.mListener; + if (vmPolicy.mListener != null && vmPolicy.mCallbackExecutor != null) { + final OnVmViolationListener listener = vmPolicy.mListener; try { - sVmPolicy.mCallbackExecutor.execute( + vmPolicy.mCallbackExecutor.execute( () -> { // Lift violated policy to prevent infinite recursion. VmPolicy oldPolicy = allowVmViolations(); diff --git a/core/java/android/service/persistentdata/OWNERS b/core/java/android/service/persistentdata/OWNERS new file mode 100644 index 000000000000..6dfb888dedad --- /dev/null +++ b/core/java/android/service/persistentdata/OWNERS @@ -0,0 +1 @@ +include /services/core/java/com/android/server/pdb/OWNERS diff --git a/core/java/com/android/internal/net/TEST_MAPPING b/core/java/com/android/internal/net/TEST_MAPPING index 971ad36eecba..f935946c95c7 100644 --- a/core/java/com/android/internal/net/TEST_MAPPING +++ b/core/java/com/android/internal/net/TEST_MAPPING @@ -1,5 +1,5 @@ { - "postsubmit": [ + "presubmit": [ { "name": "FrameworksNetTests", "options": [ diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 28fd2b488426..bf8e6135fd01 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -897,13 +897,26 @@ public class LockPatternUtils { } /** - * Returns true if {@code userHandle} is a managed profile with separate challenge. + * Returns true if {@code userHandle} is a profile with separate challenge. + * <p> + * Returns false if {@code userHandle} is a profile with unified challenge, a profile whose + * credential is not shareable with its parent, or a non-profile user. */ public boolean isSeparateProfileChallengeEnabled(int userHandle) { return isCredentialSharableWithParent(userHandle) && hasSeparateChallenge(userHandle); } /** + * Returns true if {@code userHandle} is a profile with unified challenge. + * <p> + * Returns false if {@code userHandle} is a profile with separate challenge, a profile whose + * credential is not shareable with its parent, or a non-profile user. + */ + public boolean isProfileWithUnifiedChallenge(int userHandle) { + return isCredentialSharableWithParent(userHandle) && !hasSeparateChallenge(userHandle); + } + + /** * Returns true if {@code userHandle} is a managed profile with unified challenge. */ public boolean isManagedProfileWithUnifiedChallenge(int userHandle) { diff --git a/core/java/com/android/internal/widget/LockscreenCredential.java b/core/java/com/android/internal/widget/LockscreenCredential.java index c88763ce6c97..18d5f6db6ac9 100644 --- a/core/java/com/android/internal/widget/LockscreenCredential.java +++ b/core/java/com/android/internal/widget/LockscreenCredential.java @@ -134,12 +134,12 @@ public class LockscreenCredential implements Parcelable, AutoCloseable { } /** - * Creates a LockscreenCredential object representing a managed password for profile with - * unified challenge. This credentiall will have type {@code CREDENTIAL_TYPE_PASSWORD} for now. - * TODO: consider add a new credential type for this. This can then supersede the - * isLockTiedToParent argument in various places in LSS. + * Creates a LockscreenCredential object representing the system-generated, system-managed + * password for a profile with unified challenge. This credential has type {@code + * CREDENTIAL_TYPE_PASSWORD} for now. TODO: consider add a new credential type for this. This + * can then supersede the isLockTiedToParent argument in various places in LSS. */ - public static LockscreenCredential createManagedPassword(@NonNull byte[] password) { + public static LockscreenCredential createUnifiedProfilePassword(@NonNull byte[] password) { return new LockscreenCredential(CREDENTIAL_TYPE_PASSWORD, Arrays.copyOf(password, password.length), /* hasInvalidChars= */ false); } diff --git a/core/jni/Android.bp b/core/jni/Android.bp index 05117ce5fbff..f5b12db97c54 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -46,8 +46,6 @@ cc_library_shared_for_libandroid_runtime { "-Wno-error=deprecated-declarations", "-Wunused", "-Wunreachable-code", - - "-DNAMESPACE_FOR_HASH_FUNCTIONS=farmhash", ], cppflags: ["-Wno-conversion-null"], @@ -278,8 +276,6 @@ cc_library_shared_for_libandroid_runtime { "libscrypt_static", "libstatssocket_lazy", "libskia", - "libtextclassifier_hash_static", - "libexpresslog_jni", ], shared_libs: [ @@ -366,7 +362,6 @@ cc_library_shared_for_libandroid_runtime { "bionic_libc_platform_headers", "dnsproxyd_protocol_headers", "flatbuffer_headers", - "libtextclassifier_hash_headers", "tensorflow_headers", ], runtime_libs: [ diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index b2131f6fdfad..4e4c7541a32e 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -200,7 +200,6 @@ extern int register_com_android_internal_content_F2fsUtils(JNIEnv* env); extern int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env); extern int register_com_android_internal_content_om_OverlayConfig(JNIEnv *env); extern int register_com_android_internal_content_om_OverlayManagerImpl(JNIEnv* env); -extern int register_com_android_modules_expresslog_Utils(JNIEnv* env); extern int register_com_android_internal_net_NetworkUtilsInternal(JNIEnv* env); extern int register_com_android_internal_os_ClassLoaderFactory(JNIEnv* env); extern int register_com_android_internal_os_FuseAppLoop(JNIEnv* env); @@ -1588,7 +1587,6 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_os_incremental_IncrementalManager), REG_JNI(register_com_android_internal_content_om_OverlayConfig), REG_JNI(register_com_android_internal_content_om_OverlayManagerImpl), - REG_JNI(register_com_android_modules_expresslog_Utils), REG_JNI(register_com_android_internal_net_NetworkUtilsInternal), REG_JNI(register_com_android_internal_os_ClassLoaderFactory), REG_JNI(register_com_android_internal_os_LongArrayMultiStateCounter), diff --git a/core/jni/android_os_HidlSupport.cpp b/core/jni/android_os_HidlSupport.cpp index 3e51e9315d89..e3602d8f5c72 100644 --- a/core/jni/android_os_HidlSupport.cpp +++ b/core/jni/android_os_HidlSupport.cpp @@ -15,7 +15,6 @@ */ #include <hidl/HidlTransportSupport.h> -#include <hidl/ServiceManagement.h> #include <nativehelper/JNIHelp.h> #include "core_jni_helpers.h" @@ -25,13 +24,8 @@ static jint android_os_HidlSupport_getPidIfSharable(JNIEnv*, jclass) { return android::hardware::details::getPidIfSharable(); } -static jboolean android_os_HidlSupport_isHidlSupported(JNIEnv*, jclass) { - return android::hardware::isHidlSupported(); -} - static const JNINativeMethod gHidlSupportMethods[] = { - {"getPidIfSharable", "()I", (void*)android_os_HidlSupport_getPidIfSharable}, - {"isHidlSupported", "()Z", (void*)android_os_HidlSupport_isHidlSupported}, + {"getPidIfSharable", "()I", (void*)android_os_HidlSupport_getPidIfSharable}, }; const char* const kHidlSupportPathName = "android/os/HidlSupport"; diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp index 91dfc6023e42..7af69f2dff08 100644 --- a/core/jni/android_util_Process.cpp +++ b/core/jni/android_util_Process.cpp @@ -282,6 +282,11 @@ void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jin void android_os_Process_setProcessFrozen( JNIEnv *env, jobject clazz, jint pid, jint uid, jboolean freeze) { + if (uid < 0) { + jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "uid is negative: %d", uid); + return; + } + bool success = true; if (freeze) { @@ -305,6 +310,11 @@ jint android_os_Process_getProcessGroup(JNIEnv* env, jobject clazz, jint pid) } jint android_os_Process_createProcessGroup(JNIEnv* env, jobject clazz, jint uid, jint pid) { + if (uid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "uid is negative: %d", uid); + } + return createProcessGroup(uid, pid); } @@ -590,12 +600,21 @@ void android_os_Process_setArgV0(JNIEnv* env, jobject clazz, jstring name) jint android_os_Process_setUid(JNIEnv* env, jobject clazz, jint uid) { + if (uid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "uid is negative: %d", uid); + } + return setuid(uid) == 0 ? 0 : errno; } -jint android_os_Process_setGid(JNIEnv* env, jobject clazz, jint uid) -{ - return setgid(uid) == 0 ? 0 : errno; +jint android_os_Process_setGid(JNIEnv* env, jobject clazz, jint gid) { + if (gid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "gid is negative: %d", gid); + } + + return setgid(gid) == 0 ? 0 : errno; } static int pid_compare(const void* v1, const void* v2) @@ -1235,11 +1254,21 @@ jintArray android_os_Process_getPidsForCommands(JNIEnv* env, jobject clazz, jint android_os_Process_killProcessGroup(JNIEnv* env, jobject clazz, jint uid, jint pid) { + if (uid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "uid is negative: %d", uid); + } + return killProcessGroup(uid, pid, SIGKILL); } -jint android_os_Process_sendSignalToProcessGroup(JNIEnv* env, jobject clazz, jint uid, jint pid, +jboolean android_os_Process_sendSignalToProcessGroup(JNIEnv* env, jobject clazz, jint uid, jint pid, jint signal) { + if (uid < 0) { + return jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", + "uid is negative: %d", uid); + } + return sendSignalToProcessGroup(uid, pid, signal); } @@ -1258,6 +1287,11 @@ static jint android_os_Process_nativePidFdOpen(JNIEnv* env, jobject, jint pid, j } void android_os_Process_freezeCgroupUID(JNIEnv* env, jobject clazz, jint uid, jboolean freeze) { + if (uid < 0) { + jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", "uid is negative: %d", uid); + return; + } + bool success = true; if (freeze) { @@ -1310,7 +1344,7 @@ static const JNINativeMethod methods[] = { //{"setApplicationObject", "(Landroid/os/IBinder;)V", //(void*)android_os_Process_setApplicationObject}, {"killProcessGroup", "(II)I", (void*)android_os_Process_killProcessGroup}, - {"sendSignalToProcessGroup", "(III)I", (void*)android_os_Process_sendSignalToProcessGroup}, + {"sendSignalToProcessGroup", "(III)Z", (void*)android_os_Process_sendSignalToProcessGroup}, {"removeAllProcessGroups", "()V", (void*)android_os_Process_removeAllProcessGroups}, {"nativePidFdOpen", "(II)I", (void*)android_os_Process_nativePidFdOpen}, {"freezeCgroupUid", "(IZ)V", (void*)android_os_Process_freezeCgroupUID}, diff --git a/core/jni/com_android_internal_os_ZygoteCommandBuffer.cpp b/core/jni/com_android_internal_os_ZygoteCommandBuffer.cpp index 2b5b8f7a108e..337736289605 100644 --- a/core/jni/com_android_internal_os_ZygoteCommandBuffer.cpp +++ b/core/jni/com_android_internal_os_ZygoteCommandBuffer.cpp @@ -63,6 +63,7 @@ class NativeCommandBuffer { std::optional<std::pair<char*, char*>> readLine(FailFn fail_fn) { char* result = mBuffer + mNext; while (true) { + // We have scanned up to, but not including mNext for this line's newline. if (mNext == mEnd) { if (mEnd == MAX_COMMAND_BYTES) { return {}; @@ -89,7 +90,7 @@ class NativeCommandBuffer { } else { mNext = nl - mBuffer + 1; if (--mLinesLeft < 0) { - fail_fn("ZygoteCommandBuffer.readLine attempted to read past mEnd of command"); + fail_fn("ZygoteCommandBuffer.readLine attempted to read past end of command"); } return std::make_pair(result, nl); } @@ -125,8 +126,8 @@ class NativeCommandBuffer { mEnd += lineLen + 1; } - // Clear mBuffer, start reading new command, return the number of arguments, leaving mBuffer - // positioned at the beginning of first argument. Return 0 on EOF. + // Start reading new command, return the number of arguments, leaving mBuffer positioned at the + // beginning of first argument. Return 0 on EOF. template<class FailFn> int getCount(FailFn fail_fn) { mLinesLeft = 1; @@ -451,11 +452,14 @@ jboolean com_android_internal_os_ZygoteCommandBuffer_nativeForkRepeatedly( (CREATE_ERROR("Write unexpectedly returned short: %d < 5", res)); } } - // Clear buffer and get count from next command. - n_buffer->clear(); for (;;) { + // Clear buffer and get count from next command. + n_buffer->clear(); // Poll isn't strictly necessary for now. But without it, disconnect is hard to detect. int poll_res = TEMP_FAILURE_RETRY(poll(fd_structs, 2, -1 /* infinite timeout */)); + if (poll_res < 0) { + fail_fn_z(CREATE_ERROR("Poll failed: %d: %s", errno, strerror(errno))); + } if ((fd_structs[SESSION_IDX].revents & POLLIN) != 0) { if (n_buffer->getCount(fail_fn_z) != 0) { break; diff --git a/libs/WindowManager/Shell/OWNERS b/libs/WindowManager/Shell/OWNERS index f0ed6ee5cb67..e346b51a4f19 100644 --- a/libs/WindowManager/Shell/OWNERS +++ b/libs/WindowManager/Shell/OWNERS @@ -1,4 +1,4 @@ xutan@google.com # Give submodule owners in shell resource approval -per-file res*/*/*.xml = atsjenk@google.com, hwwang@google.com, jorgegil@google.com, lbill@google.com, madym@google.com +per-file res*/*/*.xml = atsjenk@google.com, hwwang@google.com, jorgegil@google.com, lbill@google.com, madym@google.com, nmusgrave@google.com, pbdr@google.com, tkachenkoi@google.com diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/OWNERS index deb7c6db338f..1385f42bc676 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/OWNERS +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/OWNERS @@ -1,3 +1,7 @@ # WM shell sub-module desktop owners atsjenk@google.com +jorgegil@google.com madym@google.com +nmusgrave@google.com +pbdr@google.com +tkachenkoi@google.com diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS index a3803ed82844..8a0eea0a9bdd 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/OWNERS @@ -2,3 +2,6 @@ atsjenk@google.com jorgegil@google.com madym@google.com +nmusgrave@google.com +pbdr@google.com +tkachenkoi@google.com diff --git a/libs/WindowManager/Shell/tests/OWNERS b/libs/WindowManager/Shell/tests/OWNERS index deebad545c5e..d718e157afdb 100644 --- a/libs/WindowManager/Shell/tests/OWNERS +++ b/libs/WindowManager/Shell/tests/OWNERS @@ -9,3 +9,6 @@ hwwang@google.com chenghsiuchang@google.com atsjenk@google.com jorgegil@google.com +nmusgrave@google.com +pbdr@google.com +tkachenkoi@google.com diff --git a/media/OWNERS b/media/OWNERS index 4a6648e91af4..994a7b810009 100644 --- a/media/OWNERS +++ b/media/OWNERS @@ -21,7 +21,6 @@ wonsik@google.com include platform/frameworks/av:/media/janitors/media_solutions_OWNERS # SEO -sungsoo@google.com # SEA/KIR/BVE jtinker@google.com diff --git a/media/java/android/media/OWNERS b/media/java/android/media/OWNERS index bbe5e06bb282..058c5be6af6c 100644 --- a/media/java/android/media/OWNERS +++ b/media/java/android/media/OWNERS @@ -2,7 +2,6 @@ fgoldfain@google.com elaurent@google.com lajos@google.com -sungsoo@google.com jmtrivi@google.com # go/android-fwk-media-solutions for info on areas of ownership. diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java index 34787a390d48..145303df7b0b 100644 --- a/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java +++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCapturePerUserService.java @@ -554,6 +554,10 @@ final class ContentCapturePerUserService if (mMaster.debug) Slog.d(mTag, "onActivityEvent(): no remote service"); return; } + if (mRemoteService.getServiceInterface() == null) { + if (mMaster.debug) Slog.d(mTag, "onActivityEvent(): remote service is dead or unbound"); + return; + } final ActivityEvent event = new ActivityEvent(activityId, componentName, type); if (mMaster.verbose) Slog.v(mTag, "onActivityEvent(): " + event); diff --git a/services/core/java/com/android/server/BootReceiver.java b/services/core/java/com/android/server/BootReceiver.java index 926d7a4d3ea6..5cdfca7392e3 100644 --- a/services/core/java/com/android/server/BootReceiver.java +++ b/services/core/java/com/android/server/BootReceiver.java @@ -48,6 +48,8 @@ import com.android.internal.util.XmlUtils; import com.android.modules.utils.TypedXmlPullParser; import com.android.modules.utils.TypedXmlSerializer; import com.android.server.am.DropboxRateLimiter; +import com.android.server.os.TombstoneProtos; +import com.android.server.os.TombstoneProtos.Tombstone; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -60,11 +62,14 @@ import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.attribute.PosixFilePermissions; +import java.util.AbstractMap; import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import java.util.concurrent.locks.ReentrantLock; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * Performs a number of miscellaneous, non-system-critical actions @@ -327,12 +332,12 @@ public class BootReceiver extends BroadcastReceiver { * * @param ctx Context * @param tombstone path to the tombstone - * @param proto whether the tombstone is stored as proto + * @param tombstoneProto the parsed proto tombstone * @param processName the name of the process corresponding to the tombstone * @param tmpFileLock the lock for reading/writing tmp files */ public static void addTombstoneToDropBox( - Context ctx, File tombstone, boolean proto, String processName, + Context ctx, File tombstone, Tombstone tombstoneProto, String processName, ReentrantLock tmpFileLock) { final DropBoxManager db = ctx.getSystemService(DropBoxManager.class); if (db == null) { @@ -342,31 +347,33 @@ public class BootReceiver extends BroadcastReceiver { // Check if we should rate limit and abort early if needed. DropboxRateLimiter.RateLimitResult rateLimitResult = - sDropboxRateLimiter.shouldRateLimit( - proto ? TAG_TOMBSTONE_PROTO_WITH_HEADERS : TAG_TOMBSTONE, processName); + sDropboxRateLimiter.shouldRateLimit(TAG_TOMBSTONE_PROTO_WITH_HEADERS, processName); if (rateLimitResult.shouldRateLimit()) return; HashMap<String, Long> timestamps = readTimestamps(); try { - if (proto) { - if (recordFileTimestamp(tombstone, timestamps)) { - // We need to attach the count indicating the number of dropped dropbox entries - // due to rate limiting. Do this by enclosing the proto tombsstone in a - // container proto that has the dropped entry count and the proto tombstone as - // bytes (to avoid the complexity of reading and writing nested protos). - tmpFileLock.lock(); - try { - addAugmentedProtoToDropbox(tombstone, db, rateLimitResult); - } finally { - tmpFileLock.unlock(); - } + // Remove the memory data from the proto. + Tombstone tombstoneProtoWithoutMemory = removeMemoryFromTombstone(tombstoneProto); + + final byte[] tombstoneBytes = tombstoneProtoWithoutMemory.toByteArray(); + + // Use JNI to call the c++ proto to text converter and add the headers to the tombstone. + String tombstoneWithoutMemory = new StringBuilder(getBootHeadersToLogAndUpdate()) + .append(rateLimitResult.createHeader()) + .append(getTombstoneText(tombstoneBytes)) + .toString(); + + // Add the tombstone without memory data to dropbox. + db.addText(TAG_TOMBSTONE, tombstoneWithoutMemory); + + // Add the tombstone proto to dropbox. + if (recordFileTimestamp(tombstone, timestamps)) { + tmpFileLock.lock(); + try { + addAugmentedProtoToDropbox(tombstone, tombstoneBytes, db, rateLimitResult); + } finally { + tmpFileLock.unlock(); } - } else { - // Add the header indicating how many events have been dropped due to rate limiting. - final String headers = getBootHeadersToLogAndUpdate() - + rateLimitResult.createHeader(); - addFileToDropBox(db, timestamps, headers, tombstone.getPath(), LOG_SIZE, - TAG_TOMBSTONE); } } catch (IOException e) { Slog.e(TAG, "Can't log tombstone", e); @@ -375,11 +382,8 @@ public class BootReceiver extends BroadcastReceiver { } private static void addAugmentedProtoToDropbox( - File tombstone, DropBoxManager db, + File tombstone, byte[] tombstoneBytes, DropBoxManager db, DropboxRateLimiter.RateLimitResult rateLimitResult) throws IOException { - // Read the proto tombstone file as bytes. - final byte[] tombstoneBytes = Files.readAllBytes(tombstone.toPath()); - final File tombstoneProtoWithHeaders = File.createTempFile( tombstone.getName(), ".tmp", TOMBSTONE_TMP_DIR); Files.setPosixFilePermissions( @@ -412,6 +416,8 @@ public class BootReceiver extends BroadcastReceiver { } } + private static native String getTombstoneText(byte[] tombstoneBytes); + private static void addLastkToDropBox( DropBoxManager db, HashMap<String, Long> timestamps, String headers, String footers, String filename, int maxSize, @@ -429,6 +435,31 @@ public class BootReceiver extends BroadcastReceiver { addFileWithFootersToDropBox(db, timestamps, headers, footers, filename, maxSize, tag); } + /** Removes memory information from the Tombstone proto. */ + @VisibleForTesting + public static Tombstone removeMemoryFromTombstone(Tombstone tombstoneProto) { + Tombstone.Builder tombstoneBuilder = tombstoneProto.toBuilder() + .clearMemoryMappings() + .clearThreads() + .putAllThreads(tombstoneProto.getThreadsMap().entrySet() + .stream() + .map(BootReceiver::clearMemoryDump) + .collect(Collectors.toMap(e->e.getKey(), e->e.getValue()))); + + if (tombstoneProto.hasSignalInfo()) { + tombstoneBuilder.setSignalInfo( + tombstoneProto.getSignalInfo().toBuilder().clearFaultAdjacentMetadata()); + } + + return tombstoneBuilder.build(); + } + + private static AbstractMap.SimpleEntry<Integer, TombstoneProtos.Thread> clearMemoryDump( + Map.Entry<Integer, TombstoneProtos.Thread> e) { + return new AbstractMap.SimpleEntry<Integer, TombstoneProtos.Thread>( + e.getKey(), e.getValue().toBuilder().clearMemoryDump().build()); + } + private static void addFileToDropBox( DropBoxManager db, HashMap<String, Long> timestamps, String headers, String filename, int maxSize, String tag) throws IOException { diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 749e792d00ea..b555a52fe720 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -37,7 +37,6 @@ import static android.os.Process.INVALID_UID; import static android.provider.Settings.Secure.VOLUME_HUSH_MUTE; import static android.provider.Settings.Secure.VOLUME_HUSH_OFF; import static android.provider.Settings.Secure.VOLUME_HUSH_VIBRATE; - import static com.android.server.audio.SoundDoseHelper.ACTION_CHECK_MUSIC_ACTIVE; import static com.android.server.utils.EventLogger.Event.ALOGE; import static com.android.server.utils.EventLogger.Event.ALOGI; @@ -73,7 +72,6 @@ import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.content.res.Configuration; import android.content.res.Resources; @@ -263,6 +261,8 @@ public class AudioService extends IAudioService.Stub private final SettingsAdapter mSettings; private final AudioPolicyFacade mAudioPolicy; + private final MusicFxHelper mMusicFxHelper; + /** Debug audio mode */ protected static final boolean DEBUG_MODE = false; @@ -401,10 +401,17 @@ public class AudioService extends IAudioService.Stub private static final int MSG_DISPATCH_PREFERRED_MIXER_ATTRIBUTES = 52; private static final int MSG_LOWER_VOLUME_TO_RS1 = 53; private static final int MSG_CONFIGURATION_CHANGED = 54; + private static final int MSG_BROADCAST_MASTER_MUTE = 55; - /** Messages handled by the {@link SoundDoseHelper}. */ + /** + * Messages handled by the {@link SoundDoseHelper}, do not exceed + * {@link MUSICFX_HELPER_MSG_START}. + */ /*package*/ static final int SAFE_MEDIA_VOLUME_MSG_START = 1000; + /** Messages handled by the {@link MusicFxHelper}. */ + /*package*/ static final int MUSICFX_HELPER_MSG_START = 1100; + // start of messages handled under wakelock // these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(), // and not with sendMsg(..., ..., SENDMSG_QUEUE, ...) @@ -984,6 +991,9 @@ public class AudioService extends IAudioService.Stub @GuardedBy("mSettingsLock") private boolean mRttEnabled = false; + private AtomicBoolean mMasterMute = new AtomicBoolean(false); + + /////////////////////////////////////////////////////////////////////////// // Construction /////////////////////////////////////////////////////////////////////////// @@ -1264,6 +1274,8 @@ public class AudioService extends IAudioService.Stub 0 /* arg1 */, 0 /* arg2 */, null /* obj */, 0 /* delay */); queueMsgUnderWakeLock(mAudioHandler, MSG_INIT_SPATIALIZER, 0 /* arg1 */, 0 /* arg2 */, null /* obj */, 0 /* delay */); + + mMusicFxHelper = new MusicFxHelper(mContext, mAudioHandler); } private void initVolumeStreamStates() { @@ -2748,21 +2760,18 @@ public class AudioService extends IAudioService.Stub } final int currentUser = getCurrentUserId(); + if (mUseFixedVolume) { + AudioSystem.setMasterVolume(1.0f); + } + // Check the current user restriction. boolean masterMute = mUserManagerInternal.getUserRestriction(currentUser, UserManager.DISALLOW_UNMUTE_DEVICE) || mUserManagerInternal.getUserRestriction(currentUser, UserManager.DISALLOW_ADJUST_VOLUME); - if (mUseFixedVolume) { - masterMute = false; - AudioSystem.setMasterVolume(1.0f); - } - if (DEBUG_VOL) { - Log.d(TAG, String.format("Master mute %s, user=%d", masterMute, currentUser)); - } - AudioSystem.setMasterMute(masterMute); - broadcastMasterMuteStatus(masterMute); + setMasterMuteInternalNoCallerCheck( + masterMute, /* flags =*/ 0, currentUser, "readUserRestrictions"); mMicMuteFromRestrictions = mUserManagerInternal.getUserRestriction( currentUser, UserManager.DISALLOW_UNMUTE_MICROPHONE); @@ -4769,16 +4778,10 @@ public class AudioService extends IAudioService.Stub // UI update and Broadcast Intent private void sendMasterMuteUpdate(boolean muted, int flags) { mVolumeController.postMasterMuteChanged(updateFlagsForTvPlatform(flags)); - broadcastMasterMuteStatus(muted); + sendMsg(mAudioHandler, MSG_BROADCAST_MASTER_MUTE, + SENDMSG_QUEUE, muted ? 1 : 0, 0, null, 0); } - private void broadcastMasterMuteStatus(boolean muted) { - Intent intent = new Intent(AudioManager.MASTER_MUTE_CHANGED_ACTION); - intent.putExtra(AudioManager.EXTRA_MASTER_VOLUME_MUTED, muted); - intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT - | Intent.FLAG_RECEIVER_REPLACE_PENDING); - sendStickyBroadcastToAll(intent); - } /** * Sets the stream state's index, and posts a message to set system volume. @@ -4945,18 +4948,21 @@ public class AudioService extends IAudioService.Stub != PackageManager.PERMISSION_GRANTED) { return; } - setMasterMuteInternalNoCallerCheck(mute, flags, userId); + setMasterMuteInternalNoCallerCheck(mute, flags, userId, "setMasterMute"); } - private void setMasterMuteInternalNoCallerCheck(boolean mute, int flags, int userId) { + private void setMasterMuteInternalNoCallerCheck( + boolean mute, int flags, int userId, String eventSource) { if (DEBUG_VOL) { - Log.d(TAG, String.format("Master mute %s, %d, user=%d", mute, flags, userId)); + Log.d(TAG, TextUtils.formatSimple("Master mute %s, flags 0x%x, userId=%d from %s", + mute, flags, userId, eventSource)); } + if (!isPlatformAutomotive() && mUseFixedVolume) { // If using fixed volume, we don't mute. // TODO: remove the isPlatformAutomotive check here. // The isPlatformAutomotive check is added for safety but may not be necessary. - return; + mute = false; } // For automotive, // - the car service is always running as system user @@ -4965,8 +4971,10 @@ public class AudioService extends IAudioService.Stub // Therefore, the getCurrentUser() is always different to the foreground user. if ((isPlatformAutomotive() && userId == UserHandle.USER_SYSTEM) || (getCurrentUserId() == userId)) { - if (mute != AudioSystem.getMasterMute()) { - AudioSystem.setMasterMute(mute); + if (mute != mMasterMute.getAndSet(mute)) { + sVolumeLogger.enqueue(new VolumeEvent( + VolumeEvent.VOL_MASTER_MUTE, mute)); + mAudioSystem.setMasterMute(mute); sendMasterMuteUpdate(mute, flags); } } @@ -4974,7 +4982,7 @@ public class AudioService extends IAudioService.Stub /** get global mute state. */ public boolean isMasterMute() { - return AudioSystem.getMasterMute(); + return mMasterMute.get(); } @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) @@ -9301,6 +9309,10 @@ public class AudioService extends IAudioService.Stub mSystemServer.sendMicrophoneMuteChangedIntent(); break; + case MSG_BROADCAST_MASTER_MUTE: + mSystemServer.broadcastMasterMuteStatus(msg.arg1 == 1); + break; + case MSG_CHECK_MODE_FOR_UID: synchronized (mDeviceBroker.mSetModeLock) { if (msg.obj == null) { @@ -9405,11 +9417,21 @@ public class AudioService extends IAudioService.Stub onConfigurationChanged(); break; + case MusicFxHelper.MSG_EFFECT_CLIENT_GONE: + mMusicFxHelper.handleMessage(msg); + break; + + case SoundDoseHelper.MSG_CONFIGURE_SAFE_MEDIA: + case SoundDoseHelper.MSG_CONFIGURE_SAFE_MEDIA_FORCED: + case SoundDoseHelper.MSG_PERSIST_SAFE_VOLUME_STATE: + case SoundDoseHelper.MSG_PERSIST_MUSIC_ACTIVE_MS: + case SoundDoseHelper.MSG_PERSIST_CSD_VALUES: + case SoundDoseHelper.MSG_CSD_UPDATE_ATTENUATION: + mSoundDoseHelper.handleMessage(msg); + break; + default: - if (msg.what >= SAFE_MEDIA_VOLUME_MSG_START) { - // msg could be for the SoundDoseHelper - mSoundDoseHelper.handleMessage(msg); - } + Log.e(TAG, "Unsupported msgId " + msg.what); } } } @@ -9644,7 +9666,7 @@ public class AudioService extends IAudioService.Stub } } else if (action.equals(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION) || action.equals(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION)) { - handleAudioEffectBroadcast(context, intent); + mMusicFxHelper.handleAudioEffectBroadcast(context, intent); } else if (action.equals(Intent.ACTION_PACKAGES_SUSPENDED)) { final int[] suspendedUids = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST); final String[] suspendedPackages = @@ -9692,33 +9714,13 @@ public class AudioService extends IAudioService.Stub newRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME) || newRestrictions.getBoolean(UserManager.DISALLOW_UNMUTE_DEVICE); if (wasRestricted != isRestricted) { - setMasterMuteInternalNoCallerCheck(isRestricted, /* flags =*/ 0, userId); + setMasterMuteInternalNoCallerCheck( + isRestricted, /* flags =*/ 0, userId, "onUserRestrictionsChanged"); } } } } // end class AudioServiceUserRestrictionsListener - private void handleAudioEffectBroadcast(Context context, Intent intent) { - String target = intent.getPackage(); - if (target != null) { - Log.w(TAG, "effect broadcast already targeted to " + target); - return; - } - intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); - // TODO this should target a user-selected panel - List<ResolveInfo> ril = context.getPackageManager().queryBroadcastReceivers( - intent, 0 /* flags */); - if (ril != null && ril.size() != 0) { - ResolveInfo ri = ril.get(0); - if (ri != null && ri.activityInfo != null && ri.activityInfo.packageName != null) { - intent.setPackage(ri.activityInfo.packageName); - context.sendBroadcastAsUser(intent, UserHandle.ALL); - return; - } - } - Log.w(TAG, "couldn't find receiver package for effect intent"); - } - private void killBackgroundUserProcessesWithRecordAudioPermission(UserInfo oldUser) { PackageManager pm = mContext.getPackageManager(); // Find the home activity of the user. It should not be killed to avoid expensive restart, @@ -11122,10 +11124,11 @@ public class AudioService extends IAudioService.Stub pw.print(" mHdmiCecVolumeControlEnabled="); pw.println(mHdmiCecVolumeControlEnabled); } pw.print(" mIsCallScreeningModeSupported="); pw.println(mIsCallScreeningModeSupported); - pw.print(" mic mute FromSwitch=" + mMicMuteFromSwitch + pw.println(" mic mute FromSwitch=" + mMicMuteFromSwitch + " FromRestrictions=" + mMicMuteFromRestrictions + " FromApi=" + mMicMuteFromApi + " from system=" + mMicMuteFromSystemCached); + pw.print(" mMasterMute="); pw.println(mMasterMute.get()); dumpAccessibilityServiceUids(pw); dumpAssistantServicesUids(pw); @@ -13172,6 +13175,11 @@ public class AudioService extends IAudioService.Stub return mDeviceBroker.getDeviceSensorUuid(device); } + @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) + MusicFxHelper getMusicFxHelper() { + return mMusicFxHelper; + } + //====================== // misc //====================== diff --git a/services/core/java/com/android/server/audio/AudioServiceEvents.java b/services/core/java/com/android/server/audio/AudioServiceEvents.java index 6ebb42e08ade..aac868f45fe3 100644 --- a/services/core/java/com/android/server/audio/AudioServiceEvents.java +++ b/services/core/java/com/android/server/audio/AudioServiceEvents.java @@ -228,6 +228,7 @@ public class AudioServiceEvents { static final int VOL_MUTE_STREAM_INT = 9; static final int VOL_SET_LE_AUDIO_VOL = 10; static final int VOL_ADJUST_GROUP_VOL = 11; + static final int VOL_MASTER_MUTE = 12; final int mOp; final int mStream; @@ -321,6 +322,17 @@ public class AudioServiceEvents { logMetricEvent(); } + /** used for VOL_MASTER_MUTE */ + VolumeEvent(int op, boolean state) { + mOp = op; + mStream = -1; + mVal1 = state ? 1 : 0; + mVal2 = 0; + mCaller = null; + mGroupName = null; + logMetricEvent(); + } + /** * Audio Analytics unique Id. @@ -429,6 +441,9 @@ public class AudioServiceEvents { case VOL_MUTE_STREAM_INT: // No value in logging metrics for this internal event return; + case VOL_MASTER_MUTE: + // No value in logging metrics for this internal event + return; default: return; } @@ -510,6 +525,10 @@ public class AudioServiceEvents { .append(AudioSystem.streamToString(mStream)) .append(mVal1 == 1 ? ", muted)" : ", unmuted)") .toString(); + case VOL_MASTER_MUTE: + return new StringBuilder("Master mute:") + .append(mVal1 == 1 ? " muted)" : " unmuted)") + .toString(); default: return new StringBuilder("FIXME invalid op:").append(mOp).toString(); } } diff --git a/services/core/java/com/android/server/audio/AudioSystemAdapter.java b/services/core/java/com/android/server/audio/AudioSystemAdapter.java index 43438942a060..e70b6497538e 100644 --- a/services/core/java/com/android/server/audio/AudioSystemAdapter.java +++ b/services/core/java/com/android/server/audio/AudioSystemAdapter.java @@ -685,6 +685,15 @@ public class AudioSystemAdapter implements AudioSystem.RoutingUpdateCallback, } /** + * Sets master mute state in audio flinger + * @param mute the mute state to set + * @return operation status + */ + public int setMasterMute(boolean mute) { + return AudioSystem.setMasterMute(mute); + } + + /** * Part of AudioService dump * @param pw */ diff --git a/services/core/java/com/android/server/audio/MusicFxHelper.java b/services/core/java/com/android/server/audio/MusicFxHelper.java new file mode 100644 index 000000000000..85b3b49ecf78 --- /dev/null +++ b/services/core/java/com/android/server/audio/MusicFxHelper.java @@ -0,0 +1,410 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.audio; + +import static android.content.pm.PackageManager.MATCH_ANY_USER; + +import static com.android.server.audio.AudioService.MUSICFX_HELPER_MSG_START; + +import android.annotation.NonNull; +import android.annotation.RequiresPermission; +import android.app.ActivityManager; +import android.app.IUidObserver; +import android.app.UidObserver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.pm.UserInfo; +import android.media.AudioManager; +import android.media.audiofx.AudioEffect; +import android.os.Binder; +import android.os.IBinder; +import android.os.Message; +import android.os.RemoteException; +import android.os.UserHandle; +import android.util.Log; +import android.util.SparseArray; + +import com.android.internal.annotations.GuardedBy; +import com.android.server.audio.AudioService.AudioHandler; + +import java.util.ArrayList; +import java.util.List; + +/** + * MusicFx management. + */ +public class MusicFxHelper { + private static final String TAG = "AS.MusicFxHelper"; + + @NonNull private final Context mContext; + + @NonNull private final AudioHandler mAudioHandler; + + // Synchronization UidSessionMap access between UidObserver and AudioServiceBroadcastReceiver. + private final Object mClientUidMapLock = new Object(); + + private final String mPackageName = this.getClass().getPackage().getName(); + + private final String mMusicFxPackageName = "com.android.musicfx"; + + /*package*/ static final int MSG_EFFECT_CLIENT_GONE = MUSICFX_HELPER_MSG_START + 1; + + // The binder token identifying the UidObserver registration. + private IBinder mUidObserverToken = null; + + // Package name and list of open audio sessions for this package + private static class PackageSessions { + String mPackageName; + List<Integer> mSessions; + } + + /* + * Override of SparseArray class to add bind/unbind and UID observer in the put/remove methods. + * + * put: + * - the first key/value set put into MySparseArray will trigger a procState bump (bindService) + * - if no valid observer token exist, will call registerUidObserver for put + * - for each new uid put into array, it will be added to uid observer list + * + * remove: + * - for each uid removed from array, it will be removed from uid observer list as well + * - if it's the last uid in array, no more MusicFx procState bump (unbindService), uid + * observer will also be removed, and observer token reset to null + */ + private class MySparseArray extends SparseArray<PackageSessions> { + private final String mMusicFxPackageName = "com.android.musicfx"; + + @RequiresPermission(anyOf = { + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, + android.Manifest.permission.INTERACT_ACROSS_USERS, + android.Manifest.permission.INTERACT_ACROSS_PROFILES + }) + @Override + public void put(int uid, PackageSessions pkgSessions) { + if (size() == 0) { + int procState = ActivityManager.PROCESS_STATE_NONEXISTENT; + try { + procState = ActivityManager.getService().getPackageProcessState( + mMusicFxPackageName, mPackageName); + } catch (RemoteException e) { + Log.e(TAG, "RemoteException with getPackageProcessState: " + e); + } + if (procState > ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { + Intent bindIntent = new Intent().setClassName(mMusicFxPackageName, + "com.android.musicfx.KeepAliveService"); + mContext.bindServiceAsUser( + bindIntent, mMusicFxBindConnection, Context.BIND_AUTO_CREATE, + UserHandle.of(getCurrentUserId())); + Log.i(TAG, "bindService to " + mMusicFxPackageName); + } + + Log.i(TAG, mMusicFxPackageName + " procState " + procState); + } + try { + if (mUidObserverToken == null) { + mUidObserverToken = ActivityManager.getService().registerUidObserverForUids( + mEffectUidObserver, ActivityManager.UID_OBSERVER_GONE, + ActivityManager.PROCESS_STATE_UNKNOWN, mPackageName, + new int[]{uid}); + Log.i(TAG, "registered to observer with UID " + uid); + } else if (get(uid) == null) { // addUidToObserver if this is a new UID + ActivityManager.getService().addUidToObserver(mUidObserverToken, mPackageName, + uid); + Log.i(TAG, " UID " + uid + " add to observer"); + } + } catch (RemoteException e) { + Log.e(TAG, "RemoteException with UID observer add/register: " + e); + } + + super.put(uid, pkgSessions); + } + + @Override + public void remove(int uid) { + if (get(uid) != null) { + try { + ActivityManager.getService().removeUidFromObserver(mUidObserverToken, + mPackageName, uid); + } catch (RemoteException e) { + Log.e(TAG, "RemoteException with removeUidFromObserver: " + e); + } + } + + super.remove(uid); + + // stop foreground service delegate and unregister UID observers with the last UID + if (size() == 0) { + try { + ActivityManager.getService().unregisterUidObserver(mEffectUidObserver); + } catch (RemoteException e) { + Log.e(TAG, "RemoteException with unregisterUidObserver: " + e); + } + mUidObserverToken = null; + mContext.unbindService(mMusicFxBindConnection); + Log.i(TAG, "last session closed, unregister UID observer, and unbind " + + mMusicFxPackageName); + } + } + } + + // Hashmap of UID and list of open sessions for this UID. + @GuardedBy("mClientUidMapLock") + private MySparseArray mClientUidSessionMap = new MySparseArray(); + + // UID observer for effect MusicFx clients + private final IUidObserver mEffectUidObserver = new UidObserver() { + @Override public void onUidGone(int uid, boolean disabled) { + Log.w(TAG, " send MSG_EFFECT_CLIENT_GONE"); + mAudioHandler.sendMessageAtTime( + mAudioHandler.obtainMessage(MSG_EFFECT_CLIENT_GONE, + uid /* arg1 */, 0 /* arg2 */, + null /* obj */), 0 /* delay */); + } + }; + + // BindService connection implementation, we don't need any implementation now + private ServiceConnection mMusicFxBindConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + Log.d(TAG, " service connected to " + name); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + Log.d(TAG, " service disconnected from " + name); + } + }; + + MusicFxHelper(@NonNull Context context, @NonNull AudioHandler audioHandler) { + mContext = context; + mAudioHandler = audioHandler; + } + + /** + * Handle the broadcast {@link #ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION} and + * {@link #ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION} intents. + * + * Only intents without target application package {@link android.content.Intent#getPackage} + * will be handled by the MusicFxHelper, all intents handled and forwarded by MusicFxHelper + * will have the target application package. + * + * If the intent is {@link #ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION}: + * - If the MusicFx process is not running, call bindServiceAsUser with AUTO_CREATE to create. + * - If this is the first audio session of MusicFx, call set foreground service delegate. + * - If this is the first audio session for a given UID, add the UID into observer. + * + * If the intent is {@link #ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION} + * - The KeepAliveService of MusicFx will be unbound, and MusicFx will not be foreground + * delegated anymore if the last session of the last package was closed. + * - The Uid Observer will be removed when the last session of a package was closed. + */ + @RequiresPermission(allOf = {android.Manifest.permission.INTERACT_ACROSS_USERS}) + public void handleAudioEffectBroadcast(Context context, Intent intent) { + String target = intent.getPackage(); + if (target != null) { + Log.w(TAG, "effect broadcast already targeted to " + target); + return; + } + final PackageManager pm = context.getPackageManager(); + // TODO this should target a user-selected panel + List<ResolveInfo> ril = pm.queryBroadcastReceivers(intent, 0 /* flags */); + if (ril != null && ril.size() != 0) { + ResolveInfo ri = ril.get(0); + final String senderPackageName = intent.getStringExtra(AudioEffect.EXTRA_PACKAGE_NAME); + try { + if (ri != null && ri.activityInfo != null && ri.activityInfo.packageName != null) { + final int senderUid = pm.getPackageUidAsUser(senderPackageName, + PackageManager.PackageInfoFlags.of(MATCH_ANY_USER), getCurrentUserId()); + intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); + intent.setPackage(ri.activityInfo.packageName); + if (setMusicFxServiceWithObserver(intent, senderUid, senderPackageName)) { + context.sendBroadcastAsUser(intent, UserHandle.ALL); + } + return; + } + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Not able to find UID from package: " + senderPackageName + " error: " + + e); + } + } + Log.w(TAG, "couldn't find receiver package for effect intent"); + } + + @RequiresPermission(anyOf = { + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, + android.Manifest.permission.INTERACT_ACROSS_USERS, + android.Manifest.permission.INTERACT_ACROSS_PROFILES + }) + @GuardedBy("mClientUidMapLock") + private boolean handleAudioEffectSessionOpen( + int senderUid, String senderPackageName, int sessionId) { + Log.d(TAG, senderPackageName + " UID " + senderUid + " open MusicFx session " + sessionId); + + PackageSessions pkgSessions = mClientUidSessionMap.get(Integer.valueOf(senderUid)); + if (pkgSessions != null && pkgSessions.mSessions != null) { + if (pkgSessions.mSessions.contains(sessionId)) { + Log.e(TAG, "Audio session " + sessionId + " already open for UID: " + + senderUid + ", package: " + senderPackageName + ", abort"); + return false; + } + if (pkgSessions.mPackageName != senderPackageName) { + Log.w(TAG, "Inconsistency package names for UID open: " + senderUid + " prev: " + + pkgSessions.mPackageName + ", now: " + senderPackageName); + return false; + } + } else { + // first session for this UID, create a new Package/Sessions pair + pkgSessions = new PackageSessions(); + pkgSessions.mSessions = new ArrayList(); + pkgSessions.mPackageName = senderPackageName; + } + + pkgSessions.mSessions.add(Integer.valueOf(sessionId)); + mClientUidSessionMap.put(Integer.valueOf(senderUid), pkgSessions); + return true; + } + + @RequiresPermission(anyOf = { + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, + android.Manifest.permission.INTERACT_ACROSS_USERS, + android.Manifest.permission.INTERACT_ACROSS_PROFILES + }) + @GuardedBy("mClientUidMapLock") + private boolean handleAudioEffectSessionClose( + int senderUid, String senderPackageName, int sessionId) { + Log.d(TAG, senderPackageName + " UID " + senderUid + " close MusicFx session " + sessionId); + + PackageSessions pkgSessions = mClientUidSessionMap.get(Integer.valueOf(senderUid)); + if (pkgSessions == null) { + Log.e(TAG, senderPackageName + " UID " + senderUid + " does not exist in map, abort"); + return false; + } + if (pkgSessions.mPackageName != senderPackageName) { + Log.w(TAG, "Inconsistency package names for UID " + senderUid + " close, prev: " + + pkgSessions.mPackageName + ", now: " + senderPackageName); + return false; + } + + if (pkgSessions.mSessions != null && pkgSessions.mSessions.size() != 0) { + if (!pkgSessions.mSessions.contains(sessionId)) { + Log.e(TAG, senderPackageName + " UID " + senderUid + " session " + sessionId + + " does not exist in map, abort"); + return false; + } + + pkgSessions.mSessions.remove(Integer.valueOf(sessionId)); + } + + if (pkgSessions.mSessions == null || pkgSessions.mSessions.size() == 0) { + // remove UID from map as well as the UID observer with the last session close + mClientUidSessionMap.remove(Integer.valueOf(senderUid)); + } else { + mClientUidSessionMap.put(Integer.valueOf(senderUid), pkgSessions); + } + + return true; + } + + /** + * @return true if the intent is validated and handled successfully, false with any error + * (invalid sender/intent for example). + */ + @RequiresPermission(anyOf = { + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, + android.Manifest.permission.INTERACT_ACROSS_USERS, + android.Manifest.permission.INTERACT_ACROSS_PROFILES + }) + private boolean setMusicFxServiceWithObserver( + Intent intent, int senderUid, String packageName) { + final int session = intent.getIntExtra(AudioEffect.EXTRA_AUDIO_SESSION, + AudioManager.AUDIO_SESSION_ID_GENERATE); + if (AudioManager.AUDIO_SESSION_ID_GENERATE == session) { + Log.e(TAG, packageName + " intent have no invalid audio session"); + return false; + } + + synchronized (mClientUidMapLock) { + if (intent.getAction().equals(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION)) { + return handleAudioEffectSessionOpen(senderUid, packageName, session); + } else { + return handleAudioEffectSessionClose(senderUid, packageName, session); + } + } + } + + private int getCurrentUserId() { + final long ident = Binder.clearCallingIdentity(); + try { + UserInfo currentUser = ActivityManager.getService().getCurrentUser(); + return currentUser.id; + } catch (RemoteException e) { + // Activity manager not running, nothing we can do assume user 0. + } finally { + Binder.restoreCallingIdentity(ident); + } + return UserHandle.USER_SYSTEM; + } + + + /** + * Handle the UidObserver onUidGone callback of MusicFx clients. + * Send close intent for all open audio sessions of this UID. The mClientUidSessionMap will be + * updated with the handling of close intent in setMusicFxServiceWithObserver. + */ + @RequiresPermission(allOf = {android.Manifest.permission.INTERACT_ACROSS_USERS}) + private void handleEffectClientUidGone(int uid) { + synchronized (mClientUidMapLock) { + Log.d(TAG, "handle MSG_EFFECT_CLIENT_GONE uid: " + uid + " mapSize: " + + mClientUidSessionMap.size()); + // Once the uid is no longer running, close all remain audio session(s) for this UID + final PackageSessions pkgSessions = mClientUidSessionMap.get(Integer.valueOf(uid)); + if (pkgSessions != null) { + Log.i(TAG, "UID " + uid + " gone, closing all sessions"); + + // send close intent for each open session of the gone UID + for (Integer sessionId : pkgSessions.mSessions) { + Intent closeIntent = + new Intent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION); + closeIntent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, pkgSessions.mPackageName); + closeIntent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, sessionId); + closeIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); + // set broadcast target + closeIntent.setPackage(mMusicFxPackageName); + mContext.sendBroadcastAsUser(closeIntent, UserHandle.ALL); + } + mClientUidSessionMap.remove(Integer.valueOf(uid)); + } + } + } + + @RequiresPermission(allOf = {android.Manifest.permission.INTERACT_ACROSS_USERS}) + /*package*/ void handleMessage(Message msg) { + switch (msg.what) { + case MSG_EFFECT_CLIENT_GONE: + Log.w(TAG, " handle MSG_EFFECT_CLIENT_GONE"); + handleEffectClientUidGone(msg.arg1 /* uid */); + break; + default: + Log.e(TAG, "Unexpected msg to handle in MusicFxHelper: " + msg.what); + break; + } + } +} diff --git a/services/core/java/com/android/server/audio/SoundDoseHelper.java b/services/core/java/com/android/server/audio/SoundDoseHelper.java index 81365bfbf2a6..6c5f3e74b0d2 100644 --- a/services/core/java/com/android/server/audio/SoundDoseHelper.java +++ b/services/core/java/com/android/server/audio/SoundDoseHelper.java @@ -108,11 +108,11 @@ public class SoundDoseHelper { private static final int SAFE_MEDIA_VOLUME_INACTIVE = 2; // confirmed private static final int SAFE_MEDIA_VOLUME_ACTIVE = 3; // unconfirmed - private static final int MSG_CONFIGURE_SAFE_MEDIA = SAFE_MEDIA_VOLUME_MSG_START + 1; - private static final int MSG_CONFIGURE_SAFE_MEDIA_FORCED = SAFE_MEDIA_VOLUME_MSG_START + 2; - private static final int MSG_PERSIST_SAFE_VOLUME_STATE = SAFE_MEDIA_VOLUME_MSG_START + 3; - private static final int MSG_PERSIST_MUSIC_ACTIVE_MS = SAFE_MEDIA_VOLUME_MSG_START + 4; - private static final int MSG_PERSIST_CSD_VALUES = SAFE_MEDIA_VOLUME_MSG_START + 5; + /*package*/ static final int MSG_CONFIGURE_SAFE_MEDIA = SAFE_MEDIA_VOLUME_MSG_START + 1; + /*package*/ static final int MSG_CONFIGURE_SAFE_MEDIA_FORCED = SAFE_MEDIA_VOLUME_MSG_START + 2; + /*package*/ static final int MSG_PERSIST_SAFE_VOLUME_STATE = SAFE_MEDIA_VOLUME_MSG_START + 3; + /*package*/ static final int MSG_PERSIST_MUSIC_ACTIVE_MS = SAFE_MEDIA_VOLUME_MSG_START + 4; + /*package*/ static final int MSG_PERSIST_CSD_VALUES = SAFE_MEDIA_VOLUME_MSG_START + 5; /*package*/ static final int MSG_CSD_UPDATE_ATTENUATION = SAFE_MEDIA_VOLUME_MSG_START + 6; private static final int UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX = (20 * 3600 * 1000); // 20 hours diff --git a/services/core/java/com/android/server/audio/SystemServerAdapter.java b/services/core/java/com/android/server/audio/SystemServerAdapter.java index 22456bcf3f66..dfcd2e9a8a39 100644 --- a/services/core/java/com/android/server/audio/SystemServerAdapter.java +++ b/services/core/java/com/android/server/audio/SystemServerAdapter.java @@ -145,4 +145,18 @@ public class SystemServerAdapter { ActivityManager.broadcastStickyIntent(intent, profileId); } } + + /*package*/ void broadcastMasterMuteStatus(boolean muted) { + Intent intent = new Intent(AudioManager.MASTER_MUTE_CHANGED_ACTION); + intent.putExtra(AudioManager.EXTRA_MASTER_VOLUME_MUTED, muted); + intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT + | Intent.FLAG_RECEIVER_REPLACE_PENDING + | Intent.FLAG_RECEIVER_FOREGROUND); + final long ident = Binder.clearCallingIdentity(); + try { + mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL); + } finally { + Binder.restoreCallingIdentity(ident); + } + } } diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java index 6a36fbe06884..87778a1368bc 100644 --- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java +++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java @@ -574,8 +574,8 @@ public class AutomaticBrightnessController { pw.println(" mCurrentLightSensorRate=" + mCurrentLightSensorRate); pw.println(" mAmbientLux=" + mAmbientLux); pw.println(" mAmbientLuxValid=" + mAmbientLuxValid); - pw.println(" mPreThesholdLux=" + mPreThresholdLux); - pw.println(" mPreThesholdBrightness=" + mPreThresholdBrightness); + pw.println(" mPreThresholdLux=" + mPreThresholdLux); + pw.println(" mPreThresholdBrightness=" + mPreThresholdBrightness); pw.println(" mAmbientBrighteningThreshold=" + mAmbientBrighteningThreshold); pw.println(" mAmbientDarkeningThreshold=" + mAmbientDarkeningThreshold); pw.println(" mScreenBrighteningThreshold=" + mScreenBrighteningThreshold); diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java index c3049dbcd980..0c2eee5aebbe 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsService.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java @@ -209,7 +209,7 @@ import javax.crypto.spec.GCMParameterSpec; * <li>Protect each user's data using their SP. For example, use the SP to encrypt/decrypt the * user's credential-encrypted (CE) key for file-based encryption (FBE).</li> * - * <li>Generate, protect, and use profile passwords for managed profiles.</li> + * <li>Generate, protect, and use unified profile passwords.</li> * * <li>Support unlocking the SP by alternative means: resume-on-reboot (reboot escrow) for easier * OTA updates, and escrow tokens when set up by the Device Policy Controller (DPC).</li> @@ -287,7 +287,7 @@ public class LockSettingsService extends ILockSettings.Stub { private final java.security.KeyStore mJavaKeyStore; private final RecoverableKeyStoreManager mRecoverableKeyStoreManager; - private ManagedProfilePasswordCache mManagedProfilePasswordCache; + private final UnifiedProfilePasswordCache mUnifiedProfilePasswordCache; private final RebootEscrowManager mRebootEscrowManager; @@ -352,7 +352,6 @@ public class LockSettingsService extends ILockSettings.Stub { mLockSettingsService.deleteRepairModePersistentDataIfNeeded(); } else if (phase == PHASE_BOOT_COMPLETED) { mLockSettingsService.loadEscrowData(); - mLockSettingsService.deleteRepairModePersistentDataIfNeeded(); } } @@ -405,7 +404,8 @@ public class LockSettingsService extends ILockSettings.Stub { for (int i = 0; i < newPasswordChars.length; i++) { newPassword[i] = (byte) newPasswordChars[i]; } - LockscreenCredential credential = LockscreenCredential.createManagedPassword(newPassword); + LockscreenCredential credential = + LockscreenCredential.createUnifiedProfilePassword(newPassword); Arrays.fill(newPasswordChars, '\u0000'); Arrays.fill(newPassword, (byte) 0); Arrays.fill(randomLockSeed, (byte) 0); @@ -425,7 +425,7 @@ public class LockSettingsService extends ILockSettings.Stub { if (!isCredentialSharableWithParent(profileUserId)) { return; } - // Do not tie profile when work challenge is enabled + // Do not tie profile when separate challenge is enabled if (getSeparateProfileChallengeEnabledInternal(profileUserId)) { return; } @@ -433,11 +433,14 @@ public class LockSettingsService extends ILockSettings.Stub { if (mStorage.hasChildProfileLock(profileUserId)) { return; } + final UserInfo parent = mUserManager.getProfileParent(profileUserId); + if (parent == null) { + return; + } // If parent does not have a screen lock, simply clear credential from the profile, // to maintain the invariant that unified profile should always have the same secure state // as its parent. - final int parentId = mUserManager.getProfileParent(profileUserId).id; - if (!isUserSecure(parentId) && !profileUserPassword.isNone()) { + if (!isUserSecure(parent.id) && !profileUserPassword.isNone()) { Slogf.i(TAG, "Clearing password for profile user %d to match parent", profileUserId); setLockCredentialInternal(LockscreenCredential.createNone(), profileUserPassword, profileUserId, /* isLockTiedToParent= */ true); @@ -448,7 +451,7 @@ public class LockSettingsService extends ILockSettings.Stub { // This can only happen during an upgrade path where SID is yet to be // generated when the user unlocks for the first time. try { - parentSid = getGateKeeperService().getSecureUserId(parentId); + parentSid = getGateKeeperService().getSecureUserId(parent.id); if (parentSid == 0) { return; } @@ -459,8 +462,8 @@ public class LockSettingsService extends ILockSettings.Stub { try (LockscreenCredential unifiedProfilePassword = generateRandomProfilePassword()) { setLockCredentialInternal(unifiedProfilePassword, profileUserPassword, profileUserId, /* isLockTiedToParent= */ true); - tieProfileLockToParent(profileUserId, parentId, unifiedProfilePassword); - mManagedProfilePasswordCache.storePassword(profileUserId, unifiedProfilePassword, + tieProfileLockToParent(profileUserId, parent.id, unifiedProfilePassword); + mUnifiedProfilePasswordCache.storePassword(profileUserId, unifiedProfilePassword, parentSid); } } @@ -618,9 +621,9 @@ public class LockSettingsService extends ILockSettings.Stub { } } - public @NonNull ManagedProfilePasswordCache getManagedProfilePasswordCache( + public @NonNull UnifiedProfilePasswordCache getUnifiedProfilePasswordCache( java.security.KeyStore ks) { - return new ManagedProfilePasswordCache(ks); + return new UnifiedProfilePasswordCache(ks); } public boolean isHeadlessSystemUserMode() { @@ -663,7 +666,7 @@ public class LockSettingsService extends ILockSettings.Stub { mGatekeeperPasswords = new LongSparseArray<>(); mSpManager = injector.getSyntheticPasswordManager(mStorage); - mManagedProfilePasswordCache = injector.getManagedProfilePasswordCache(mJavaKeyStore); + mUnifiedProfilePasswordCache = injector.getUnifiedProfilePasswordCache(mJavaKeyStore); mBiometricDeferredQueue = new BiometricDeferredQueue(mSpManager, mHandler); mRebootEscrowManager = injector.getRebootEscrowManager(new RebootEscrowCallbacks(), @@ -687,8 +690,8 @@ public class LockSettingsService extends ILockSettings.Stub { } /** - * If the account is credential-encrypted, show notification requesting the user to unlock the - * device. + * If the user is a managed profile whose credential-encrypted storage is locked, show a + * notification requesting the user to unlock the device. */ private void maybeShowEncryptionNotificationForUser(@UserIdInt int userId, String reason) { final UserInfo user = mUserManager.getUserInfo(userId); @@ -844,7 +847,7 @@ public class LockSettingsService extends ILockSettings.Stub { mHandler.post(new Runnable() { @Override public void run() { - // Hide notification first, as tie managed profile lock takes time + // Hide notification first, as tie profile lock takes time hideEncryptionNotification(new UserHandle(userId)); if (isCredentialSharableWithParent(userId)) { @@ -1456,13 +1459,13 @@ public class LockSettingsService extends ILockSettings.Stub { cipher.init(Cipher.DECRYPT_MODE, decryptionKey, new GCMParameterSpec(128, iv)); decryptionResult = cipher.doFinal(encryptedPassword); - LockscreenCredential credential = LockscreenCredential.createManagedPassword( + LockscreenCredential credential = LockscreenCredential.createUnifiedProfilePassword( decryptionResult); Arrays.fill(decryptionResult, (byte) 0); try { long parentSid = getGateKeeperService().getSecureUserId( mUserManager.getProfileParent(userId).id); - mManagedProfilePasswordCache.storePassword(userId, credential, parentSid); + mUnifiedProfilePasswordCache.storePassword(userId, credential, parentSid); } catch (RemoteException e) { Slogf.w(TAG, "Failed to talk to GateKeeper service", e); } @@ -1548,7 +1551,7 @@ public class LockSettingsService extends ILockSettings.Stub { // so it goes into the cache getDecryptedPasswordForTiedProfile(profile.id); } catch (GeneralSecurityException | IOException e) { - Slog.d(TAG, "Cache work profile password failed", e); + Slog.d(TAG, "Cache unified profile password failed", e); } } } @@ -1602,19 +1605,19 @@ public class LockSettingsService extends ILockSettings.Stub { } /** - * Synchronize all profile's work challenge of the given user if it's unified: tie or clear them + * Synchronize all profile's challenge of the given user if it's unified: tie or clear them * depending on the parent user's secure state. * - * When clearing tied work challenges, a pre-computed password table for profiles are required, - * since changing password for profiles requires existing password, and existing passwords can - * only be computed before the parent user's password is cleared. + * When clearing tied challenges, a pre-computed password table for profiles are required, since + * changing password for profiles requires existing password, and existing passwords can only be + * computed before the parent user's password is cleared. * * Strictly this is a recursive function, since setLockCredentialInternal ends up calling this * method again on profiles. However the recursion is guaranteed to terminate as this method * terminates when the user is a profile that shares lock credentials with parent. * (e.g. managed and clone profile). */ - private void synchronizeUnifiedWorkChallengeForProfiles(int userId, + private void synchronizeUnifiedChallengeForProfiles(int userId, Map<Integer, LockscreenCredential> profilePasswordMap) { if (isCredentialSharableWithParent(userId)) { return; @@ -1633,7 +1636,7 @@ public class LockSettingsService extends ILockSettings.Stub { tieProfileLockIfNecessary(profileUserId, LockscreenCredential.createNone()); } else { - // We use cached work profile password computed before clearing the parent's + // We use cached profile password computed before clearing the parent's // credential, otherwise they get lost if (profilePasswordMap != null && profilePasswordMap.containsKey(profileUserId)) { @@ -1775,7 +1778,7 @@ public class LockSettingsService extends ILockSettings.Stub { notifyPasswordChanged(credential, userId); } if (isCredentialSharableWithParent(userId)) { - // Make sure the profile doesn't get locked straight after setting work challenge. + // Make sure the profile doesn't get locked straight after setting challenge. setDeviceUnlockedForUser(userId); } notifySeparateProfileChallengeChanged(userId); @@ -2366,7 +2369,7 @@ public class LockSettingsService extends ILockSettings.Stub { } try { - // Unlock work profile, and work profile with unified lock must use password only + // Unlock profile with unified lock return doVerifyCredential(getDecryptedPasswordForTiedProfile(userId), userId, null /* progressCallback */, flags); } catch (UnrecoverableKeyException | InvalidKeyException | KeyStoreException @@ -2490,7 +2493,7 @@ public class LockSettingsService extends ILockSettings.Stub { mStrongAuth.removeUser(userId); AndroidKeyStoreMaintenance.onUserRemoved(userId); - mManagedProfilePasswordCache.removePassword(userId); + mUnifiedProfilePasswordCache.removePassword(userId); gateKeeperClearSecureUserId(userId); removeKeystoreProfileKey(userId); @@ -2980,7 +2983,7 @@ public class LockSettingsService extends ILockSettings.Stub { credential, sp, userId); final Map<Integer, LockscreenCredential> profilePasswords; if (!credential.isNone()) { - // not needed by synchronizeUnifiedWorkChallengeForProfiles() + // not needed by synchronizeUnifiedChallengeForProfiles() profilePasswords = null; if (!mSpManager.hasSidForUser(userId)) { @@ -2991,8 +2994,8 @@ public class LockSettingsService extends ILockSettings.Stub { } } } else { - // Cache all profile password if they use unified work challenge. This will later be - // used to clear the profile's password in synchronizeUnifiedWorkChallengeForProfiles() + // Cache all profile password if they use unified challenge. This will later be used to + // clear the profile's password in synchronizeUnifiedChallengeForProfiles(). profilePasswords = getDecryptedPasswordsForAllTiedProfiles(userId); mSpManager.clearSidForUser(userId); @@ -3008,10 +3011,10 @@ public class LockSettingsService extends ILockSettings.Stub { } setCurrentLskfBasedProtectorId(newProtectorId, userId); LockPatternUtils.invalidateCredentialTypeCache(); - synchronizeUnifiedWorkChallengeForProfiles(userId, profilePasswords); + synchronizeUnifiedChallengeForProfiles(userId, profilePasswords); setUserPasswordMetrics(credential, userId); - mManagedProfilePasswordCache.removePassword(userId); + mUnifiedProfilePasswordCache.removePassword(userId); if (savedCredentialType != CREDENTIAL_TYPE_NONE) { mSpManager.destroyAllWeakTokenBasedProtectors(userId); } @@ -3112,7 +3115,7 @@ public class LockSettingsService extends ILockSettings.Stub { try { currentCredential = getDecryptedPasswordForTiedProfile(userId); } catch (Exception e) { - Slog.e(TAG, "Failed to get work profile credential", e); + Slog.e(TAG, "Failed to get unified profile password", e); return null; } } @@ -3282,7 +3285,7 @@ public class LockSettingsService extends ILockSettings.Stub { @Override public boolean tryUnlockWithCachedUnifiedChallenge(int userId) { checkPasswordReadPermission(); - try (LockscreenCredential cred = mManagedProfilePasswordCache.retrievePassword(userId)) { + try (LockscreenCredential cred = mUnifiedProfilePasswordCache.retrievePassword(userId)) { if (cred == null) { return false; } @@ -3294,7 +3297,7 @@ public class LockSettingsService extends ILockSettings.Stub { @Override public void removeCachedUnifiedChallenge(int userId) { checkWritePermission(); - mManagedProfilePasswordCache.removePassword(userId); + mUnifiedProfilePasswordCache.removePassword(userId); } static String timestampToString(long timestamp) { diff --git a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java index 1e8b387fc189..6d123ccebc7c 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java @@ -501,10 +501,10 @@ class LockSettingsStorage { final UserInfo parentInfo = um.getProfileParent(userId); if (parentInfo == null) { - // This user owns its lock settings files - safe to delete them + // Delete files specific to non-profile users. deleteFile(getRebootEscrowFile(userId)); } else { - // Managed profile + // Delete files specific to profile users. removeChildProfileLock(userId); } diff --git a/services/core/java/com/android/server/locksettings/ManagedProfilePasswordCache.java b/services/core/java/com/android/server/locksettings/UnifiedProfilePasswordCache.java index 1298fe8f07a4..21caf76d30d0 100644 --- a/services/core/java/com/android/server/locksettings/ManagedProfilePasswordCache.java +++ b/services/core/java/com/android/server/locksettings/UnifiedProfilePasswordCache.java @@ -43,30 +43,31 @@ import javax.crypto.SecretKey; import javax.crypto.spec.GCMParameterSpec; /** - * Caches *unified* work challenge for managed profiles. The cached credential is encrypted using - * a keystore key auth-bound to the parent user's lockscreen credential, similar to how unified - * work challenge is normally secured. - * - * <p> The cache is filled whenever the managed profile's unified challenge is created or derived - * (as part of the parent user's credential verification flow). It's removed when the profile is - * deleted or a (separate) lockscreen credential is explicitly set on the profile. There is also - * an ADB command to evict the cache "cmd lock_settings remove-cache --user X", to assist - * development and testing. - - * <p> The encrypted credential is stored in-memory only so the cache does not persist across - * reboots. + * An in-memory cache for unified profile passwords. A "unified profile password" is the random + * password that the system automatically generates and manages for each profile that uses a unified + * challenge and where the parent user has a secure lock screen. + * <p> + * Each password in this cache is encrypted by a Keystore key that is auth-bound to the parent user. + * This is very similar to how the password is protected on-disk, but the in-memory cache uses a + * much longer timeout on the keys: 7 days instead of 30 seconds. This enables use cases like + * unpausing work apps without requiring authentication as frequently. + * <p> + * Unified profile passwords are cached when they are created, or when they are decrypted as part of + * the parent user's LSKF verification flow. They are removed when the profile is deleted or when a + * separate challenge is explicitly set on the profile. There is also an ADB command to evict a + * cached password, "locksettings remove-cache --user X", to assist development and testing. */ @VisibleForTesting // public visibility is needed for Mockito -public class ManagedProfilePasswordCache { +public class UnifiedProfilePasswordCache { - private static final String TAG = "ManagedProfilePasswordCache"; + private static final String TAG = "UnifiedProfilePasswordCache"; private static final int KEY_LENGTH = 256; private static final int CACHE_TIMEOUT_SECONDS = (int) TimeUnit.DAYS.toSeconds(7); private final SparseArray<byte[]> mEncryptedPasswords = new SparseArray<>(); private final KeyStore mKeyStore; - public ManagedProfilePasswordCache(KeyStore keyStore) { + public UnifiedProfilePasswordCache(KeyStore keyStore) { mKeyStore = keyStore; } @@ -151,7 +152,8 @@ public class ManagedProfilePasswordCache { Slog.d(TAG, "Cannot decrypt", e); return null; } - LockscreenCredential result = LockscreenCredential.createManagedPassword(credential); + LockscreenCredential result = + LockscreenCredential.createUnifiedProfilePassword(credential); Arrays.fill(credential, (byte) 0); return result; } diff --git a/services/core/java/com/android/server/os/NativeTombstoneManager.java b/services/core/java/com/android/server/os/NativeTombstoneManager.java index ab0d0d2626db..b7e737448d2d 100644 --- a/services/core/java/com/android/server/os/NativeTombstoneManager.java +++ b/services/core/java/com/android/server/os/NativeTombstoneManager.java @@ -41,14 +41,13 @@ import android.system.Os; import android.system.StructStat; import android.util.Slog; import android.util.SparseArray; -import android.util.proto.ProtoInputStream; -import android.util.proto.ProtoParseException; import com.android.internal.annotations.GuardedBy; import com.android.server.BootReceiver; import com.android.server.ServiceThread; import com.android.server.os.TombstoneProtos.Cause; import com.android.server.os.TombstoneProtos.Tombstone; +import com.android.server.os.protobuf.CodedInputStream; import libcore.io.IoUtils; @@ -128,18 +127,21 @@ public final class NativeTombstoneManager { return; } - String processName = "UNKNOWN"; final boolean isProtoFile = filename.endsWith(".pb"); - File protoPath = isProtoFile ? path : new File(path.getAbsolutePath() + ".pb"); + if (!isProtoFile) { + return; + } - Optional<TombstoneFile> parsedTombstone = handleProtoTombstone(protoPath, isProtoFile); + Optional<ParsedTombstone> parsedTombstone = handleProtoTombstone(path, true); if (parsedTombstone.isPresent()) { - processName = parsedTombstone.get().getProcessName(); + BootReceiver.addTombstoneToDropBox( + mContext, path, parsedTombstone.get().getTombstone(), + parsedTombstone.get().getProcessName(), mTmpFileLock); } - BootReceiver.addTombstoneToDropBox(mContext, path, isProtoFile, processName, mTmpFileLock); } - private Optional<TombstoneFile> handleProtoTombstone(File path, boolean addToList) { + private Optional<ParsedTombstone> handleProtoTombstone( + File path, boolean addToList) { final String filename = path.getName(); if (!filename.endsWith(".pb")) { Slog.w(TAG, "unexpected tombstone name: " + path); @@ -169,7 +171,7 @@ public final class NativeTombstoneManager { return Optional.empty(); } - final Optional<TombstoneFile> parsedTombstone = TombstoneFile.parse(pfd); + final Optional<ParsedTombstone> parsedTombstone = TombstoneFile.parse(pfd); if (!parsedTombstone.isPresent()) { IoUtils.closeQuietly(pfd); return Optional.empty(); @@ -182,7 +184,7 @@ public final class NativeTombstoneManager { previous.dispose(); } - mTombstones.put(number, parsedTombstone.get()); + mTombstones.put(number, parsedTombstone.get().getTombstoneFile()); } } @@ -330,6 +332,27 @@ public final class NativeTombstoneManager { } } + static class ParsedTombstone { + TombstoneFile mTombstoneFile; + Tombstone mTombstone; + ParsedTombstone(TombstoneFile tombstoneFile, Tombstone tombstone) { + mTombstoneFile = tombstoneFile; + mTombstone = tombstone; + } + + public String getProcessName() { + return mTombstoneFile.getProcessName(); + } + + public TombstoneFile getTombstoneFile() { + return mTombstoneFile; + } + + public Tombstone getTombstone() { + return mTombstone; + } + } + static class TombstoneFile { final ParcelFileDescriptor mPfd; @@ -412,67 +435,21 @@ public final class NativeTombstoneManager { } } - static Optional<TombstoneFile> parse(ParcelFileDescriptor pfd) { - final FileInputStream is = new FileInputStream(pfd.getFileDescriptor()); - final ProtoInputStream stream = new ProtoInputStream(is); - - int pid = 0; - int uid = 0; - String processName = null; - String crashReason = ""; - String selinuxLabel = ""; - - try { - while (stream.nextField() != ProtoInputStream.NO_MORE_FIELDS) { - switch (stream.getFieldNumber()) { - case (int) Tombstone.PID: - pid = stream.readInt(Tombstone.PID); - break; - - case (int) Tombstone.UID: - uid = stream.readInt(Tombstone.UID); - break; - - case (int) Tombstone.COMMAND_LINE: - if (processName == null) { - processName = stream.readString(Tombstone.COMMAND_LINE); - } - break; + static Optional<ParsedTombstone> parse(ParcelFileDescriptor pfd) { + Tombstone tombstoneProto; + try (FileInputStream is = new FileInputStream(pfd.getFileDescriptor())) { + final byte[] tombstoneBytes = is.readAllBytes(); - case (int) Tombstone.CAUSES: - if (!crashReason.equals("")) { - // Causes appear in decreasing order of likelihood. For now we only - // want the most likely crash reason here, so ignore all others. - break; - } - long token = stream.start(Tombstone.CAUSES); - cause: - while (stream.nextField() != ProtoInputStream.NO_MORE_FIELDS) { - switch (stream.getFieldNumber()) { - case (int) Cause.HUMAN_READABLE: - crashReason = stream.readString(Cause.HUMAN_READABLE); - break cause; - - default: - break; - } - } - stream.end(token); - break; - - case (int) Tombstone.SELINUX_LABEL: - selinuxLabel = stream.readString(Tombstone.SELINUX_LABEL); - break; - - default: - break; - } - } - } catch (IOException | ProtoParseException ex) { + tombstoneProto = Tombstone.parseFrom( + CodedInputStream.newInstance(tombstoneBytes)); + } catch (IOException ex) { Slog.e(TAG, "Failed to parse tombstone", ex); return Optional.empty(); } + int pid = tombstoneProto.getPid(); + int uid = tombstoneProto.getUid(); + if (!UserHandle.isApp(uid)) { Slog.e(TAG, "Tombstone's UID (" + uid + ") not an app, ignoring"); return Optional.empty(); @@ -489,6 +466,7 @@ public final class NativeTombstoneManager { final int userId = UserHandle.getUserId(uid); final int appId = UserHandle.getAppId(uid); + String selinuxLabel = tombstoneProto.getSelinuxLabel(); if (!selinuxLabel.startsWith("u:r:untrusted_app")) { Slog.e(TAG, "Tombstone has invalid selinux label (" + selinuxLabel + "), ignoring"); return Optional.empty(); @@ -500,11 +478,30 @@ public final class NativeTombstoneManager { result.mAppId = appId; result.mPid = pid; result.mUid = uid; - result.mProcessName = processName == null ? "" : processName; + result.mProcessName = getCmdLineProcessName(tombstoneProto); result.mTimestampMs = timestampMs; - result.mCrashReason = crashReason; + result.mCrashReason = getCrashReason(tombstoneProto); - return Optional.of(result); + return Optional.of(new ParsedTombstone(result, tombstoneProto)); + } + + private static String getCmdLineProcessName(Tombstone tombstoneProto) { + for (String cmdline : tombstoneProto.getCommandLineList()) { + if (cmdline != null) { + return cmdline; + } + } + return ""; + } + + private static String getCrashReason(Tombstone tombstoneProto) { + for (Cause cause : tombstoneProto.getCausesList()) { + if (cause.getHumanReadable() != null + && !cause.getHumanReadable().equals("")) { + return cause.getHumanReadable(); + } + } + return ""; } public IParcelFileDescriptorRetriever getPfdRetriever() { diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java index 327f74f081da..1ebad9bfbc8b 100644 --- a/services/core/java/com/android/server/trust/TrustManagerService.java +++ b/services/core/java/com/android/server/trust/TrustManagerService.java @@ -1657,14 +1657,12 @@ public class TrustManagerService extends SystemService { user.name, user.id, user.flags); if (!user.supportsSwitchToByUser()) { final boolean locked; - if (user.isProfile()) { - if (mLockPatternUtils.isSeparateProfileChallengeEnabled(user.id)) { - fout.print(" (profile with separate challenge)"); - locked = isDeviceLockedInner(user.id); - } else { - fout.print(" (profile with unified challenge)"); - locked = isDeviceLockedInner(resolveProfileParent(user.id)); - } + if (mLockPatternUtils.isProfileWithUnifiedChallenge(user.id)) { + fout.print(" (profile with unified challenge)"); + locked = isDeviceLockedInner(resolveProfileParent(user.id)); + } else if (mLockPatternUtils.isSeparateProfileChallengeEnabled(user.id)) { + fout.print(" (profile with separate challenge)"); + locked = isDeviceLockedInner(user.id); } else { fout.println(" (user that cannot be switched to)"); locked = isDeviceLockedInner(user.id); diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp index 8cd55c7dd506..591a55972b81 100644 --- a/services/core/jni/Android.bp +++ b/services/core/jni/Android.bp @@ -37,6 +37,7 @@ cc_library_static { "com_android_server_adb_AdbDebuggingManager.cpp", "com_android_server_am_BatteryStatsService.cpp", "com_android_server_biometrics_SurfaceToNativeHandleConverter.cpp", + "com_android_server_BootReceiver.cpp", "com_android_server_ConsumerIrService.cpp", "com_android_server_companion_virtual_InputController.cpp", "com_android_server_devicepolicy_CryptoTestHelper.cpp", @@ -91,6 +92,16 @@ cc_library_static { header_libs: [ "bionic_libc_platform_headers", ], + + static_libs: [ + "libunwindstack", + ], + + whole_static_libs: [ + "libdebuggerd_tombstone_proto_to_text", + ], + + runtime_libs: ["libdexfile"], } cc_defaults { diff --git a/services/core/jni/OWNERS b/services/core/jni/OWNERS index fd9d4a44b65d..e6649f6fd1a6 100644 --- a/services/core/jni/OWNERS +++ b/services/core/jni/OWNERS @@ -32,3 +32,4 @@ per-file com_android_server_companion_virtual_InputController.cpp = file:/servic # Bug component : 158088 = per-file com_android_server_utils_AnrTimer*.java per-file com_android_server_utils_AnrTimer*.java = file:/PERFORMANCE_OWNERS +per-file com_android_server_BootReceiver.cpp = file:/STABILITY_OWNERS diff --git a/services/core/jni/com_android_server_BootReceiver.cpp b/services/core/jni/com_android_server_BootReceiver.cpp new file mode 100644 index 000000000000..3892d284dafb --- /dev/null +++ b/services/core/jni/com_android_server_BootReceiver.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <libdebuggerd/tombstone.h> +#include <nativehelper/JNIHelp.h> + +#include <sstream> + +#include "jni.h" +#include "tombstone.pb.h" + +namespace android { + +static void writeToString(std::stringstream& ss, const std::string& line, bool should_log) { + ss << line << std::endl; +} + +static jstring com_android_server_BootReceiver_getTombstoneText(JNIEnv* env, jobject, + jbyteArray tombstoneBytes) { + Tombstone tombstone; + tombstone.ParseFromArray(env->GetByteArrayElements(tombstoneBytes, 0), + env->GetArrayLength(tombstoneBytes)); + + std::stringstream tombstoneString; + + tombstone_proto_to_text(tombstone, + std::bind(&writeToString, std::ref(tombstoneString), + std::placeholders::_1, std::placeholders::_2)); + + return env->NewStringUTF(tombstoneString.str().c_str()); +} + +static const JNINativeMethod sMethods[] = { + /* name, signature, funcPtr */ + {"getTombstoneText", "([B)Ljava/lang/String;", + (jstring*)com_android_server_BootReceiver_getTombstoneText}, +}; + +int register_com_android_server_BootReceiver(JNIEnv* env) { + return jniRegisterNativeMethods(env, "com/android/server/BootReceiver", sMethods, + NELEM(sMethods)); +} + +} // namespace android diff --git a/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp b/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp index 3d4f866948af..2a0f1e2ede55 100644 --- a/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp +++ b/services/core/jni/com_android_server_pm_PackageManagerShellCommandDataLoader.cpp @@ -182,7 +182,7 @@ static inline IncFsSize verityTreeSizeForFile(IncFsSize fileSize) { auto block_count = 1 + (fileSize - 1) / INCFS_DATA_FILE_BLOCK_SIZE; auto hash_block_count = block_count; - for (auto i = 0; hash_block_count > 1; i++) { + while (hash_block_count > 1) { hash_block_count = (hash_block_count + hash_per_block - 1) / hash_per_block; total_tree_block_count += hash_block_count; } @@ -468,7 +468,6 @@ private: borrowed_fd incomingFd, bool waitOnEof, std::vector<char>* buffer, std::vector<IncFsDataBlock>* blocks) { IncFsSize remaining = size; - IncFsSize totalSize = 0; IncFsBlockIndex blockIdx = 0; while (remaining > 0) { constexpr auto capacity = BUFFER_SIZE; @@ -502,7 +501,6 @@ private: buffer->resize(size + read); remaining -= read; - totalSize += read; } if (!buffer->empty() && !flashToIncFs(incfsFd, kind, true, &blockIdx, buffer, blocks)) { return false; diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp index a87902fe03c5..e7de081bd5f8 100644 --- a/services/core/jni/onload.cpp +++ b/services/core/jni/onload.cpp @@ -63,6 +63,7 @@ int register_android_server_stats_pull_StatsPullAtomService(JNIEnv* env); int register_android_server_sensor_SensorService(JavaVM* vm, JNIEnv* env); int register_android_server_companion_virtual_InputController(JNIEnv* env); int register_android_server_app_GameManagerService(JNIEnv* env); +int register_com_android_server_BootReceiver(JNIEnv* env); int register_com_android_server_wm_TaskFpsCallbackController(JNIEnv* env); int register_com_android_server_display_DisplayControl(JNIEnv* env); int register_com_android_server_SystemClockTime(JNIEnv* env); @@ -122,6 +123,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) register_android_server_sensor_SensorService(vm, env); register_android_server_companion_virtual_InputController(env); register_android_server_app_GameManagerService(env); + register_com_android_server_BootReceiver(env); register_com_android_server_wm_TaskFpsCallbackController(env); register_com_android_server_display_DisplayControl(env); register_com_android_server_SystemClockTime(env); diff --git a/services/tests/servicestests/src/com/android/server/BootReceiverTest.java b/services/tests/servicestests/src/com/android/server/BootReceiverTest.java new file mode 100644 index 000000000000..523c5c060cf5 --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/BootReceiverTest.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server; + +import static com.google.common.truth.Truth.assertThat; + +import android.test.AndroidTestCase; + +import com.android.server.os.TombstoneProtos; +import com.android.server.os.TombstoneProtos.Tombstone; + +public class BootReceiverTest extends AndroidTestCase { + private static final String TAG = "BootReceiverTest"; + + public void testRemoveMemoryFromTombstone() { + Tombstone tombstoneBase = Tombstone.newBuilder() + .setBuildFingerprint("build_fingerprint") + .setRevision("revision") + .setPid(123) + .setTid(23) + .setUid(34) + .setSelinuxLabel("selinux_label") + .addCommandLine("cmd1") + .addCommandLine("cmd2") + .addCommandLine("cmd3") + .setProcessUptime(300) + .setAbortMessage("abort") + .addCauses(TombstoneProtos.Cause.newBuilder() + .setHumanReadable("cause1") + .setMemoryError(TombstoneProtos.MemoryError.newBuilder() + .setTool(TombstoneProtos.MemoryError.Tool.SCUDO) + .setType(TombstoneProtos.MemoryError.Type.DOUBLE_FREE))) + .addLogBuffers(TombstoneProtos.LogBuffer.newBuilder().setName("name").addLogs( + TombstoneProtos.LogMessage.newBuilder() + .setTimestamp("123") + .setMessage("message"))) + .addOpenFds(TombstoneProtos.FD.newBuilder().setFd(1).setPath("path")) + .build(); + + Tombstone tombstoneWithoutMemory = tombstoneBase.toBuilder() + .putThreads(1, TombstoneProtos.Thread.newBuilder() + .setId(1) + .setName("thread1") + .addRegisters(TombstoneProtos.Register.newBuilder().setName("r1").setU64(1)) + .addRegisters(TombstoneProtos.Register.newBuilder().setName("r2").setU64(2)) + .addBacktraceNote("backtracenote1") + .addUnreadableElfFiles("files1") + .setTaggedAddrCtrl(1) + .setPacEnabledKeys(10) + .build()) + .build(); + + Tombstone tombstoneWithMemory = tombstoneBase.toBuilder() + .addMemoryMappings(TombstoneProtos.MemoryMapping.newBuilder() + .setBeginAddress(1) + .setEndAddress(100) + .setOffset(10) + .setRead(true) + .setWrite(true) + .setExecute(false) + .setMappingName("mapping") + .setBuildId("build") + .setLoadBias(70)) + .putThreads(1, TombstoneProtos.Thread.newBuilder() + .setId(1) + .setName("thread1") + .addRegisters(TombstoneProtos.Register.newBuilder().setName("r1").setU64(1)) + .addRegisters(TombstoneProtos.Register.newBuilder().setName("r2").setU64(2)) + .addBacktraceNote("backtracenote1") + .addUnreadableElfFiles("files1") + .addMemoryDump(TombstoneProtos.MemoryDump.newBuilder() + .setRegisterName("register1") + .setMappingName("mapping") + .setBeginAddress(10)) + .setTaggedAddrCtrl(1) + .setPacEnabledKeys(10) + .build()) + .build(); + + assertThat(BootReceiver.removeMemoryFromTombstone(tombstoneWithMemory)) + .isEqualTo(tombstoneWithoutMemory); + } +} diff --git a/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java b/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java index 88d57ac1ab88..e565faa1c00b 100644 --- a/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java @@ -18,7 +18,7 @@ package com.android.server.audio; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.after; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; @@ -42,10 +42,10 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; import org.mockito.Mock; import org.mockito.Spy; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; @MediumTest @RunWith(AndroidJUnit4.class) @@ -58,7 +58,7 @@ public class AudioServiceTest { public final MockitoRule mockito = MockitoJUnit.rule(); private Context mContext; - private AudioSystemAdapter mAudioSystem; + private AudioSystemAdapter mSpyAudioSystem; private SettingsAdapter mSettingsAdapter; @Spy private NoOpSystemServerAdapter mSpySystemServer; @@ -78,11 +78,11 @@ public class AudioServiceTest { sLooperPrepared = true; } mContext = InstrumentationRegistry.getTargetContext(); - mAudioSystem = new NoOpAudioSystemAdapter(); + mSpyAudioSystem = spy(new NoOpAudioSystemAdapter()); mSettingsAdapter = new NoOpSettingsAdapter(); when(mMockAppOpsManager.noteOp(anyInt(), anyInt(), anyString(), anyString(), anyString())) .thenReturn(AppOpsManager.MODE_ALLOWED); - mAudioService = new AudioService(mContext, mAudioSystem, mSpySystemServer, + mAudioService = new AudioService(mContext, mSpyAudioSystem, mSpySystemServer, mSettingsAdapter, mMockAudioPolicy, null, mMockAppOpsManager, mMockPermissionEnforcer); } @@ -95,7 +95,7 @@ public class AudioServiceTest { public void testMuteMicrophone() throws Exception { Log.i(TAG, "running testMuteMicrophone"); Assert.assertNotNull(mAudioService); - final NoOpAudioSystemAdapter testAudioSystem = (NoOpAudioSystemAdapter) mAudioSystem; + final NoOpAudioSystemAdapter testAudioSystem = (NoOpAudioSystemAdapter) mSpyAudioSystem; testAudioSystem.configureMuteMicrophoneToFail(false); for (boolean muted : new boolean[] { true, false}) { testAudioSystem.configureIsMicrophoneMuted(!muted); @@ -120,7 +120,7 @@ public class AudioServiceTest { public void testMuteMicrophoneWhenFail() throws Exception { Log.i(TAG, "running testMuteMicrophoneWhenFail"); Assert.assertNotNull(mAudioService); - final NoOpAudioSystemAdapter testAudioSystem = (NoOpAudioSystemAdapter) mAudioSystem; + final NoOpAudioSystemAdapter testAudioSystem = (NoOpAudioSystemAdapter) mSpyAudioSystem; testAudioSystem.configureMuteMicrophoneToFail(true); for (boolean muted : new boolean[] { true, false}) { testAudioSystem.configureIsMicrophoneMuted(!muted); @@ -175,4 +175,28 @@ public class AudioServiceTest { Assert.assertEquals(false, mAudioService.isHotwordStreamSupported(false)); Assert.assertEquals(false, mAudioService.isHotwordStreamSupported(true)); } + + /** + * Test master mute setter and getter + */ + @Test + public void testMasterMute() throws Exception { + Log.i(TAG, "running testMasterMute"); + Assert.assertNotNull(mAudioService); + for (boolean mute : new boolean[] { true, false}) { + boolean wasMute = mAudioService.isMasterMute(); + mAudioService.setMasterMute(mute, 0 /* flags */, mContext.getOpPackageName(), + UserHandle.getCallingUserId(), null); + + Assert.assertEquals("master mute reporting wrong value", + mute, mAudioService.isMasterMute()); + + verify(mSpyAudioSystem, times(wasMute == mute ? 0 : 1)).setMasterMute(mute); + // verify the intent for master mute changed is supposed to be fired + verify(mSpySystemServer, + after(MAX_MESSAGE_HANDLING_DELAY_MS).times(wasMute == mute ? 0 : 1)) + .broadcastMasterMuteStatus(mute); + reset(mSpySystemServer); + } + } } diff --git a/services/tests/servicestests/src/com/android/server/audio/MusicFxHelperTest.java b/services/tests/servicestests/src/com/android/server/audio/MusicFxHelperTest.java new file mode 100644 index 000000000000..472a82c02937 --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/audio/MusicFxHelperTest.java @@ -0,0 +1,642 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.server.audio; + +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyObject; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.media.audiofx.AudioEffect; +import android.os.Message; +import android.util.Log; + +import androidx.test.filters.MediumTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.ArrayList; +import java.util.List; + +@MediumTest +@RunWith(AndroidJUnit4.class) +public class MusicFxHelperTest { + private static final String TAG = "MusicFxHelperTest"; + + @Mock private AudioService mMockAudioService; + @Mock private Context mMockContext; + @Mock private PackageManager mMockPackageManager; + + private ResolveInfo mResolveInfo1 = new ResolveInfo(); + private ResolveInfo mResolveInfo2 = new ResolveInfo(); + private final String mTestPkg1 = "testPkg1", mTestPkg2 = "testPkg2", mTestPkg3 = "testPkg3"; + private final String mMusicFxPkgName = "com.android.musicfx"; + private final int mTestUid1 = 1, mTestUid2 = 2, mTestUid3 = 3, mMusicFxUid = 78; + private final int mTestSession1 = 11, mTestSession2 = 22, mTestSession3 = 33; + + private List<ResolveInfo> mEmptyList = new ArrayList<>(); + private List<ResolveInfo> mSingleList = new ArrayList<>(); + private List<ResolveInfo> mDoubleList = new ArrayList<>(); + + // the class being unit-tested here + @InjectMocks private MusicFxHelper mMusicFxHelper; + + @Before + @SuppressWarnings("DirectInvocationOnMock") + public void setUp() throws Exception { + mMockAudioService = mock(AudioService.class); + mMusicFxHelper = mMockAudioService.getMusicFxHelper(); + MockitoAnnotations.initMocks(this); + + mResolveInfo1.activityInfo = new ActivityInfo(); + mResolveInfo1.activityInfo.packageName = mTestPkg1; + mResolveInfo2.activityInfo = new ActivityInfo(); + mResolveInfo2.activityInfo.packageName = mTestPkg2; + + mSingleList.add(mResolveInfo1); + mDoubleList.add(mResolveInfo1); + mDoubleList.add(mResolveInfo2); + + Assert.assertNotNull(mMusicFxHelper); + } + + private Intent newIntent(String action, String packageName, int sessionId) { + Intent intent = new Intent(action); + if (packageName != null) { + intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, packageName); + } + intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, sessionId); + return intent; + } + + /** + * Helper function to send ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION intent with verification. + * + * @throws NameNotFoundException if no such package is available to the caller. + */ + private void openSessionWithResList( + List<ResolveInfo> list, int bind, int broadcast, String packageName, int audioSession, + int uid) { + doReturn(mMockPackageManager).when(mMockContext).getPackageManager(); + doReturn(list).when(mMockPackageManager).queryBroadcastReceivers(anyObject(), anyInt()); + if (list != null && list.size() != 0) { + try { + doReturn(uid).when(mMockPackageManager) + .getPackageUidAsUser(eq(packageName), anyObject(), anyInt()); + doReturn(mMusicFxUid).when(mMockPackageManager) + .getPackageUidAsUser(eq(mMusicFxPkgName), anyObject(), anyInt()); + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "NameNotFoundException: " + e); + } + } + + Intent intent = newIntent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION, + packageName, audioSession); + mMusicFxHelper.handleAudioEffectBroadcast(mMockContext, intent); + verify(mMockContext, times(bind)) + .bindServiceAsUser(anyObject(), anyObject(), anyInt(), anyObject()); + verify(mMockContext, times(broadcast)).sendBroadcastAsUser(anyObject(), anyObject()); + } + + /** + * Helper function to send ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION intent with verification. + * + * @throws NameNotFoundException if no such package is available to the caller. + */ + private void closeSessionWithResList( + List<ResolveInfo> list, int unBind, int broadcast, String packageName, + int audioSession, int uid) { + doReturn(mMockPackageManager).when(mMockContext).getPackageManager(); + doReturn(list).when(mMockPackageManager).queryBroadcastReceivers(anyObject(), anyInt()); + if (list != null && list.size() != 0) { + try { + doReturn(uid).when(mMockPackageManager) + .getPackageUidAsUser(eq(packageName), anyObject(), anyInt()); + doReturn(mMusicFxUid).when(mMockPackageManager) + .getPackageUidAsUser(eq(mMusicFxPkgName), anyObject(), anyInt()); + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "NameNotFoundException: " + e); + } + } + + Intent intent = newIntent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION, + packageName, audioSession); + mMusicFxHelper.handleAudioEffectBroadcast(mMockContext, intent); + verify(mMockContext, times(unBind)).unbindService(anyObject()); + verify(mMockContext, times(broadcast)).sendBroadcastAsUser(anyObject(), anyObject()); + } + + /** + * Helper function to send MSG_EFFECT_CLIENT_GONE message with verification. + */ + private void sendMessage(int msgId, int uid, int unBinds, int broadcasts) { + mMusicFxHelper.handleMessage(Message.obtain(null, msgId, uid /* arg1 */, 0 /* arg2 */)); + verify(mMockContext, times(broadcasts)).sendBroadcastAsUser(anyObject(), anyObject()); + verify(mMockContext, times(unBinds)).unbindService(anyObject()); + } + + /** + * Send invalid message to MusicFxHelper. + */ + @Test + public void testInvalidMessage() { + Log.i(TAG, "running testInvalidMessage"); + + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE - 1, 0, 0, 0); + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE + 1, 0, 0, 0); + } + + /** + * Send client gone message to MusicFxHelper when no client exist. + */ + @Test + public void testGoneMessageWhenNoClient() { + Log.i(TAG, "running testGoneMessageWhenNoClient"); + + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, 0, 0, 0); + } + + /** + * Send ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION intent to MusicFxHelper when no session exist. + */ + @Test + public void testCloseBroadcastIntent() { + Log.i(TAG, "running testCloseBroadcastIntent"); + + closeSessionWithResList(null, 0, 0, null, mTestSession1, mTestUid1); + } + + /** + * OPEN/CLOSE AUDIO_EFFECT_CONTROL_SESSION intent when target application package was set. + * When the target application package was set for an intent, it means this intent is limited + * to a specific target application, as a result MusicFxHelper will not handle this intent. + */ + @Test + public void testBroadcastIntentWithPackage() { + Log.i(TAG, "running testBroadcastIntentWithPackage"); + + Intent intent = newIntent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION, null, 1); + intent.setPackage(mTestPkg1); + mMusicFxHelper.handleAudioEffectBroadcast(mMockContext, intent); + verify(mMockContext, times(0)) + .bindServiceAsUser(anyObject(), anyObject(), anyInt(), anyObject()); + verify(mMockContext, times(0)).sendBroadcastAsUser(anyObject(), anyObject()); + + intent = newIntent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION, null, 1); + intent.setPackage(mTestPkg2); + mMusicFxHelper.handleAudioEffectBroadcast(mMockContext, intent); + verify(mMockContext, times(0)) + .bindServiceAsUser(anyObject(), anyObject(), anyInt(), anyObject()); + verify(mMockContext, times(0)).sendBroadcastAsUser(anyObject(), anyObject()); + } + + /** + * OPEN/CLOSE AUDIO_EFFECT_CONTROL_SESSION with no broadcast receiver. + */ + @Test + public void testBroadcastIntentWithNoPackageAndNoBroadcastReceiver() { + Log.i(TAG, "running testBroadcastIntentWithNoPackageAndNoBroadcastReceiver"); + + openSessionWithResList(mEmptyList, 0, 0, null, mTestSession1, mTestUid1); + closeSessionWithResList(mEmptyList, 0, 0, null, mTestSession1, mTestUid1); + } + + /** + * OPEN/CLOSE AUDIO_EFFECT_CONTROL_SESSION with one broadcast receiver. + */ + @Test + public void testBroadcastIntentWithNoPackageAndOneBroadcastReceiver() { + Log.i(TAG, "running testBroadcastIntentWithNoPackageAndOneBroadcastReceiver"); + + int broadcasts = 1, bind = 1, unbind = 1; + openSessionWithResList(mSingleList, bind, broadcasts, null, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + closeSessionWithResList(mSingleList, unbind, broadcasts, null, mTestSession1, mTestUid1); + + // repeat with different session ID + broadcasts = broadcasts + 1; + bind = bind + 1; + unbind = unbind + 1; + openSessionWithResList(mSingleList, bind, broadcasts, null, mTestSession2, mTestUid1); + broadcasts = broadcasts + 1; + closeSessionWithResList(mSingleList, unbind, broadcasts, null, mTestSession2, mTestUid1); + + // repeat with different UID + broadcasts = broadcasts + 1; + bind = bind + 1; + unbind = unbind + 1; + openSessionWithResList(mSingleList, bind, broadcasts, null, mTestSession1, mTestUid2); + broadcasts = broadcasts + 1; + closeSessionWithResList(mSingleList, unbind, broadcasts, null, mTestSession1, mTestUid2); + } + + /** + * OPEN/CLOSE AUDIO_EFFECT_CONTROL_SESSION with two broadcast receivers. + */ + @Test + public void testBroadcastIntentWithNoPackageAndTwoBroadcastReceivers() { + Log.i(TAG, "running testBroadcastIntentWithNoPackageAndTwoBroadcastReceivers"); + + openSessionWithResList(mDoubleList, 1, 1, null, mTestSession1, mTestUid1); + closeSessionWithResList(mDoubleList, 1, 2, null, mTestSession1, mTestUid1); + } + + /** + * Open/close session UID not matching. + * No broadcast for mismatching sessionID/UID/packageName. + */ + @Test + public void testBroadcastBadIntents() { + Log.i(TAG, "running testBroadcastBadIntents"); + + int broadcasts = 1; + openSessionWithResList(mSingleList, 1, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + // mismatch UID + closeSessionWithResList(mSingleList, 0, broadcasts, mTestPkg1, mTestSession1, mTestUid2); + // mismatch AudioSession + closeSessionWithResList(mSingleList, 0, broadcasts, mTestPkg1, mTestSession2, mTestUid1); + // mismatch packageName + closeSessionWithResList(mSingleList, 0, broadcasts, mTestPkg2, mTestSession1, mTestUid1); + + // cleanup with correct UID and session ID + broadcasts = broadcasts + 1; + closeSessionWithResList(mSingleList, 1, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + } + + /** + * Open/close sessions with one UID, some with correct intents some with illegal intents. + * No broadcast for mismatching sessionID/UID/packageName. + */ + @Test + public void testBroadcastGoodAndBadIntents() { + Log.i(TAG, "running testBroadcastGoodAndBadIntents"); + + int broadcasts = 1, bind = 1, unbind = 0; + openSessionWithResList(mSingleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + // mismatch packageName, session ID and UID + closeSessionWithResList(mSingleList, unbind, broadcasts, mTestPkg2, mTestSession2, + mTestUid2); + // mismatch session ID and mismatch UID + closeSessionWithResList(mSingleList, unbind, broadcasts, mTestPkg1, mTestSession2, + mTestUid2); + // mismatch packageName and mismatch UID + closeSessionWithResList(mSingleList, unbind, broadcasts, mTestPkg2, mTestSession1, + mTestUid2); + // mismatch packageName and sessionID + closeSessionWithResList(mSingleList, unbind, broadcasts, mTestPkg2, mTestSession2, + mTestUid1); + // inconsistency package name for same UID + openSessionWithResList(mSingleList, bind, broadcasts, mTestPkg2, mTestSession2, mTestUid1); + // open session2 with good intent + broadcasts = broadcasts + 1; + openSessionWithResList(mSingleList, bind, broadcasts, mTestPkg1, mTestSession2, mTestUid1); + + // cleanup with correct UID and session ID + broadcasts = broadcasts + 1; + closeSessionWithResList(mSingleList, unbind, broadcasts, mTestPkg1, mTestSession1, + mTestUid1); + broadcasts = broadcasts + 1; + unbind = unbind + 1; + closeSessionWithResList(mSingleList, unbind, broadcasts, mTestPkg1, mTestSession2, + mTestUid1); + } + + /** + * Send ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION when there is no listener. + */ + @Test + public void testBroadcastOpenSessionWithValidPackageNameAndNoListener() { + Log.i(TAG, "running testBroadcastOpenSessionWithValidPackageNameAndNoListener"); + + // null listener list should not trigger any action + openSessionWithResList(null, 0, 0, mTestPkg1, mTestSession1, mTestUid1); + // empty listener list should not trigger any action + openSessionWithResList(mEmptyList, 0, 0, mTestPkg1, mTestSession1, mTestUid1); + } + + /** + * One MusicFx client, open session and close. + */ + @Test + public void testOpenCloseAudioSession() { + Log.i(TAG, "running testOpenCloseAudioSession"); + + int broadcasts = 1; + openSessionWithResList(mDoubleList, 1, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, 1, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + } + + /** + * One MusicFx client, open session and close, then gone. + */ + @Test + public void testOpenCloseAudioSessionAndGone() { + Log.i(TAG, "running testOpenCloseAudioSessionAndGone"); + + int broadcasts = 1; + openSessionWithResList(mDoubleList, 1, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, 1, broadcasts, mTestPkg1, mTestSession2, mTestUid1); + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, 0, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + + broadcasts = broadcasts + 1; // 1 open session left + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid1, 1, broadcasts); + } + + /** + * One MusicFx client, open session, then UID gone without close. + */ + @Test + public void testOpenOneSessionAndGo() { + Log.i(TAG, "running testOpenOneSessionAndGo"); + + int broadcasts = 1; + openSessionWithResList(mDoubleList, 1, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + + broadcasts = broadcasts + 1; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid1, 1, broadcasts); + } + + /** + * Two MusicFx clients open and close sessions. + */ + @Test + public void testOpenTwoSessionsAndClose() { + Log.i(TAG, "running testOpenTwoSessionsAndClose"); + + int broadcasts = 1, bind = 1, unbind = 0; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession2, mTestUid2); + + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg2, mTestSession2, + mTestUid2); + broadcasts = broadcasts + 1; + unbind = unbind + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession1, + mTestUid1); + + broadcasts = broadcasts + 1; + bind = bind + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession2, mTestUid2); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession1, + mTestUid1); + broadcasts = broadcasts + 1; + unbind = unbind + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg2, mTestSession2, + mTestUid2); + } + + /** + * Two MusicFx clients open sessions, then both UID gone without close. + */ + @Test + public void testOpenTwoSessionsAndGo() { + Log.i(TAG, "running testOpenTwoSessionsAndGo"); + + int broadcasts = 1, bind = 1, unbind = 0; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession2, mTestUid2); + + broadcasts = broadcasts + 1; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid1, unbind, broadcasts); + + broadcasts = broadcasts + 1; + unbind = unbind + 1; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid2, unbind, broadcasts); + } + + /** + * Two MusicFx clients open sessions, one close but not gone, the other one gone without close. + */ + @Test + public void testTwoSessionsOpenOneCloseOneGo() { + Log.i(TAG, "running testTwoSessionsOpneAndOneCloseOneGo"); + + int broadcasts = 1, bind = 1, unbind = 0; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession2, mTestUid2); + + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession1, + mTestUid1); + + broadcasts = broadcasts + 1; + unbind = unbind + 1; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid2, unbind, broadcasts); + } + + /** + * One MusicFx client, open multiple audio sessions, and close all sessions. + */ + @Test + public void testTwoSessionsInSameUidOpenClose() { + Log.i(TAG, "running testTwoSessionsOpneAndOneCloseOneGo"); + + int broadcasts = 1, bind = 1, unbind = 0; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession2, mTestUid1); + + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession1, + mTestUid1); + broadcasts = broadcasts + 1; + unbind = unbind + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession2, + mTestUid1); + } + + /** + * Three MusicFx clients, each with multiple audio sessions, and close all sessions. + */ + @Test + public void testThreeSessionsInThreeUidOpenClose() { + Log.i(TAG, "running testThreeSessionsInThreeUidOpenClose"); + + int broadcasts = 1, bind = 1, unbind = 0; + //client1 + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession2, mTestUid1); + // client2 + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession3, mTestUid2); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession2, mTestUid2); + // client3 + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg3, mTestSession1, mTestUid3); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg3, mTestSession3, mTestUid3); + + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession1, + mTestUid1); + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg3, mTestSession3, + mTestUid3); + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg2, mTestSession2, + mTestUid2); + // all sessions of client1 closed + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession2, + mTestUid1); + // all sessions of client3 closed + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg3, mTestSession1, + mTestUid3); + // all sessions of client2 closed + broadcasts = broadcasts + 1; + // now expect unbind to happen + unbind = unbind + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg2, mTestSession3, + mTestUid2); + } + + /** + * Two MusicFx clients, with multiple audio sessions, one close all sessions, and other gone. + */ + @Test + public void testTwoUidOneCloseOneGo() { + Log.i(TAG, "running testTwoUidOneCloseOneGo"); + + int broadcasts = 1, bind = 1, unbind = 0; + //client1 + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession2, mTestUid1); + // client2 + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession1, mTestUid2); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession2, mTestUid2); + + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession1, + mTestUid1); + // client2 gone + broadcasts = broadcasts + 2; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid2, unbind, broadcasts); + // client 1 close all sessions + broadcasts = broadcasts + 1; + unbind = unbind + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession2, + mTestUid1); + } + + /** + * Three MusicFx clients, with multiple audio sessions, all UID gone. + */ + @Test + public void testThreeUidAllGo() { + Log.i(TAG, "running testThreeUidAllGo"); + + int broadcasts = 1, bind = 1, unbind = 0; + //client1 + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession2, mTestUid1); + // client2 + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession2, mTestUid2); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession3, mTestUid2); + // client3 + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg3, mTestSession3, mTestUid3); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg3, mTestSession1, mTestUid3); + + // client2 gone + broadcasts = broadcasts + 2; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid2, unbind, broadcasts); + // client3 gone + broadcasts = broadcasts + 2; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid3, unbind, broadcasts); + // client 1 gone + broadcasts = broadcasts + 2; + // now expect unbindService to happen + unbind = unbind + 1; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid1, unbind, broadcasts); + } + + /** + * Three MusicFx clients, multiple audio sessions, open and UID gone in difference sequence. + */ + @Test + public void testThreeUidDiffSequence() { + Log.i(TAG, "running testThreeUidDiffSequence"); + + int broadcasts = 1, bind = 1, unbind = 0; + //client1 + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession1, mTestUid1); + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg1, mTestSession2, mTestUid1); + // client2 + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession2, mTestUid2); + // client1 close one session + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession1, + mTestUid1); + // client2 open another session + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg2, mTestSession3, mTestUid2); + // client3 open one session + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg3, mTestSession3, mTestUid3); + // client2 gone + broadcasts = broadcasts + 2; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid2, unbind, broadcasts); + // client3 open another session + broadcasts = broadcasts + 1; + openSessionWithResList(mDoubleList, bind, broadcasts, mTestPkg3, mTestSession1, mTestUid3); + // client1 close another session, and gone + broadcasts = broadcasts + 1; + closeSessionWithResList(mDoubleList, unbind, broadcasts, mTestPkg1, mTestSession2, + mTestUid1); + // last UID client3 gone, unbind + broadcasts = broadcasts + 2; + unbind = unbind + 1; + sendMessage(MusicFxHelper.MSG_EFFECT_CLIENT_GONE, mTestUid3, unbind, broadcasts); + } +} diff --git a/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java b/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java index 08a0878e6e7c..0eac718c2f14 100644 --- a/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java +++ b/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java @@ -142,4 +142,9 @@ public class NoOpAudioSystemAdapter extends AudioSystemAdapter { @NonNull AudioAttributes attributes, boolean forVolume) { return new ArrayList<>(); } + + @Override + public int setMasterMute(boolean muted) { + return AudioSystem.AUDIO_STATUS_OK; + } } diff --git a/services/tests/servicestests/src/com/android/server/audio/NoOpSystemServerAdapter.java b/services/tests/servicestests/src/com/android/server/audio/NoOpSystemServerAdapter.java index 83c566376e44..a715f519e667 100644 --- a/services/tests/servicestests/src/com/android/server/audio/NoOpSystemServerAdapter.java +++ b/services/tests/servicestests/src/com/android/server/audio/NoOpSystemServerAdapter.java @@ -39,4 +39,9 @@ public class NoOpSystemServerAdapter extends SystemServerAdapter { public void sendDeviceBecomingNoisyIntent() { // no-op } + + @Override + public void broadcastMasterMuteStatus(boolean muted) { + // no-op + } } diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java index 18961c0feef9..ee076c6bcf4b 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTestable.java @@ -140,9 +140,9 @@ public class LockSettingsServiceTestable extends LockSettingsService { } @Override - public ManagedProfilePasswordCache getManagedProfilePasswordCache( + public UnifiedProfilePasswordCache getUnifiedProfilePasswordCache( java.security.KeyStore ks) { - return mock(ManagedProfilePasswordCache.class); + return mock(UnifiedProfilePasswordCache.class); } @Override diff --git a/tools/aapt2/integration-tests/AutoVersionTest/Android.bp b/tools/aapt2/integration-tests/AutoVersionTest/Android.bp index bfd35083366e..c901efa707f4 100644 --- a/tools/aapt2/integration-tests/AutoVersionTest/Android.bp +++ b/tools/aapt2/integration-tests/AutoVersionTest/Android.bp @@ -26,4 +26,5 @@ package { android_test { name: "AaptAutoVersionTest", sdk_version: "current", + use_resource_processor: false, } diff --git a/tools/aapt2/integration-tests/BasicTest/Android.bp b/tools/aapt2/integration-tests/BasicTest/Android.bp index 7db9d2698cc7..d0649ea4ef9c 100644 --- a/tools/aapt2/integration-tests/BasicTest/Android.bp +++ b/tools/aapt2/integration-tests/BasicTest/Android.bp @@ -26,4 +26,5 @@ package { android_test { name: "AaptBasicTest", sdk_version: "current", + use_resource_processor: false, } diff --git a/tools/aapt2/integration-tests/StaticLibTest/App/Android.bp b/tools/aapt2/integration-tests/StaticLibTest/App/Android.bp index 80404eeb8d8e..ebb4e9f479d6 100644 --- a/tools/aapt2/integration-tests/StaticLibTest/App/Android.bp +++ b/tools/aapt2/integration-tests/StaticLibTest/App/Android.bp @@ -24,9 +24,9 @@ package { } android_test { - name: "AaptTestStaticLib_App", sdk_version: "current", + use_resource_processor: false, srcs: ["src/**/*.java"], asset_dirs: [ "assets", diff --git a/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.bp b/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.bp index a84da43c70c8..ee12a92906a8 100644 --- a/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.bp +++ b/tools/aapt2/integration-tests/StaticLibTest/LibOne/Android.bp @@ -26,6 +26,7 @@ package { android_library { name: "AaptTestStaticLib_LibOne", sdk_version: "current", + use_resource_processor: false, srcs: ["src/**/*.java"], resource_dirs: ["res"], } diff --git a/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.bp b/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.bp index d386c3a35d20..83b2362496fc 100644 --- a/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.bp +++ b/tools/aapt2/integration-tests/StaticLibTest/LibTwo/Android.bp @@ -26,6 +26,7 @@ package { android_library { name: "AaptTestStaticLib_LibTwo", sdk_version: "current", + use_resource_processor: false, srcs: ["src/**/*.java"], resource_dirs: ["res"], libs: ["AaptTestStaticLib_LibOne"], diff --git a/tools/aapt2/integration-tests/SymlinkTest/Android.bp b/tools/aapt2/integration-tests/SymlinkTest/Android.bp index 1e8cf86ed811..6fcdf1c77704 100644 --- a/tools/aapt2/integration-tests/SymlinkTest/Android.bp +++ b/tools/aapt2/integration-tests/SymlinkTest/Android.bp @@ -26,4 +26,8 @@ package { android_test { name: "AaptSymlinkTest", sdk_version: "current", + use_resource_processor: false, + compile_data: [ + "targets/*", + ], } |