summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apct-tests/perftests/windowmanager/README.md2
-rw-r--r--apex/jobscheduler/framework/java/android/os/DeviceIdleManager.java1
-rw-r--r--apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java2
-rw-r--r--api/current.txt5
-rw-r--r--api/system-current.txt37
-rw-r--r--api/test-current.txt3384
-rw-r--r--api/test-removed.txt9
-rw-r--r--cmds/statsd/src/atoms.proto88
-rw-r--r--config/boot-image-profile.txt4
-rw-r--r--core/java/android/accessibilityservice/AccessibilityGestureEvent.java47
-rw-r--r--core/java/android/accessibilityservice/AccessibilityService.java23
-rw-r--r--core/java/android/accessibilityservice/AccessibilityServiceInfo.java16
-rw-r--r--core/java/android/app/ActivityManager.java15
-rw-r--r--core/java/android/app/AppOpsManager.java132
-rw-r--r--core/java/android/app/NotificationChannel.java2
-rw-r--r--core/java/android/app/NotificationManager.java6
-rw-r--r--core/java/android/app/RuntimeAppOpAccessMessage.java2
-rw-r--r--core/java/android/app/StatusBarManager.java9
-rw-r--r--core/java/android/app/UiModeManager.java1
-rw-r--r--core/java/android/app/WallpaperManager.java1
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java6
-rw-r--r--core/java/android/app/assist/AssistStructure.java2
-rw-r--r--core/java/android/app/backup/BackupManager.java6
-rw-r--r--core/java/android/app/prediction/AppPredictionContext.java4
-rw-r--r--core/java/android/app/prediction/AppPredictionManager.java2
-rw-r--r--core/java/android/app/prediction/AppPredictionSessionId.java2
-rw-r--r--core/java/android/app/prediction/AppPredictor.java1
-rw-r--r--core/java/android/app/prediction/AppTarget.java5
-rw-r--r--core/java/android/app/prediction/AppTargetEvent.java3
-rw-r--r--core/java/android/app/prediction/AppTargetId.java3
-rw-r--r--core/java/android/app/role/OnRoleHoldersChangedListener.java2
-rw-r--r--core/java/android/app/role/RoleManager.java12
-rw-r--r--core/java/android/app/slice/SliceProvider.java2
-rw-r--r--core/java/android/app/usage/CacheQuotaHint.java2
-rw-r--r--core/java/android/companion/CompanionDeviceManager.java2
-rw-r--r--core/java/android/companion/ICompanionDeviceDiscoveryService.aidl2
-rw-r--r--core/java/android/content/ApexEnvironment.java2
-rw-r--r--core/java/android/content/ContentProviderClient.java2
-rw-r--r--core/java/android/content/ContentResolver.java2
-rw-r--r--core/java/android/content/Context.java11
-rw-r--r--core/java/android/content/Intent.java6
-rw-r--r--core/java/android/content/integrity/AppIntegrityManager.java1
-rw-r--r--core/java/android/content/integrity/IntegrityFormula.java2
-rw-r--r--core/java/android/content/integrity/Rule.java2
-rw-r--r--core/java/android/content/integrity/RuleSet.java2
-rw-r--r--core/java/android/content/pm/ApplicationInfo.java1
-rw-r--r--core/java/android/content/pm/PackageInstaller.java16
-rw-r--r--core/java/android/content/pm/PackageManager.java30
-rw-r--r--core/java/android/content/pm/PermissionInfo.java11
-rw-r--r--core/java/android/content/rollback/PackageRollbackInfo.java3
-rw-r--r--core/java/android/content/rollback/RollbackInfo.java3
-rw-r--r--core/java/android/content/rollback/RollbackManager.java3
-rw-r--r--core/java/android/hardware/biometrics/BiometricConstants.java16
-rw-r--r--core/java/android/hardware/biometrics/BiometricFingerprintConstants.java39
-rw-r--r--core/java/android/hardware/biometrics/BiometricTestSession.java15
-rw-r--r--core/java/android/hardware/biometrics/ITestSession.aidl4
-rw-r--r--core/java/android/hardware/camera2/CameraDevice.java5
-rw-r--r--core/java/android/hardware/display/AmbientBrightnessDayStats.java2
-rw-r--r--core/java/android/hardware/display/BrightnessChangeEvent.java2
-rw-r--r--core/java/android/hardware/display/BrightnessConfiguration.java2
-rw-r--r--core/java/android/hardware/display/BrightnessCorrection.java2
-rw-r--r--core/java/android/hardware/display/DisplayManager.java6
-rw-r--r--core/java/android/hardware/hdmi/HdmiControlManager.java2
-rw-r--r--core/java/android/hardware/hdmi/HdmiPortInfo.java2
-rw-r--r--core/java/android/hardware/hdmi/HdmiSwitchClient.java2
-rw-r--r--core/java/android/hardware/lights/Light.java2
-rw-r--r--core/java/android/hardware/lights/LightState.java2
-rw-r--r--core/java/android/hardware/lights/LightsManager.java1
-rw-r--r--core/java/android/hardware/lights/LightsRequest.java2
-rw-r--r--core/java/android/hardware/soundtrigger/SoundTrigger.java1
-rw-r--r--core/java/android/metrics/LogMaker.java2
-rw-r--r--core/java/android/metrics/MetricsReader.java2
-rw-r--r--core/java/android/net/CaptivePortal.java8
-rw-r--r--core/java/android/net/CaptivePortalData.java2
-rw-r--r--core/java/android/net/ConnectivityManager.java3
-rw-r--r--core/java/android/net/EthernetManager.java1
-rw-r--r--core/java/android/net/IpPrefix.java3
-rw-r--r--core/java/android/net/IpSecAlgorithm.java16
-rw-r--r--core/java/android/net/LinkAddress.java12
-rw-r--r--core/java/android/net/LinkProperties.java27
-rw-r--r--core/java/android/net/Network.java4
-rw-r--r--core/java/android/net/NetworkCapabilities.java5
-rw-r--r--core/java/android/net/NetworkStack.java3
-rw-r--r--core/java/android/net/RouteInfo.java6
-rw-r--r--core/java/android/net/StaticIpConfiguration.java2
-rw-r--r--core/java/android/net/apf/ApfCapabilities.java2
-rw-r--r--core/java/android/net/metrics/ApfProgramEvent.java2
-rw-r--r--core/java/android/net/metrics/ApfStats.java3
-rw-r--r--core/java/android/net/metrics/DhcpClientEvent.java2
-rw-r--r--core/java/android/net/metrics/DhcpErrorEvent.java2
-rw-r--r--core/java/android/net/metrics/IpConnectivityLog.java3
-rw-r--r--core/java/android/net/metrics/IpManagerEvent.java2
-rw-r--r--core/java/android/net/metrics/IpReachabilityEvent.java2
-rw-r--r--core/java/android/net/metrics/NetworkEvent.java2
-rw-r--r--core/java/android/net/metrics/RaEvent.java2
-rw-r--r--core/java/android/net/metrics/ValidationProbeEvent.java2
-rw-r--r--core/java/android/net/util/SocketUtils.java2
-rw-r--r--core/java/android/os/BatteryManager.java2
-rw-r--r--core/java/android/os/BugreportManager.java3
-rw-r--r--core/java/android/os/BugreportParams.java2
-rw-r--r--core/java/android/os/Environment.java5
-rw-r--r--core/java/android/os/HidlMemory.java2
-rw-r--r--core/java/android/os/HwBinder.java2
-rw-r--r--core/java/android/os/HwBlob.java2
-rw-r--r--core/java/android/os/HwParcel.java2
-rw-r--r--core/java/android/os/IHwBinder.java2
-rw-r--r--core/java/android/os/IHwInterface.java2
-rw-r--r--core/java/android/os/IncidentManager.java4
-rw-r--r--core/java/android/os/IncidentReportArgs.java2
-rw-r--r--core/java/android/os/NativeHandle.java2
-rw-r--r--core/java/android/os/PowerManager.java6
-rw-r--r--core/java/android/os/RemoteCallback.java2
-rw-r--r--core/java/android/os/SystemConfigManager.java2
-rw-r--r--core/java/android/os/SystemProperties.java7
-rw-r--r--core/java/android/os/UserHandle.java7
-rw-r--r--core/java/android/os/UserManager.java49
-rw-r--r--core/java/android/os/Vibrator.java6
-rw-r--r--core/java/android/os/WorkSource.java6
-rw-r--r--core/java/android/os/image/DynamicSystemClient.java6
-rw-r--r--core/java/android/os/incremental/IIncrementalService.aidl10
-rw-r--r--core/java/android/os/incremental/IStorageHealthListener.aidl10
-rw-r--r--core/java/android/os/incremental/IncrementalManager.java37
-rw-r--r--core/java/android/os/incremental/IncrementalStorage.java27
-rw-r--r--core/java/android/os/storage/StorageManager.java2
-rw-r--r--core/java/android/permission/PermissionControllerManager.java1
-rw-r--r--core/java/android/permission/PermissionManager.java4
-rw-r--r--core/java/android/permission/RuntimePermissionPresentationInfo.java2
-rw-r--r--core/java/android/provider/DeviceConfig.java25
-rw-r--r--core/java/android/provider/DocumentsContract.java3
-rw-r--r--core/java/android/provider/Settings.java19
-rw-r--r--core/java/android/provider/Telephony.java1
-rw-r--r--core/java/android/service/appprediction/AppPredictionService.java2
-rw-r--r--core/java/android/service/autofill/AutofillFieldClassificationService.java3
-rw-r--r--core/java/android/service/autofill/Dataset.java3
-rw-r--r--core/java/android/service/autofill/InlineSuggestionRenderService.java2
-rw-r--r--core/java/android/service/autofill/augmented/AugmentedAutofillService.java2
-rw-r--r--core/java/android/service/autofill/augmented/FillCallback.java2
-rw-r--r--core/java/android/service/autofill/augmented/FillController.java2
-rw-r--r--core/java/android/service/autofill/augmented/FillResponse.java2
-rw-r--r--core/java/android/service/autofill/augmented/FillWindow.java2
-rw-r--r--core/java/android/service/autofill/augmented/PresentationParams.java3
-rw-r--r--core/java/android/service/contentcapture/ActivityEvent.java2
-rw-r--r--core/java/android/service/contentcapture/ContentCaptureService.java3
-rw-r--r--core/java/android/service/contentcapture/DataShareCallback.java2
-rw-r--r--core/java/android/service/contentcapture/DataShareReadAdapter.java2
-rw-r--r--core/java/android/service/contentcapture/SnapshotData.java2
-rw-r--r--core/java/android/service/notification/Adjustment.java4
-rw-r--r--core/java/android/service/notification/NotificationAssistantService.java2
-rw-r--r--core/java/android/service/notification/NotificationListenerService.java2
-rw-r--r--core/java/android/service/notification/NotificationStats.java2
-rw-r--r--core/java/android/service/notification/SnoozeCriterion.java2
-rw-r--r--core/java/android/service/textclassifier/TextClassifierService.java2
-rw-r--r--core/java/android/service/watchdog/ExplicitHealthCheckService.java2
-rw-r--r--core/java/android/telephony/PhoneStateListener.java7
-rw-r--r--core/java/android/uwb/AngleMeasurement.java65
-rw-r--r--core/java/android/uwb/AngleOfArrivalMeasurement.java63
-rw-r--r--core/java/android/uwb/DistanceMeasurement.java61
-rw-r--r--core/java/android/uwb/RangingMeasurement.java113
-rw-r--r--core/java/android/uwb/RangingParams.java175
-rw-r--r--core/java/android/uwb/RangingReport.java44
-rw-r--r--core/java/android/view/IScrollCaptureCallbacks.aidl (renamed from core/java/android/view/IScrollCaptureController.aidl)21
-rw-r--r--core/java/android/view/IScrollCaptureConnection.aidl (renamed from core/java/android/view/IScrollCaptureClient.aidl)2
-rw-r--r--core/java/android/view/IWindow.aidl6
-rw-r--r--core/java/android/view/IWindowManager.aidl8
-rw-r--r--core/java/android/view/NotificationHeaderView.java13
-rw-r--r--core/java/android/view/ScrollCaptureCallback.java12
-rw-r--r--core/java/android/view/ScrollCaptureConnection.java (renamed from core/java/android/view/ScrollCaptureClient.java)46
-rw-r--r--core/java/android/view/ScrollCaptureSession.java12
-rw-r--r--core/java/android/view/ScrollCaptureTargetResolver.java69
-rw-r--r--core/java/android/view/ViewRootImpl.java52
-rw-r--r--core/java/android/view/Window.java11
-rw-r--r--core/java/android/view/WindowManager.java7
-rw-r--r--core/java/android/view/accessibility/AccessibilityManager.java3
-rw-r--r--core/java/android/view/autofill/AutofillManager.java1
-rw-r--r--core/java/android/view/contentcapture/ContentCaptureContext.java9
-rw-r--r--core/java/android/view/contentcapture/ContentCaptureEvent.java2
-rw-r--r--core/java/android/view/contentcapture/ContentCaptureManager.java1
-rw-r--r--core/java/android/view/contentcapture/ViewNode.java1
-rw-r--r--core/java/android/window/ITaskOrganizerController.aidl8
-rw-r--r--core/java/android/window/TaskOrganizer.java2
-rw-r--r--core/java/com/android/internal/policy/PhoneWindow.java14
-rw-r--r--core/java/com/android/internal/view/BaseIWindow.java6
-rw-r--r--core/jni/android_graphics_BLASTBufferQueue.cpp2
-rw-r--r--core/jni/android_view_Surface.cpp2
-rw-r--r--core/proto/android/telephony/enums.proto8
-rw-r--r--core/proto/android/view/enums.proto2
-rw-r--r--core/res/res/values/attrs.xml1
-rw-r--r--core/res/res/values/strings.xml3
-rw-r--r--core/tests/coretests/src/android/view/ScrollCaptureConnectionTest.java (renamed from core/tests/coretests/src/android/view/ScrollCaptureClientTest.java)97
-rw-r--r--keystore/java/android/security/keystore/AttestationUtils.java2
-rw-r--r--keystore/java/android/security/keystore/DeviceIdAttestationException.java2
-rw-r--r--libs/WindowManager/Shell/res/raw/wm_shell_protolog.json6
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java28
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java6
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsHandler.java7
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java37
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java8
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTaskOrganizer.java74
-rw-r--r--libs/androidfw/CursorWindow.cpp12
-rw-r--r--libs/androidfw/tests/CursorWindow_test.cpp8
-rw-r--r--location/java/android/location/Location.java3
-rw-r--r--location/java/android/location/LocationManager.java5
-rw-r--r--location/java/android/location/LocationRequest.java28
-rw-r--r--media/java/android/media/AudioFocusInfo.java2
-rw-r--r--media/java/android/media/AudioManager.java6
-rw-r--r--media/java/android/media/MediaTranscodeManager.java2
-rw-r--r--media/java/android/media/audiopolicy/AudioMix.java2
-rw-r--r--media/java/android/media/audiopolicy/AudioMixingRule.java2
-rw-r--r--media/java/android/media/audiopolicy/AudioPolicy.java5
-rw-r--r--media/java/android/media/musicrecognition/MusicRecognitionManager.java2
-rw-r--r--media/java/android/media/musicrecognition/MusicRecognitionService.java2
-rw-r--r--media/java/android/media/musicrecognition/RecognitionRequest.java3
-rw-r--r--media/java/android/media/tv/tuner/TunerVersionChecker.java1
-rw-r--r--media/java/android/media/tv/tuner/filter/AvSettings.java208
-rw-r--r--media/jni/android_media_tv_Tuner.cpp123
-rw-r--r--media/jni/android_media_tv_Tuner.h7
-rw-r--r--non-updatable-api/current.txt3
-rw-r--r--non-updatable-api/system-current.txt33
-rw-r--r--packages/Shell/src/com/android/shell/BugreportProgressService.java6
-rw-r--r--packages/SystemUI/Android.bp4
-rw-r--r--packages/SystemUI/res/layout/qs_footer_impl.xml4
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java2
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardRootViewController.java2
-rw-r--r--packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/SystemUIFactory.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/BubbleFlyoutView.java33
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/qualifiers/RootView.java (renamed from packages/SystemUI/src/com/android/keyguard/dagger/RootView.java)4
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt10
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java44
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java34
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSDetail.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java (renamed from packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java)171
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java241
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSFragment.java87
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSPanel.java371
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java201
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java250
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSTileRevealController.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java74
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java83
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java70
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/TileLayout.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentComponent.java55
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java90
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/dagger/QSScope.java32
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java30
-rw-r--r--packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java18
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java113
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java29
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigTextTemplateViewWrapper.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java42
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java30
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java76
-rw-r--r--packages/SystemUI/src/com/android/systemui/tuner/TunerService.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/ViewController.java10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java15
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java109
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java144
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java17
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java141
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java106
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java77
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java24
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureTest.java17
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java19
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java14
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java8
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java12
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java7
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java10
-rw-r--r--services/accessibility/java/com/android/server/accessibility/gestures/GestureManifold.java45
-rw-r--r--services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java88
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java10
-rw-r--r--services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java5
-rw-r--r--services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java4
-rw-r--r--services/autofill/java/com/android/server/autofill/Helper.java44
-rw-r--r--services/autofill/java/com/android/server/autofill/Session.java125
-rw-r--r--services/backup/java/com/android/server/backup/UserBackupManagerService.java2
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java2
-rw-r--r--services/core/java/com/android/server/NetworkTimeUpdateService.java4
-rw-r--r--services/core/java/com/android/server/SystemServiceManager.java60
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java2
-rw-r--r--services/core/java/com/android/server/am/BatteryStatsService.java72
-rw-r--r--services/core/java/com/android/server/am/EventLogTags.logtags14
-rw-r--r--services/core/java/com/android/server/am/UserController.java16
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java4
-rw-r--r--services/core/java/com/android/server/connectivity/DnsManager.java4
-rw-r--r--services/core/java/com/android/server/display/DisplayModeDirector.java1
-rw-r--r--services/core/java/com/android/server/pm/IncrementalStates.java95
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerSession.java60
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java554
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java6
-rw-r--r--services/core/java/com/android/server/pm/PackageSettingBase.java7
-rw-r--r--services/core/java/com/android/server/pm/UserManagerService.java54
-rw-r--r--services/core/java/com/android/server/wm/AppTransition.java53
-rw-r--r--services/core/java/com/android/server/wm/AppTransitionController.java3
-rw-r--r--services/core/java/com/android/server/wm/TaskOrganizerController.java55
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java23
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java5
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java21
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportManager.java9
-rw-r--r--services/incremental/BinderIncrementalService.cpp16
-rw-r--r--services/incremental/BinderIncrementalService.h5
-rw-r--r--services/incremental/IncrementalService.cpp79
-rw-r--r--services/incremental/IncrementalService.h8
-rw-r--r--services/incremental/test/IncrementalServiceTest.cpp91
-rw-r--r--services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java32
-rw-r--r--services/tests/PackageManagerComponentOverrideTests/src/com/android/server/pm/test/override/PackageManagerComponentLabelIconOverrideTest.kt4
-rw-r--r--services/tests/servicestests/src/com/android/server/am/UserControllerTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java91
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java109
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java10
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java22
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TestIWindow.java4
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java29
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java4
-rw-r--r--services/usb/java/com/android/server/usb/MtpNotificationManager.java3
-rw-r--r--services/usb/java/com/android/server/usb/UsbDeviceManager.java7
-rw-r--r--services/usb/java/com/android/server/usb/UsbPortManager.java3
-rwxr-xr-xtelecomm/java/android/telecom/Call.java2
-rw-r--r--telecomm/java/android/telecom/CallScreeningService.java2
-rw-r--r--telecomm/java/android/telecom/Conference.java6
-rw-r--r--[-rwxr-xr-x]telecomm/java/android/telecom/Connection.java18
-rw-r--r--telecomm/java/android/telecom/ConnectionRequest.java1
-rw-r--r--telecomm/java/android/telecom/PhoneAccount.java2
-rw-r--r--telecomm/java/android/telecom/PhoneAccountSuggestionService.java2
-rw-r--r--telecomm/java/android/telecom/TelecomManager.java16
-rw-r--r--telephony/java/android/telephony/AccessNetworkConstants.java6
-rw-r--r--telephony/java/android/telephony/BarringInfo.java1
-rw-r--r--telephony/java/android/telephony/CallQuality.java2
-rw-r--r--[-rwxr-xr-x]telephony/java/android/telephony/CarrierConfigManager.java2
-rw-r--r--telephony/java/android/telephony/DataSpecificRegistrationInfo.java2
-rw-r--r--telephony/java/android/telephony/LteVopsSupportInfo.java2
-rw-r--r--telephony/java/android/telephony/ModemActivityInfo.java1
-rw-r--r--telephony/java/android/telephony/NetworkRegistrationInfo.java35
-rw-r--r--telephony/java/android/telephony/PhoneNumberUtils.java3
-rw-r--r--telephony/java/android/telephony/SubscriptionManager.java8
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java22
-rw-r--r--telephony/java/android/telephony/ims/ImsCallForwardInfo.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsCallProfile.java1
-rw-r--r--telephony/java/android/telephony/ims/ImsCallSessionListener.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsConferenceState.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsException.java4
-rw-r--r--telephony/java/android/telephony/ims/ImsExternalCallState.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsMmTelManager.java36
-rw-r--r--telephony/java/android/telephony/ims/ImsService.java4
-rw-r--r--telephony/java/android/telephony/ims/ImsSsData.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsSsInfo.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsStreamMediaProfile.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsSuppServiceNotification.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsUtListener.java2
-rw-r--r--telephony/java/android/telephony/ims/ImsVideoCallProvider.java3
-rw-r--r--telephony/java/android/telephony/ims/ProvisioningManager.java2
-rw-r--r--telephony/java/android/telephony/ims/RcsUceAdapter.java2
-rw-r--r--telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java2
-rw-r--r--telephony/java/android/telephony/ims/feature/ImsFeature.java23
-rw-r--r--telephony/java/android/telephony/ims/feature/MmTelFeature.java55
-rw-r--r--telephony/java/android/telephony/ims/feature/RcsFeature.java2
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java2
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java2
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsEcbmImplBase.java2
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java2
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsMultiEndpointImplBase.java2
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java2
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java2
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsUtImplBase.java2
-rw-r--r--telephony/java/android/telephony/mbms/DownloadRequest.java2
-rw-r--r--telephony/java/android/telephony/mbms/FileInfo.java2
-rw-r--r--telephony/java/android/telephony/mbms/FileServiceInfo.java2
-rw-r--r--telephony/java/android/telephony/mbms/StreamingServiceInfo.java2
-rw-r--r--telephony/java/android/telephony/mbms/UriPathPair.java2
-rw-r--r--telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java4
-rw-r--r--telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java2
-rw-r--r--telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java4
-rw-r--r--telephony/java/android/telephony/mbms/vendor/VendorUtils.java2
-rw-r--r--test-mock/api/test-current.txt9
-rw-r--r--tests/net/java/com/android/server/connectivity/DnsManagerTest.java3
-rw-r--r--wifi/api/current.txt2
-rw-r--r--wifi/api/system-current.txt4
-rw-r--r--wifi/java/android/net/wifi/aware/Characteristics.java15
-rw-r--r--wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl2
-rw-r--r--wifi/java/android/net/wifi/aware/WifiAwareManager.java41
-rw-r--r--wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java15
400 files changed, 5021 insertions, 6514 deletions
diff --git a/apct-tests/perftests/windowmanager/README.md b/apct-tests/perftests/windowmanager/README.md
index 8b5292fd02a5..7a0019a0c23f 100644
--- a/apct-tests/perftests/windowmanager/README.md
+++ b/apct-tests/perftests/windowmanager/README.md
@@ -4,7 +4,7 @@
To reduce the variance of the test, if `perf-setup.sh` (platform_testing/scripts/perf-setup)
is available, it is better to use the following instructions to lock CPU and GPU frequencies.
```
-m perf-setup.sh
+m perf-setup
PERF_SETUP_PATH=/data/local/tmp/perf-setup.sh
adb push $OUT/$PERF_SETUP_PATH $PERF_SETUP_PATH
adb shell chmod +x $PERF_SETUP_PATH
diff --git a/apex/jobscheduler/framework/java/android/os/DeviceIdleManager.java b/apex/jobscheduler/framework/java/android/os/DeviceIdleManager.java
index ada562ecebc6..752c36e53bf9 100644
--- a/apex/jobscheduler/framework/java/android/os/DeviceIdleManager.java
+++ b/apex/jobscheduler/framework/java/android/os/DeviceIdleManager.java
@@ -29,7 +29,6 @@ import android.content.Context;
*
* @hide
*/
-@TestApi
@SystemApi
@SystemService(Context.DEVICE_IDLE_CONTROLLER)
public class DeviceIdleManager {
diff --git a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java
index 16dcd0674809..ab8722286efc 100644
--- a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java
+++ b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java
@@ -21,7 +21,6 @@ import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.content.Context;
import java.lang.annotation.Retention;
@@ -39,7 +38,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
@SystemService(Context.POWER_WHITELIST_MANAGER)
public class PowerWhitelistManager {
private final Context mContext;
diff --git a/api/current.txt b/api/current.txt
index b20b861b0412..ce82b5ec8cba 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2851,6 +2851,7 @@ package android.accessibilityservice {
method public int describeContents();
method public int getDisplayId();
method public int getGestureId();
+ method @NonNull public java.util.List<android.view.MotionEvent> getMotionEvents();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.accessibilityservice.AccessibilityGestureEvent> CREATOR;
}
@@ -2932,6 +2933,7 @@ package android.accessibilityservice {
field public static final int GESTURE_SWIPE_UP_AND_DOWN = 7; // 0x7
field public static final int GESTURE_SWIPE_UP_AND_LEFT = 13; // 0xd
field public static final int GESTURE_SWIPE_UP_AND_RIGHT = 14; // 0xe
+ field public static final int GESTURE_UNKNOWN = 0; // 0x0
field public static final int GLOBAL_ACTION_ACCESSIBILITY_ALL_APPS = 14; // 0xe
field public static final int GLOBAL_ACTION_ACCESSIBILITY_BUTTON = 11; // 0xb
field public static final int GLOBAL_ACTION_ACCESSIBILITY_BUTTON_CHOOSER = 12; // 0xc
@@ -3047,6 +3049,7 @@ package android.accessibilityservice {
field public static final int FLAG_REQUEST_SHORTCUT_WARNING_DIALOG_SPOKEN_FEEDBACK = 1024; // 0x400
field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
field public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 64; // 0x40
+ field public static final int FLAG_SEND_MOTION_EVENTS = 16384; // 0x4000
field public static final int FLAG_SERVICE_HANDLES_DOUBLE_TAP = 2048; // 0x800
field public int eventTypes;
field public int feedbackType;
@@ -31853,6 +31856,7 @@ package android.net.wifi.aware {
method public int getMaxServiceNameLength();
method public int getMaxServiceSpecificInfoLength();
method public int getSupportedCipherSuites();
+ method public boolean isInstantCommunicationModeSupported();
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
field public static final int WIFI_AWARE_CIPHER_SUITE_NCS_SK_128 = 1; // 0x1
@@ -31951,6 +31955,7 @@ package android.net.wifi.aware {
method public android.net.wifi.aware.Characteristics getCharacteristics();
method public boolean isAvailable();
method public boolean isDeviceAttached();
+ method public boolean isInstantCommunicationModeEnabled();
field public static final String ACTION_WIFI_AWARE_STATE_CHANGED = "android.net.wifi.aware.action.WIFI_AWARE_STATE_CHANGED";
field public static final int WIFI_AWARE_DATA_PATH_ROLE_INITIATOR = 0; // 0x0
field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
diff --git a/api/system-current.txt b/api/system-current.txt
index ff84613dd75e..1da8c29996f9 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -5210,12 +5210,45 @@ package android.media.tv.tuner.filter {
public class AvSettings extends android.media.tv.tuner.filter.Settings {
method @NonNull public static android.media.tv.tuner.filter.AvSettings.Builder builder(int, boolean);
+ method public int getAudioStreamType();
+ method public int getVideoStreamType();
method public boolean isPassthrough();
+ field public static final int AUDIO_STREAM_TYPE_AAC = 6; // 0x6
+ field public static final int AUDIO_STREAM_TYPE_AC3 = 7; // 0x7
+ field public static final int AUDIO_STREAM_TYPE_AC4 = 9; // 0x9
+ field public static final int AUDIO_STREAM_TYPE_DRA = 15; // 0xf
+ field public static final int AUDIO_STREAM_TYPE_DTS = 10; // 0xa
+ field public static final int AUDIO_STREAM_TYPE_DTS_HD = 11; // 0xb
+ field public static final int AUDIO_STREAM_TYPE_EAC3 = 8; // 0x8
+ field public static final int AUDIO_STREAM_TYPE_MP3 = 2; // 0x2
+ field public static final int AUDIO_STREAM_TYPE_MPEG1 = 3; // 0x3
+ field public static final int AUDIO_STREAM_TYPE_MPEG2 = 4; // 0x4
+ field public static final int AUDIO_STREAM_TYPE_MPEGH = 5; // 0x5
+ field public static final int AUDIO_STREAM_TYPE_OPUS = 13; // 0xd
+ field public static final int AUDIO_STREAM_TYPE_PCM = 1; // 0x1
+ field public static final int AUDIO_STREAM_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int AUDIO_STREAM_TYPE_VORBIS = 14; // 0xe
+ field public static final int AUDIO_STREAM_TYPE_WMA = 12; // 0xc
+ field public static final int VIDEO_STREAM_TYPE_AV1 = 10; // 0xa
+ field public static final int VIDEO_STREAM_TYPE_AVC = 5; // 0x5
+ field public static final int VIDEO_STREAM_TYPE_AVS = 11; // 0xb
+ field public static final int VIDEO_STREAM_TYPE_AVS2 = 12; // 0xc
+ field public static final int VIDEO_STREAM_TYPE_HEVC = 6; // 0x6
+ field public static final int VIDEO_STREAM_TYPE_MPEG1 = 2; // 0x2
+ field public static final int VIDEO_STREAM_TYPE_MPEG2 = 3; // 0x3
+ field public static final int VIDEO_STREAM_TYPE_MPEG4P2 = 4; // 0x4
+ field public static final int VIDEO_STREAM_TYPE_RESERVED = 1; // 0x1
+ field public static final int VIDEO_STREAM_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int VIDEO_STREAM_TYPE_VC1 = 7; // 0x7
+ field public static final int VIDEO_STREAM_TYPE_VP8 = 8; // 0x8
+ field public static final int VIDEO_STREAM_TYPE_VP9 = 9; // 0x9
}
public static class AvSettings.Builder {
method @NonNull public android.media.tv.tuner.filter.AvSettings build();
+ method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setAudioStreamType(int);
method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setPassthrough(boolean);
+ method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setVideoStreamType(int);
}
public class DownloadEvent extends android.media.tv.tuner.filter.FilterEvent {
@@ -8040,6 +8073,10 @@ package android.net.wifi.aware {
method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPmk(@NonNull android.net.wifi.aware.PeerHandle, @NonNull byte[]);
}
+ public class WifiAwareManager {
+ method public void enableInstantCommunicationMode(boolean);
+ }
+
public class WifiAwareSession implements java.lang.AutoCloseable {
method public android.net.NetworkSpecifier createNetworkSpecifierPmk(int, @NonNull byte[], @NonNull byte[]);
}
diff --git a/api/test-current.txt b/api/test-current.txt
index d61526a93e8a..7dc74716b9d5 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -81,21 +81,14 @@ package android.app {
public class ActivityManager {
method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void addHomeVisibilityListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.HomeVisibilityListener);
- method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int);
method public void alwaysShowUnsupportedCompileSdkWarning(android.content.ComponentName);
- method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void forceStopPackage(String);
- method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getPackageImportance(String);
method public long getTotalRam();
- method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidImportance(int);
method @RequiresPermission(android.Manifest.permission.INJECT_EVENTS) public void holdLock(int);
method public static boolean isHighEndGfx();
- method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void killProcessesWhenImperceptible(@NonNull int[], @NonNull String);
method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void removeHomeVisibilityListener(@NonNull android.app.HomeVisibilityListener);
- method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener);
method @RequiresPermission(android.Manifest.permission.RESET_APP_ERRORS) public void resetAppErrors();
method public static void resumeAppSwitches() throws android.os.RemoteException;
method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public void scheduleApplicationInfoChanged(java.util.List<java.lang.String>, int);
- method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean switchUser(@NonNull android.os.UserHandle);
field public static final int PROCESS_CAPABILITY_ALL = 7; // 0x7
field public static final int PROCESS_CAPABILITY_ALL_EXPLICIT = 1; // 0x1
field public static final int PROCESS_CAPABILITY_ALL_IMPLICIT = 6; // 0x6
@@ -105,10 +98,6 @@ package android.app {
field public static final int PROCESS_CAPABILITY_NONE = 0; // 0x0
}
- public static interface ActivityManager.OnUidImportanceListener {
- method public void onUidImportance(int, int);
- }
-
public static class ActivityManager.RunningAppProcessInfo implements android.os.Parcelable {
field public static final int IMPORTANCE_CANT_SAVE_STATE_PRE_26 = 170; // 0xaa
}
@@ -204,15 +193,10 @@ package android.app {
public class AppOpsManager {
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void addHistoricalOps(@NonNull android.app.AppOpsManager.HistoricalOps);
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void clearHistory();
- method @Nullable @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public android.app.RuntimeAppOpAccessMessage collectRuntimeAppOpAccessMessage();
- method @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public void getHistoricalOps(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void getHistoricalOpsFromDiskRaw(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @Nullable java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
method public static int getNumOps();
- method public static String[] getOpStrs();
- method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.app.AppOpsManager.PackageOps> getOpsForPackage(int, @NonNull String, @Nullable java.lang.String...);
method public boolean isOperationActive(int, int, String);
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void offsetHistory(long);
- method public static int opToDefaultMode(@NonNull String);
method public static String opToPermission(int);
method public static int permissionToOpCode(String);
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void rebootHistory(long);
@@ -220,8 +204,6 @@ package android.app {
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void resetHistoryParameters();
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void setHistoryParameters(int, long, int);
method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(int, int, String, int);
- method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(@NonNull String, int, @Nullable String, int);
- method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setUidMode(@NonNull String, int, int);
method public static int strOpToOp(@NonNull String);
field public static final int HISTORICAL_MODE_DISABLED = 0; // 0x0
field public static final int HISTORICAL_MODE_ENABLED_ACTIVE = 1; // 0x1
@@ -229,225 +211,19 @@ package android.app {
field public static final String KEY_BG_STATE_SETTLE_TIME = "bg_state_settle_time";
field public static final String KEY_FG_SERVICE_STATE_SETTLE_TIME = "fg_service_state_settle_time";
field public static final String KEY_TOP_STATE_SETTLE_TIME = "top_state_settle_time";
- field public static final String OPSTR_ACCEPT_HANDOVER = "android:accept_handover";
- field public static final String OPSTR_ACCESS_NOTIFICATIONS = "android:access_notifications";
- field public static final String OPSTR_ACTIVATE_VPN = "android:activate_vpn";
- field public static final String OPSTR_ASSIST_SCREENSHOT = "android:assist_screenshot";
- field public static final String OPSTR_ASSIST_STRUCTURE = "android:assist_structure";
- field public static final String OPSTR_AUDIO_ACCESSIBILITY_VOLUME = "android:audio_accessibility_volume";
- field public static final String OPSTR_AUDIO_ALARM_VOLUME = "android:audio_alarm_volume";
- field public static final String OPSTR_AUDIO_BLUETOOTH_VOLUME = "android:audio_bluetooth_volume";
- field public static final String OPSTR_AUDIO_MASTER_VOLUME = "android:audio_master_volume";
- field public static final String OPSTR_AUDIO_MEDIA_VOLUME = "android:audio_media_volume";
- field public static final String OPSTR_AUDIO_NOTIFICATION_VOLUME = "android:audio_notification_volume";
- field public static final String OPSTR_AUDIO_RING_VOLUME = "android:audio_ring_volume";
- field public static final String OPSTR_AUDIO_VOICE_VOLUME = "android:audio_voice_volume";
- field public static final String OPSTR_BIND_ACCESSIBILITY_SERVICE = "android:bind_accessibility_service";
- field public static final String OPSTR_CHANGE_WIFI_STATE = "android:change_wifi_state";
- field public static final String OPSTR_GET_ACCOUNTS = "android:get_accounts";
- field public static final String OPSTR_GPS = "android:gps";
- field public static final String OPSTR_INSTANT_APP_START_FOREGROUND = "android:instant_app_start_foreground";
- field public static final String OPSTR_LEGACY_STORAGE = "android:legacy_storage";
- field public static final String OPSTR_MANAGE_EXTERNAL_STORAGE = "android:manage_external_storage";
- field public static final String OPSTR_MANAGE_IPSEC_TUNNELS = "android:manage_ipsec_tunnels";
- field public static final String OPSTR_MUTE_MICROPHONE = "android:mute_microphone";
- field public static final String OPSTR_NEIGHBORING_CELLS = "android:neighboring_cells";
- field public static final String OPSTR_PLAY_AUDIO = "android:play_audio";
- field public static final String OPSTR_POST_NOTIFICATION = "android:post_notification";
- field public static final String OPSTR_PROJECT_MEDIA = "android:project_media";
- field public static final String OPSTR_READ_CLIPBOARD = "android:read_clipboard";
- field public static final String OPSTR_READ_ICC_SMS = "android:read_icc_sms";
- field public static final String OPSTR_READ_MEDIA_AUDIO = "android:read_media_audio";
- field public static final String OPSTR_READ_MEDIA_IMAGES = "android:read_media_images";
- field public static final String OPSTR_READ_MEDIA_VIDEO = "android:read_media_video";
- field public static final String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast";
- field public static final String OPSTR_REQUEST_DELETE_PACKAGES = "android:request_delete_packages";
- field public static final String OPSTR_REQUEST_INSTALL_PACKAGES = "android:request_install_packages";
- field public static final String OPSTR_RUN_ANY_IN_BACKGROUND = "android:run_any_in_background";
- field public static final String OPSTR_RUN_IN_BACKGROUND = "android:run_in_background";
- field public static final String OPSTR_START_FOREGROUND = "android:start_foreground";
- field public static final String OPSTR_TAKE_AUDIO_FOCUS = "android:take_audio_focus";
- field public static final String OPSTR_TAKE_MEDIA_BUTTONS = "android:take_media_buttons";
- field public static final String OPSTR_TOAST_WINDOW = "android:toast_window";
- field public static final String OPSTR_TURN_SCREEN_ON = "android:turn_screen_on";
- field public static final String OPSTR_VIBRATE = "android:vibrate";
- field public static final String OPSTR_WAKE_LOCK = "android:wake_lock";
- field public static final String OPSTR_WIFI_SCAN = "android:wifi_scan";
- field public static final String OPSTR_WRITE_CLIPBOARD = "android:write_clipboard";
- field public static final String OPSTR_WRITE_ICC_SMS = "android:write_icc_sms";
- field public static final String OPSTR_WRITE_MEDIA_AUDIO = "android:write_media_audio";
- field public static final String OPSTR_WRITE_MEDIA_IMAGES = "android:write_media_images";
- field public static final String OPSTR_WRITE_MEDIA_VIDEO = "android:write_media_video";
- field public static final String OPSTR_WRITE_SMS = "android:write_sms";
- field public static final String OPSTR_WRITE_WALLPAPER = "android:write_wallpaper";
field public static final int OP_COARSE_LOCATION = 0; // 0x0
- field public static final int OP_FLAGS_ALL = 31; // 0x1f
- field public static final int OP_FLAG_SELF = 1; // 0x1
- field public static final int OP_FLAG_TRUSTED_PROXIED = 8; // 0x8
- field public static final int OP_FLAG_TRUSTED_PROXY = 2; // 0x2
- field public static final int OP_FLAG_UNTRUSTED_PROXIED = 16; // 0x10
- field public static final int OP_FLAG_UNTRUSTED_PROXY = 4; // 0x4
field public static final int OP_RECORD_AUDIO = 27; // 0x1b
field public static final int OP_START_FOREGROUND = 76; // 0x4c
field public static final int OP_SYSTEM_ALERT_WINDOW = 24; // 0x18
field public static final long SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE = 151105954L; // 0x901b1a2L
- field public static final int UID_STATE_BACKGROUND = 600; // 0x258
- field public static final int UID_STATE_CACHED = 700; // 0x2bc
- field public static final int UID_STATE_FOREGROUND = 500; // 0x1f4
- field public static final int UID_STATE_FOREGROUND_SERVICE = 400; // 0x190
- field @Deprecated public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 300; // 0x12c
- field public static final int UID_STATE_PERSISTENT = 100; // 0x64
- field public static final int UID_STATE_TOP = 200; // 0xc8
- }
-
- public static final class AppOpsManager.AttributedHistoricalOps implements android.os.Parcelable {
- method public int describeContents();
- method @Nullable public android.app.AppOpsManager.HistoricalOp getOp(@NonNull String);
- method @NonNull public android.app.AppOpsManager.HistoricalOp getOpAt(@IntRange(from=0) int);
- method @IntRange(from=0) public int getOpCount();
- method @Nullable public String getTag();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.AttributedHistoricalOps> CREATOR;
- }
-
- public static final class AppOpsManager.AttributedOpEntry implements android.os.Parcelable {
- method public int describeContents();
- method public long getLastAccessBackgroundTime(int);
- method public long getLastAccessForegroundTime(int);
- method public long getLastAccessTime(int);
- method public long getLastAccessTime(int, int, int);
- method public long getLastBackgroundDuration(int);
- method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastBackgroundProxyInfo(int);
- method public long getLastDuration(int);
- method public long getLastDuration(int, int, int);
- method public long getLastForegroundDuration(int);
- method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastForegroundProxyInfo(int);
- method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int);
- method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int, int, int);
- method public long getLastRejectBackgroundTime(int);
- method public long getLastRejectForegroundTime(int);
- method public long getLastRejectTime(int);
- method public long getLastRejectTime(int, int, int);
- method public boolean isRunning();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.AttributedOpEntry> CREATOR;
- }
-
- public static final class AppOpsManager.HistoricalOp implements android.os.Parcelable {
- method public int describeContents();
- method public long getAccessCount(int, int, int);
- method public long getAccessDuration(int, int, int);
- method public long getBackgroundAccessCount(int);
- method public long getBackgroundAccessDuration(int);
- method public long getBackgroundRejectCount(int);
- method public long getForegroundAccessCount(int);
- method public long getForegroundAccessDuration(int);
- method public long getForegroundRejectCount(int);
- method @NonNull public String getOpName();
- method public long getRejectCount(int, int, int);
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOp> CREATOR;
}
public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable {
ctor public AppOpsManager.HistoricalOps(long, long);
- method public int describeContents();
- method public long getBeginTimeMillis();
- method public long getEndTimeMillis();
- method @IntRange(from=0) public int getUidCount();
- method @Nullable public android.app.AppOpsManager.HistoricalUidOps getUidOps(int);
- method @NonNull public android.app.AppOpsManager.HistoricalUidOps getUidOpsAt(@IntRange(from=0) int);
method public void increaseAccessCount(int, int, @NonNull String, @Nullable String, int, int, long);
method public void increaseAccessDuration(int, int, @NonNull String, @Nullable String, int, int, long);
method public void increaseRejectCount(int, int, @NonNull String, @Nullable String, int, int, long);
method public void offsetBeginAndEndTime(long);
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOps> CREATOR;
- }
-
- public static final class AppOpsManager.HistoricalOpsRequest {
- }
-
- public static final class AppOpsManager.HistoricalOpsRequest.Builder {
- ctor public AppOpsManager.HistoricalOpsRequest.Builder(long, long);
- method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest build();
- method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setAttributionTag(@Nullable String);
- method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setFlags(int);
- method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setOpNames(@Nullable java.util.List<java.lang.String>);
- method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setPackageName(@Nullable String);
- method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setUid(int);
- }
-
- public static final class AppOpsManager.HistoricalPackageOps implements android.os.Parcelable {
- method public int describeContents();
- method @Nullable public android.app.AppOpsManager.AttributedHistoricalOps getAttributedOps(@NonNull String);
- method @NonNull public android.app.AppOpsManager.AttributedHistoricalOps getAttributedOpsAt(@IntRange(from=0) int);
- method @IntRange(from=0) public int getAttributedOpsCount();
- method @Nullable public android.app.AppOpsManager.HistoricalOp getOp(@NonNull String);
- method @NonNull public android.app.AppOpsManager.HistoricalOp getOpAt(@IntRange(from=0) int);
- method @IntRange(from=0) public int getOpCount();
- method @NonNull public String getPackageName();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalPackageOps> CREATOR;
- }
-
- public static final class AppOpsManager.HistoricalUidOps implements android.os.Parcelable {
- method public int describeContents();
- method @IntRange(from=0) public int getPackageCount();
- method @Nullable public android.app.AppOpsManager.HistoricalPackageOps getPackageOps(@NonNull String);
- method @NonNull public android.app.AppOpsManager.HistoricalPackageOps getPackageOpsAt(@IntRange(from=0) int);
- method public int getUid();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalUidOps> CREATOR;
- }
-
- public static final class AppOpsManager.OpEntry implements android.os.Parcelable {
- method public int describeContents();
- method @NonNull public java.util.Map<java.lang.String,android.app.AppOpsManager.AttributedOpEntry> getAttributedOpEntries();
- method @Deprecated public long getDuration();
- method public long getLastAccessBackgroundTime(int);
- method public long getLastAccessForegroundTime(int);
- method public long getLastAccessTime(int);
- method public long getLastAccessTime(int, int, int);
- method public long getLastBackgroundDuration(int);
- method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastBackgroundProxyInfo(int);
- method public long getLastDuration(int);
- method public long getLastDuration(int, int, int);
- method public long getLastForegroundDuration(int);
- method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastForegroundProxyInfo(int);
- method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int);
- method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int, int, int);
- method public long getLastRejectBackgroundTime(int);
- method public long getLastRejectForegroundTime(int);
- method public long getLastRejectTime(int);
- method public long getLastRejectTime(int, int, int);
- method public int getMode();
- method @NonNull public String getOpStr();
- method @Deprecated @Nullable public String getProxyPackageName();
- method @Deprecated @Nullable public String getProxyPackageName(int, int);
- method @Deprecated public int getProxyUid();
- method @Deprecated public int getProxyUid(int, int);
- method public boolean isRunning();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.OpEntry> CREATOR;
- }
-
- public static final class AppOpsManager.OpEventProxyInfo implements android.os.Parcelable {
- method public int describeContents();
- method @Nullable public String getAttributionTag();
- method @Nullable public String getPackageName();
- method @IntRange(from=0) public int getUid();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.OpEventProxyInfo> CREATOR;
- }
-
- public static final class AppOpsManager.PackageOps implements android.os.Parcelable {
- method public int describeContents();
- method @NonNull public java.util.List<android.app.AppOpsManager.OpEntry> getOps();
- method @NonNull public String getPackageName();
- method public int getUid();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.PackageOps> CREATOR;
}
public class DownloadManager {
@@ -472,7 +248,6 @@ package android.app {
method public boolean isImportanceLockedByCriticalDeviceFunction();
method public boolean isImportanceLockedByOEM();
method public void lockFields(int);
- method public void setBlockable(boolean);
method public void setDeleted(boolean);
method public void setDemoted(boolean);
method public void setFgServiceShown(boolean);
@@ -480,7 +255,6 @@ package android.app {
method public void setImportanceLockedByOEM(boolean);
method public void setImportantConversation(boolean);
method public void setOriginalImportance(int);
- field public static final int USER_LOCKED_SOUND = 32; // 0x20
}
public final class NotificationChannelGroup implements android.os.Parcelable {
@@ -492,14 +266,8 @@ package android.app {
public class NotificationManager {
method public void allowAssistantAdjustment(String);
method public void disallowAssistantAdjustment(String);
- method @NonNull public java.util.List<java.lang.String> getAllowedAssistantAdjustments();
- method @Nullable public android.content.ComponentName getAllowedNotificationAssistant();
method public android.content.ComponentName getEffectsSuppressor();
- method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS) public java.util.List<android.content.ComponentName> getEnabledNotificationListeners();
- method public boolean isNotificationAssistantAccessGranted(@NonNull android.content.ComponentName);
method public boolean matchesCallFilter(android.os.Bundle);
- method public void setNotificationAssistantAccessGranted(@Nullable android.content.ComponentName, boolean);
- method @RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS) public void setNotificationListenerAccessGranted(@NonNull android.content.ComponentName, boolean);
method public void updateNotificationChannel(@NonNull String, int, @NonNull android.app.NotificationChannel);
}
@@ -509,36 +277,12 @@ package android.app {
method public android.graphics.Rect getSourceRectHint();
}
- public final class RuntimeAppOpAccessMessage implements android.os.Parcelable {
- ctor public RuntimeAppOpAccessMessage(@IntRange(from=0L) int, @IntRange(from=0L) int, @NonNull String, @Nullable String, @NonNull String, int);
- method public int describeContents();
- method @Nullable public String getAttributionTag();
- method @NonNull public String getMessage();
- method @NonNull public String getOp();
- method @NonNull public String getPackageName();
- method public int getSamplingStrategy();
- method @IntRange(from=0L) public int getUid();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.RuntimeAppOpAccessMessage> CREATOR;
- }
-
public class StatusBarManager {
method public void collapsePanels();
method public void expandNotificationsPanel();
- method @NonNull @RequiresPermission(android.Manifest.permission.STATUS_BAR) public android.app.StatusBarManager.DisableInfo getDisableInfo();
- method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setDisabledForSetup(boolean);
method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setExpansionDisabledForSimNetworkLock(boolean);
}
- public static final class StatusBarManager.DisableInfo {
- method public boolean areAllComponentsEnabled();
- method public boolean isNavigateToHomeDisabled();
- method public boolean isNotificationPeekingDisabled();
- method public boolean isRecentsDisabled();
- method public boolean isSearchDisabled();
- method public boolean isStatusBarExpansionDisabled();
- }
-
public class TaskInfo {
method @NonNull public android.content.res.Configuration getConfiguration();
method @NonNull public android.window.WindowContainerToken getToken();
@@ -557,14 +301,12 @@ package android.app {
}
public class UiModeManager {
- method @RequiresPermission(android.Manifest.permission.ENTER_CAR_MODE_PRIORITIZED) public void enableCarMode(@IntRange(from=0) int, int);
method public boolean isNightModeLocked();
method public boolean isUiModeLocked();
}
public class WallpaperManager {
method @Nullable public android.graphics.Bitmap getBitmap();
- method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT) public boolean setWallpaperComponent(android.content.ComponentName);
method public boolean shouldEnableWideColorGamut();
method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public boolean wallpaperSupportsWcg(int);
}
@@ -609,18 +351,13 @@ package android.app {
package android.app.admin {
public class DevicePolicyManager {
- method @Nullable public CharSequence getDeviceOwnerOrganizationName();
method public long getLastBugReportRequestTime();
method public long getLastNetworkLogRetrievalTime();
method public long getLastSecurityLogRetrievalTime();
method public java.util.List<java.lang.String> getOwnerInstalledCaCerts(@NonNull android.os.UserHandle);
method public boolean isCurrentInputMethodSetByOwner();
- method public boolean isDeviceManaged();
method public boolean isFactoryResetProtectionPolicySupported();
- field public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED = "android.account.DEVICE_OR_PROFILE_OWNER_ALLOWED";
- field public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED = "android.account.DEVICE_OR_PROFILE_OWNER_DISALLOWED";
field public static final String ACTION_DATA_SHARING_RESTRICTION_APPLIED = "android.app.action.DATA_SHARING_RESTRICTION_APPLIED";
- field public static final String EXTRA_RESTRICTION = "android.app.extra.RESTRICTION";
}
public static final class SecurityLog.SecurityEvent implements android.os.Parcelable {
@@ -629,26 +366,6 @@ package android.app.admin {
}
-package android.app.assist {
-
- public static class AssistStructure.ViewNode {
- ctor public AssistStructure.ViewNode();
- }
-
-}
-
-package android.app.backup {
-
- public class BackupManager {
- method @RequiresPermission(android.Manifest.permission.BACKUP) public android.content.Intent getConfigurationIntent(String);
- method @RequiresPermission(android.Manifest.permission.BACKUP) public android.content.Intent getDataManagementIntent(String);
- method @Nullable @RequiresPermission(android.Manifest.permission.BACKUP) public CharSequence getDataManagementIntentLabel(@NonNull String);
- method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.BACKUP) public String getDataManagementLabel(@NonNull String);
- method @RequiresPermission(android.Manifest.permission.BACKUP) public String getDestinationString(String);
- }
-
-}
-
package android.app.blob {
public class BlobStoreManager {
@@ -671,150 +388,27 @@ package android.app.blob {
package android.app.prediction {
- public final class AppPredictionContext implements android.os.Parcelable {
- method public int describeContents();
- method @Nullable public android.os.Bundle getExtras();
- method @NonNull public String getPackageName();
- method @IntRange(from=0) public int getPredictedTargetCount();
- method @NonNull public String getUiSurface();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionContext> CREATOR;
- }
-
- public static final class AppPredictionContext.Builder {
- ctor public AppPredictionContext.Builder(@NonNull android.content.Context);
- method @NonNull public android.app.prediction.AppPredictionContext build();
- method @NonNull public android.app.prediction.AppPredictionContext.Builder setExtras(@Nullable android.os.Bundle);
- method @NonNull public android.app.prediction.AppPredictionContext.Builder setPredictedTargetCount(@IntRange(from=0) int);
- method @NonNull public android.app.prediction.AppPredictionContext.Builder setUiSurface(@NonNull String);
- }
-
- public final class AppPredictionManager {
- method @NonNull public android.app.prediction.AppPredictor createAppPredictionSession(@NonNull android.app.prediction.AppPredictionContext);
- }
-
- public final class AppPredictionSessionId implements android.os.Parcelable {
- method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionSessionId> CREATOR;
- }
-
public final class AppPredictor {
- method public void destroy();
method public android.app.prediction.AppPredictionSessionId getSessionId();
- method public void notifyAppTargetEvent(@NonNull android.app.prediction.AppTargetEvent);
- method public void notifyLaunchLocationShown(@NonNull String, @NonNull java.util.List<android.app.prediction.AppTargetId>);
- method public void registerPredictionUpdates(@NonNull java.util.concurrent.Executor, @NonNull android.app.prediction.AppPredictor.Callback);
- method public void requestPredictionUpdate();
- method @Nullable public void sortTargets(@NonNull java.util.List<android.app.prediction.AppTarget>, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<android.app.prediction.AppTarget>>);
- method public void unregisterPredictionUpdates(@NonNull android.app.prediction.AppPredictor.Callback);
- }
-
- public static interface AppPredictor.Callback {
- method public void onTargetsAvailable(@NonNull java.util.List<android.app.prediction.AppTarget>);
- }
-
- public final class AppTarget implements android.os.Parcelable {
- method public int describeContents();
- method @Nullable public String getClassName();
- method @NonNull public android.app.prediction.AppTargetId getId();
- method @NonNull public String getPackageName();
- method @IntRange(from=0) public int getRank();
- method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo();
- method @NonNull public android.os.UserHandle getUser();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTarget> CREATOR;
- }
-
- public static final class AppTarget.Builder {
- ctor public AppTarget.Builder(@NonNull android.app.prediction.AppTargetId, @NonNull String, @NonNull android.os.UserHandle);
- ctor public AppTarget.Builder(@NonNull android.app.prediction.AppTargetId, @NonNull android.content.pm.ShortcutInfo);
- method @NonNull public android.app.prediction.AppTarget build();
- method @NonNull public android.app.prediction.AppTarget.Builder setClassName(@NonNull String);
- method @NonNull public android.app.prediction.AppTarget.Builder setRank(@IntRange(from=0) int);
- }
-
- public final class AppTargetEvent implements android.os.Parcelable {
- method public int describeContents();
- method public int getAction();
- method @Nullable public String getLaunchLocation();
- method @Nullable public android.app.prediction.AppTarget getTarget();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int ACTION_DISMISS = 2; // 0x2
- field public static final int ACTION_LAUNCH = 1; // 0x1
- field public static final int ACTION_PIN = 3; // 0x3
- field public static final int ACTION_UNPIN = 4; // 0x4
- field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetEvent> CREATOR;
- }
-
- public static final class AppTargetEvent.Builder {
- ctor public AppTargetEvent.Builder(@Nullable android.app.prediction.AppTarget, int);
- method @NonNull public android.app.prediction.AppTargetEvent build();
- method @NonNull public android.app.prediction.AppTargetEvent.Builder setLaunchLocation(@Nullable String);
- }
-
- public final class AppTargetId implements android.os.Parcelable {
- ctor public AppTargetId(@NonNull String);
- method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetId> CREATOR;
}
}
package android.app.role {
- public interface OnRoleHoldersChangedListener {
- method public void onRoleHoldersChanged(@NonNull String, @NonNull android.os.UserHandle);
- }
-
public class RoleControllerManager {
method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isApplicationVisibleForRole(@NonNull String, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
}
public final class RoleManager {
- method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void addOnRoleHoldersChangedListenerAsUser(@NonNull java.util.concurrent.Executor, @NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
- method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean addRoleHolderFromController(@NonNull String, @NonNull String);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void clearRoleHoldersAsUser(@NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
- method @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List<java.lang.String> getHeldRolesFromController(@NonNull String);
- method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> getRoleHolders(@NonNull String);
- method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> getRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle);
method @Nullable public String getSmsRoleHolder(int);
- method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void removeOnRoleHoldersChangedListenerAsUser(@NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void removeRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
- method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean removeRoleHolderFromController(@NonNull String, @NonNull String);
- method @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public void setRoleNamesFromController(@NonNull java.util.List<java.lang.String>);
- field public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; // 0x1
}
}
package android.app.usage {
- public final class CacheQuotaHint implements android.os.Parcelable {
- ctor public CacheQuotaHint(@NonNull android.app.usage.CacheQuotaHint.Builder);
- method public int describeContents();
- method public long getQuota();
- method public int getUid();
- method @Nullable public android.app.usage.UsageStats getUsageStats();
- method @Nullable public String getVolumeUuid();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.CacheQuotaHint> CREATOR;
- field public static final long QUOTA_NOT_SET = -1L; // 0xffffffffffffffffL
- }
-
- public static final class CacheQuotaHint.Builder {
- ctor public CacheQuotaHint.Builder();
- ctor public CacheQuotaHint.Builder(@NonNull android.app.usage.CacheQuotaHint);
- method @NonNull public android.app.usage.CacheQuotaHint build();
- method @NonNull public android.app.usage.CacheQuotaHint.Builder setQuota(long);
- method @NonNull public android.app.usage.CacheQuotaHint.Builder setUid(int);
- method @NonNull public android.app.usage.CacheQuotaHint.Builder setUsageStats(@Nullable android.app.usage.UsageStats);
- method @NonNull public android.app.usage.CacheQuotaHint.Builder setVolumeUuid(@Nullable String);
- }
-
public class NetworkStatsManager {
method public void setPollForce(boolean);
}
@@ -845,23 +439,8 @@ package android.bluetooth {
}
-package android.companion {
-
- public final class CompanionDeviceManager {
- method @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public boolean isDeviceAssociatedForWifiConnection(@NonNull String, @NonNull android.net.MacAddress, @NonNull android.os.UserHandle);
- }
-
-}
-
package android.content {
- public class ApexEnvironment {
- method @NonNull public static android.content.ApexEnvironment getApexEnvironment(@NonNull String);
- method @NonNull public java.io.File getCredentialProtectedDataDirForUser(@NonNull android.os.UserHandle);
- method @NonNull public java.io.File getDeviceProtectedDataDir();
- method @NonNull public java.io.File getDeviceProtectedDataDirForUser(@NonNull android.os.UserHandle);
- }
-
public final class AutofillOptions implements android.os.Parcelable {
ctor public AutofillOptions(int, boolean);
method public int describeContents();
@@ -897,36 +476,21 @@ package android.content {
method @NonNull public static android.os.UserHandle getUserHandleFromUri(@NonNull android.net.Uri);
}
- public class ContentProviderClient implements java.lang.AutoCloseable {
- method @RequiresPermission(android.Manifest.permission.REMOVE_TASKS) public void setDetectNotResponding(long);
- }
-
public abstract class ContentResolver {
- method @NonNull public static android.net.Uri decodeFromFile(@NonNull java.io.File);
- method @NonNull public static java.io.File encodeToFile(@NonNull android.net.Uri);
method public static String[] getSyncAdapterPackagesForAuthorityAsUser(String, int);
}
public abstract class Context {
- method @NonNull public android.content.Context createContextAsUser(@NonNull android.os.UserHandle, int);
- method @NonNull public android.content.Context createPackageContextAsUser(@NonNull String, int, @NonNull android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
method @NonNull public java.io.File getCrateDir(@NonNull String);
method public abstract int getDisplayId();
method public android.os.UserHandle getUser();
method public int getUserId();
method public void setAutofillOptions(@Nullable android.content.AutofillOptions);
method public void setContentCaptureOptions(@Nullable android.content.ContentCaptureOptions);
- method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public void startActivityAsUser(@NonNull @RequiresPermission android.content.Intent, @NonNull android.os.UserHandle);
- field public static final String APP_INTEGRITY_SERVICE = "app_integrity";
- field public static final String BUGREPORT_SERVICE = "bugreport";
field public static final String CONTENT_CAPTURE_MANAGER_SERVICE = "content_capture";
field public static final String DEVICE_IDLE_CONTROLLER = "deviceidle";
field public static final String DREAM_SERVICE = "dream";
- field public static final String ETHERNET_SERVICE = "ethernet";
- field public static final String PERMISSION_SERVICE = "permission";
field public static final String POWER_WHITELIST_MANAGER = "power_whitelist";
- field public static final String ROLLBACK_SERVICE = "rollback";
- field public static final String STATUS_BAR_SERVICE = "statusbar";
field public static final String TEST_NETWORK_SERVICE = "test_network";
}
@@ -934,75 +498,13 @@ package android.content {
method public int getDisplayId();
}
- public class Intent implements java.lang.Cloneable android.os.Parcelable {
- field @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public static final String ACTION_MANAGE_DEFAULT_APP = "android.intent.action.MANAGE_DEFAULT_APP";
- field public static final String ACTION_ROLLBACK_COMMITTED = "android.intent.action.ROLLBACK_COMMITTED";
- field public static final String EXTRA_ORIGINATING_UID = "android.intent.extra.ORIGINATING_UID";
- field public static final String EXTRA_ROLE_NAME = "android.intent.extra.ROLE_NAME";
- }
-
}
package android.content.integrity {
public class AppIntegrityManager {
method @NonNull public android.content.integrity.RuleSet getCurrentRuleSet();
- method @NonNull public String getCurrentRuleSetProvider();
- method @NonNull public String getCurrentRuleSetVersion();
method @NonNull public java.util.List<java.lang.String> getWhitelistedRuleProviders();
- method public void updateRuleSet(@NonNull android.content.integrity.RuleSet, @NonNull android.content.IntentSender);
- field public static final String EXTRA_STATUS = "android.content.integrity.extra.STATUS";
- field public static final int STATUS_FAILURE = 1; // 0x1
- field public static final int STATUS_SUCCESS = 0; // 0x0
- }
-
- public abstract class IntegrityFormula {
- method @NonNull public static android.content.integrity.IntegrityFormula all(@NonNull android.content.integrity.IntegrityFormula...);
- method @NonNull public static android.content.integrity.IntegrityFormula any(@NonNull android.content.integrity.IntegrityFormula...);
- method @NonNull public static android.content.integrity.IntegrityFormula not(@NonNull android.content.integrity.IntegrityFormula);
- }
-
- public static final class IntegrityFormula.Application {
- method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
- method @NonNull public static android.content.integrity.IntegrityFormula isPreInstalled();
- method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
- method @NonNull public static android.content.integrity.IntegrityFormula versionCodeEquals(@NonNull long);
- method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThan(@NonNull long);
- method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThanOrEqualTo(@NonNull long);
- }
-
- public static final class IntegrityFormula.Installer {
- method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
- method @NonNull public static android.content.integrity.IntegrityFormula notAllowedByManifest();
- method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
- }
-
- public static final class IntegrityFormula.SourceStamp {
- method @NonNull public static android.content.integrity.IntegrityFormula notTrusted();
- method @NonNull public static android.content.integrity.IntegrityFormula stampCertificateHashEquals(@NonNull String);
- }
-
- public final class Rule implements android.os.Parcelable {
- ctor public Rule(@NonNull android.content.integrity.IntegrityFormula, int);
- method public int describeContents();
- method public int getEffect();
- method @NonNull public android.content.integrity.IntegrityFormula getFormula();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.content.integrity.Rule> CREATOR;
- field public static final int DENY = 0; // 0x0
- field public static final int FORCE_ALLOW = 1; // 0x1
- }
-
- public class RuleSet {
- method @NonNull public java.util.List<android.content.integrity.Rule> getRules();
- method @NonNull public String getVersion();
- }
-
- public static class RuleSet.Builder {
- ctor public RuleSet.Builder();
- method @NonNull public android.content.integrity.RuleSet.Builder addRules(@NonNull java.util.List<android.content.integrity.Rule>);
- method @NonNull public android.content.integrity.RuleSet build();
- method @NonNull public android.content.integrity.RuleSet.Builder setVersion(@NonNull String);
}
}
@@ -1019,95 +521,38 @@ package android.content.pm {
method public boolean isSystemApp();
field public static final int PRIVATE_FLAG_PRIVILEGED = 8; // 0x8
field public int privateFlags;
- field public int targetSandboxVersion;
}
public class LauncherApps {
ctor public LauncherApps(android.content.Context);
}
- public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
- method public int getAutoRevokePermissionsMode();
- method public int getRollbackDataPolicy();
- method @NonNull public java.util.Set<java.lang.String> getWhitelistedRestrictedPermissions();
- }
-
public static class PackageInstaller.SessionParams implements android.os.Parcelable {
- method public void setEnableRollback(boolean);
- method public void setEnableRollback(boolean, int);
- method @RequiresPermission(android.Manifest.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS) public void setGrantedRuntimePermissions(String[]);
- method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setInstallAsApex();
- method public void setInstallAsInstantApp(boolean);
method public void setInstallerPackageName(@Nullable String);
- method public void setRequestDowngrade(boolean);
- method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged();
}
public abstract class PackageManager {
- method @RequiresPermission("android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS") public abstract void addOnPermissionsChangeListener(@NonNull android.content.pm.PackageManager.OnPermissionsChangedListener);
- method public abstract boolean arePermissionsIndividuallyControlled();
method @Nullable public String getContentCaptureServicePackageName();
- method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract String getDefaultBrowserPackageNameAsUser(int);
method @Nullable public String getDefaultTextClassifierPackageName();
- method @Nullable public String getIncidentReportApproverPackageName();
method public abstract int getInstallReason(@NonNull String, @NonNull android.os.UserHandle);
method @NonNull public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplicationsAsUser(int, int);
- method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackagesAsUser(int, int);
method @Nullable public abstract String[] getNamesForUids(int[]);
method @NonNull public abstract String getPermissionControllerPackageName();
- method @android.content.pm.PackageManager.PermissionFlags @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS, android.Manifest.permission.GET_RUNTIME_PERMISSIONS}) public abstract int getPermissionFlags(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
method @NonNull public abstract String getServicesSystemSharedLibraryPackageName();
method @NonNull public abstract String getSharedSystemSharedLibraryPackageName();
method @Nullable public String getSystemTextClassifierPackageName();
method @Nullable public String getWellbeingPackageName();
- method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public abstract void grantRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
method @RequiresPermission(android.Manifest.permission.INJECT_EVENTS) public void holdLock(int);
- method @RequiresPermission("android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS") public abstract void removeOnPermissionsChangeListener(@NonNull android.content.pm.PackageManager.OnPermissionsChangedListener);
- method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public abstract void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
- method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle, @NonNull String);
- method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS}) public abstract void updatePermissionFlags(@NonNull String, @NonNull String, @android.content.pm.PackageManager.PermissionFlags int, @android.content.pm.PackageManager.PermissionFlags int, @NonNull android.os.UserHandle);
field public static final String FEATURE_ADOPTABLE_STORAGE = "android.software.adoptable_storage";
field public static final String FEATURE_FILE_BASED_ENCRYPTION = "android.software.file_based_encryption";
- field public static final int FLAG_PERMISSION_APPLY_RESTRICTION = 16384; // 0x4000
- field public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 32; // 0x20
- field public static final int FLAG_PERMISSION_GRANTED_BY_ROLE = 32768; // 0x8000
- field public static final int FLAG_PERMISSION_ONE_TIME = 65536; // 0x10000
- field public static final int FLAG_PERMISSION_POLICY_FIXED = 4; // 0x4
- field public static final int FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT = 2048; // 0x800
- field public static final int FLAG_PERMISSION_RESTRICTION_ROLE_EXEMPT = 262144; // 0x40000
- field public static final int FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT = 4096; // 0x1000
- field public static final int FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT = 8192; // 0x2000
- field public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 64; // 0x40
- field public static final int FLAG_PERMISSION_REVOKED_COMPAT = 8; // 0x8
- field @Deprecated public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 8; // 0x8
field public static final int FLAG_PERMISSION_REVOKE_WHEN_REQUESTED = 128; // 0x80
- field public static final int FLAG_PERMISSION_SYSTEM_FIXED = 16; // 0x10
- field public static final int FLAG_PERMISSION_USER_FIXED = 2; // 0x2
- field public static final int FLAG_PERMISSION_USER_SET = 1; // 0x1
- field public static final int MATCH_FACTORY_ONLY = 2097152; // 0x200000
field public static final int MATCH_KNOWN_PACKAGES = 4202496; // 0x402000
- field public static final int MODULE_APEX_NAME = 1; // 0x1
field public static final String SYSTEM_SHARED_LIBRARY_SERVICES = "android.ext.services";
field public static final String SYSTEM_SHARED_LIBRARY_SHARED = "android.ext.shared";
}
- public static interface PackageManager.OnPermissionsChangedListener {
- method public void onPermissionsChanged(int);
- }
-
public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
- field public static final int FLAG_REMOVED = 2; // 0x2
- field public static final int PROTECTION_FLAG_APP_PREDICTOR = 2097152; // 0x200000
- field public static final int PROTECTION_FLAG_COMPANION = 8388608; // 0x800000
- field public static final int PROTECTION_FLAG_CONFIGURATOR = 524288; // 0x80000
- field public static final int PROTECTION_FLAG_DOCUMENTER = 262144; // 0x40000
- field public static final int PROTECTION_FLAG_INCIDENT_REPORT_APPROVER = 1048576; // 0x100000
- field public static final int PROTECTION_FLAG_OEM = 16384; // 0x4000
- field public static final int PROTECTION_FLAG_RETAIL_DEMO = 16777216; // 0x1000000
- field public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 65536; // 0x10000
field public static final int PROTECTION_FLAG_VENDOR_PRIVILEGED = 32768; // 0x8000
- field public static final int PROTECTION_FLAG_WELLBEING = 131072; // 0x20000
- field @Nullable public final String backgroundPermission;
}
public final class ProviderInfoList implements android.os.Parcelable {
@@ -1146,40 +591,11 @@ package android.content.res {
package android.content.rollback {
- public final class PackageRollbackInfo implements android.os.Parcelable {
- method public int describeContents();
- method @NonNull public String getPackageName();
- method @NonNull public android.content.pm.VersionedPackage getVersionRolledBackFrom();
- method @NonNull public android.content.pm.VersionedPackage getVersionRolledBackTo();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.content.rollback.PackageRollbackInfo> CREATOR;
- }
-
- public final class RollbackInfo implements android.os.Parcelable {
- method public int describeContents();
- method @NonNull public java.util.List<android.content.pm.VersionedPackage> getCausePackages();
- method public int getCommittedSessionId();
- method @NonNull public java.util.List<android.content.rollback.PackageRollbackInfo> getPackages();
- method public int getRollbackId();
- method public boolean isStaged();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.content.rollback.RollbackInfo> CREATOR;
- }
-
public final class RollbackManager {
method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void blockRollbackManager(long);
- method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_ROLLBACKS, android.Manifest.permission.TEST_MANAGE_ROLLBACKS}) public void commitRollback(int, @NonNull java.util.List<android.content.pm.VersionedPackage>, @NonNull android.content.IntentSender);
method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void expireRollbackForPackage(@NonNull String);
- method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_ROLLBACKS, android.Manifest.permission.TEST_MANAGE_ROLLBACKS}) public java.util.List<android.content.rollback.RollbackInfo> getAvailableRollbacks();
- method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_ROLLBACKS, android.Manifest.permission.TEST_MANAGE_ROLLBACKS}) public java.util.List<android.content.rollback.RollbackInfo> getRecentlyCommittedRollbacks();
method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void reloadPersistedData();
- field public static final String EXTRA_STATUS = "android.content.rollback.extra.STATUS";
- field public static final String EXTRA_STATUS_MESSAGE = "android.content.rollback.extra.STATUS_MESSAGE";
field public static final String PROPERTY_ROLLBACK_LIFETIME_MILLIS = "rollback_lifetime_in_millis";
- field public static final int STATUS_FAILURE = 1; // 0x1
- field public static final int STATUS_FAILURE_INSTALL = 3; // 0x3
- field public static final int STATUS_FAILURE_ROLLBACK_UNAVAILABLE = 2; // 0x2
- field public static final int STATUS_SUCCESS = 0; // 0x0
}
}
@@ -1272,8 +688,8 @@ package android.hardware.biometrics {
method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void cleanupInternalState(int);
method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void close();
method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void finishEnroll(int);
- method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void notifyAcquired(int);
- method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void notifyError(int);
+ method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void notifyAcquired(int, int);
+ method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void notifyError(int, int);
method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void rejectAuthentication(int);
method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void startEnroll(int);
}
@@ -1290,13 +706,6 @@ package android.hardware.biometrics {
package android.hardware.camera2 {
- public abstract class CameraDevice implements java.lang.AutoCloseable {
- method @Deprecated public abstract void createCustomCaptureSession(android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, int, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
- field public static final int SESSION_OPERATION_MODE_CONSTRAINED_HIGH_SPEED = 1; // 0x1
- field public static final int SESSION_OPERATION_MODE_NORMAL = 0; // 0x0
- field public static final int SESSION_OPERATION_MODE_VENDOR_START = 32768; // 0x8000
- }
-
public final class CameraManager {
method public String[] getCameraIdListNoLazy() throws android.hardware.camera2.CameraAccessException;
}
@@ -1305,15 +714,6 @@ package android.hardware.camera2 {
package android.hardware.display {
- public final class AmbientBrightnessDayStats implements android.os.Parcelable {
- method public int describeContents();
- method public float[] getBucketBoundaries();
- method public java.time.LocalDate getLocalDate();
- method public float[] getStats();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.AmbientBrightnessDayStats> CREATOR;
- }
-
public class AmbientDisplayConfiguration {
ctor public AmbientDisplayConfiguration(android.content.Context);
method public boolean alwaysOnAvailable();
@@ -1321,70 +721,8 @@ package android.hardware.display {
method public boolean alwaysOnEnabled(int);
}
- public final class BrightnessChangeEvent implements android.os.Parcelable {
- method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessChangeEvent> CREATOR;
- field public final float batteryLevel;
- field public final float brightness;
- field public final long colorSampleDuration;
- field public final int colorTemperature;
- field @Nullable public final long[] colorValueBuckets;
- field public final boolean isDefaultBrightnessConfig;
- field public final boolean isUserSetBrightness;
- field public final float lastBrightness;
- field public final long[] luxTimestamps;
- field public final float[] luxValues;
- field public final boolean nightMode;
- field public final String packageName;
- field public final float powerBrightnessFactor;
- field public final long timeStamp;
- }
-
- public final class BrightnessConfiguration implements android.os.Parcelable {
- method public int describeContents();
- method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByCategory(int);
- method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByPackageName(@NonNull String);
- method public android.util.Pair<float[],float[]> getCurve();
- method public float getShortTermModelLowerLuxMultiplier();
- method public long getShortTermModelTimeoutMillis();
- method public float getShortTermModelUpperLuxMultiplier();
- method public boolean shouldCollectColorSamples();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessConfiguration> CREATOR;
- field public static final long SHORT_TERM_TIMEOUT_UNSET = -1L; // 0xffffffffffffffffL
- }
-
- public static class BrightnessConfiguration.Builder {
- ctor public BrightnessConfiguration.Builder(float[], float[]);
- method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByCategory(int, @NonNull android.hardware.display.BrightnessCorrection);
- method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByPackageName(@NonNull String, @NonNull android.hardware.display.BrightnessCorrection);
- method @NonNull public android.hardware.display.BrightnessConfiguration build();
- method public int getMaxCorrectionsByCategory();
- method public int getMaxCorrectionsByPackageName();
- method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setDescription(@Nullable String);
- method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShortTermModelLowerLuxMultiplier(@FloatRange(from=0.0f) float);
- method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShortTermModelTimeoutMillis(long);
- method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShortTermModelUpperLuxMultiplier(@FloatRange(from=0.0f) float);
- method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShouldCollectColorSamples(boolean);
- }
-
- public final class BrightnessCorrection implements android.os.Parcelable {
- method @FloatRange(from=0.0) public float apply(@FloatRange(from=0.0) float);
- method @NonNull public static android.hardware.display.BrightnessCorrection createScaleAndTranslateLog(float, float);
- method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessCorrection> CREATOR;
- }
-
public final class DisplayManager {
- method @RequiresPermission(android.Manifest.permission.ACCESS_AMBIENT_LIGHT_STATS) public java.util.List<android.hardware.display.AmbientBrightnessDayStats> getAmbientBrightnessStats();
- method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getBrightnessConfiguration();
- method @RequiresPermission(android.Manifest.permission.BRIGHTNESS_SLIDER_USAGE) public java.util.List<android.hardware.display.BrightnessChangeEvent> getBrightnessEvents();
- method @Nullable @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getDefaultBrightnessConfiguration();
- method public android.graphics.Point getStableDisplaySize();
method public boolean isMinimalPostProcessingRequested(int);
- method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public void setBrightnessConfiguration(android.hardware.display.BrightnessConfiguration);
method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public void setShouldAlwaysRespectAppRequestedMode(boolean);
method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public boolean shouldAlwaysRespectAppRequestedMode();
field public static final int VIRTUAL_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS = 512; // 0x200
@@ -1404,97 +742,6 @@ package android.hardware.fingerprint {
package android.hardware.hdmi {
- public final class HdmiControlManager {
- method @Nullable public android.hardware.hdmi.HdmiSwitchClient getSwitchClient();
- method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setStandbyMode(boolean);
- field public static final String ACTION_OSD_MESSAGE = "android.hardware.hdmi.action.OSD_MESSAGE";
- field public static final int AVR_VOLUME_MUTED = 101; // 0x65
- field public static final int CLEAR_TIMER_STATUS_CEC_DISABLE = 162; // 0xa2
- field public static final int CLEAR_TIMER_STATUS_CHECK_RECORDER_CONNECTION = 160; // 0xa0
- field public static final int CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE = 161; // 0xa1
- field public static final int CLEAR_TIMER_STATUS_TIMER_CLEARED = 128; // 0x80
- field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_INFO_AVAILABLE = 2; // 0x2
- field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_MATCHING = 1; // 0x1
- field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_RECORDING = 0; // 0x0
- field public static final int CONTROL_STATE_CHANGED_REASON_SETTING = 1; // 0x1
- field public static final int CONTROL_STATE_CHANGED_REASON_STANDBY = 3; // 0x3
- field public static final int CONTROL_STATE_CHANGED_REASON_START = 0; // 0x0
- field public static final int CONTROL_STATE_CHANGED_REASON_WAKEUP = 2; // 0x2
- field public static final int DEVICE_EVENT_ADD_DEVICE = 1; // 0x1
- field public static final int DEVICE_EVENT_REMOVE_DEVICE = 2; // 0x2
- field public static final int DEVICE_EVENT_UPDATE_DEVICE = 3; // 0x3
- field public static final String EXTRA_MESSAGE_EXTRA_PARAM1 = "android.hardware.hdmi.extra.MESSAGE_EXTRA_PARAM1";
- field public static final String EXTRA_MESSAGE_ID = "android.hardware.hdmi.extra.MESSAGE_ID";
- field public static final int ONE_TOUCH_RECORD_ALREADY_RECORDING = 18; // 0x12
- field public static final int ONE_TOUCH_RECORD_CEC_DISABLED = 51; // 0x33
- field public static final int ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION = 49; // 0x31
- field public static final int ONE_TOUCH_RECORD_DISALLOW_TO_COPY = 13; // 0xd
- field public static final int ONE_TOUCH_RECORD_DISALLOW_TO_FUTHER_COPIES = 14; // 0xe
- field public static final int ONE_TOUCH_RECORD_FAIL_TO_RECORD_DISPLAYED_SCREEN = 50; // 0x32
- field public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PHYSICAL_ADDRESS = 10; // 0xa
- field public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PLUG_NUMBER = 9; // 0x9
- field public static final int ONE_TOUCH_RECORD_MEDIA_PROBLEM = 21; // 0x15
- field public static final int ONE_TOUCH_RECORD_MEDIA_PROTECTED = 19; // 0x13
- field public static final int ONE_TOUCH_RECORD_NOT_ENOUGH_SPACE = 22; // 0x16
- field public static final int ONE_TOUCH_RECORD_NO_MEDIA = 16; // 0x10
- field public static final int ONE_TOUCH_RECORD_NO_OR_INSUFFICIENT_CA_ENTITLEMENTS = 12; // 0xc
- field public static final int ONE_TOUCH_RECORD_NO_SOURCE_SIGNAL = 20; // 0x14
- field public static final int ONE_TOUCH_RECORD_OTHER_REASON = 31; // 0x1f
- field public static final int ONE_TOUCH_RECORD_PARENT_LOCK_ON = 23; // 0x17
- field public static final int ONE_TOUCH_RECORD_PLAYING = 17; // 0x11
- field public static final int ONE_TOUCH_RECORD_PREVIOUS_RECORDING_IN_PROGRESS = 48; // 0x30
- field public static final int ONE_TOUCH_RECORD_RECORDING_ALREADY_TERMINATED = 27; // 0x1b
- field public static final int ONE_TOUCH_RECORD_RECORDING_ANALOGUE_SERVICE = 3; // 0x3
- field public static final int ONE_TOUCH_RECORD_RECORDING_CURRENTLY_SELECTED_SOURCE = 1; // 0x1
- field public static final int ONE_TOUCH_RECORD_RECORDING_DIGITAL_SERVICE = 2; // 0x2
- field public static final int ONE_TOUCH_RECORD_RECORDING_EXTERNAL_INPUT = 4; // 0x4
- field public static final int ONE_TOUCH_RECORD_RECORDING_TERMINATED_NORMALLY = 26; // 0x1a
- field public static final int ONE_TOUCH_RECORD_UNABLE_ANALOGUE_SERVICE = 6; // 0x6
- field public static final int ONE_TOUCH_RECORD_UNABLE_DIGITAL_SERVICE = 5; // 0x5
- field public static final int ONE_TOUCH_RECORD_UNABLE_SELECTED_SERVICE = 7; // 0x7
- field public static final int ONE_TOUCH_RECORD_UNSUPPORTED_CA = 11; // 0xb
- field public static final int OSD_MESSAGE_ARC_CONNECTED_INVALID_PORT = 1; // 0x1
- field public static final int OSD_MESSAGE_AVR_VOLUME_CHANGED = 2; // 0x2
- field public static final int POWER_STATUS_ON = 0; // 0x0
- field public static final int POWER_STATUS_STANDBY = 1; // 0x1
- field public static final int POWER_STATUS_TRANSIENT_TO_ON = 2; // 0x2
- field public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3; // 0x3
- field public static final int POWER_STATUS_UNKNOWN = -1; // 0xffffffff
- field @Deprecated public static final int RESULT_ALREADY_IN_PROGRESS = 4; // 0x4
- field public static final int RESULT_COMMUNICATION_FAILED = 7; // 0x7
- field public static final int RESULT_EXCEPTION = 5; // 0x5
- field public static final int RESULT_INCORRECT_MODE = 6; // 0x6
- field public static final int RESULT_SOURCE_NOT_AVAILABLE = 2; // 0x2
- field public static final int RESULT_SUCCESS = 0; // 0x0
- field public static final int RESULT_TARGET_NOT_AVAILABLE = 3; // 0x3
- field public static final int RESULT_TIMEOUT = 1; // 0x1
- field public static final int TIMER_RECORDING_RESULT_EXTRA_CEC_DISABLED = 3; // 0x3
- field public static final int TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION = 1; // 0x1
- field public static final int TIMER_RECORDING_RESULT_EXTRA_FAIL_TO_RECORD_SELECTED_SOURCE = 2; // 0x2
- field public static final int TIMER_RECORDING_RESULT_EXTRA_NO_ERROR = 0; // 0x0
- field public static final int TIMER_RECORDING_TYPE_ANALOGUE = 2; // 0x2
- field public static final int TIMER_RECORDING_TYPE_DIGITAL = 1; // 0x1
- field public static final int TIMER_RECORDING_TYPE_EXTERNAL = 3; // 0x3
- field public static final int TIMER_STATUS_MEDIA_INFO_NOT_PRESENT = 2; // 0x2
- field public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_NOT_PROTECTED = 0; // 0x0
- field public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_PROTECTED = 1; // 0x1
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_CA_NOT_SUPPORTED = 6; // 0x6
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_CLOCK_FAILURE = 10; // 0xa
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_DATE_OUT_OF_RANGE = 2; // 0x2
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_DUPLICATED = 14; // 0xe
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PHYSICAL_NUMBER = 5; // 0x5
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PLUG_NUMBER = 4; // 0x4
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_SEQUENCE = 3; // 0x3
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_CA_ENTITLEMENTS = 7; // 0x7
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_FREE_TIME = 1; // 0x1
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_PARENTAL_LOCK_ON = 9; // 0x9
- field public static final int TIMER_STATUS_NOT_PROGRAMMED_UNSUPPORTED_RESOLUTION = 8; // 0x8
- field public static final int TIMER_STATUS_PROGRAMMED_INFO_ENOUGH_SPACE = 8; // 0x8
- field public static final int TIMER_STATUS_PROGRAMMED_INFO_MIGHT_NOT_ENOUGH_SPACE = 11; // 0xb
- field public static final int TIMER_STATUS_PROGRAMMED_INFO_NOT_ENOUGH_SPACE = 9; // 0x9
- field public static final int TIMER_STATUS_PROGRAMMED_INFO_NO_MEDIA_INFO = 10; // 0xa
- }
-
public final class HdmiControlServiceWrapper {
ctor public HdmiControlServiceWrapper();
method @NonNull public android.hardware.hdmi.HdmiControlManager createHdmiControlManager();
@@ -1503,25 +750,6 @@ package android.hardware.hdmi {
field public static final int DEVICE_PURE_CEC_SWITCH = 6; // 0x6
}
- public final class HdmiPortInfo implements android.os.Parcelable {
- ctor public HdmiPortInfo(int, int, int, boolean, boolean, boolean);
- method public int describeContents();
- method public int getAddress();
- method public int getId();
- method public int getType();
- method public boolean isArcSupported();
- method public boolean isCecSupported();
- method public boolean isMhlSupported();
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiPortInfo> CREATOR;
- field public static final int PORT_INPUT = 0; // 0x0
- field public static final int PORT_OUTPUT = 1; // 0x1
- }
-
- public class HdmiSwitchClient extends android.hardware.hdmi.HdmiClient {
- method public int getDeviceType();
- method @NonNull public java.util.List<android.hardware.hdmi.HdmiPortInfo> getPortInfo();
- }
-
}
package android.hardware.input {
@@ -1538,43 +766,8 @@ package android.hardware.input {
package android.hardware.lights {
- public final class Light implements android.os.Parcelable {
- method public int describeContents();
- method public int getId();
- method public int getOrdinal();
- method public int getType();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.lights.Light> CREATOR;
- }
-
- public final class LightState implements android.os.Parcelable {
- ctor public LightState(@ColorInt int);
- method public int describeContents();
- method @ColorInt public int getColor();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.lights.LightState> CREATOR;
- }
-
public final class LightsManager {
method @NonNull @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS) public android.hardware.lights.LightState getLightState(@NonNull android.hardware.lights.Light);
- method @NonNull @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS) public java.util.List<android.hardware.lights.Light> getLights();
- method @NonNull @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS) public android.hardware.lights.LightsManager.LightsSession openSession();
- field public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8
- }
-
- public final class LightsManager.LightsSession implements java.lang.AutoCloseable {
- method @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS) public void close();
- method @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS) public void requestLights(@NonNull android.hardware.lights.LightsRequest);
- }
-
- public final class LightsRequest {
- }
-
- public static final class LightsRequest.Builder {
- ctor public LightsRequest.Builder();
- method @NonNull public android.hardware.lights.LightsRequest build();
- method @NonNull public android.hardware.lights.LightsRequest.Builder clearLight(@NonNull android.hardware.lights.Light);
- method @NonNull public android.hardware.lights.LightsRequest.Builder setLight(@NonNull android.hardware.lights.Light, @NonNull android.hardware.lights.LightState);
}
}
@@ -1605,84 +798,16 @@ package android.hardware.soundtrigger {
field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.KeyphraseMetadata> CREATOR;
}
- public class SoundTrigger {
- field public static final int RECOGNITION_MODE_GENERIC = 8; // 0x8
- field public static final int RECOGNITION_MODE_USER_AUTHENTICATION = 4; // 0x4
- field public static final int RECOGNITION_MODE_USER_IDENTIFICATION = 2; // 0x2
- field public static final int RECOGNITION_MODE_VOICE_TRIGGER = 1; // 0x1
- field public static final int STATUS_OK = 0; // 0x0
- }
-
- public static final class SoundTrigger.Keyphrase implements android.os.Parcelable {
- ctor public SoundTrigger.Keyphrase(int, int, @NonNull java.util.Locale, @NonNull String, @Nullable int[]);
- method public int getId();
- method @NonNull public java.util.Locale getLocale();
- method public int getRecognitionModes();
- method @NonNull public String getText();
- method @NonNull public int[] getUsers();
- method @NonNull public static android.hardware.soundtrigger.SoundTrigger.Keyphrase readFromParcel(@NonNull android.os.Parcel);
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.Keyphrase> CREATOR;
- }
-
- public static final class SoundTrigger.KeyphraseSoundModel extends android.hardware.soundtrigger.SoundTrigger.SoundModel implements android.os.Parcelable {
- ctor public SoundTrigger.KeyphraseSoundModel(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[], @Nullable android.hardware.soundtrigger.SoundTrigger.Keyphrase[], int);
- ctor public SoundTrigger.KeyphraseSoundModel(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[], @Nullable android.hardware.soundtrigger.SoundTrigger.Keyphrase[]);
- method @NonNull public android.hardware.soundtrigger.SoundTrigger.Keyphrase[] getKeyphrases();
- method @NonNull public static android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel readFromParcel(@NonNull android.os.Parcel);
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel> CREATOR;
- }
-
public static final class SoundTrigger.ModelParamRange implements android.os.Parcelable {
ctor public SoundTrigger.ModelParamRange(int, int);
- method public int getEnd();
- method public int getStart();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.ModelParamRange> CREATOR;
}
public static final class SoundTrigger.ModuleProperties implements android.os.Parcelable {
ctor public SoundTrigger.ModuleProperties(int, @NonNull String, @NonNull String, @NonNull String, int, @NonNull String, int, int, int, int, boolean, int, boolean, int, boolean, int);
- method public int describeContents();
- method public int getAudioCapabilities();
- method @NonNull public String getDescription();
- method public int getId();
- method @NonNull public String getImplementor();
- method public int getMaxBufferMillis();
- method public int getMaxKeyphrases();
- method public int getMaxSoundModels();
- method public int getMaxUsers();
- method public int getPowerConsumptionMw();
- method public int getRecognitionModes();
- method @NonNull public String getSupportedModelArch();
- method @NonNull public java.util.UUID getUuid();
- method public int getVersion();
- method public boolean isCaptureTransitionSupported();
- method public boolean isConcurrentCaptureSupported();
- method public boolean isTriggerReturnedInEvent();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION = 1; // 0x1
- field public static final int AUDIO_CAPABILITY_NOISE_SUPPRESSION = 2; // 0x2
- field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.ModuleProperties> CREATOR;
}
public static class SoundTrigger.RecognitionEvent {
ctor public SoundTrigger.RecognitionEvent(int, int, boolean, int, int, int, boolean, @NonNull android.media.AudioFormat, @Nullable byte[]);
- method @Nullable public android.media.AudioFormat getCaptureFormat();
- method public int getCaptureSession();
- method public byte[] getData();
- method public boolean isCaptureAvailable();
- }
-
- public static class SoundTrigger.SoundModel {
- method @NonNull public byte[] getData();
- method public int getType();
- method @NonNull public java.util.UUID getUuid();
- method @NonNull public java.util.UUID getVendorUuid();
- method public int getVersion();
- field public static final int TYPE_GENERIC_SOUND = 1; // 0x1
- field public static final int TYPE_KEYPHRASE = 0; // 0x0
}
}
@@ -1781,59 +906,17 @@ package android.location {
method public void setType(int);
}
- public class Location implements android.os.Parcelable {
- method public void makeComplete();
- field @Deprecated public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
- }
-
public class LocationManager {
method @NonNull public String[] getBackgroundThrottlingWhitelist();
- method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull android.location.LocationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
method @NonNull public String[] getIgnoreSettingsWhitelist();
method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public java.util.List<java.lang.String> getProviderPackages(@NonNull String);
- method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
- method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
- method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.app.PendingIntent);
- method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setLocationEnabledForUser(boolean, @NonNull android.os.UserHandle);
field public static final String FUSED_PROVIDER = "fused";
}
- public final class LocationRequest implements android.os.Parcelable {
- method @NonNull public android.os.WorkSource getWorkSource();
- method public boolean isHiddenFromAppOps();
- method public boolean isLocationSettingsIgnored();
- method public boolean isLowPower();
- field @Deprecated public static final int ACCURACY_BLOCK = 102; // 0x66
- field @Deprecated public static final int ACCURACY_CITY = 104; // 0x68
- field @Deprecated public static final int ACCURACY_FINE = 100; // 0x64
- field @Deprecated public static final int POWER_HIGH = 203; // 0xcb
- field @Deprecated public static final int POWER_LOW = 201; // 0xc9
- }
-
- public static final class LocationRequest.Builder {
- method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_APP_OPS_STATS) public android.location.LocationRequest.Builder setHiddenFromAppOps(boolean);
- method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest.Builder setLocationSettingsIgnored(boolean);
- method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public android.location.LocationRequest.Builder setLowPower(boolean);
- method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.location.LocationRequest.Builder setWorkSource(@Nullable android.os.WorkSource);
- }
-
}
package android.media {
- public final class AudioFocusInfo implements android.os.Parcelable {
- method public int describeContents();
- method @NonNull public android.media.AudioAttributes getAttributes();
- method @NonNull public String getClientId();
- method public int getClientUid();
- method public int getFlags();
- method public int getGainRequest();
- method public int getLossReceived();
- method @NonNull public String getPackageName();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioFocusInfo> CREATOR;
- }
-
public final class AudioFocusRequest {
method @Nullable public android.media.AudioManager.OnAudioFocusChangeListener getOnAudioFocusChangeListener();
}
@@ -1846,13 +929,7 @@ package android.media {
}
public class AudioManager {
- method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
method public boolean hasRegisteredDynamicPolicy();
- method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
- method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setFocusRequestResult(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
- method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void unregisterAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
- method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void unregisterAudioPolicyAsync(@NonNull android.media.audiopolicy.AudioPolicy);
- field public static final int SUCCESS = 0; // 0x0
}
public static final class AudioRecord.MetricsConstants {
@@ -1908,68 +985,6 @@ package android.media {
method @NonNull public String getOriginalId();
}
- public final class MediaTranscodeManager {
- method @NonNull public android.media.MediaTranscodeManager.TranscodingJob enqueueRequest(@NonNull android.media.MediaTranscodeManager.TranscodingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaTranscodeManager.OnTranscodingFinishedListener) throws java.io.FileNotFoundException, android.media.MediaTranscodingException.ServiceNotAvailableException;
- field public static final int PRIORITY_REALTIME = 1; // 0x1
- field public static final int TRANSCODING_TYPE_VIDEO = 1; // 0x1
- }
-
- @java.lang.FunctionalInterface public static interface MediaTranscodeManager.OnTranscodingFinishedListener {
- method public void onTranscodingFinished(@NonNull android.media.MediaTranscodeManager.TranscodingJob);
- }
-
- public static final class MediaTranscodeManager.TranscodingJob {
- method public void cancel();
- method public int getJobId();
- method @IntRange(from=0, to=100) public int getProgress();
- method public int getResult();
- method public int getStatus();
- method public void setOnProgressUpdateListener(@NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodeManager.TranscodingJob.OnProgressUpdateListener);
- method public void setOnProgressUpdateListener(int, @NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodeManager.TranscodingJob.OnProgressUpdateListener);
- field public static final int RESULT_CANCELED = 4; // 0x4
- field public static final int RESULT_ERROR = 3; // 0x3
- field public static final int RESULT_NONE = 1; // 0x1
- field public static final int RESULT_SUCCESS = 2; // 0x2
- field public static final int STATUS_FINISHED = 3; // 0x3
- field public static final int STATUS_PAUSED = 4; // 0x4
- field public static final int STATUS_PENDING = 1; // 0x1
- field public static final int STATUS_RUNNING = 2; // 0x2
- }
-
- @java.lang.FunctionalInterface public static interface MediaTranscodeManager.TranscodingJob.OnProgressUpdateListener {
- method public void onProgressUpdate(@NonNull android.media.MediaTranscodeManager.TranscodingJob, @IntRange(from=0, to=100) int);
- }
-
- public static final class MediaTranscodeManager.TranscodingRequest {
- method public int getClientPid();
- method public int getClientUid();
- method @NonNull public android.net.Uri getDestinationUri();
- method public int getPriority();
- method @NonNull public android.net.Uri getSourceUri();
- method public int getType();
- method @Nullable public android.media.MediaFormat getVideoTrackFormat();
- }
-
- public static final class MediaTranscodeManager.TranscodingRequest.Builder {
- ctor public MediaTranscodeManager.TranscodingRequest.Builder();
- method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest build();
- method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setClientPid(int);
- method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setClientUid(int);
- method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setDestinationUri(@NonNull android.net.Uri);
- method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setPriority(int);
- method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setSourceUri(@NonNull android.net.Uri);
- method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setType(int);
- method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setVideoTrackFormat(@NonNull android.media.MediaFormat);
- }
-
- public static class MediaTranscodeManager.TranscodingRequest.MediaFormatResolver {
- ctor public MediaTranscodeManager.TranscodingRequest.MediaFormatResolver();
- method @Nullable public android.media.MediaFormat resolveVideoFormat();
- method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.MediaFormatResolver setSourceVideoFormatHint(@NonNull android.media.MediaFormat);
- method public boolean shouldTranscode();
- field public static final String CAPS_SUPPORTS_HEVC = "support-hevc";
- }
-
public final class PlaybackParams implements android.os.Parcelable {
method public int getAudioStretchMode();
method public android.media.PlaybackParams setAudioStretchMode(int);
@@ -2018,141 +1033,8 @@ package android.media.audiofx {
package android.media.audiopolicy {
- public class AudioMix {
- method public int getMixState();
- field public static final int MIX_STATE_DISABLED = -1; // 0xffffffff
- field public static final int MIX_STATE_IDLE = 0; // 0x0
- field public static final int MIX_STATE_MIXING = 1; // 0x1
- field public static final int ROUTE_FLAG_LOOP_BACK = 2; // 0x2
- field public static final int ROUTE_FLAG_RENDER = 1; // 0x1
- }
-
- public static class AudioMix.Builder {
- ctor public AudioMix.Builder(android.media.audiopolicy.AudioMixingRule) throws java.lang.IllegalArgumentException;
- method public android.media.audiopolicy.AudioMix build() throws java.lang.IllegalArgumentException;
- method public android.media.audiopolicy.AudioMix.Builder setDevice(@NonNull android.media.AudioDeviceInfo) throws java.lang.IllegalArgumentException;
- method public android.media.audiopolicy.AudioMix.Builder setFormat(android.media.AudioFormat) throws java.lang.IllegalArgumentException;
- method public android.media.audiopolicy.AudioMix.Builder setRouteFlags(int) throws java.lang.IllegalArgumentException;
- }
-
- public class AudioMixingRule {
- field public static final int RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET = 2; // 0x2
- field public static final int RULE_MATCH_ATTRIBUTE_USAGE = 1; // 0x1
- field public static final int RULE_MATCH_UID = 4; // 0x4
- field public static final int RULE_MATCH_USERID = 8; // 0x8
- }
-
- public static class AudioMixingRule.Builder {
- ctor public AudioMixingRule.Builder();
- method public android.media.audiopolicy.AudioMixingRule.Builder addMixRule(int, Object) throws java.lang.IllegalArgumentException;
- method public android.media.audiopolicy.AudioMixingRule.Builder addRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException;
- method @NonNull public android.media.audiopolicy.AudioMixingRule.Builder allowPrivilegedPlaybackCapture(boolean);
- method public android.media.audiopolicy.AudioMixingRule build();
- method public android.media.audiopolicy.AudioMixingRule.Builder excludeMixRule(int, Object) throws java.lang.IllegalArgumentException;
- method public android.media.audiopolicy.AudioMixingRule.Builder excludeRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException;
- }
-
- public class AudioPolicy {
- method public int attachMixes(@NonNull java.util.List<android.media.audiopolicy.AudioMix>);
- method public android.media.AudioRecord createAudioRecordSink(android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException;
- method public android.media.AudioTrack createAudioTrackSource(android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException;
- method public int detachMixes(@NonNull java.util.List<android.media.audiopolicy.AudioMix>);
- method public int getFocusDuckingBehavior();
- method public int getStatus();
- method public boolean removeUidDeviceAffinity(int);
- method public boolean removeUserIdDeviceAffinity(int);
- method public int setFocusDuckingBehavior(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
- method public void setRegistration(String);
- method public boolean setUidDeviceAffinity(int, @NonNull java.util.List<android.media.AudioDeviceInfo>);
- method public boolean setUserIdDeviceAffinity(int, @NonNull java.util.List<android.media.AudioDeviceInfo>);
- method public String toLogFriendlyString();
- field public static final int FOCUS_POLICY_DUCKING_DEFAULT = 0; // 0x0
- field public static final int FOCUS_POLICY_DUCKING_IN_APP = 0; // 0x0
- field public static final int FOCUS_POLICY_DUCKING_IN_POLICY = 1; // 0x1
- field public static final int POLICY_STATUS_REGISTERED = 2; // 0x2
- field public static final int POLICY_STATUS_UNREGISTERED = 1; // 0x1
- }
-
- public abstract static class AudioPolicy.AudioPolicyFocusListener {
- ctor public AudioPolicy.AudioPolicyFocusListener();
- method public void onAudioFocusAbandon(android.media.AudioFocusInfo);
- method public void onAudioFocusGrant(android.media.AudioFocusInfo, int);
- method public void onAudioFocusLoss(android.media.AudioFocusInfo, boolean);
- method public void onAudioFocusRequest(android.media.AudioFocusInfo, int);
- }
-
- public abstract static class AudioPolicy.AudioPolicyStatusListener {
- ctor public AudioPolicy.AudioPolicyStatusListener();
- method public void onMixStateUpdate(android.media.audiopolicy.AudioMix);
- method public void onStatusChange();
- }
-
- public abstract static class AudioPolicy.AudioPolicyVolumeCallback {
- ctor public AudioPolicy.AudioPolicyVolumeCallback();
- method public void onVolumeAdjustment(int);
- }
-
public static class AudioPolicy.Builder {
- ctor public AudioPolicy.Builder(android.content.Context);
- method @NonNull public android.media.audiopolicy.AudioPolicy.Builder addMix(@NonNull android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException;
- method @NonNull public android.media.audiopolicy.AudioPolicy build();
- method public void setAudioPolicyFocusListener(android.media.audiopolicy.AudioPolicy.AudioPolicyFocusListener);
- method public void setAudioPolicyStatusListener(android.media.audiopolicy.AudioPolicy.AudioPolicyStatusListener);
- method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setAudioPolicyVolumeCallback(@NonNull android.media.audiopolicy.AudioPolicy.AudioPolicyVolumeCallback);
- method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setIsAudioFocusPolicy(boolean);
method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setIsTestFocusPolicy(boolean);
- method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setLooper(@NonNull android.os.Looper) throws java.lang.IllegalArgumentException;
- }
-
-}
-
-package android.media.musicrecognition {
-
- public class MusicRecognitionManager {
- field public static final int RECOGNITION_FAILED_AUDIO_UNAVAILABLE = 7; // 0x7
- field public static final int RECOGNITION_FAILED_NOT_FOUND = 1; // 0x1
- field public static final int RECOGNITION_FAILED_NO_CONNECTIVITY = 2; // 0x2
- field public static final int RECOGNITION_FAILED_SERVICE_KILLED = 5; // 0x5
- field public static final int RECOGNITION_FAILED_SERVICE_UNAVAILABLE = 3; // 0x3
- field public static final int RECOGNITION_FAILED_TIMEOUT = 6; // 0x6
- field public static final int RECOGNITION_FAILED_UNKNOWN = -1; // 0xffffffff
- }
-
- public static interface MusicRecognitionManager.RecognitionCallback {
- method public void onAudioStreamClosed();
- method public void onRecognitionFailed(@NonNull android.media.musicrecognition.RecognitionRequest, int);
- method public void onRecognitionSucceeded(@NonNull android.media.musicrecognition.RecognitionRequest, @NonNull android.media.MediaMetadata, @Nullable android.os.Bundle);
- }
-
- public abstract class MusicRecognitionService extends android.app.Service {
- ctor public MusicRecognitionService();
- method public abstract void onRecognize(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @NonNull android.media.musicrecognition.MusicRecognitionService.Callback);
- }
-
- public static interface MusicRecognitionService.Callback {
- method public void onRecognitionFailed(int);
- method public void onRecognitionSucceeded(@NonNull android.media.MediaMetadata, @Nullable android.os.Bundle);
- }
-
- public final class RecognitionRequest implements android.os.Parcelable {
- method public int describeContents();
- method @NonNull public android.media.AudioAttributes getAudioAttributes();
- method @NonNull public android.media.AudioFormat getAudioFormat();
- method public int getCaptureSession();
- method public int getIgnoreBeginningFrames();
- method public int getMaxAudioLengthSeconds();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.media.musicrecognition.RecognitionRequest> CREATOR;
- }
-
- public static final class RecognitionRequest.Builder {
- ctor public RecognitionRequest.Builder();
- method @NonNull public android.media.musicrecognition.RecognitionRequest build();
- method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setAudioAttributes(@NonNull android.media.AudioAttributes);
- method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setAudioFormat(@NonNull android.media.AudioFormat);
- method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setCaptureSession(int);
- method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setIgnoreBeginningFrames(int);
- method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setMaxAudioLengthSeconds(int);
}
}
@@ -2171,242 +1053,33 @@ package android.media.tv.tuner {
public final class TunerVersionChecker {
method public static int getMajorVersion(int);
method public static int getMinorVersion(int);
- method public static int getTunerVersion();
method public static boolean isHigherOrEqualVersionTo(int);
method public static boolean supportTunerVersion(int);
- field public static final int TUNER_VERSION_1_0 = 65536; // 0x10000
- field public static final int TUNER_VERSION_1_1 = 65537; // 0x10001
- field public static final int TUNER_VERSION_UNKNOWN = 0; // 0x0
- }
-
-}
-
-package android.metrics {
-
- public class LogMaker {
- ctor public LogMaker(int);
- ctor public LogMaker(Object[]);
- method public android.metrics.LogMaker addTaggedData(int, Object);
- method public android.metrics.LogMaker clearCategory();
- method public android.metrics.LogMaker clearPackageName();
- method public android.metrics.LogMaker clearSubtype();
- method public android.metrics.LogMaker clearTaggedData(int);
- method public android.metrics.LogMaker clearType();
- method public void deserialize(Object[]);
- method public int getCategory();
- method public long getCounterBucket();
- method public String getCounterName();
- method public int getCounterValue();
- method public String getPackageName();
- method public int getProcessId();
- method public int getSubtype();
- method public Object getTaggedData(int);
- method public long getTimestamp();
- method public int getType();
- method public int getUid();
- method public boolean isLongCounterBucket();
- method public boolean isSubsetOf(android.metrics.LogMaker);
- method public boolean isValidValue(Object);
- method public Object[] serialize();
- method public android.metrics.LogMaker setCategory(int);
- method public android.metrics.LogMaker setPackageName(String);
- method public android.metrics.LogMaker setSubtype(int);
- method public android.metrics.LogMaker setType(int);
- }
-
- public class MetricsReader {
- ctor public MetricsReader();
- method public void checkpoint();
- method public boolean hasNext();
- method public android.metrics.LogMaker next();
- method public void read(long);
- method public void reset();
}
}
package android.net {
- public class CaptivePortal implements android.os.Parcelable {
- method public void logEvent(int, @NonNull String);
- method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void reevaluateNetwork();
- method public void useNetwork();
- field public static final int APP_REQUEST_REEVALUATION_REQUIRED = 100; // 0x64
- field public static final int APP_RETURN_DISMISSED = 0; // 0x0
- field public static final int APP_RETURN_UNWANTED = 1; // 0x1
- field public static final int APP_RETURN_WANTED_AS_IS = 2; // 0x2
- }
-
- public final class CaptivePortalData implements android.os.Parcelable {
- method public int describeContents();
- method public long getByteLimit();
- method public long getExpiryTimeMillis();
- method public long getRefreshTimeMillis();
- method @Nullable public android.net.Uri getUserPortalUrl();
- method @Nullable public android.net.Uri getVenueInfoUrl();
- method public boolean isCaptive();
- method public boolean isSessionExtendable();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.net.CaptivePortalData> CREATOR;
- }
-
- public static class CaptivePortalData.Builder {
- ctor public CaptivePortalData.Builder();
- ctor public CaptivePortalData.Builder(@Nullable android.net.CaptivePortalData);
- method @NonNull public android.net.CaptivePortalData build();
- method @NonNull public android.net.CaptivePortalData.Builder setBytesRemaining(long);
- method @NonNull public android.net.CaptivePortalData.Builder setCaptive(boolean);
- method @NonNull public android.net.CaptivePortalData.Builder setExpiryTime(long);
- method @NonNull public android.net.CaptivePortalData.Builder setRefreshTime(long);
- method @NonNull public android.net.CaptivePortalData.Builder setSessionExtendable(boolean);
- method @NonNull public android.net.CaptivePortalData.Builder setUserPortalUrl(@Nullable android.net.Uri);
- method @NonNull public android.net.CaptivePortalData.Builder setVenueInfoUrl(@Nullable android.net.Uri);
- }
-
public class ConnectivityManager {
method @RequiresPermission(anyOf={"android.permission.MANAGE_TEST_NETWORKS", android.Manifest.permission.NETWORK_STACK}) public void simulateDataStall(int, long, @NonNull android.net.Network, @NonNull android.os.PersistableBundle);
- method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public void startCaptivePortalApp(@NonNull android.net.Network, @NonNull android.os.Bundle);
- field public static final String EXTRA_CAPTIVE_PORTAL_PROBE_SPEC = "android.net.extra.CAPTIVE_PORTAL_PROBE_SPEC";
- field public static final String EXTRA_CAPTIVE_PORTAL_USER_AGENT = "android.net.extra.CAPTIVE_PORTAL_USER_AGENT";
}
public class EthernetManager {
- method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public android.net.EthernetManager.TetheredInterfaceRequest requestTetheredInterface(@NonNull java.util.concurrent.Executor, @NonNull android.net.EthernetManager.TetheredInterfaceCallback);
method public void setIncludeTestInterfaces(boolean);
}
- public static interface EthernetManager.TetheredInterfaceCallback {
- method public void onAvailable(@NonNull String);
- method public void onUnavailable();
- }
-
- public static class EthernetManager.TetheredInterfaceRequest {
- method public void release();
- }
-
- public final class IpPrefix implements android.os.Parcelable {
- ctor public IpPrefix(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int);
- ctor public IpPrefix(@NonNull String);
- }
-
public final class IpSecManager {
field public static final int INVALID_SECURITY_PARAMETER_INDEX = 0; // 0x0
}
- public class LinkAddress implements android.os.Parcelable {
- ctor public LinkAddress(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int, int, int);
- ctor public LinkAddress(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int, int, int, long, long);
- ctor public LinkAddress(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int);
- ctor public LinkAddress(@NonNull String);
- ctor public LinkAddress(@NonNull String, int, int);
- method public long getDeprecationTime();
- method public long getExpirationTime();
- method public boolean isGlobalPreferred();
- method public boolean isIpv4();
- method public boolean isIpv6();
- method public boolean isSameAddressAs(@Nullable android.net.LinkAddress);
- }
-
- public final class LinkProperties implements android.os.Parcelable {
- ctor public LinkProperties(@Nullable android.net.LinkProperties);
- ctor public LinkProperties(@Nullable android.net.LinkProperties, boolean);
- method public boolean addDnsServer(@NonNull java.net.InetAddress);
- method public boolean addLinkAddress(@NonNull android.net.LinkAddress);
- method @Nullable public android.net.Uri getCaptivePortalApiUrl();
- method @Nullable public android.net.CaptivePortalData getCaptivePortalData();
- method @NonNull public java.util.List<java.net.InetAddress> getPcscfServers();
- method @Nullable public String getTcpBufferSizes();
- method @NonNull public java.util.List<java.net.InetAddress> getValidatedPrivateDnsServers();
- method public boolean hasGlobalIpv6Address();
- method public boolean hasIpv4Address();
- method public boolean hasIpv6DefaultRoute();
- method public boolean isIpv4Provisioned();
- method public boolean isIpv6Provisioned();
- method public boolean isProvisioned();
- method public boolean isReachable(@NonNull java.net.InetAddress);
- method public boolean removeDnsServer(@NonNull java.net.InetAddress);
- method public boolean removeLinkAddress(@NonNull android.net.LinkAddress);
- method public boolean removeRoute(@NonNull android.net.RouteInfo);
- method public void setCaptivePortalApiUrl(@Nullable android.net.Uri);
- method public void setCaptivePortalData(@Nullable android.net.CaptivePortalData);
- method public void setPcscfServers(@NonNull java.util.Collection<java.net.InetAddress>);
- method public void setPrivateDnsServerName(@Nullable String);
- method public void setTcpBufferSizes(@Nullable String);
- method public void setUsePrivateDns(boolean);
- method public void setValidatedPrivateDnsServers(@NonNull java.util.Collection<java.net.InetAddress>);
- }
-
- public class Network implements android.os.Parcelable {
- ctor public Network(@NonNull android.net.Network);
- method public int getNetId();
- method @NonNull public android.net.Network getPrivateDnsBypassingCopy();
- }
-
public final class NetworkCapabilities implements android.os.Parcelable {
- method @NonNull public int[] getAdministratorUids();
method public int[] getCapabilities();
- method @Nullable public String getSsid();
- method @NonNull public int[] getTransportTypes();
- method public boolean satisfiedByNetworkCapabilities(@Nullable android.net.NetworkCapabilities);
field public static final int TRANSPORT_TEST = 7; // 0x7
}
- public static final class NetworkCapabilities.Builder {
- ctor public NetworkCapabilities.Builder();
- ctor public NetworkCapabilities.Builder(@NonNull android.net.NetworkCapabilities);
- method @NonNull public android.net.NetworkCapabilities.Builder addCapability(int);
- method @NonNull public android.net.NetworkCapabilities.Builder addTransportType(int);
- method @NonNull public android.net.NetworkCapabilities build();
- method @NonNull public android.net.NetworkCapabilities.Builder removeCapability(int);
- method @NonNull public android.net.NetworkCapabilities.Builder removeTransportType(int);
- method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setAdministratorUids(@NonNull int[]);
- method @NonNull public android.net.NetworkCapabilities.Builder setLinkDownstreamBandwidthKbps(int);
- method @NonNull public android.net.NetworkCapabilities.Builder setLinkUpstreamBandwidthKbps(int);
- method @NonNull public android.net.NetworkCapabilities.Builder setNetworkSpecifier(@Nullable android.net.NetworkSpecifier);
- method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setOwnerUid(int);
- method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setRequestorPackageName(@Nullable String);
- method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setRequestorUid(int);
- method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP) public android.net.NetworkCapabilities.Builder setSignalStrength(int);
- method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setSsid(@Nullable String);
- method @NonNull public android.net.NetworkCapabilities.Builder setTransportInfo(@Nullable android.net.TransportInfo);
- }
-
public class NetworkStack {
- method @Nullable public static android.os.IBinder getService();
method public static void setServiceForTest(@Nullable android.os.IBinder);
- field public static final String PERMISSION_MAINLINE_NETWORK_STACK = "android.permission.MAINLINE_NETWORK_STACK";
- }
-
- public final class RouteInfo implements android.os.Parcelable {
- ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int);
- method public int getType();
- field public static final int RTN_THROW = 9; // 0x9
- field public static final int RTN_UNICAST = 1; // 0x1
- field public static final int RTN_UNREACHABLE = 7; // 0x7
- }
-
- public final class StaticIpConfiguration implements android.os.Parcelable {
- ctor public StaticIpConfiguration();
- ctor public StaticIpConfiguration(@Nullable android.net.StaticIpConfiguration);
- method public void addDnsServer(@NonNull java.net.InetAddress);
- method public void clear();
- method public int describeContents();
- method @NonNull public java.util.List<java.net.InetAddress> getDnsServers();
- method @Nullable public String getDomains();
- method @Nullable public java.net.InetAddress getGateway();
- method @Nullable public android.net.LinkAddress getIpAddress();
- method @NonNull public java.util.List<android.net.RouteInfo> getRoutes(@Nullable String);
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.net.StaticIpConfiguration> CREATOR;
- }
-
- public static final class StaticIpConfiguration.Builder {
- ctor public StaticIpConfiguration.Builder();
- method @NonNull public android.net.StaticIpConfiguration build();
- method @NonNull public android.net.StaticIpConfiguration.Builder setDnsServers(@NonNull Iterable<java.net.InetAddress>);
- method @NonNull public android.net.StaticIpConfiguration.Builder setDomains(@Nullable String);
- method @NonNull public android.net.StaticIpConfiguration.Builder setGateway(@Nullable java.net.InetAddress);
- method @NonNull public android.net.StaticIpConfiguration.Builder setIpAddress(@Nullable android.net.LinkAddress);
}
public final class TestNetworkInterface implements android.os.Parcelable {
@@ -2434,228 +1107,8 @@ package android.net {
}
-package android.net.apf {
-
- public final class ApfCapabilities implements android.os.Parcelable {
- ctor public ApfCapabilities(int, int, int);
- method public int describeContents();
- method public static boolean getApfDrop8023Frames();
- method @NonNull public static int[] getApfEtherTypeBlackList();
- method public boolean hasDataAccess();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.net.apf.ApfCapabilities> CREATOR;
- field public final int apfPacketFormat;
- field public final int apfVersionSupported;
- field public final int maximumApfProgramSize;
- }
-
-}
-
-package android.net.metrics {
-
- public final class ApfProgramEvent implements android.net.metrics.IpConnectivityLog.Event {
- }
-
- public static final class ApfProgramEvent.Builder {
- ctor public ApfProgramEvent.Builder();
- method @NonNull public android.net.metrics.ApfProgramEvent build();
- method @NonNull public android.net.metrics.ApfProgramEvent.Builder setActualLifetime(long);
- method @NonNull public android.net.metrics.ApfProgramEvent.Builder setCurrentRas(int);
- method @NonNull public android.net.metrics.ApfProgramEvent.Builder setFilteredRas(int);
- method @NonNull public android.net.metrics.ApfProgramEvent.Builder setFlags(boolean, boolean);
- method @NonNull public android.net.metrics.ApfProgramEvent.Builder setLifetime(long);
- method @NonNull public android.net.metrics.ApfProgramEvent.Builder setProgramLength(int);
- }
-
- public final class ApfStats implements android.net.metrics.IpConnectivityLog.Event {
- }
-
- public static final class ApfStats.Builder {
- ctor public ApfStats.Builder();
- method @NonNull public android.net.metrics.ApfStats build();
- method @NonNull public android.net.metrics.ApfStats.Builder setDroppedRas(int);
- method @NonNull public android.net.metrics.ApfStats.Builder setDurationMs(long);
- method @NonNull public android.net.metrics.ApfStats.Builder setMatchingRas(int);
- method @NonNull public android.net.metrics.ApfStats.Builder setMaxProgramSize(int);
- method @NonNull public android.net.metrics.ApfStats.Builder setParseErrors(int);
- method @NonNull public android.net.metrics.ApfStats.Builder setProgramUpdates(int);
- method @NonNull public android.net.metrics.ApfStats.Builder setProgramUpdatesAll(int);
- method @NonNull public android.net.metrics.ApfStats.Builder setProgramUpdatesAllowingMulticast(int);
- method @NonNull public android.net.metrics.ApfStats.Builder setReceivedRas(int);
- method @NonNull public android.net.metrics.ApfStats.Builder setZeroLifetimeRas(int);
- }
-
- public final class DhcpClientEvent implements android.net.metrics.IpConnectivityLog.Event {
- }
-
- public static final class DhcpClientEvent.Builder {
- ctor public DhcpClientEvent.Builder();
- method @NonNull public android.net.metrics.DhcpClientEvent build();
- method @NonNull public android.net.metrics.DhcpClientEvent.Builder setDurationMs(int);
- method @NonNull public android.net.metrics.DhcpClientEvent.Builder setMsg(String);
- }
-
- public final class DhcpErrorEvent implements android.net.metrics.IpConnectivityLog.Event {
- ctor public DhcpErrorEvent(int);
- method public static int errorCodeWithOption(int, int);
- field public static final int BOOTP_TOO_SHORT = 67174400; // 0x4010000
- field public static final int BUFFER_UNDERFLOW = 83951616; // 0x5010000
- field public static final int DHCP_BAD_MAGIC_COOKIE = 67239936; // 0x4020000
- field public static final int DHCP_ERROR = 4; // 0x4
- field public static final int DHCP_INVALID_OPTION_LENGTH = 67305472; // 0x4030000
- field public static final int DHCP_NO_COOKIE = 67502080; // 0x4060000
- field public static final int DHCP_NO_MSG_TYPE = 67371008; // 0x4040000
- field public static final int DHCP_UNKNOWN_MSG_TYPE = 67436544; // 0x4050000
- field public static final int L2_ERROR = 1; // 0x1
- field public static final int L2_TOO_SHORT = 16842752; // 0x1010000
- field public static final int L2_WRONG_ETH_TYPE = 16908288; // 0x1020000
- field public static final int L3_ERROR = 2; // 0x2
- field public static final int L3_INVALID_IP = 33751040; // 0x2030000
- field public static final int L3_NOT_IPV4 = 33685504; // 0x2020000
- field public static final int L3_TOO_SHORT = 33619968; // 0x2010000
- field public static final int L4_ERROR = 3; // 0x3
- field public static final int L4_NOT_UDP = 50397184; // 0x3010000
- field public static final int L4_WRONG_PORT = 50462720; // 0x3020000
- field public static final int MISC_ERROR = 5; // 0x5
- field public static final int PARSING_ERROR = 84082688; // 0x5030000
- field public static final int RECEIVE_ERROR = 84017152; // 0x5020000
- }
-
- public class IpConnectivityLog {
- ctor public IpConnectivityLog();
- method public boolean log(long, @NonNull android.net.metrics.IpConnectivityLog.Event);
- method public boolean log(@NonNull String, @NonNull android.net.metrics.IpConnectivityLog.Event);
- method public boolean log(@NonNull android.net.Network, @NonNull int[], @NonNull android.net.metrics.IpConnectivityLog.Event);
- method public boolean log(int, @NonNull int[], @NonNull android.net.metrics.IpConnectivityLog.Event);
- method public boolean log(@NonNull android.net.metrics.IpConnectivityLog.Event);
- }
-
- public static interface IpConnectivityLog.Event extends android.os.Parcelable {
- }
-
- public final class IpManagerEvent implements android.net.metrics.IpConnectivityLog.Event {
- ctor public IpManagerEvent(int, long);
- field public static final int COMPLETE_LIFECYCLE = 3; // 0x3
- field public static final int ERROR_INTERFACE_NOT_FOUND = 8; // 0x8
- field public static final int ERROR_INVALID_PROVISIONING = 7; // 0x7
- field public static final int ERROR_STARTING_IPREACHABILITYMONITOR = 6; // 0x6
- field public static final int ERROR_STARTING_IPV4 = 4; // 0x4
- field public static final int ERROR_STARTING_IPV6 = 5; // 0x5
- field public static final int PROVISIONING_FAIL = 2; // 0x2
- field public static final int PROVISIONING_OK = 1; // 0x1
- }
-
- public final class IpReachabilityEvent implements android.net.metrics.IpConnectivityLog.Event {
- ctor public IpReachabilityEvent(int);
- field public static final int NUD_FAILED = 512; // 0x200
- field public static final int NUD_FAILED_ORGANIC = 1024; // 0x400
- field public static final int PROBE = 256; // 0x100
- field public static final int PROVISIONING_LOST = 768; // 0x300
- field public static final int PROVISIONING_LOST_ORGANIC = 1280; // 0x500
- }
-
- public final class NetworkEvent implements android.net.metrics.IpConnectivityLog.Event {
- ctor public NetworkEvent(int, long);
- ctor public NetworkEvent(int);
- field public static final int NETWORK_CAPTIVE_PORTAL_FOUND = 4; // 0x4
- field public static final int NETWORK_CONNECTED = 1; // 0x1
- field public static final int NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND = 12; // 0xc
- field public static final int NETWORK_DISCONNECTED = 7; // 0x7
- field public static final int NETWORK_FIRST_VALIDATION_PORTAL_FOUND = 10; // 0xa
- field public static final int NETWORK_FIRST_VALIDATION_SUCCESS = 8; // 0x8
- field public static final int NETWORK_LINGER = 5; // 0x5
- field public static final int NETWORK_PARTIAL_CONNECTIVITY = 13; // 0xd
- field public static final int NETWORK_REVALIDATION_PORTAL_FOUND = 11; // 0xb
- field public static final int NETWORK_REVALIDATION_SUCCESS = 9; // 0x9
- field public static final int NETWORK_UNLINGER = 6; // 0x6
- field public static final int NETWORK_VALIDATED = 2; // 0x2
- field public static final int NETWORK_VALIDATION_FAILED = 3; // 0x3
- }
-
- public final class RaEvent implements android.net.metrics.IpConnectivityLog.Event {
- }
-
- public static final class RaEvent.Builder {
- ctor public RaEvent.Builder();
- method @NonNull public android.net.metrics.RaEvent build();
- method @NonNull public android.net.metrics.RaEvent.Builder updateDnsslLifetime(long);
- method @NonNull public android.net.metrics.RaEvent.Builder updatePrefixPreferredLifetime(long);
- method @NonNull public android.net.metrics.RaEvent.Builder updatePrefixValidLifetime(long);
- method @NonNull public android.net.metrics.RaEvent.Builder updateRdnssLifetime(long);
- method @NonNull public android.net.metrics.RaEvent.Builder updateRouteInfoLifetime(long);
- method @NonNull public android.net.metrics.RaEvent.Builder updateRouterLifetime(long);
- }
-
- public final class ValidationProbeEvent implements android.net.metrics.IpConnectivityLog.Event {
- method @NonNull public static String getProbeName(int);
- field public static final int DNS_FAILURE = 0; // 0x0
- field public static final int DNS_SUCCESS = 1; // 0x1
- field public static final int PROBE_DNS = 0; // 0x0
- field public static final int PROBE_FALLBACK = 4; // 0x4
- field public static final int PROBE_HTTP = 1; // 0x1
- field public static final int PROBE_HTTPS = 2; // 0x2
- field public static final int PROBE_PAC = 3; // 0x3
- field public static final int PROBE_PRIVDNS = 5; // 0x5
- }
-
- public static final class ValidationProbeEvent.Builder {
- ctor public ValidationProbeEvent.Builder();
- method @NonNull public android.net.metrics.ValidationProbeEvent build();
- method @NonNull public android.net.metrics.ValidationProbeEvent.Builder setDurationMs(long);
- method @NonNull public android.net.metrics.ValidationProbeEvent.Builder setProbeType(int, boolean);
- method @NonNull public android.net.metrics.ValidationProbeEvent.Builder setReturnCode(int);
- }
-
-}
-
-package android.net.util {
-
- public final class SocketUtils {
- method public static void bindSocketToInterface(@NonNull java.io.FileDescriptor, @NonNull String) throws android.system.ErrnoException;
- method public static void closeSocket(@Nullable java.io.FileDescriptor) throws java.io.IOException;
- method @NonNull public static java.net.SocketAddress makeNetlinkSocketAddress(int, int);
- method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, int);
- method @Deprecated @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, @NonNull byte[]);
- method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, int, @NonNull byte[]);
- }
-
-}
-
package android.os {
- public class BatteryManager {
- method @RequiresPermission(android.Manifest.permission.POWER_SAVER) public boolean setChargingStateUpdateDelayMillis(int);
- }
-
- public final class BugreportManager {
- method @RequiresPermission(android.Manifest.permission.DUMP) public void cancelBugreport();
- method @RequiresPermission(android.Manifest.permission.DUMP) public void requestBugreport(@NonNull android.os.BugreportParams, @Nullable CharSequence, @Nullable CharSequence);
- method @RequiresPermission(android.Manifest.permission.DUMP) public void startBugreport(@NonNull android.os.ParcelFileDescriptor, @Nullable android.os.ParcelFileDescriptor, @NonNull android.os.BugreportParams, @NonNull java.util.concurrent.Executor, @NonNull android.os.BugreportManager.BugreportCallback);
- }
-
- public abstract static class BugreportManager.BugreportCallback {
- ctor public BugreportManager.BugreportCallback();
- method public void onError(int);
- method public void onFinished();
- method public void onProgress(@FloatRange(from=0.0f, to=100.0f) float);
- field public static final int BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS = 5; // 0x5
- field public static final int BUGREPORT_ERROR_INVALID_INPUT = 1; // 0x1
- field public static final int BUGREPORT_ERROR_RUNTIME = 2; // 0x2
- field public static final int BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT = 4; // 0x4
- field public static final int BUGREPORT_ERROR_USER_DENIED_CONSENT = 3; // 0x3
- }
-
- public final class BugreportParams {
- ctor public BugreportParams(int);
- method public int getMode();
- field public static final int BUGREPORT_MODE_FULL = 0; // 0x0
- field public static final int BUGREPORT_MODE_INTERACTIVE = 1; // 0x1
- field public static final int BUGREPORT_MODE_REMOTE = 2; // 0x2
- field public static final int BUGREPORT_MODE_TELEPHONY = 4; // 0x4
- field public static final int BUGREPORT_MODE_WEAR = 3; // 0x3
- field public static final int BUGREPORT_MODE_WIFI = 5; // 0x5
- }
-
public class Build {
method public static boolean is64BitAbi(String);
field public static final boolean IS_EMULATOR;
@@ -2668,18 +1121,12 @@ package android.os {
}
public class DeviceIdleManager {
- method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void endIdle(@NonNull String);
method @NonNull public String[] getSystemPowerWhitelist();
method @NonNull public String[] getSystemPowerWhitelistExceptIdle();
}
public class Environment {
method public static java.io.File buildPath(java.io.File, java.lang.String...);
- method @NonNull public static java.io.File getOdmDirectory();
- method @NonNull public static java.io.File getOemDirectory();
- method @NonNull public static java.io.File getProductDirectory();
- method @NonNull public static java.io.File getSystemExtDirectory();
- method @NonNull public static java.io.File getVendorDirectory();
}
public final class FileUtils {
@@ -2688,228 +1135,11 @@ package android.os {
method @NonNull public static byte[] digest(@NonNull java.io.InputStream, @NonNull String) throws java.io.IOException, java.security.NoSuchAlgorithmException;
}
- public class HidlMemory implements java.io.Closeable {
- ctor public HidlMemory(@NonNull String, @IntRange(from=0) long, @Nullable android.os.NativeHandle);
- method public void close() throws java.io.IOException;
- method @NonNull public android.os.HidlMemory dup() throws java.io.IOException;
- method protected void finalize();
- method @Nullable public android.os.NativeHandle getHandle();
- method @NonNull public String getName();
- method public long getSize();
- method @Nullable public android.os.NativeHandle releaseHandle();
- }
-
- public abstract class HwBinder implements android.os.IHwBinder {
- ctor public HwBinder();
- method public static final void configureRpcThreadpool(long, boolean);
- method public static void enableInstrumentation();
- method public static final android.os.IHwBinder getService(String, String) throws java.util.NoSuchElementException, android.os.RemoteException;
- method public static final android.os.IHwBinder getService(String, String, boolean) throws java.util.NoSuchElementException, android.os.RemoteException;
- method public static final void joinRpcThreadpool();
- method public abstract void onTransact(int, android.os.HwParcel, android.os.HwParcel, int) throws android.os.RemoteException;
- method public final void registerService(String) throws android.os.RemoteException;
- method public final void transact(int, android.os.HwParcel, android.os.HwParcel, int) throws android.os.RemoteException;
- }
-
- public class HwBlob {
- ctor public HwBlob(int);
- method public final void copyToBoolArray(long, boolean[], int);
- method public final void copyToDoubleArray(long, double[], int);
- method public final void copyToFloatArray(long, float[], int);
- method public final void copyToInt16Array(long, short[], int);
- method public final void copyToInt32Array(long, int[], int);
- method public final void copyToInt64Array(long, long[], int);
- method public final void copyToInt8Array(long, byte[], int);
- method public final boolean getBool(long);
- method public final double getDouble(long);
- method public final long getFieldHandle(long);
- method public final float getFloat(long);
- method public final short getInt16(long);
- method public final int getInt32(long);
- method public final long getInt64(long);
- method public final byte getInt8(long);
- method public final String getString(long);
- method public final long handle();
- method public final void putBlob(long, android.os.HwBlob);
- method public final void putBool(long, boolean);
- method public final void putBoolArray(long, boolean[]);
- method public final void putDouble(long, double);
- method public final void putDoubleArray(long, double[]);
- method public final void putFloat(long, float);
- method public final void putFloatArray(long, float[]);
- method public final void putHidlMemory(long, @NonNull android.os.HidlMemory);
- method public final void putInt16(long, short);
- method public final void putInt16Array(long, short[]);
- method public final void putInt32(long, int);
- method public final void putInt32Array(long, int[]);
- method public final void putInt64(long, long);
- method public final void putInt64Array(long, long[]);
- method public final void putInt8(long, byte);
- method public final void putInt8Array(long, byte[]);
- method public final void putNativeHandle(long, @Nullable android.os.NativeHandle);
- method public final void putString(long, String);
- method public static Boolean[] wrapArray(@NonNull boolean[]);
- method public static Long[] wrapArray(@NonNull long[]);
- method public static Byte[] wrapArray(@NonNull byte[]);
- method public static Short[] wrapArray(@NonNull short[]);
- method public static Integer[] wrapArray(@NonNull int[]);
- method public static Float[] wrapArray(@NonNull float[]);
- method public static Double[] wrapArray(@NonNull double[]);
- }
-
- public class HwParcel {
- ctor public HwParcel();
- method public final void enforceInterface(String);
- method public final boolean readBool();
- method public final java.util.ArrayList<java.lang.Boolean> readBoolVector();
- method public final android.os.HwBlob readBuffer(long);
- method public final double readDouble();
- method public final java.util.ArrayList<java.lang.Double> readDoubleVector();
- method public final android.os.HwBlob readEmbeddedBuffer(long, long, long, boolean);
- method @NonNull @Nullable public final android.os.HidlMemory readEmbeddedHidlMemory(long, long, long);
- method @Nullable public final android.os.NativeHandle readEmbeddedNativeHandle(long, long);
- method public final float readFloat();
- method public final java.util.ArrayList<java.lang.Float> readFloatVector();
- method @NonNull public final android.os.HidlMemory readHidlMemory();
- method public final short readInt16();
- method public final java.util.ArrayList<java.lang.Short> readInt16Vector();
- method public final int readInt32();
- method public final java.util.ArrayList<java.lang.Integer> readInt32Vector();
- method public final long readInt64();
- method public final java.util.ArrayList<java.lang.Long> readInt64Vector();
- method public final byte readInt8();
- method public final java.util.ArrayList<java.lang.Byte> readInt8Vector();
- method @Nullable public final android.os.NativeHandle readNativeHandle();
- method @NonNull public final java.util.ArrayList<android.os.NativeHandle> readNativeHandleVector();
- method public final String readString();
- method public final java.util.ArrayList<java.lang.String> readStringVector();
- method public final android.os.IHwBinder readStrongBinder();
- method public final void release();
- method public final void releaseTemporaryStorage();
- method public final void send();
- method public final void verifySuccess();
- method public final void writeBool(boolean);
- method public final void writeBoolVector(java.util.ArrayList<java.lang.Boolean>);
- method public final void writeBuffer(android.os.HwBlob);
- method public final void writeDouble(double);
- method public final void writeDoubleVector(java.util.ArrayList<java.lang.Double>);
- method public final void writeFloat(float);
- method public final void writeFloatVector(java.util.ArrayList<java.lang.Float>);
- method public final void writeHidlMemory(@NonNull android.os.HidlMemory);
- method public final void writeInt16(short);
- method public final void writeInt16Vector(java.util.ArrayList<java.lang.Short>);
- method public final void writeInt32(int);
- method public final void writeInt32Vector(java.util.ArrayList<java.lang.Integer>);
- method public final void writeInt64(long);
- method public final void writeInt64Vector(java.util.ArrayList<java.lang.Long>);
- method public final void writeInt8(byte);
- method public final void writeInt8Vector(java.util.ArrayList<java.lang.Byte>);
- method public final void writeInterfaceToken(String);
- method public final void writeNativeHandle(@Nullable android.os.NativeHandle);
- method public final void writeNativeHandleVector(@NonNull java.util.ArrayList<android.os.NativeHandle>);
- method public final void writeStatus(int);
- method public final void writeString(String);
- method public final void writeStringVector(java.util.ArrayList<java.lang.String>);
- method public final void writeStrongBinder(android.os.IHwBinder);
- field public static final int STATUS_SUCCESS = 0; // 0x0
- }
-
- public interface IHwBinder {
- method public boolean linkToDeath(android.os.IHwBinder.DeathRecipient, long);
- method public android.os.IHwInterface queryLocalInterface(String);
- method public void transact(int, android.os.HwParcel, android.os.HwParcel, int) throws android.os.RemoteException;
- method public boolean unlinkToDeath(android.os.IHwBinder.DeathRecipient);
- }
-
- public static interface IHwBinder.DeathRecipient {
- method public void serviceDied(long);
- }
-
- public interface IHwInterface {
- method public android.os.IHwBinder asBinder();
- }
-
- public class IncidentManager {
- method @RequiresPermission(android.Manifest.permission.APPROVE_INCIDENT_REPORTS) public void approveReport(android.net.Uri);
- method @RequiresPermission("android.permission.REQUEST_INCIDENT_REPORT_APPROVAL") public void cancelAuthorization(android.os.IncidentManager.AuthListener);
- method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void deleteIncidentReports(android.net.Uri);
- method @RequiresPermission(android.Manifest.permission.APPROVE_INCIDENT_REPORTS) public void denyReport(android.net.Uri);
- method @Nullable @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public android.os.IncidentManager.IncidentReport getIncidentReport(android.net.Uri);
- method @NonNull @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public java.util.List<android.net.Uri> getIncidentReportList(String);
- method @RequiresPermission(android.Manifest.permission.APPROVE_INCIDENT_REPORTS) public java.util.List<android.os.IncidentManager.PendingReport> getPendingReports();
- method public void registerSection(int, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.os.IncidentManager.DumpCallback);
- method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void reportIncident(android.os.IncidentReportArgs);
- method @RequiresPermission("android.permission.REQUEST_INCIDENT_REPORT_APPROVAL") public void requestAuthorization(int, String, int, android.os.IncidentManager.AuthListener);
- method public void unregisterSection(int);
- field public static final int FLAG_CONFIRMATION_DIALOG = 1; // 0x1
- field public static final int PRIVACY_POLICY_AUTO = 200; // 0xc8
- field public static final int PRIVACY_POLICY_EXPLICIT = 100; // 0x64
- field public static final int PRIVACY_POLICY_LOCAL = 0; // 0x0
- }
-
- public static class IncidentManager.AuthListener {
- ctor public IncidentManager.AuthListener();
- method public void onReportApproved();
- method public void onReportDenied();
- }
-
- public static class IncidentManager.DumpCallback {
- ctor public IncidentManager.DumpCallback();
- method public void onDumpSection(int, @NonNull java.io.OutputStream);
- }
-
- public static class IncidentManager.IncidentReport implements java.io.Closeable android.os.Parcelable {
- ctor public IncidentManager.IncidentReport(android.os.Parcel);
- method public void close();
- method public int describeContents();
- method public java.io.InputStream getInputStream() throws java.io.IOException;
- method public long getPrivacyPolicy();
- method public long getTimestamp();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentManager.IncidentReport> CREATOR;
- }
-
- public static class IncidentManager.PendingReport {
- ctor public IncidentManager.PendingReport(@NonNull android.net.Uri);
- method public int getFlags();
- method @NonNull public String getRequestingPackage();
- method public long getTimestamp();
- method @NonNull public android.net.Uri getUri();
- }
-
- public final class IncidentReportArgs implements android.os.Parcelable {
- ctor public IncidentReportArgs();
- ctor public IncidentReportArgs(android.os.Parcel);
- method public void addHeader(byte[]);
- method public void addSection(int);
- method public boolean containsSection(int);
- method public int describeContents();
- method public boolean isAll();
- method public void readFromParcel(android.os.Parcel);
- method public int sectionCount();
- method public void setAll(boolean);
- method public void setPrivacyPolicy(int);
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentReportArgs> CREATOR;
- }
-
public final class MessageQueue {
method public int postSyncBarrier();
method public void removeSyncBarrier(int);
}
- public final class NativeHandle implements java.io.Closeable {
- ctor public NativeHandle();
- ctor public NativeHandle(@NonNull java.io.FileDescriptor, boolean);
- ctor public NativeHandle(@NonNull java.io.FileDescriptor[], @NonNull int[], boolean);
- method public void close() throws java.io.IOException;
- method @NonNull public android.os.NativeHandle dup() throws java.io.IOException;
- method @NonNull public java.io.FileDescriptor getFileDescriptor();
- method @NonNull public java.io.FileDescriptor[] getFileDescriptors();
- method @NonNull public int[] getInts();
- method public boolean hasSingleFileDescriptor();
- }
-
public final class Parcel {
method public boolean allowSquashing();
method public int readExceptionCode();
@@ -2921,24 +1151,7 @@ package android.os {
}
public final class PowerManager {
- method @RequiresPermission(android.Manifest.permission.POWER_SAVER) public int getPowerSaveModeTrigger();
- method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void setBatteryDischargePrediction(@NonNull java.time.Duration, boolean);
- method @RequiresPermission(android.Manifest.permission.POWER_SAVER) public boolean setDynamicPowerSaveHint(boolean, int);
- method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setPowerSaveModeEnabled(boolean);
field public static final String ACTION_ENHANCED_DISCHARGE_PREDICTION_CHANGED = "android.os.action.ENHANCED_DISCHARGE_PREDICTION_CHANGED";
- field public static final int POWER_SAVE_MODE_TRIGGER_DYNAMIC = 1; // 0x1
- field public static final int POWER_SAVE_MODE_TRIGGER_PERCENTAGE = 0; // 0x0
- }
-
- public class PowerWhitelistManager {
- method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void addToWhitelist(@NonNull String);
- method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void addToWhitelist(@NonNull java.util.List<java.lang.String>);
- method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void removeFromWhitelist(@NonNull String);
- method @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void whitelistAppTemporarily(@NonNull String, long);
- method @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public long whitelistAppTemporarilyForEvent(@NonNull String, int, @NonNull String);
- field public static final int EVENT_MMS = 2; // 0x2
- field public static final int EVENT_SMS = 1; // 0x1
- field public static final int EVENT_UNSPECIFIED = 0; // 0x0
}
public class Process {
@@ -2950,19 +1163,6 @@ package android.os {
field public static final int NUM_UIDS_PER_APP_ZYGOTE = 100; // 0x64
}
- public final class RemoteCallback implements android.os.Parcelable {
- ctor public RemoteCallback(android.os.RemoteCallback.OnResultListener);
- ctor public RemoteCallback(@NonNull android.os.RemoteCallback.OnResultListener, @Nullable android.os.Handler);
- method public int describeContents();
- method public void sendResult(@Nullable android.os.Bundle);
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.os.RemoteCallback> CREATOR;
- }
-
- public static interface RemoteCallback.OnResultListener {
- method public void onResult(@Nullable android.os.Bundle);
- }
-
public final class StrictMode {
method public static void conditionallyCheckInstanceCounts();
method public static void setViolationLogger(android.os.StrictMode.ViolationLogger);
@@ -3000,31 +1200,11 @@ package android.os {
method @NonNull public android.os.StrictMode.VmPolicy.Builder permitIncorrectContextUse();
}
- public class SystemConfigManager {
- method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Set<java.lang.String> getDisabledUntilUsedPreinstalledCarrierApps();
- method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
- }
-
- public class SystemProperties {
- method @NonNull public static String get(@NonNull String);
- method @NonNull public static String get(@NonNull String, @Nullable String);
- method public static boolean getBoolean(@NonNull String, boolean);
- method public static int getInt(@NonNull String, int);
- method public static long getLong(@NonNull String, long);
- }
-
public final class UserHandle implements android.os.Parcelable {
- method public static int getAppId(int);
- method public int getIdentifier();
method public static int getUid(int, int);
method public static int getUserId(int);
method public static boolean isApp(int);
- method public static int myUserId();
- method public static android.os.UserHandle of(int);
- field @NonNull public static final android.os.UserHandle ALL;
- field @NonNull public static final android.os.UserHandle CURRENT;
field public static final int MIN_SECONDARY_USER_ID = 10; // 0xa
- field @NonNull public static final android.os.UserHandle SYSTEM;
field public static final int USER_ALL = -1; // 0xffffffff
field public static final int USER_NULL = -10000; // 0xffffd8f0
field public static final int USER_SYSTEM = 0; // 0x0
@@ -3033,7 +1213,6 @@ package android.os {
public class UserManager {
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean hasBaseUserRestriction(@NonNull String, @NonNull android.os.UserHandle);
method public static boolean isSplitSystemUser();
- field public static final String ACTION_USER_RESTRICTIONS_CHANGED = "android.os.action.USER_RESTRICTIONS_CHANGED";
}
public final class VibrationAttributes implements android.os.Parcelable {
@@ -3090,17 +1269,6 @@ package android.os {
field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect.Waveform> CREATOR;
}
- public abstract class Vibrator {
- method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void addVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
- method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void addVibratorStateListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.Vibrator.OnVibratorStateChangedListener);
- method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public boolean isVibrating();
- method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void removeVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
- }
-
- public static interface Vibrator.OnVibratorStateChangedListener {
- method public void onVibratorStateChanged(boolean);
- }
-
public class VintfObject {
method public static String[] getHalNamesAndVersions();
method public static String getSepolicyVersion();
@@ -3120,16 +1288,10 @@ package android.os {
}
public class WorkSource implements android.os.Parcelable {
- ctor public WorkSource(int);
method public boolean add(int);
method public boolean add(int, String);
method @Deprecated public android.os.WorkSource addReturningNewbs(android.os.WorkSource);
- method @Nullable public String getPackageName(int);
- method public int getUid(int);
- method public boolean isEmpty();
method @Deprecated public android.os.WorkSource[] setReturningDiffs(android.os.WorkSource);
- method public int size();
- method @NonNull public android.os.WorkSource withoutNames();
}
}
@@ -3189,36 +1351,6 @@ package android.os.health {
}
-package android.os.image {
-
- public class DynamicSystemClient {
- ctor public DynamicSystemClient(@NonNull android.content.Context);
- method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void bind();
- method public void setOnStatusChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.image.DynamicSystemClient.OnStatusChangedListener);
- method public void setOnStatusChangedListener(@NonNull android.os.image.DynamicSystemClient.OnStatusChangedListener);
- method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void start(@NonNull android.net.Uri, long);
- method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void start(@NonNull android.net.Uri, long, long);
- method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void unbind();
- field public static final int CAUSE_ERROR_EXCEPTION = 6; // 0x6
- field public static final int CAUSE_ERROR_INVALID_URL = 4; // 0x4
- field public static final int CAUSE_ERROR_IO = 3; // 0x3
- field public static final int CAUSE_ERROR_IPC = 5; // 0x5
- field public static final int CAUSE_INSTALL_CANCELLED = 2; // 0x2
- field public static final int CAUSE_INSTALL_COMPLETED = 1; // 0x1
- field public static final int CAUSE_NOT_SPECIFIED = 0; // 0x0
- field public static final int STATUS_IN_PROGRESS = 2; // 0x2
- field public static final int STATUS_IN_USE = 4; // 0x4
- field public static final int STATUS_NOT_STARTED = 1; // 0x1
- field public static final int STATUS_READY = 3; // 0x3
- field public static final int STATUS_UNKNOWN = 0; // 0x0
- }
-
- public static interface DynamicSystemClient.OnStatusChangedListener {
- method public void onStatusChanged(int, int, long, @Nullable Throwable);
- }
-
-}
-
package android.os.storage {
public final class CrateInfo implements android.os.Parcelable {
@@ -3232,10 +1364,6 @@ package android.os.storage {
field @NonNull public static final android.os.Parcelable.Creator<android.os.storage.CrateInfo> CREATOR;
}
- public class StorageManager {
- method public static boolean hasIsolatedStorage();
- }
-
public final class StorageVolume implements android.os.Parcelable {
method public String getPath();
}
@@ -3252,17 +1380,9 @@ package android.os.strictmode {
package android.permission {
public final class PermissionControllerManager {
- method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void applyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void countPermissionApps(@NonNull java.util.List<java.lang.String>, int, @NonNull android.permission.PermissionControllerManager.OnCountPermissionAppsResultCallback, @Nullable android.os.Handler);
method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void getAppPermissions(@NonNull String, @NonNull android.permission.PermissionControllerManager.OnGetAppPermissionResultCallback, @Nullable android.os.Handler);
- method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void getRuntimePermissionBackup(@NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<byte[]>);
method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String, @NonNull String);
- method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull java.util.concurrent.Executor, @NonNull android.permission.PermissionControllerManager.OnRevokeRuntimePermissionsCallback);
- method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void stageAndApplyRuntimePermissionsBackup(@NonNull byte[], @NonNull android.os.UserHandle);
- field public static final int COUNT_ONLY_WHEN_GRANTED = 1; // 0x1
- field public static final int COUNT_WHEN_SYSTEM = 2; // 0x2
- field public static final int REASON_INSTALLER_POLICY_VIOLATION = 2; // 0x2
- field public static final int REASON_MALWARE = 1; // 0x1
}
public static interface PermissionControllerManager.OnCountPermissionAppsResultCallback {
@@ -3273,33 +1393,6 @@ package android.permission {
method public void onGetAppPermissions(@NonNull java.util.List<android.permission.RuntimePermissionPresentationInfo>);
}
- public abstract static class PermissionControllerManager.OnRevokeRuntimePermissionsCallback {
- ctor public PermissionControllerManager.OnRevokeRuntimePermissionsCallback();
- method public abstract void onRevokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>);
- }
-
- public final class PermissionManager {
- method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public int getRuntimePermissionsVersion();
- method @NonNull public java.util.List<android.permission.PermissionManager.SplitPermissionInfo> getSplitPermissions();
- method @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public void setRuntimePermissionsVersion(@IntRange(from=0) int);
- }
-
- public static final class PermissionManager.SplitPermissionInfo {
- method @NonNull public java.util.List<java.lang.String> getNewPermissions();
- method @NonNull public String getSplitPermission();
- method public int getTargetSdk();
- }
-
- public final class RuntimePermissionPresentationInfo implements android.os.Parcelable {
- ctor public RuntimePermissionPresentationInfo(@NonNull CharSequence, boolean, boolean);
- method public int describeContents();
- method @NonNull public CharSequence getLabel();
- method public boolean isGranted();
- method public boolean isStandard();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.permission.RuntimePermissionPresentationInfo> CREATOR;
- }
-
}
package android.print {
@@ -3347,75 +1440,18 @@ package android.provider {
}
public final class DeviceConfig {
- method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static void addOnPropertiesChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertiesChangedListener);
- method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static boolean getBoolean(@NonNull String, @NonNull String, boolean);
- method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static float getFloat(@NonNull String, @NonNull String, float);
- method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static int getInt(@NonNull String, @NonNull String, int);
- method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static long getLong(@NonNull String, @NonNull String, long);
- method @NonNull @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static android.provider.DeviceConfig.Properties getProperties(@NonNull String, @NonNull java.lang.String...);
- method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getProperty(@NonNull String, @NonNull String);
- method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getString(@NonNull String, @NonNull String, @Nullable String);
- method public static void removeOnPropertiesChangedListener(@NonNull android.provider.DeviceConfig.OnPropertiesChangedListener);
- method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static void resetToDefaults(int, @Nullable String);
- method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperties(@NonNull android.provider.DeviceConfig.Properties) throws android.provider.DeviceConfig.BadConfigException;
- method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperty(@NonNull String, @NonNull String, @Nullable String, boolean);
field public static final String NAMESPACE_ALARM_MANAGER = "alarm_manager";
field public static final String NAMESPACE_ANDROID = "android";
- field public static final String NAMESPACE_AUTOFILL = "autofill";
- field public static final String NAMESPACE_BIOMETRICS = "biometrics";
- field public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture";
field public static final String NAMESPACE_DEVICE_IDLE = "device_idle";
field public static final String NAMESPACE_JOB_SCHEDULER = "jobscheduler";
- field public static final String NAMESPACE_PERMISSIONS = "permissions";
- field public static final String NAMESPACE_PRIVACY = "privacy";
- field public static final String NAMESPACE_ROLLBACK = "rollback";
- field public static final String NAMESPACE_ROLLBACK_BOOT = "rollback_boot";
- }
-
- public static class DeviceConfig.BadConfigException extends java.lang.Exception {
- ctor public DeviceConfig.BadConfigException();
- }
-
- public static interface DeviceConfig.OnPropertiesChangedListener {
- method public void onPropertiesChanged(@NonNull android.provider.DeviceConfig.Properties);
- }
-
- public static class DeviceConfig.Properties {
- method public boolean getBoolean(@NonNull String, boolean);
- method public float getFloat(@NonNull String, float);
- method public int getInt(@NonNull String, int);
- method @NonNull public java.util.Set<java.lang.String> getKeyset();
- method public long getLong(@NonNull String, long);
- method @NonNull public String getNamespace();
- method @Nullable public String getString(@NonNull String, @Nullable String);
- }
-
- public static final class DeviceConfig.Properties.Builder {
- ctor public DeviceConfig.Properties.Builder(@NonNull String);
- method @NonNull public android.provider.DeviceConfig.Properties build();
- method @NonNull public android.provider.DeviceConfig.Properties.Builder setBoolean(@NonNull String, boolean);
- method @NonNull public android.provider.DeviceConfig.Properties.Builder setFloat(@NonNull String, float);
- method @NonNull public android.provider.DeviceConfig.Properties.Builder setInt(@NonNull String, int);
- method @NonNull public android.provider.DeviceConfig.Properties.Builder setLong(@NonNull String, long);
- method @NonNull public android.provider.DeviceConfig.Properties.Builder setString(@NonNull String, @Nullable String);
- }
-
- public final class DocumentsContract {
- method public static boolean isManageMode(@NonNull android.net.Uri);
- method @NonNull public static android.net.Uri setManageMode(@NonNull android.net.Uri);
}
public final class Settings {
- field public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS = "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
- field public static final String ACTION_MANAGE_APP_OVERLAY_PERMISSION = "android.settings.MANAGE_APP_OVERLAY_PERMISSION";
- field public static final String ACTION_REQUEST_ENABLE_CONTENT_CAPTURE = "android.settings.REQUEST_ENABLE_CONTENT_CAPTURE";
- field public static final String ACTION_TETHER_PROVISIONING_UI = "android.settings.TETHER_PROVISIONING_UI";
field public static final int RESET_MODE_PACKAGE_DEFAULTS = 1; // 0x1
}
public static final class Settings.Global extends android.provider.Settings.NameValueTable {
field public static final String APP_OPS_CONSTANTS = "app_ops_constants";
- field public static final String AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES = "autofill_compat_mode_allowed_packages";
field public static final String AUTOMATIC_POWER_SAVE_MODE = "automatic_power_save_mode";
field public static final String BATTERY_SAVER_CONSTANTS = "battery_saver_constants";
field public static final String DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD = "dynamic_power_savings_disable_threshold";
@@ -3430,12 +1466,10 @@ package android.provider {
field public static final String NOTIFICATION_BUBBLES = "notification_bubbles";
field public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices";
field public static final String SHOW_FIRST_CRASH_DIALOG = "show_first_crash_dialog";
- field public static final String TETHER_OFFLOAD_DISABLED = "tether_offload_disabled";
field public static final String USE_OPEN_WIFI_PACKAGE = "use_open_wifi_package";
}
public static final class Settings.Secure extends android.provider.Settings.NameValueTable {
- method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static void resetToDefaults(@NonNull android.content.ContentResolver, @Nullable String);
field public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED = "accessibility_display_magnification_enabled";
field public static final String ACCESSIBILITY_MAGNIFICATION_CAPABILITY = "accessibility_magnification_capability";
field public static final String ACCESSIBILITY_MAGNIFICATION_MODE = "accessibility_magnification_mode";
@@ -3444,23 +1478,12 @@ package android.provider {
field public static final int ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW = 2; // 0x2
field public static final String ACCESSIBILITY_SHORTCUT_TARGET_SERVICE = "accessibility_shortcut_target_service";
field public static final String ANR_SHOW_BACKGROUND = "anr_show_background";
- field public static final String AUTOFILL_FEATURE_FIELD_CLASSIFICATION = "autofill_field_classification";
field public static final String AUTOFILL_SERVICE = "autofill_service";
- field public static final String AUTOFILL_USER_DATA_MAX_CATEGORY_COUNT = "autofill_user_data_max_category_count";
- field public static final String AUTOFILL_USER_DATA_MAX_FIELD_CLASSIFICATION_IDS_SIZE = "autofill_user_data_max_field_classification_size";
- field public static final String AUTOFILL_USER_DATA_MAX_USER_DATA_SIZE = "autofill_user_data_max_user_data_size";
- field public static final String AUTOFILL_USER_DATA_MAX_VALUE_LENGTH = "autofill_user_data_max_value_length";
- field public static final String AUTOFILL_USER_DATA_MIN_VALUE_LENGTH = "autofill_user_data_min_value_length";
field public static final String CONTENT_CAPTURE_ENABLED = "content_capture_enabled";
field public static final String DISABLED_PRINT_SERVICES = "disabled_print_services";
- field public static final String DOZE_ALWAYS_ON = "doze_always_on";
field @Deprecated public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES = "enabled_notification_policy_access_packages";
field public static final String ENABLED_VR_LISTENERS = "enabled_vr_listeners";
field public static final String IMMERSIVE_MODE_CONFIRMATIONS = "immersive_mode_confirmations";
- field public static final String LOCATION_ACCESS_CHECK_DELAY_MILLIS = "location_access_check_delay_millis";
- field public static final String LOCATION_ACCESS_CHECK_INTERVAL_MILLIS = "location_access_check_interval_millis";
- field public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS = "lock_screen_allow_private_notifications";
- field public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS = "lock_screen_show_notifications";
field public static final String NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component";
field public static final String NOTIFICATION_BADGING = "notification_badging";
field public static final String POWER_MENU_LOCKED_SHOW_CONTENT = "power_menu_locked_show_content";
@@ -3469,45 +1492,9 @@ package android.provider {
field public static final String SHOW_FIRST_CRASH_DIALOG_DEV_OPTION = "show_first_crash_dialog_dev_option";
field public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard";
field @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds";
- field public static final String USER_SETUP_COMPLETE = "user_setup_complete";
field public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
}
- public static final class Telephony.CellBroadcasts implements android.provider.BaseColumns {
- field public static final String CID = "cid";
- field public static final String CMAS_CATEGORY = "cmas_category";
- field public static final String CMAS_CERTAINTY = "cmas_certainty";
- field public static final String CMAS_MESSAGE_CLASS = "cmas_message_class";
- field public static final String CMAS_RESPONSE_TYPE = "cmas_response_type";
- field public static final String CMAS_SEVERITY = "cmas_severity";
- field public static final String CMAS_URGENCY = "cmas_urgency";
- field @NonNull public static final android.net.Uri CONTENT_URI;
- field public static final String DATA_CODING_SCHEME = "dcs";
- field public static final String DEFAULT_SORT_ORDER = "date DESC";
- field public static final String DELIVERY_TIME = "date";
- field public static final String ETWS_IS_PRIMARY = "etws_is_primary";
- field public static final String ETWS_WARNING_TYPE = "etws_warning_type";
- field public static final String GEOGRAPHICAL_SCOPE = "geo_scope";
- field public static final String GEOMETRIES = "geometries";
- field public static final String LAC = "lac";
- field public static final String LANGUAGE_CODE = "language";
- field public static final String LOCATION_CHECK_TIME = "location_check_time";
- field public static final String MAXIMUM_WAIT_TIME = "maximum_wait_time";
- field public static final String MESSAGE_BODY = "body";
- field public static final String MESSAGE_BROADCASTED = "message_broadcasted";
- field public static final String MESSAGE_DISPLAYED = "message_displayed";
- field public static final String MESSAGE_FORMAT = "format";
- field @NonNull @RequiresPermission(android.Manifest.permission.READ_CELL_BROADCASTS) public static final android.net.Uri MESSAGE_HISTORY_URI;
- field public static final String MESSAGE_PRIORITY = "priority";
- field public static final String MESSAGE_READ = "read";
- field public static final String PLMN = "plmn";
- field public static final String RECEIVED_TIME = "received_time";
- field public static final String SERIAL_NUMBER = "serial_number";
- field public static final String SERVICE_CATEGORY = "service_category";
- field public static final String SLOT_INDEX = "slot_index";
- field public static final String SUBSCRIPTION_ID = "sub_id";
- }
-
public static final class Telephony.Sms.Intents {
field public static final String SMS_CARRIER_PROVISION_ACTION = "android.provider.Telephony.SMS_CARRIER_PROVISION";
}
@@ -3529,19 +1516,6 @@ package android.security {
package android.security.keystore {
- public abstract class AttestationUtils {
- method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static java.security.cert.X509Certificate[] attestDeviceIds(android.content.Context, @NonNull int[], @NonNull byte[]) throws android.security.keystore.DeviceIdAttestationException;
- field public static final int ID_TYPE_IMEI = 2; // 0x2
- field public static final int ID_TYPE_MEID = 3; // 0x3
- field public static final int ID_TYPE_SERIAL = 1; // 0x1
- field public static final int USE_INDIVIDUAL_ATTESTATION = 4; // 0x4
- }
-
- public class DeviceIdAttestationException extends java.lang.Exception {
- ctor public DeviceIdAttestationException(@Nullable String);
- ctor public DeviceIdAttestationException(@Nullable String, @Nullable Throwable);
- }
-
public static final class KeyGenParameterSpec.Builder {
method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUniqueIdIncluded(boolean);
}
@@ -3556,37 +1530,8 @@ package android.security.keystore {
}
-package android.service.appprediction {
-
- public abstract class AppPredictionService extends android.app.Service {
- ctor public AppPredictionService();
- method @MainThread public abstract void onAppTargetEvent(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull android.app.prediction.AppTargetEvent);
- method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
- method public void onCreatePredictionSession(@NonNull android.app.prediction.AppPredictionContext, @NonNull android.app.prediction.AppPredictionSessionId);
- method @MainThread public void onDestroyPredictionSession(@NonNull android.app.prediction.AppPredictionSessionId);
- method @MainThread public abstract void onLaunchLocationShown(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull String, @NonNull java.util.List<android.app.prediction.AppTargetId>);
- method @MainThread public abstract void onRequestPredictionUpdate(@NonNull android.app.prediction.AppPredictionSessionId);
- method @MainThread public abstract void onSortAppTargets(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull java.util.List<android.app.prediction.AppTarget>, @NonNull android.os.CancellationSignal, @NonNull java.util.function.Consumer<java.util.List<android.app.prediction.AppTarget>>);
- method @MainThread public void onStartPredictionUpdates();
- method @MainThread public void onStopPredictionUpdates();
- method public final void updatePredictions(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull java.util.List<android.app.prediction.AppTarget>);
- }
-
-}
-
package android.service.autofill {
- public abstract class AutofillFieldClassificationService extends android.app.Service {
- ctor public AutofillFieldClassificationService();
- method public android.os.IBinder onBind(android.content.Intent);
- field public static final String REQUIRED_ALGORITHM_CREDIT_CARD = "CREDIT_CARD";
- field public static final String REQUIRED_ALGORITHM_EDIT_DISTANCE = "EDIT_DISTANCE";
- field public static final String REQUIRED_ALGORITHM_EXACT_MATCH = "EXACT_MATCH";
- field public static final String SERVICE_INTERFACE = "android.service.autofill.AutofillFieldClassificationService";
- field public static final String SERVICE_META_DATA_KEY_AVAILABLE_ALGORITHMS = "android.autofill.field_classification.available_algorithms";
- field public static final String SERVICE_META_DATA_KEY_DEFAULT_ALGORITHM = "android.autofill.field_classification.default_algorithm";
- }
-
public final class CharSequenceTransformation extends android.service.autofill.InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
method public void apply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, int) throws java.lang.Exception;
}
@@ -3609,11 +1554,6 @@ package android.service.autofill {
method @Nullable public android.util.SparseArray<android.service.autofill.InternalOnClickAction> getActions();
}
- public static final class Dataset.Builder {
- ctor public Dataset.Builder(@NonNull android.service.autofill.InlinePresentation);
- method @NonNull public android.service.autofill.Dataset.Builder setFieldInlinePresentation(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern, @NonNull android.service.autofill.InlinePresentation);
- }
-
public final class DateTransformation extends android.service.autofill.InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
method public void apply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, int) throws java.lang.Exception;
}
@@ -3630,15 +1570,6 @@ package android.service.autofill {
method public void apply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, int) throws java.lang.Exception;
}
- public abstract class InlineSuggestionRenderService extends android.app.Service {
- ctor public InlineSuggestionRenderService();
- method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
- method @NonNull public android.os.Bundle onGetInlineSuggestionsRendererInfo();
- method @Nullable public android.view.View onRenderSuggestion(@NonNull android.service.autofill.InlinePresentation, int, int);
- method public final void startIntentSender(@NonNull android.content.IntentSender);
- field public static final String SERVICE_INTERFACE = "android.service.autofill.InlineSuggestionRenderService";
- }
-
public abstract class InternalOnClickAction implements android.service.autofill.OnClickAction android.os.Parcelable {
ctor public InternalOnClickAction();
method public abstract void onClick(@NonNull android.view.ViewGroup);
@@ -3688,26 +1619,6 @@ package android.service.autofill {
package android.service.autofill.augmented {
- public abstract class AugmentedAutofillService extends android.app.Service {
- ctor public AugmentedAutofillService();
- method protected final void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
- method protected void dump(@NonNull java.io.PrintWriter, @NonNull String[]);
- method @Nullable public final android.service.autofill.FillEventHistory getFillEventHistory();
- method public void onConnected();
- method public void onDisconnected();
- method public void onFillRequest(@NonNull android.service.autofill.augmented.FillRequest, @NonNull android.os.CancellationSignal, @NonNull android.service.autofill.augmented.FillController, @NonNull android.service.autofill.augmented.FillCallback);
- method public final boolean requestAutofill(@NonNull android.content.ComponentName, @NonNull android.view.autofill.AutofillId);
- field public static final String SERVICE_INTERFACE = "android.service.autofill.augmented.AugmentedAutofillService";
- }
-
- public final class FillCallback {
- method public void onSuccess(@Nullable android.service.autofill.augmented.FillResponse);
- }
-
- public final class FillController {
- method public void autofill(@NonNull java.util.List<android.util.Pair<android.view.autofill.AutofillId,android.view.autofill.AutofillValue>>);
- }
-
public final class FillRequest {
method @NonNull public android.content.ComponentName getActivityComponent();
method @NonNull public android.view.autofill.AutofillId getFocusedId();
@@ -3717,181 +1628,14 @@ package android.service.autofill.augmented {
method public int getTaskId();
}
- public final class FillResponse {
- }
-
- public static final class FillResponse.Builder {
- ctor public FillResponse.Builder();
- method @NonNull public android.service.autofill.augmented.FillResponse build();
- method @NonNull public android.service.autofill.augmented.FillResponse.Builder setClientState(@NonNull android.os.Bundle);
- method @NonNull public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
- method @NonNull public android.service.autofill.augmented.FillResponse.Builder setInlineSuggestions(@NonNull java.util.List<android.service.autofill.Dataset>);
- }
-
- public final class FillWindow implements java.lang.AutoCloseable {
- ctor public FillWindow();
- method public void destroy();
- method public boolean update(@NonNull android.service.autofill.augmented.PresentationParams.Area, @NonNull android.view.View, long);
- }
-
- public abstract class PresentationParams {
- method @Nullable public android.service.autofill.augmented.PresentationParams.Area getSuggestionArea();
- }
-
- public abstract static class PresentationParams.Area {
- method @NonNull public android.graphics.Rect getBounds();
- }
-
-}
-
-package android.service.contentcapture {
-
- public final class ActivityEvent implements android.os.Parcelable {
- method public int describeContents();
- method @NonNull public android.content.ComponentName getComponentName();
- method public int getEventType();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.service.contentcapture.ActivityEvent> CREATOR;
- field public static final int TYPE_ACTIVITY_DESTROYED = 24; // 0x18
- field public static final int TYPE_ACTIVITY_PAUSED = 2; // 0x2
- field public static final int TYPE_ACTIVITY_RESUMED = 1; // 0x1
- field public static final int TYPE_ACTIVITY_STOPPED = 23; // 0x17
- }
-
- public abstract class ContentCaptureService extends android.app.Service {
- ctor public ContentCaptureService();
- method public final void disableSelf();
- method public void onActivityEvent(@NonNull android.service.contentcapture.ActivityEvent);
- method public void onActivitySnapshot(@NonNull android.view.contentcapture.ContentCaptureSessionId, @NonNull android.service.contentcapture.SnapshotData);
- method public void onConnected();
- method public void onContentCaptureEvent(@NonNull android.view.contentcapture.ContentCaptureSessionId, @NonNull android.view.contentcapture.ContentCaptureEvent);
- method public void onCreateContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureContext, @NonNull android.view.contentcapture.ContentCaptureSessionId);
- method public void onDataRemovalRequest(@NonNull android.view.contentcapture.DataRemovalRequest);
- method public void onDataShareRequest(@NonNull android.view.contentcapture.DataShareRequest, @NonNull android.service.contentcapture.DataShareCallback);
- method public void onDestroyContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureSessionId);
- method public void onDisconnected();
- method public final void setContentCaptureConditions(@NonNull String, @Nullable java.util.Set<android.view.contentcapture.ContentCaptureCondition>);
- method public final void setContentCaptureWhitelist(@Nullable java.util.Set<java.lang.String>, @Nullable java.util.Set<android.content.ComponentName>);
- field public static final String SERVICE_INTERFACE = "android.service.contentcapture.ContentCaptureService";
- field public static final String SERVICE_META_DATA = "android.content_capture";
- }
-
- public interface DataShareCallback {
- method public void onAccept(@NonNull java.util.concurrent.Executor, @NonNull android.service.contentcapture.DataShareReadAdapter);
- method public void onReject();
- }
-
- public interface DataShareReadAdapter {
- method public void onError(int);
- method public void onStart(@NonNull android.os.ParcelFileDescriptor);
- }
-
- public final class SnapshotData implements android.os.Parcelable {
- method public int describeContents();
- method @Nullable public android.app.assist.AssistContent getAssistContent();
- method @NonNull public android.os.Bundle getAssistData();
- method @NonNull public android.app.assist.AssistStructure getAssistStructure();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
- }
-
}
package android.service.notification {
- public final class Adjustment implements android.os.Parcelable {
- ctor public Adjustment(String, String, android.os.Bundle, CharSequence, int);
- ctor public Adjustment(@NonNull String, @NonNull String, @NonNull android.os.Bundle, @NonNull CharSequence, @NonNull android.os.UserHandle);
- method public int describeContents();
- method @NonNull public CharSequence getExplanation();
- method @NonNull public String getKey();
- method @NonNull public String getPackage();
- method @NonNull public android.os.Bundle getSignals();
- method public int getUser();
- method @NonNull public android.os.UserHandle getUserHandle();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.Adjustment> CREATOR;
- field public static final String KEY_CONTEXTUAL_ACTIONS = "key_contextual_actions";
- field public static final String KEY_IMPORTANCE = "key_importance";
- field public static final String KEY_RANKING_SCORE = "key_ranking_score";
- field public static final String KEY_SNOOZE_CRITERIA = "key_snooze_criteria";
- field public static final String KEY_TEXT_REPLIES = "key_text_replies";
- field public static final String KEY_USER_SENTIMENT = "key_user_sentiment";
- }
-
@Deprecated public abstract class ConditionProviderService extends android.app.Service {
method @Deprecated public boolean isBound();
}
- public abstract class NotificationAssistantService extends android.service.notification.NotificationListenerService {
- ctor public NotificationAssistantService();
- method public final void adjustNotification(@NonNull android.service.notification.Adjustment);
- method public final void adjustNotifications(@NonNull java.util.List<android.service.notification.Adjustment>);
- method public void onActionInvoked(@NonNull String, @NonNull android.app.Notification.Action, int);
- method public void onAllowedAdjustmentsChanged();
- method @NonNull public final android.os.IBinder onBind(@Nullable android.content.Intent);
- method public void onNotificationDirectReplied(@NonNull String);
- method @Nullable public abstract android.service.notification.Adjustment onNotificationEnqueued(@NonNull android.service.notification.StatusBarNotification);
- method @Nullable public android.service.notification.Adjustment onNotificationEnqueued(@NonNull android.service.notification.StatusBarNotification, @NonNull android.app.NotificationChannel);
- method public void onNotificationExpansionChanged(@NonNull String, boolean, boolean);
- method public abstract void onNotificationSnoozedUntilContext(@NonNull android.service.notification.StatusBarNotification, @NonNull String);
- method public void onNotificationVisibilityChanged(@NonNull String, boolean);
- method public void onNotificationsSeen(@NonNull java.util.List<java.lang.String>);
- method public void onPanelHidden();
- method public void onPanelRevealed(int);
- method public void onSuggestedReplySent(@NonNull String, @NonNull CharSequence, int);
- method public final void unsnoozeNotification(@NonNull String);
- field public static final String SERVICE_INTERFACE = "android.service.notification.NotificationAssistantService";
- field public static final int SOURCE_FROM_APP = 0; // 0x0
- field public static final int SOURCE_FROM_ASSISTANT = 1; // 0x1
- }
-
- public abstract class NotificationListenerService extends android.app.Service {
- method public void onNotificationRemoved(@NonNull android.service.notification.StatusBarNotification, @NonNull android.service.notification.NotificationListenerService.RankingMap, @NonNull android.service.notification.NotificationStats, int);
- }
-
- public final class NotificationStats implements android.os.Parcelable {
- ctor public NotificationStats();
- method public int describeContents();
- method public int getDismissalSentiment();
- method public int getDismissalSurface();
- method public boolean hasDirectReplied();
- method public boolean hasExpanded();
- method public boolean hasInteracted();
- method public boolean hasSeen();
- method public boolean hasSnoozed();
- method public boolean hasViewedSettings();
- method public void setDirectReplied();
- method public void setDismissalSentiment(int);
- method public void setDismissalSurface(int);
- method public void setExpanded();
- method public void setSeen();
- method public void setSnoozed();
- method public void setViewedSettings();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.NotificationStats> CREATOR;
- field public static final int DISMISSAL_AOD = 2; // 0x2
- field public static final int DISMISSAL_NOT_DISMISSED = -1; // 0xffffffff
- field public static final int DISMISSAL_OTHER = 0; // 0x0
- field public static final int DISMISSAL_PEEK = 1; // 0x1
- field public static final int DISMISSAL_SHADE = 3; // 0x3
- field public static final int DISMISS_SENTIMENT_NEGATIVE = 0; // 0x0
- field public static final int DISMISS_SENTIMENT_NEUTRAL = 1; // 0x1
- field public static final int DISMISS_SENTIMENT_POSITIVE = 2; // 0x2
- field public static final int DISMISS_SENTIMENT_UNKNOWN = -1000; // 0xfffffc18
- }
-
- public final class SnoozeCriterion implements android.os.Parcelable {
- ctor public SnoozeCriterion(String, CharSequence, CharSequence);
- ctor protected SnoozeCriterion(android.os.Parcel);
- method public int describeContents();
- method public CharSequence getConfirmation();
- method public CharSequence getExplanation();
- method public String getId();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.SnoozeCriterion> CREATOR;
- }
-
}
package android.service.quickaccesswallet {
@@ -3932,67 +1676,16 @@ package android.service.quicksettings {
}
-package android.service.textclassifier {
-
- public abstract class TextClassifierService extends android.app.Service {
- ctor public TextClassifierService();
- method @NonNull public static android.view.textclassifier.TextClassifier getDefaultTextClassifierImplementation(@NonNull android.content.Context);
- method @Deprecated public final android.view.textclassifier.TextClassifier getLocalTextClassifier();
- method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
- method @MainThread public abstract void onClassifyText(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassification.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextClassification>);
- method public void onConnected();
- method @MainThread public void onCreateTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext, @NonNull android.view.textclassifier.TextClassificationSessionId);
- method @MainThread public void onDestroyTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationSessionId);
- method @MainThread public void onDetectLanguage(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLanguage.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLanguage>);
- method public void onDisconnected();
- method @MainThread public abstract void onGenerateLinks(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLinks.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLinks>);
- method @Deprecated @MainThread public void onSelectionEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.SelectionEvent);
- method @MainThread public void onSuggestConversationActions(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.ConversationActions.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.ConversationActions>);
- method @MainThread public abstract void onSuggestSelection(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextSelection.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextSelection>);
- method @MainThread public void onTextClassifierEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassifierEvent);
- field public static final String SERVICE_INTERFACE = "android.service.textclassifier.TextClassifierService";
- }
-
- public static interface TextClassifierService.Callback<T> {
- method public void onFailure(@NonNull CharSequence);
- method public void onSuccess(T);
- }
-
-}
-
package android.service.watchdog {
public abstract class ExplicitHealthCheckService extends android.app.Service {
- ctor public ExplicitHealthCheckService();
- method public final void notifyHealthCheckPassed(@NonNull String);
- method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
- method public abstract void onCancelHealthCheck(@NonNull String);
- method @NonNull public abstract java.util.List<java.lang.String> onGetRequestedPackages();
- method @NonNull public abstract java.util.List<android.service.watchdog.ExplicitHealthCheckService.PackageConfig> onGetSupportedPackages();
- method public abstract void onRequestHealthCheck(@NonNull String);
method public void setCallback(@Nullable android.os.RemoteCallback);
- field public static final String BIND_PERMISSION = "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE";
- field public static final String SERVICE_INTERFACE = "android.service.watchdog.ExplicitHealthCheckService";
- }
-
- public static final class ExplicitHealthCheckService.PackageConfig implements android.os.Parcelable {
- ctor public ExplicitHealthCheckService.PackageConfig(@NonNull String, long);
- method public int describeContents();
- method public long getHealthCheckTimeoutMillis();
- method @NonNull public String getPackageName();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.service.watchdog.ExplicitHealthCheckService.PackageConfig> CREATOR;
}
}
package android.telecom {
- public final class Call {
- method public void enterBackgroundAudioProcessing();
- method public void exitBackgroundAudioProcessing(boolean);
- }
-
public static class Call.Details {
method public String getTelecomCallId();
}
@@ -4001,42 +1694,6 @@ package android.telecom {
ctor public CallAudioState(boolean, int, int, @Nullable android.bluetooth.BluetoothDevice, @NonNull java.util.Collection<android.bluetooth.BluetoothDevice>);
}
- public static class CallScreeningService.CallResponse.Builder {
- method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public android.telecom.CallScreeningService.CallResponse.Builder setShouldScreenCallViaAudioProcessing(boolean);
- }
-
- public abstract class Conference extends android.telecom.Conferenceable {
- method public android.telecom.Connection getPrimaryConnection();
- method @NonNull public final String getTelecomCallId();
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setAddress(@NonNull android.net.Uri, int);
- method public final void setCallerDisplayName(@NonNull String, int);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setConferenceState(boolean);
- }
-
- public abstract class Connection extends android.telecom.Conferenceable {
- method @IntRange(from=0) public final long getConnectTimeMillis();
- method public final long getConnectionStartElapsedRealtimeMillis();
- method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
- method @Nullable public final String getTelecomCallId();
- method public final void resetConnectionTime();
- method public void setCallDirection(int);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectTimeMillis(@IntRange(from=0) long);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectionStartElapsedRealtimeMillis(long);
- method public void setPhoneAccountHandle(@NonNull android.telecom.PhoneAccountHandle);
- method public void setTelecomCallId(@NonNull String);
- field public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 2097152; // 0x200000
- field public static final int CAPABILITY_SPEED_UP_MT_AUDIO = 262144; // 0x40000
- field public static final String EXTRA_DISABLE_ADD_CALL = "android.telecom.extra.DISABLE_ADD_CALL";
- field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 1; // 0x1
- field public static final int PROPERTY_GENERIC_CONFERENCE = 2; // 0x2
- field public static final int PROPERTY_IS_DOWNGRADED_CONFERENCE = 64; // 0x40
- field public static final int PROPERTY_REMOTELY_HOSTED = 2048; // 0x800
- }
-
- public final class ConnectionRequest implements android.os.Parcelable {
- method @Nullable public String getTelecomCallId();
- }
-
public static final class ConnectionRequest.Builder {
ctor public ConnectionRequest.Builder();
method @NonNull public android.telecom.ConnectionRequest build();
@@ -4052,53 +1709,11 @@ package android.telecom {
method @NonNull public android.telecom.ConnectionRequest.Builder setVideoState(int);
}
- public static class PhoneAccount.Builder {
- method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String);
- }
-
- public class PhoneAccountSuggestionService extends android.app.Service {
- ctor public PhoneAccountSuggestionService();
- method public void onAccountSuggestionRequest(@NonNull String);
- method public android.os.IBinder onBind(android.content.Intent);
- method public final void suggestPhoneAccounts(@NonNull String, @NonNull java.util.List<android.telecom.PhoneAccountSuggestion>);
- field public static final String SERVICE_INTERFACE = "android.telecom.PhoneAccountSuggestionService";
- }
-
- public class TelecomManager {
- method @NonNull public android.content.Intent createLaunchEmergencyDialerIntent(@Nullable String);
- method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts(boolean);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCurrentTtyMode();
- method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDefaultDialerPackage(@NonNull android.os.UserHandle);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall();
- method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging();
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle);
- field public static final String ACTION_CURRENT_TTY_MODE_CHANGED = "android.telecom.action.CURRENT_TTY_MODE_CHANGED";
- field public static final String ACTION_TTY_PREFERRED_MODE_CHANGED = "android.telecom.action.TTY_PREFERRED_MODE_CHANGED";
- field public static final String EXTRA_CURRENT_TTY_MODE = "android.telecom.extra.CURRENT_TTY_MODE";
- field public static final String EXTRA_TTY_PREFERRED_MODE = "android.telecom.extra.TTY_PREFERRED_MODE";
- field public static final int TTY_MODE_FULL = 1; // 0x1
- field public static final int TTY_MODE_HCO = 2; // 0x2
- field public static final int TTY_MODE_OFF = 0; // 0x0
- field public static final int TTY_MODE_VCO = 3; // 0x3
- }
-
}
package android.telephony {
- public final class AccessNetworkConstants {
- field public static final int TRANSPORT_TYPE_INVALID = -1; // 0xffffffff
- }
-
- public static final class AccessNetworkConstants.NgranBands {
- method public static int getFrequencyRangeGroup(int);
- field public static final int FREQUENCY_RANGE_GROUP_1 = 1; // 0x1
- field public static final int FREQUENCY_RANGE_GROUP_2 = 2; // 0x2
- field public static final int FREQUENCY_RANGE_GROUP_UNKNOWN = 0; // 0x0
- }
-
public final class BarringInfo implements android.os.Parcelable {
- ctor public BarringInfo();
ctor public BarringInfo(@Nullable android.telephony.CellIdentity, @NonNull android.util.SparseArray<android.telephony.BarringInfo.BarringServiceInfo>);
}
@@ -4106,57 +1721,6 @@ package android.telephony {
ctor public BarringInfo.BarringServiceInfo(int, boolean, int, int);
}
- public final class CallQuality implements android.os.Parcelable {
- ctor public CallQuality(int, int, int, int, int, int, int, int, int, int, int);
- ctor public CallQuality(int, int, int, int, int, int, int, int, int, int, int, boolean, boolean, boolean);
- method public int describeContents();
- method public int getAverageRelativeJitter();
- method public int getAverageRoundTripTime();
- method public int getCallDuration();
- method public int getCodecType();
- method public int getDownlinkCallQualityLevel();
- method public int getMaxRelativeJitter();
- method public int getNumRtpPacketsNotReceived();
- method public int getNumRtpPacketsReceived();
- method public int getNumRtpPacketsTransmitted();
- method public int getNumRtpPacketsTransmittedLost();
- method public int getUplinkCallQualityLevel();
- method public boolean isIncomingSilenceDetectedAtCallSetup();
- method public boolean isOutgoingSilenceDetectedAtCallSetup();
- method public boolean isRtpInactivityDetected();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int CALL_QUALITY_BAD = 4; // 0x4
- field public static final int CALL_QUALITY_EXCELLENT = 0; // 0x0
- field public static final int CALL_QUALITY_FAIR = 2; // 0x2
- field public static final int CALL_QUALITY_GOOD = 1; // 0x1
- field public static final int CALL_QUALITY_NOT_AVAILABLE = 5; // 0x5
- field public static final int CALL_QUALITY_POOR = 3; // 0x3
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CallQuality> CREATOR;
- }
-
- public class CarrierConfigManager {
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void overrideConfig(int, @Nullable android.os.PersistableBundle);
- }
-
- public final class DataSpecificRegistrationInfo implements android.os.Parcelable {
- method public int describeContents();
- method @NonNull public android.telephony.LteVopsSupportInfo getLteVopsSupportInfo();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.DataSpecificRegistrationInfo> CREATOR;
- }
-
- public final class LteVopsSupportInfo implements android.os.Parcelable {
- ctor public LteVopsSupportInfo(int, int);
- method public int describeContents();
- method public int getEmcBearerSupport();
- method public int getVopsSupport();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.LteVopsSupportInfo> CREATOR;
- field public static final int LTE_STATUS_NOT_AVAILABLE = 1; // 0x1
- field public static final int LTE_STATUS_NOT_SUPPORTED = 3; // 0x3
- field public static final int LTE_STATUS_SUPPORTED = 2; // 0x2
- }
-
public class MbmsDownloadSession implements java.lang.AutoCloseable {
field public static final String MBMS_DOWNLOAD_SERVICE_OVERRIDE_METADATA = "mbms-download-service-override";
}
@@ -4171,71 +1735,14 @@ package android.telephony {
public final class ModemActivityInfo implements android.os.Parcelable {
ctor public ModemActivityInfo(long, int, int, @NonNull int[], int);
- method public int describeContents();
- method @NonNull public android.telephony.ModemActivityInfo getDelta(@NonNull android.telephony.ModemActivityInfo);
- method public long getIdleTimeMillis();
- method public static int getNumTxPowerLevels();
- method public long getReceiveTimeMillis();
- method public long getSleepTimeMillis();
- method public long getTimestampMillis();
- method public long getTransmitDurationMillisAtPowerLevel(int);
- method @NonNull public android.util.Range<java.lang.Integer> getTransmitPowerRange(int);
method public boolean isValid();
- method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ModemActivityInfo> CREATOR;
- field public static final int TX_POWER_LEVEL_0 = 0; // 0x0
- field public static final int TX_POWER_LEVEL_1 = 1; // 0x1
- field public static final int TX_POWER_LEVEL_2 = 2; // 0x2
- field public static final int TX_POWER_LEVEL_3 = 3; // 0x3
- field public static final int TX_POWER_LEVEL_4 = 4; // 0x4
- }
-
- public final class NetworkRegistrationInfo implements android.os.Parcelable {
- method @Nullable public android.telephony.DataSpecificRegistrationInfo getDataSpecificInfo();
- method public int getRegistrationState();
- method public int getRejectCause();
- method public int getRoamingType();
- method public boolean isEmergencyEnabled();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int REGISTRATION_STATE_DENIED = 3; // 0x3
- field public static final int REGISTRATION_STATE_HOME = 1; // 0x1
- field public static final int REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING = 0; // 0x0
- field public static final int REGISTRATION_STATE_NOT_REGISTERED_SEARCHING = 2; // 0x2
- field public static final int REGISTRATION_STATE_ROAMING = 5; // 0x5
- field public static final int REGISTRATION_STATE_UNKNOWN = 4; // 0x4
- }
-
- public static final class NetworkRegistrationInfo.Builder {
- ctor public NetworkRegistrationInfo.Builder();
- method @NonNull public android.telephony.NetworkRegistrationInfo build();
- method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setAccessNetworkTechnology(int);
- method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setAvailableServices(@NonNull java.util.List<java.lang.Integer>);
- method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setCellIdentity(@Nullable android.telephony.CellIdentity);
- method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setDomain(int);
- method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setEmergencyOnly(boolean);
- method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegisteredPlmn(@Nullable String);
- method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegistrationState(int);
- method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRejectCause(int);
- method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setTransportType(int);
}
public class PhoneNumberUtils {
method public static int getMinMatchForTest();
- method @NonNull public static String getUsernameFromUriNumber(@NonNull String);
- method public static boolean isUriNumber(@Nullable String);
- method public static boolean isVoiceMailNumber(@NonNull android.content.Context, int, @Nullable String);
method public static void setMinMatchForTest(int);
}
- public class PhoneStateListener {
- method @Deprecated public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber);
- method public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber, int);
- method @Deprecated public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber);
- method public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber, int);
- field @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int LISTEN_OUTGOING_EMERGENCY_CALL = 268435456; // 0x10000000
- field @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int LISTEN_OUTGOING_EMERGENCY_SMS = 536870912; // 0x20000000
- }
-
public final class PreciseDataConnectionState implements android.os.Parcelable {
ctor @Deprecated public PreciseDataConnectionState(int, int, int, @NonNull String, @Nullable android.net.LinkProperties, int);
}
@@ -4261,44 +1768,16 @@ package android.telephony {
field public static final int SMS_CATEGORY_STANDARD_SHORT_CODE = 2; // 0x2
}
- public class SubscriptionManager {
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultVoiceSubscriptionId(int);
- field @NonNull public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI;
- field @NonNull public static final android.net.Uri VT_ENABLED_CONTENT_URI;
- field @NonNull public static final android.net.Uri WFC_ENABLED_CONTENT_URI;
- field @NonNull public static final android.net.Uri WFC_MODE_CONTENT_URI;
- field @NonNull public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI;
- field @NonNull public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI;
- }
-
public class TelephonyManager {
method public int addDevicePolicyOverrideApn(@NonNull android.content.Context, @NonNull android.telephony.data.ApnSetting);
- method public int checkCarrierPrivilegesForPackage(String);
- method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public android.content.ComponentName getAndUpdateDefaultRespondViaMessageApplication();
method public int getCarrierIdListVersion();
- method public java.util.List<java.lang.String> getCarrierPackageNamesForIntent(android.content.Intent);
- method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public android.content.ComponentName getDefaultRespondViaMessageApplication();
method @NonNull public java.util.List<android.telephony.data.ApnSetting> getDevicePolicyOverrideApns(@NonNull android.content.Context);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getEmergencyNumberDbVersion();
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getLine1AlphaTag();
method public android.util.Pair<java.lang.Integer,java.lang.Integer> getRadioHalVersion();
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isMobileDataPolicyEnabled(int);
method public boolean modifyDevicePolicyOverrideApn(@NonNull android.content.Context, int, @NonNull android.telephony.data.ApnSetting);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void refreshUiccProfile();
- method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void resetOtaEmergencyNumberDbFilePath();
method @Deprecated public void setCarrierTestOverride(String, String, String, String, String, String, String);
method public void setCarrierTestOverride(String, String, String, String, String, String, String, String, String);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setMobileDataPolicyEnabledStatus(int, boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSystemSelectionChannels(@NonNull java.util.List<android.telephony.RadioAccessSpecifier>, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSystemSelectionChannels(@NonNull java.util.List<android.telephony.RadioAccessSpecifier>);
- method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void updateOtaEmergencyNumberDbFilePath(@NonNull android.os.ParcelFileDescriptor);
- field public static final int CARRIER_PRIVILEGE_STATUS_ERROR_LOADING_RULES = -2; // 0xfffffffe
- field public static final int CARRIER_PRIVILEGE_STATUS_HAS_ACCESS = 1; // 0x1
- field public static final int CARRIER_PRIVILEGE_STATUS_NO_ACCESS = 0; // 0x0
- field public static final int CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED = -1; // 0xffffffff
- field public static final int INVALID_EMERGENCY_NUMBER_DB_VERSION = -1; // 0xffffffff
- field public static final int MOBILE_DATA_POLICY_DATA_ON_NON_DEFAULT_DURING_VOICE_CALL = 1; // 0x1
- field public static final int MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED = 2; // 0x2
field public static final int UNKNOWN_CARRIER_ID_LIST_VERSION = -1; // 0xffffffff
}
@@ -4314,835 +1793,18 @@ package android.telephony.emergency {
package android.telephony.ims {
- public final class ImsCallForwardInfo implements android.os.Parcelable {
- ctor public ImsCallForwardInfo(int, int, int, int, @NonNull String, int);
- method public int describeContents();
- method public int getCondition();
- method public String getNumber();
- method public int getServiceClass();
- method public int getStatus();
- method public int getTimeSeconds();
- method public int getToA();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int CDIV_CF_REASON_ALL = 4; // 0x4
- field public static final int CDIV_CF_REASON_ALL_CONDITIONAL = 5; // 0x5
- field public static final int CDIV_CF_REASON_BUSY = 1; // 0x1
- field public static final int CDIV_CF_REASON_NOT_LOGGED_IN = 6; // 0x6
- field public static final int CDIV_CF_REASON_NOT_REACHABLE = 3; // 0x3
- field public static final int CDIV_CF_REASON_NO_REPLY = 2; // 0x2
- field public static final int CDIV_CF_REASON_UNCONDITIONAL = 0; // 0x0
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsCallForwardInfo> CREATOR;
- field public static final int STATUS_ACTIVE = 1; // 0x1
- field public static final int STATUS_NOT_ACTIVE = 0; // 0x0
- field public static final int TYPE_OF_ADDRESS_INTERNATIONAL = 145; // 0x91
- field public static final int TYPE_OF_ADDRESS_UNKNOWN = 129; // 0x81
- }
-
public final class ImsCallProfile implements android.os.Parcelable {
- ctor public ImsCallProfile();
- ctor public ImsCallProfile(int, int);
- ctor public ImsCallProfile(int, int, android.os.Bundle, android.telephony.ims.ImsStreamMediaProfile);
- method public int describeContents();
- method public String getCallExtra(String);
- method public String getCallExtra(String, String);
- method public boolean getCallExtraBoolean(String);
- method public boolean getCallExtraBoolean(String, boolean);
- method public int getCallExtraInt(String);
- method public int getCallExtraInt(String, int);
- method public android.os.Bundle getCallExtras();
- method public int getCallType();
- method public static int getCallTypeFromVideoState(int);
- method public int getCallerNumberVerificationStatus();
- method public int getEmergencyCallRouting();
- method public int getEmergencyServiceCategories();
- method @NonNull public java.util.List<java.lang.String> getEmergencyUrns();
- method public android.telephony.ims.ImsStreamMediaProfile getMediaProfile();
- method @NonNull public android.os.Bundle getProprietaryCallExtras();
- method public int getRestrictCause();
- method public int getServiceType();
- method public static int getVideoStateFromCallType(int);
- method public static int getVideoStateFromImsCallProfile(android.telephony.ims.ImsCallProfile);
- method public boolean hasKnownUserIntentEmergency();
- method public boolean isEmergencyCallTesting();
- method public boolean isVideoCall();
- method public boolean isVideoPaused();
- method public static int presentationToOir(int);
- method public void setCallExtra(String, String);
- method public void setCallExtraBoolean(String, boolean);
- method public void setCallExtraInt(String, int);
- method public void setCallRestrictCause(int);
- method public void setCallerNumberVerificationStatus(int);
- method public void setEmergencyCallRouting(int);
- method public void setEmergencyCallTesting(boolean);
- method public void setEmergencyServiceCategories(int);
- method public void setEmergencyUrns(@NonNull java.util.List<java.lang.String>);
- method public void setHasKnownUserIntentEmergency(boolean);
- method public void updateCallExtras(android.telephony.ims.ImsCallProfile);
- method public void updateCallType(android.telephony.ims.ImsCallProfile);
- method public void updateMediaProfile(android.telephony.ims.ImsCallProfile);
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int CALL_RESTRICT_CAUSE_DISABLED = 2; // 0x2
- field public static final int CALL_RESTRICT_CAUSE_HD = 3; // 0x3
- field public static final int CALL_RESTRICT_CAUSE_NONE = 0; // 0x0
- field public static final int CALL_RESTRICT_CAUSE_RAT = 1; // 0x1
- field public static final int CALL_TYPE_VIDEO_N_VOICE = 3; // 0x3
- field public static final int CALL_TYPE_VOICE = 2; // 0x2
- field public static final int CALL_TYPE_VOICE_N_VIDEO = 1; // 0x1
- field public static final int CALL_TYPE_VS = 8; // 0x8
- field public static final int CALL_TYPE_VS_RX = 10; // 0xa
- field public static final int CALL_TYPE_VS_TX = 9; // 0x9
- field public static final int CALL_TYPE_VT = 4; // 0x4
- field public static final int CALL_TYPE_VT_NODIR = 7; // 0x7
- field public static final int CALL_TYPE_VT_RX = 6; // 0x6
- field public static final int CALL_TYPE_VT_TX = 5; // 0x5
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsCallProfile> CREATOR;
- field public static final int DIALSTRING_NORMAL = 0; // 0x0
- field public static final int DIALSTRING_SS_CONF = 1; // 0x1
- field public static final int DIALSTRING_USSD = 2; // 0x2
- field public static final String EXTRA_ADDITIONAL_CALL_INFO = "AdditionalCallInfo";
- field public static final String EXTRA_ADDITIONAL_SIP_INVITE_FIELDS = "android.telephony.ims.extra.ADDITIONAL_SIP_INVITE_FIELDS";
- field public static final String EXTRA_CALL_DISCONNECT_CAUSE = "android.telephony.ims.extra.CALL_DISCONNECT_CAUSE";
- field public static final String EXTRA_CALL_NETWORK_TYPE = "android.telephony.ims.extra.CALL_NETWORK_TYPE";
- field @Deprecated public static final String EXTRA_CALL_RAT_TYPE = "CallRadioTech";
- field public static final String EXTRA_CHILD_NUMBER = "ChildNum";
- field public static final String EXTRA_CNA = "cna";
- field public static final String EXTRA_CNAP = "cnap";
- field public static final String EXTRA_CODEC = "Codec";
- field public static final String EXTRA_DIALSTRING = "dialstring";
- field public static final String EXTRA_DISPLAY_TEXT = "DisplayText";
- field public static final String EXTRA_EMERGENCY_CALL = "e_call";
- field public static final String EXTRA_FORWARDED_NUMBER = "android.telephony.ims.extra.FORWARDED_NUMBER";
- field public static final String EXTRA_IS_CALL_PULL = "CallPull";
field public static final String EXTRA_OEM_EXTRAS = "android.telephony.ims.extra.OEM_EXTRAS";
- field public static final String EXTRA_OI = "oi";
- field public static final String EXTRA_OIR = "oir";
- field public static final String EXTRA_REMOTE_URI = "remote_uri";
- field public static final String EXTRA_USSD = "ussd";
- field public static final int OIR_DEFAULT = 0; // 0x0
- field public static final int OIR_PRESENTATION_NOT_RESTRICTED = 2; // 0x2
- field public static final int OIR_PRESENTATION_PAYPHONE = 4; // 0x4
- field public static final int OIR_PRESENTATION_RESTRICTED = 1; // 0x1
- field public static final int OIR_PRESENTATION_UNKNOWN = 3; // 0x3
- field public static final int SERVICE_TYPE_EMERGENCY = 2; // 0x2
- field public static final int SERVICE_TYPE_NONE = 0; // 0x0
- field public static final int SERVICE_TYPE_NORMAL = 1; // 0x1
- field public static final int VERIFICATION_STATUS_FAILED = 2; // 0x2
- field public static final int VERIFICATION_STATUS_NOT_VERIFIED = 0; // 0x0
- field public static final int VERIFICATION_STATUS_PASSED = 1; // 0x1
- }
-
- public class ImsCallSessionListener {
- method public void callQualityChanged(@NonNull android.telephony.CallQuality);
- method public void callSessionConferenceExtendFailed(android.telephony.ims.ImsReasonInfo);
- method public void callSessionConferenceExtendReceived(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);
- method public void callSessionConferenceExtended(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);
- method public void callSessionConferenceStateUpdated(android.telephony.ims.ImsConferenceState);
- method @Deprecated public void callSessionHandover(int, int, android.telephony.ims.ImsReasonInfo);
- method @Deprecated public void callSessionHandoverFailed(int, int, android.telephony.ims.ImsReasonInfo);
- method public void callSessionHeld(android.telephony.ims.ImsCallProfile);
- method public void callSessionHoldFailed(android.telephony.ims.ImsReasonInfo);
- method public void callSessionHoldReceived(android.telephony.ims.ImsCallProfile);
- method public void callSessionInitiated(android.telephony.ims.ImsCallProfile);
- method public void callSessionInitiatedFailed(android.telephony.ims.ImsReasonInfo);
- method public void callSessionInviteParticipantsRequestDelivered();
- method public void callSessionInviteParticipantsRequestFailed(android.telephony.ims.ImsReasonInfo);
- method @Deprecated public void callSessionMayHandover(int, int);
- method public void callSessionMergeComplete(android.telephony.ims.stub.ImsCallSessionImplBase);
- method public void callSessionMergeFailed(android.telephony.ims.ImsReasonInfo);
- method public void callSessionMergeStarted(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);
- method public void callSessionMultipartyStateChanged(boolean);
- method public void callSessionProgressing(android.telephony.ims.ImsStreamMediaProfile);
- method public void callSessionRemoveParticipantsRequestDelivered();
- method public void callSessionRemoveParticipantsRequestFailed(android.telephony.ims.ImsReasonInfo);
- method public void callSessionResumeFailed(android.telephony.ims.ImsReasonInfo);
- method public void callSessionResumeReceived(android.telephony.ims.ImsCallProfile);
- method public void callSessionResumed(android.telephony.ims.ImsCallProfile);
- method public void callSessionRttAudioIndicatorChanged(@NonNull android.telephony.ims.ImsStreamMediaProfile);
- method public void callSessionRttMessageReceived(String);
- method public void callSessionRttModifyRequestReceived(android.telephony.ims.ImsCallProfile);
- method public void callSessionRttModifyResponseReceived(int);
- method public void callSessionSuppServiceReceived(android.telephony.ims.ImsSuppServiceNotification);
- method public void callSessionTerminated(android.telephony.ims.ImsReasonInfo);
- method public void callSessionTtyModeReceived(int);
- method public void callSessionUpdateFailed(android.telephony.ims.ImsReasonInfo);
- method public void callSessionUpdateReceived(android.telephony.ims.ImsCallProfile);
- method public void callSessionUpdated(android.telephony.ims.ImsCallProfile);
- method public void callSessionUssdMessageReceived(int, String);
- method public void onHandover(int, int, @Nullable android.telephony.ims.ImsReasonInfo);
- method public void onHandoverFailed(int, int, @NonNull android.telephony.ims.ImsReasonInfo);
- method public void onMayHandover(int, int);
- }
-
- public final class ImsConferenceState implements android.os.Parcelable {
- method public int describeContents();
- method public static int getConnectionStateForStatus(String);
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsConferenceState> CREATOR;
- field public static final String DISPLAY_TEXT = "display-text";
- field public static final String ENDPOINT = "endpoint";
- field public static final String SIP_STATUS_CODE = "sipstatuscode";
- field public static final String STATUS = "status";
- field public static final String STATUS_ALERTING = "alerting";
- field public static final String STATUS_CONNECTED = "connected";
- field public static final String STATUS_CONNECT_FAIL = "connect-fail";
- field public static final String STATUS_DIALING_IN = "dialing-in";
- field public static final String STATUS_DIALING_OUT = "dialing-out";
- field public static final String STATUS_DISCONNECTED = "disconnected";
- field public static final String STATUS_DISCONNECTING = "disconnecting";
- field public static final String STATUS_MUTED_VIA_FOCUS = "muted-via-focus";
- field public static final String STATUS_ON_HOLD = "on-hold";
- field public static final String STATUS_PENDING = "pending";
- field public static final String STATUS_SEND_ONLY = "sendonly";
- field public static final String STATUS_SEND_RECV = "sendrecv";
- field public static final String USER = "user";
- field public final java.util.HashMap<java.lang.String,android.os.Bundle> mParticipants;
- }
-
- public final class ImsException extends java.lang.Exception {
- ctor public ImsException(@Nullable String);
- ctor public ImsException(@Nullable String, int);
- ctor public ImsException(@Nullable String, int, @Nullable Throwable);
- }
-
- public final class ImsExternalCallState implements android.os.Parcelable {
- ctor public ImsExternalCallState(@NonNull String, @NonNull android.net.Uri, @Nullable android.net.Uri, boolean, int, int, boolean);
- method public int describeContents();
- method @NonNull public android.net.Uri getAddress();
- method public int getCallId();
- method public int getCallState();
- method public int getCallType();
- method @Nullable public android.net.Uri getLocalAddress();
- method public boolean isCallHeld();
- method public boolean isCallPullable();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int CALL_STATE_CONFIRMED = 1; // 0x1
- field public static final int CALL_STATE_TERMINATED = 2; // 0x2
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsExternalCallState> CREATOR;
- }
-
- public class ImsMmTelManager implements android.telephony.ims.RegistrationManager {
- method @Deprecated @NonNull @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public static android.telephony.ims.ImsMmTelManager createForSubscriptionId(int);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getFeatureState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>) throws android.telephony.ims.ImsException;
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getVoWiFiRoamingModeSetting();
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAvailable(int, int);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCapable(int, int);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void isSupported(int, int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>) throws android.telephony.ims.ImsException;
- method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback) throws android.telephony.ims.ImsException;
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAdvancedCallingSettingEnabled(boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setRttCapabilitySetting(boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiModeSetting(int);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiNonPersistent(boolean, int);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingModeSetting(int);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingSettingEnabled(boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiSettingEnabled(boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVtSettingEnabled(boolean);
- method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback);
- }
-
- @Deprecated public static class ImsMmTelManager.RegistrationCallback extends android.telephony.ims.RegistrationManager.RegistrationCallback {
- ctor @Deprecated public ImsMmTelManager.RegistrationCallback();
- }
-
- public class ImsService extends android.app.Service {
- ctor public ImsService();
- method public android.telephony.ims.feature.MmTelFeature createMmTelFeature(int);
- method public android.telephony.ims.feature.RcsFeature createRcsFeature(int);
- method public void disableIms(int);
- method public void enableIms(int);
- method public android.telephony.ims.stub.ImsConfigImplBase getConfig(int);
- method public android.telephony.ims.stub.ImsRegistrationImplBase getRegistration(int);
- method public final void onUpdateSupportedImsFeatures(android.telephony.ims.stub.ImsFeatureConfiguration) throws android.os.RemoteException;
- method public android.telephony.ims.stub.ImsFeatureConfiguration querySupportedImsFeatures();
- method public void readyForFeatureCreation();
- }
-
- public final class ImsSsData implements android.os.Parcelable {
- ctor public ImsSsData(int, int, int, int, int);
- method public int describeContents();
- method @Nullable public java.util.List<android.telephony.ims.ImsCallForwardInfo> getCallForwardInfo();
- method public int getRequestType();
- method public int getResult();
- method public int getServiceClass();
- method public int getServiceType();
- method @NonNull public java.util.List<android.telephony.ims.ImsSsInfo> getSuppServiceInfo();
- method public int getTeleserviceType();
- method public boolean isTypeBarring();
- method public boolean isTypeCf();
- method public boolean isTypeClip();
- method public boolean isTypeClir();
- method public boolean isTypeColp();
- method public boolean isTypeColr();
- method public boolean isTypeCw();
- method public boolean isTypeIcb();
- method public boolean isTypeInterrogation();
- method public boolean isTypeUnConditional();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSsData> CREATOR;
- field public static final int RESULT_SUCCESS = 0; // 0x0
- field public static final int SERVICE_CLASS_DATA = 2; // 0x2
- field public static final int SERVICE_CLASS_DATA_CIRCUIT_ASYNC = 32; // 0x20
- field public static final int SERVICE_CLASS_DATA_CIRCUIT_SYNC = 16; // 0x10
- field public static final int SERVICE_CLASS_DATA_PACKET_ACCESS = 64; // 0x40
- field public static final int SERVICE_CLASS_DATA_PAD = 128; // 0x80
- field public static final int SERVICE_CLASS_FAX = 4; // 0x4
- field public static final int SERVICE_CLASS_NONE = 0; // 0x0
- field public static final int SERVICE_CLASS_SMS = 8; // 0x8
- field public static final int SERVICE_CLASS_VOICE = 1; // 0x1
- field public static final int SS_ACTIVATION = 0; // 0x0
- field public static final int SS_ALL_BARRING = 18; // 0x12
- field public static final int SS_ALL_DATA_TELESERVICES = 3; // 0x3
- field public static final int SS_ALL_TELESERVICES_EXCEPT_SMS = 5; // 0x5
- field public static final int SS_ALL_TELESEVICES = 1; // 0x1
- field public static final int SS_ALL_TELE_AND_BEARER_SERVICES = 0; // 0x0
- field public static final int SS_BAIC = 16; // 0x10
- field public static final int SS_BAIC_ROAMING = 17; // 0x11
- field public static final int SS_BAOC = 13; // 0xd
- field public static final int SS_BAOIC = 14; // 0xe
- field public static final int SS_BAOIC_EXC_HOME = 15; // 0xf
- field public static final int SS_CFU = 0; // 0x0
- field public static final int SS_CFUT = 6; // 0x6
- field public static final int SS_CF_ALL = 4; // 0x4
- field public static final int SS_CF_ALL_CONDITIONAL = 5; // 0x5
- field public static final int SS_CF_BUSY = 1; // 0x1
- field public static final int SS_CF_NOT_REACHABLE = 3; // 0x3
- field public static final int SS_CF_NO_REPLY = 2; // 0x2
- field public static final int SS_CLIP = 7; // 0x7
- field public static final int SS_CLIR = 8; // 0x8
- field public static final int SS_CNAP = 11; // 0xb
- field public static final int SS_COLP = 9; // 0x9
- field public static final int SS_COLR = 10; // 0xa
- field public static final int SS_DEACTIVATION = 1; // 0x1
- field public static final int SS_ERASURE = 4; // 0x4
- field public static final int SS_INCOMING_BARRING = 20; // 0x14
- field public static final int SS_INCOMING_BARRING_ANONYMOUS = 22; // 0x16
- field public static final int SS_INCOMING_BARRING_DN = 21; // 0x15
- field public static final int SS_INTERROGATION = 2; // 0x2
- field public static final int SS_OUTGOING_BARRING = 19; // 0x13
- field public static final int SS_REGISTRATION = 3; // 0x3
- field public static final int SS_SMS_SERVICES = 4; // 0x4
- field public static final int SS_TELEPHONY = 2; // 0x2
- field public static final int SS_WAIT = 12; // 0xc
- }
-
- public static final class ImsSsData.Builder {
- ctor public ImsSsData.Builder(int, int, int, int, int);
- method @NonNull public android.telephony.ims.ImsSsData build();
- method @NonNull public android.telephony.ims.ImsSsData.Builder setCallForwardingInfo(@NonNull java.util.List<android.telephony.ims.ImsCallForwardInfo>);
- method @NonNull public android.telephony.ims.ImsSsData.Builder setSuppServiceInfo(@NonNull java.util.List<android.telephony.ims.ImsSsInfo>);
- }
-
- public final class ImsSsInfo implements android.os.Parcelable {
- ctor @Deprecated public ImsSsInfo(int, @Nullable String);
- method public int describeContents();
- method public int getClirInterrogationStatus();
- method public int getClirOutgoingState();
- method @Deprecated public String getIcbNum();
- method @Nullable public String getIncomingCommunicationBarringNumber();
- method public int getProvisionStatus();
- method public int getStatus();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int CLIR_OUTGOING_DEFAULT = 0; // 0x0
- field public static final int CLIR_OUTGOING_INVOCATION = 1; // 0x1
- field public static final int CLIR_OUTGOING_SUPPRESSION = 2; // 0x2
- field public static final int CLIR_STATUS_NOT_PROVISIONED = 0; // 0x0
- field public static final int CLIR_STATUS_PROVISIONED_PERMANENT = 1; // 0x1
- field public static final int CLIR_STATUS_TEMPORARILY_ALLOWED = 4; // 0x4
- field public static final int CLIR_STATUS_TEMPORARILY_RESTRICTED = 3; // 0x3
- field public static final int CLIR_STATUS_UNKNOWN = 2; // 0x2
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSsInfo> CREATOR;
- field public static final int DISABLED = 0; // 0x0
- field public static final int ENABLED = 1; // 0x1
- field public static final int NOT_REGISTERED = -1; // 0xffffffff
- field public static final int SERVICE_NOT_PROVISIONED = 0; // 0x0
- field public static final int SERVICE_PROVISIONED = 1; // 0x1
- field public static final int SERVICE_PROVISIONING_UNKNOWN = -1; // 0xffffffff
- }
-
- public static final class ImsSsInfo.Builder {
- ctor public ImsSsInfo.Builder(int);
- method @NonNull public android.telephony.ims.ImsSsInfo build();
- method @NonNull public android.telephony.ims.ImsSsInfo.Builder setClirInterrogationStatus(int);
- method @NonNull public android.telephony.ims.ImsSsInfo.Builder setClirOutgoingState(int);
- method @NonNull public android.telephony.ims.ImsSsInfo.Builder setIncomingCommunicationBarringNumber(@NonNull String);
- method @NonNull public android.telephony.ims.ImsSsInfo.Builder setProvisionStatus(int);
- }
-
- public final class ImsStreamMediaProfile implements android.os.Parcelable {
- ctor public ImsStreamMediaProfile(int, int, int, int, int);
- method public void copyFrom(android.telephony.ims.ImsStreamMediaProfile);
- method public int describeContents();
- method public int getAudioDirection();
- method public int getAudioQuality();
- method public int getRttMode();
- method public int getVideoDirection();
- method public int getVideoQuality();
- method public boolean isReceivingRttAudio();
- method public boolean isRttCall();
- method public void setReceivingRttAudio(boolean);
- method public void setRttMode(int);
- method public void writeToParcel(android.os.Parcel, int);
- field public static final int AUDIO_QUALITY_AMR = 1; // 0x1
- field public static final int AUDIO_QUALITY_AMR_WB = 2; // 0x2
- field public static final int AUDIO_QUALITY_EVRC = 4; // 0x4
- field public static final int AUDIO_QUALITY_EVRC_B = 5; // 0x5
- field public static final int AUDIO_QUALITY_EVRC_NW = 7; // 0x7
- field public static final int AUDIO_QUALITY_EVRC_WB = 6; // 0x6
- field public static final int AUDIO_QUALITY_EVS_FB = 20; // 0x14
- field public static final int AUDIO_QUALITY_EVS_NB = 17; // 0x11
- field public static final int AUDIO_QUALITY_EVS_SWB = 19; // 0x13
- field public static final int AUDIO_QUALITY_EVS_WB = 18; // 0x12
- field public static final int AUDIO_QUALITY_G711A = 13; // 0xd
- field public static final int AUDIO_QUALITY_G711AB = 15; // 0xf
- field public static final int AUDIO_QUALITY_G711U = 11; // 0xb
- field public static final int AUDIO_QUALITY_G722 = 14; // 0xe
- field public static final int AUDIO_QUALITY_G723 = 12; // 0xc
- field public static final int AUDIO_QUALITY_G729 = 16; // 0x10
- field public static final int AUDIO_QUALITY_GSM_EFR = 8; // 0x8
- field public static final int AUDIO_QUALITY_GSM_FR = 9; // 0x9
- field public static final int AUDIO_QUALITY_GSM_HR = 10; // 0xa
- field public static final int AUDIO_QUALITY_NONE = 0; // 0x0
- field public static final int AUDIO_QUALITY_QCELP13K = 3; // 0x3
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsStreamMediaProfile> CREATOR;
- field public static final int DIRECTION_INACTIVE = 0; // 0x0
- field public static final int DIRECTION_INVALID = -1; // 0xffffffff
- field public static final int DIRECTION_RECEIVE = 1; // 0x1
- field public static final int DIRECTION_SEND = 2; // 0x2
- field public static final int DIRECTION_SEND_RECEIVE = 3; // 0x3
- field public static final int RTT_MODE_DISABLED = 0; // 0x0
- field public static final int RTT_MODE_FULL = 1; // 0x1
- field public static final int VIDEO_QUALITY_NONE = 0; // 0x0
- field public static final int VIDEO_QUALITY_QCIF = 1; // 0x1
- field public static final int VIDEO_QUALITY_QVGA_LANDSCAPE = 2; // 0x2
- field public static final int VIDEO_QUALITY_QVGA_PORTRAIT = 4; // 0x4
- field public static final int VIDEO_QUALITY_VGA_LANDSCAPE = 8; // 0x8
- field public static final int VIDEO_QUALITY_VGA_PORTRAIT = 16; // 0x10
- }
-
- public final class ImsSuppServiceNotification implements android.os.Parcelable {
- ctor public ImsSuppServiceNotification(int, int, int, int, String, String[]);
- method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSuppServiceNotification> CREATOR;
- field public final int code;
- field public final String[] history;
- field public final int index;
- field public final int notificationType;
- field public final String number;
- field public final int type;
- }
-
- public class ImsUtListener {
- method public void onLineIdentificationSupplementaryServiceResponse(int, @NonNull android.telephony.ims.ImsSsInfo);
- method public void onSupplementaryServiceIndication(android.telephony.ims.ImsSsData);
- method public void onUtConfigurationCallBarringQueried(int, android.telephony.ims.ImsSsInfo[]);
- method public void onUtConfigurationCallForwardQueried(int, android.telephony.ims.ImsCallForwardInfo[]);
- method public void onUtConfigurationCallWaitingQueried(int, android.telephony.ims.ImsSsInfo[]);
- method @Deprecated public void onUtConfigurationQueried(int, android.os.Bundle);
- method public void onUtConfigurationQueryFailed(int, android.telephony.ims.ImsReasonInfo);
- method public void onUtConfigurationUpdateFailed(int, android.telephony.ims.ImsReasonInfo);
- method public void onUtConfigurationUpdated(int);
- field @Deprecated public static final String BUNDLE_KEY_CLIR = "queryClir";
- field @Deprecated public static final String BUNDLE_KEY_SSINFO = "imsSsInfo";
- }
-
- public abstract class ImsVideoCallProvider {
- ctor public ImsVideoCallProvider();
- method public void changeCallDataUsage(long);
- method public void changeCameraCapabilities(android.telecom.VideoProfile.CameraCapabilities);
- method public void changePeerDimensions(int, int);
- method public void changeVideoQuality(int);
- method public void handleCallSessionEvent(int);
- method public abstract void onRequestCallDataUsage();
- method public abstract void onRequestCameraCapabilities();
- method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
- method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile);
- method public abstract void onSetCamera(String);
- method public void onSetCamera(String, int);
- method public abstract void onSetDeviceOrientation(int);
- method public abstract void onSetDisplaySurface(android.view.Surface);
- method public abstract void onSetPauseImage(android.net.Uri);
- method public abstract void onSetPreviewSurface(android.view.Surface);
- method public abstract void onSetZoom(float);
- method public void receiveSessionModifyRequest(android.telecom.VideoProfile);
- method public void receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile);
- }
-
- public class ProvisioningManager {
- method @NonNull public static android.telephony.ims.ProvisioningManager createForSubscriptionId(int);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public int getProvisioningIntValue(int);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean getProvisioningStatusForCapability(int, int);
- method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public String getProvisioningStringValue(int);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean getRcsProvisioningStatusForCapability(int);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void notifyRcsAutoConfigurationReceived(@NonNull byte[], boolean);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.Callback) throws android.telephony.ims.ImsException;
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningIntValue(int, int);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setProvisioningStatusForCapability(int, int, boolean);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningStringValue(int, @NonNull String);
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setRcsProvisioningStatusForCapability(int, boolean);
- method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterProvisioningChangedCallback(@NonNull android.telephony.ims.ProvisioningManager.Callback);
- field public static final int KEY_VOICE_OVER_WIFI_ENTITLEMENT_ID = 67; // 0x43
- field public static final int KEY_VOICE_OVER_WIFI_MODE_OVERRIDE = 27; // 0x1b
- field public static final int KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE = 26; // 0x1a
- field public static final int PROVISIONING_VALUE_DISABLED = 0; // 0x0
- field public static final int PROVISIONING_VALUE_ENABLED = 1; // 0x1
- field public static final String STRING_QUERY_RESULT_ERROR_GENERIC = "STRING_QUERY_RESULT_ERROR_GENERIC";
- field public static final String STRING_QUERY_RESULT_ERROR_NOT_READY = "STRING_QUERY_RESULT_ERROR_NOT_READY";
- }
-
- public static class ProvisioningManager.Callback {
- ctor public ProvisioningManager.Callback();
- method public void onProvisioningIntChanged(int, int);
- method public void onProvisioningStringChanged(int, @NonNull String);
- }
-
- public class RcsUceAdapter {
- method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUceSettingEnabled(boolean) throws android.telephony.ims.ImsException;
}
}
package android.telephony.ims.feature {
- public final class CapabilityChangeRequest implements android.os.Parcelable {
- method public void addCapabilitiesToDisableForTech(int, int);
- method public void addCapabilitiesToEnableForTech(int, int);
- method public int describeContents();
- method public java.util.List<android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair> getCapabilitiesToDisable();
- method public java.util.List<android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair> getCapabilitiesToEnable();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.feature.CapabilityChangeRequest> CREATOR;
- }
-
- public static class CapabilityChangeRequest.CapabilityPair {
- ctor public CapabilityChangeRequest.CapabilityPair(int, int);
- method public int getCapability();
- method public int getRadioTech();
- }
-
- public abstract class ImsFeature {
- ctor public ImsFeature();
- method public abstract void changeEnabledCapabilities(android.telephony.ims.feature.CapabilityChangeRequest, android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
- method public int getFeatureState();
- method public final int getSlotIndex();
- method public abstract void onFeatureReady();
- method public abstract void onFeatureRemoved();
- method public final void setFeatureState(int);
- field public static final int CAPABILITY_ERROR_GENERIC = -1; // 0xffffffff
- field public static final int CAPABILITY_SUCCESS = 0; // 0x0
- field public static final int FEATURE_EMERGENCY_MMTEL = 0; // 0x0
- field public static final int FEATURE_MMTEL = 1; // 0x1
- field public static final int FEATURE_RCS = 2; // 0x2
- field public static final int STATE_INITIALIZING = 1; // 0x1
- field public static final int STATE_READY = 2; // 0x2
- field public static final int STATE_UNAVAILABLE = 0; // 0x0
- }
-
@Deprecated public static class ImsFeature.Capabilities {
field @Deprecated protected int mCapabilities;
}
- protected static class ImsFeature.CapabilityCallbackProxy {
- method public void onChangeCapabilityConfigurationError(int, int, int);
- }
-
- public class MmTelFeature extends android.telephony.ims.feature.ImsFeature {
- ctor public MmTelFeature();
- method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
- method @Nullable public android.telephony.ims.ImsCallProfile createCallProfile(int, int);
- method @Nullable public android.telephony.ims.stub.ImsCallSessionImplBase createCallSession(@NonNull android.telephony.ims.ImsCallProfile);
- method @NonNull public android.telephony.ims.stub.ImsEcbmImplBase getEcbm();
- method @NonNull public android.telephony.ims.stub.ImsMultiEndpointImplBase getMultiEndpoint();
- method @NonNull public android.telephony.ims.stub.ImsSmsImplBase getSmsImplementation();
- method @NonNull public android.telephony.ims.stub.ImsUtImplBase getUt();
- method public final void notifyCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.MmTelFeature.MmTelCapabilities);
- method public final void notifyIncomingCall(@NonNull android.telephony.ims.stub.ImsCallSessionImplBase, @NonNull android.os.Bundle);
- method public final void notifyRejectedCall(@NonNull android.telephony.ims.ImsCallProfile, @NonNull android.telephony.ims.ImsReasonInfo);
- method public final void notifyVoiceMessageCountUpdate(int);
- method public void onFeatureReady();
- method public void onFeatureRemoved();
- method public boolean queryCapabilityConfiguration(int, int);
- method @NonNull public final android.telephony.ims.feature.MmTelFeature.MmTelCapabilities queryCapabilityStatus();
- method public void setUiTtyMode(int, @Nullable android.os.Message);
- method public int shouldProcessCall(@NonNull String[]);
- field public static final String EXTRA_IS_UNKNOWN_CALL = "android.telephony.ims.feature.extra.IS_UNKNOWN_CALL";
- field public static final String EXTRA_IS_USSD = "android.telephony.ims.feature.extra.IS_USSD";
- field public static final int PROCESS_CALL_CSFB = 1; // 0x1
- field public static final int PROCESS_CALL_IMS = 0; // 0x0
- }
-
- public static class MmTelFeature.MmTelCapabilities extends android.telephony.ims.feature.ImsFeature.Capabilities {
- ctor public MmTelFeature.MmTelCapabilities();
- ctor @Deprecated public MmTelFeature.MmTelCapabilities(android.telephony.ims.feature.ImsFeature.Capabilities);
- ctor public MmTelFeature.MmTelCapabilities(int);
- method public final void addCapabilities(int);
- method public final void removeCapabilities(int);
- }
-
- public class RcsFeature extends android.telephony.ims.feature.ImsFeature {
- ctor public RcsFeature();
- method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
- method public void onFeatureReady();
- method public void onFeatureRemoved();
- }
-
-}
-
-package android.telephony.ims.stub {
-
- public class ImsCallSessionImplBase implements java.lang.AutoCloseable {
- ctor public ImsCallSessionImplBase();
- method public void accept(int, android.telephony.ims.ImsStreamMediaProfile);
- method public void close();
- method public void deflect(String);
- method public void extendToConference(String[]);
- method public String getCallId();
- method public android.telephony.ims.ImsCallProfile getCallProfile();
- method public android.telephony.ims.ImsVideoCallProvider getImsVideoCallProvider();
- method public android.telephony.ims.ImsCallProfile getLocalCallProfile();
- method public String getProperty(String);
- method public android.telephony.ims.ImsCallProfile getRemoteCallProfile();
- method public int getState();
- method public void hold(android.telephony.ims.ImsStreamMediaProfile);
- method public void inviteParticipants(String[]);
- method public boolean isInCall();
- method public boolean isMultiparty();
- method public void merge();
- method public void reject(int);
- method public void removeParticipants(String[]);
- method public void resume(android.telephony.ims.ImsStreamMediaProfile);
- method public void sendDtmf(char, android.os.Message);
- method public void sendRttMessage(String);
- method public void sendRttModifyRequest(android.telephony.ims.ImsCallProfile);
- method public void sendRttModifyResponse(boolean);
- method public void sendUssd(String);
- method public void setListener(android.telephony.ims.ImsCallSessionListener);
- method public void setMute(boolean);
- method public void start(String, android.telephony.ims.ImsCallProfile);
- method public void startConference(String[], android.telephony.ims.ImsCallProfile);
- method public void startDtmf(char);
- method public void stopDtmf();
- method public void terminate(int);
- method public void update(int, android.telephony.ims.ImsStreamMediaProfile);
- field public static final int USSD_MODE_NOTIFY = 0; // 0x0
- field public static final int USSD_MODE_REQUEST = 1; // 0x1
- }
-
- public static class ImsCallSessionImplBase.State {
- method public static String toString(int);
- field public static final int ESTABLISHED = 4; // 0x4
- field public static final int ESTABLISHING = 3; // 0x3
- field public static final int IDLE = 0; // 0x0
- field public static final int INITIATED = 1; // 0x1
- field public static final int INVALID = -1; // 0xffffffff
- field public static final int NEGOTIATING = 2; // 0x2
- field public static final int REESTABLISHING = 6; // 0x6
- field public static final int RENEGOTIATING = 5; // 0x5
- field public static final int TERMINATED = 8; // 0x8
- field public static final int TERMINATING = 7; // 0x7
- }
-
- public class ImsConfigImplBase {
- ctor public ImsConfigImplBase();
- method public int getConfigInt(int);
- method public String getConfigString(int);
- method public final void notifyProvisionedValueChanged(int, int);
- method public final void notifyProvisionedValueChanged(int, String);
- method public void notifyRcsAutoConfigurationReceived(@NonNull byte[], boolean);
- method public int setConfig(int, int);
- method public int setConfig(int, String);
- field public static final int CONFIG_RESULT_FAILED = 1; // 0x1
- field public static final int CONFIG_RESULT_SUCCESS = 0; // 0x0
- field public static final int CONFIG_RESULT_UNKNOWN = -1; // 0xffffffff
- }
-
- public class ImsEcbmImplBase {
- ctor public ImsEcbmImplBase();
- method public final void enteredEcbm();
- method public void exitEmergencyCallbackMode();
- method public final void exitedEcbm();
- }
-
- public final class ImsFeatureConfiguration implements android.os.Parcelable {
- method public int describeContents();
- method public java.util.Set<android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair> getServiceFeatures();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.stub.ImsFeatureConfiguration> CREATOR;
- }
-
- public static class ImsFeatureConfiguration.Builder {
- ctor public ImsFeatureConfiguration.Builder();
- method public android.telephony.ims.stub.ImsFeatureConfiguration.Builder addFeature(int, int);
- method public android.telephony.ims.stub.ImsFeatureConfiguration build();
- }
-
- public static final class ImsFeatureConfiguration.FeatureSlotPair {
- ctor public ImsFeatureConfiguration.FeatureSlotPair(int, int);
- field public final int featureType;
- field public final int slotId;
- }
-
- public class ImsMultiEndpointImplBase {
- ctor public ImsMultiEndpointImplBase();
- method public final void onImsExternalCallStateUpdate(java.util.List<android.telephony.ims.ImsExternalCallState>);
- method public void requestImsExternalCallStateInfo();
- }
-
- public class ImsRegistrationImplBase {
- ctor public ImsRegistrationImplBase();
- method public final void onDeregistered(android.telephony.ims.ImsReasonInfo);
- method public final void onRegistered(int);
- method public final void onRegistering(int);
- method public final void onSubscriberAssociatedUriChanged(android.net.Uri[]);
- method public final void onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo);
- field public static final int REGISTRATION_TECH_IWLAN = 1; // 0x1
- field public static final int REGISTRATION_TECH_LTE = 0; // 0x0
- field public static final int REGISTRATION_TECH_NONE = -1; // 0xffffffff
- }
-
- public class ImsSmsImplBase {
- ctor public ImsSmsImplBase();
- method public void acknowledgeSms(int, @IntRange(from=0, to=65535) int, int);
- method public void acknowledgeSmsReport(int, @IntRange(from=0, to=65535) int, int);
- method public String getSmsFormat();
- method public void onReady();
- method @Deprecated public final void onSendSmsResult(int, @IntRange(from=0, to=65535) int, int, int) throws java.lang.RuntimeException;
- method public final void onSendSmsResultError(int, @IntRange(from=0, to=65535) int, int, int, int) throws java.lang.RuntimeException;
- method public final void onSendSmsResultSuccess(int, @IntRange(from=0, to=65535) int) throws java.lang.RuntimeException;
- method public final void onSmsReceived(int, String, byte[]) throws java.lang.RuntimeException;
- method @Deprecated public final void onSmsStatusReportReceived(int, @IntRange(from=0, to=65535) int, String, byte[]) throws java.lang.RuntimeException;
- method public final void onSmsStatusReportReceived(int, String, byte[]) throws java.lang.RuntimeException;
- method public void sendSms(int, @IntRange(from=0, to=65535) int, String, String, boolean, byte[]);
- field public static final int DELIVER_STATUS_ERROR_GENERIC = 2; // 0x2
- field public static final int DELIVER_STATUS_ERROR_NO_MEMORY = 3; // 0x3
- field public static final int DELIVER_STATUS_ERROR_REQUEST_NOT_SUPPORTED = 4; // 0x4
- field public static final int DELIVER_STATUS_OK = 1; // 0x1
- field public static final int RESULT_NO_NETWORK_ERROR = -1; // 0xffffffff
- field public static final int SEND_STATUS_ERROR = 2; // 0x2
- field public static final int SEND_STATUS_ERROR_FALLBACK = 4; // 0x4
- field public static final int SEND_STATUS_ERROR_RETRY = 3; // 0x3
- field public static final int SEND_STATUS_OK = 1; // 0x1
- field public static final int STATUS_REPORT_STATUS_ERROR = 2; // 0x2
- field public static final int STATUS_REPORT_STATUS_OK = 1; // 0x1
- }
-
- public class ImsUtImplBase {
- ctor public ImsUtImplBase();
- method public void close();
- method public int queryCallBarring(int);
- method public int queryCallBarringForServiceClass(int, int);
- method public int queryCallForward(int, String);
- method public int queryCallWaiting();
- method public int queryClip();
- method public int queryClir();
- method public int queryColp();
- method public int queryColr();
- method public void setListener(android.telephony.ims.ImsUtListener);
- method public int transact(android.os.Bundle);
- method public int updateCallBarring(int, int, String[]);
- method public int updateCallBarringForServiceClass(int, int, String[], int);
- method public int updateCallForward(int, int, String, int, int);
- method public int updateCallWaiting(boolean, int);
- method public int updateClip(boolean);
- method public int updateClir(int);
- method public int updateColp(boolean);
- method public int updateColr(int);
- }
-
-}
-
-package android.telephony.mbms {
-
- public static class DownloadRequest.Builder {
- method public android.telephony.mbms.DownloadRequest.Builder setServiceId(String);
- }
-
- public final class FileInfo implements android.os.Parcelable {
- ctor public FileInfo(android.net.Uri, String);
- }
-
- public final class FileServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
- ctor public FileServiceInfo(java.util.Map<java.util.Locale,java.lang.String>, String, java.util.List<java.util.Locale>, String, java.util.Date, java.util.Date, java.util.List<android.telephony.mbms.FileInfo>);
- }
-
- public final class StreamingServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
- ctor public StreamingServiceInfo(java.util.Map<java.util.Locale,java.lang.String>, String, java.util.List<java.util.Locale>, String, java.util.Date, java.util.Date);
- }
-
- public final class UriPathPair implements android.os.Parcelable {
- method public int describeContents();
- method public android.net.Uri getContentUri();
- method public android.net.Uri getFilePathUri();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.UriPathPair> CREATOR;
- }
-
-}
-
-package android.telephony.mbms.vendor {
-
- public class MbmsDownloadServiceBase extends android.os.Binder implements android.os.IInterface {
- ctor public MbmsDownloadServiceBase();
- method public int addProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
- method public int addServiceAnnouncement(int, @NonNull byte[]);
- method public int addStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
- method public android.os.IBinder asBinder();
- method public int cancelDownload(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
- method public void dispose(int) throws android.os.RemoteException;
- method public int download(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
- method public int initialize(int, android.telephony.mbms.MbmsDownloadSessionCallback) throws android.os.RemoteException;
- method @NonNull public java.util.List<android.telephony.mbms.DownloadRequest> listPendingDownloads(int) throws android.os.RemoteException;
- method public void onAppCallbackDied(int, int);
- method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException;
- method public int removeProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
- method public int removeStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
- method public int requestDownloadState(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo) throws android.os.RemoteException;
- method public int requestUpdateFileServices(int, java.util.List<java.lang.String>) throws android.os.RemoteException;
- method public int resetDownloadKnowledge(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
- method public int setTempFileRootDirectory(int, String) throws android.os.RemoteException;
- }
-
- public class MbmsGroupCallServiceBase extends android.app.Service {
- ctor public MbmsGroupCallServiceBase();
- method public void dispose(int) throws android.os.RemoteException;
- method public int initialize(@NonNull android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException;
- method public void onAppCallbackDied(int, int);
- method public android.os.IBinder onBind(android.content.Intent);
- method public int startGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull android.telephony.mbms.GroupCallCallback);
- method public void stopGroupCall(int, long);
- method public void updateGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>);
- }
-
- public class MbmsStreamingServiceBase extends android.os.Binder implements android.os.IInterface {
- ctor public MbmsStreamingServiceBase();
- method public android.os.IBinder asBinder();
- method public void dispose(int) throws android.os.RemoteException;
- method @Nullable public android.net.Uri getPlaybackUri(int, String) throws android.os.RemoteException;
- method public int initialize(android.telephony.mbms.MbmsStreamingSessionCallback, int) throws android.os.RemoteException;
- method public void onAppCallbackDied(int, int);
- method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException;
- method public int requestUpdateStreamingServices(int, java.util.List<java.lang.String>) throws android.os.RemoteException;
- method public int startStreaming(int, String, android.telephony.mbms.StreamingServiceCallback) throws android.os.RemoteException;
- method public void stopStreaming(int, String) throws android.os.RemoteException;
- }
-
- public class VendorUtils {
- ctor public VendorUtils();
- method public static android.content.ComponentName getAppReceiverFromPackageName(android.content.Context, String);
- field public static final String ACTION_CLEANUP = "android.telephony.mbms.action.CLEANUP";
- field public static final String ACTION_DOWNLOAD_RESULT_INTERNAL = "android.telephony.mbms.action.DOWNLOAD_RESULT_INTERNAL";
- field public static final String ACTION_FILE_DESCRIPTOR_REQUEST = "android.telephony.mbms.action.FILE_DESCRIPTOR_REQUEST";
- field public static final String EXTRA_FD_COUNT = "android.telephony.mbms.extra.FD_COUNT";
- field public static final String EXTRA_FINAL_URI = "android.telephony.mbms.extra.FINAL_URI";
- field public static final String EXTRA_FREE_URI_LIST = "android.telephony.mbms.extra.FREE_URI_LIST";
- field public static final String EXTRA_PAUSED_LIST = "android.telephony.mbms.extra.PAUSED_LIST";
- field public static final String EXTRA_PAUSED_URI_LIST = "android.telephony.mbms.extra.PAUSED_URI_LIST";
- field public static final String EXTRA_SERVICE_ID = "android.telephony.mbms.extra.SERVICE_ID";
- field public static final String EXTRA_TEMP_FILES_IN_USE = "android.telephony.mbms.extra.TEMP_FILES_IN_USE";
- field public static final String EXTRA_TEMP_FILE_ROOT = "android.telephony.mbms.extra.TEMP_FILE_ROOT";
- field public static final String EXTRA_TEMP_LIST = "android.telephony.mbms.extra.TEMP_LIST";
- }
-
}
package android.text {
@@ -5396,10 +2058,7 @@ package android.view.accessibility {
public final class AccessibilityManager {
method public void addAccessibilityServicesStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener, @Nullable android.os.Handler);
method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public java.util.List<java.lang.String> getAccessibilityShortcutTargets(int);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void performAccessibilityShortcut();
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void registerSystemAction(@NonNull android.app.RemoteAction, int);
method public void removeAccessibilityServicesStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
- method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void unregisterSystemAction(int);
}
public static interface AccessibilityManager.AccessibilityServicesStateChangeListener {
@@ -5445,7 +2104,6 @@ package android.view.autofill {
}
public final class AutofillManager {
- method public void setAugmentedAutofillWhitelist(@Nullable java.util.Set<java.lang.String>, @Nullable java.util.Set<android.content.ComponentName>);
field public static final String DEVICE_CONFIG_AUTOFILL_SMART_SUGGESTION_SUPPORTED_MODES = "smart_suggestion_supported_modes";
field public static final int FLAG_SMART_SUGGESTION_OFF = 0; // 0x0
field public static final int FLAG_SMART_SUGGESTION_SYSTEM = 1; // 0x1
@@ -5456,42 +2114,7 @@ package android.view.autofill {
package android.view.contentcapture {
- public final class ContentCaptureContext implements android.os.Parcelable {
- method @Nullable public android.content.ComponentName getActivityComponent();
- method public int getDisplayId();
- method public int getFlags();
- method @Nullable public android.view.contentcapture.ContentCaptureSessionId getParentSessionId();
- method public int getTaskId();
- field public static final int FLAG_DISABLED_BY_APP = 1; // 0x1
- field public static final int FLAG_DISABLED_BY_FLAG_SECURE = 2; // 0x2
- field public static final int FLAG_RECONNECTED = 4; // 0x4
- }
-
- public final class ContentCaptureEvent implements android.os.Parcelable {
- method public int describeContents();
- method @Nullable public android.view.contentcapture.ContentCaptureContext getContentCaptureContext();
- method public long getEventTime();
- method @Nullable public android.view.autofill.AutofillId getId();
- method @Nullable public java.util.List<android.view.autofill.AutofillId> getIds();
- method @Nullable public android.graphics.Insets getInsets();
- method @Nullable public CharSequence getText();
- method public int getType();
- method @Nullable public android.view.contentcapture.ViewNode getViewNode();
- method public void writeToParcel(android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureEvent> CREATOR;
- field public static final int TYPE_CONTEXT_UPDATED = 6; // 0x6
- field public static final int TYPE_SESSION_PAUSED = 8; // 0x8
- field public static final int TYPE_SESSION_RESUMED = 7; // 0x7
- field public static final int TYPE_VIEW_APPEARED = 1; // 0x1
- field public static final int TYPE_VIEW_DISAPPEARED = 2; // 0x2
- field public static final int TYPE_VIEW_INSETS_CHANGED = 9; // 0x9
- field public static final int TYPE_VIEW_TEXT_CHANGED = 3; // 0x3
- field public static final int TYPE_VIEW_TREE_APPEARED = 5; // 0x5
- field public static final int TYPE_VIEW_TREE_APPEARING = 4; // 0x4
- }
-
public final class ContentCaptureManager {
- method public boolean isContentCaptureFeatureEnabled();
field public static final String DEVICE_CONFIG_PROPERTY_IDLE_FLUSH_FREQUENCY = "idle_flush_frequency";
field public static final String DEVICE_CONFIG_PROPERTY_LOGGING_LEVEL = "logging_level";
field public static final String DEVICE_CONFIG_PROPERTY_LOG_HISTORY_SIZE = "log_history_size";
@@ -5504,7 +2127,6 @@ package android.view.contentcapture {
}
public final class ViewNode extends android.app.assist.AssistStructure.ViewNode {
- method @Nullable public android.view.autofill.AutofillId getParentAutofillId();
method @Nullable public static android.view.contentcapture.ViewNode readFromParcel(@NonNull android.os.Parcel);
method public static void writeToParcel(@NonNull android.os.Parcel, @Nullable android.view.contentcapture.ViewNode, int);
}
@@ -5753,7 +2375,7 @@ package android.window {
public class TaskOrganizer extends android.window.WindowOrganizer {
ctor public TaskOrganizer();
- method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.app.ActivityManager.RunningTaskInfo createRootTask(int, int);
+ method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.window.TaskAppearedInfo createRootTask(int, int);
method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public boolean deleteRootTask(@NonNull android.window.WindowContainerToken);
method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]);
method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.window.WindowContainerToken getImeTarget(int);
diff --git a/api/test-removed.txt b/api/test-removed.txt
index e47f6edfbff1..d802177e249b 100644
--- a/api/test-removed.txt
+++ b/api/test-removed.txt
@@ -1,10 +1 @@
// Signature format: 2.0
-package android.app.prediction {
-
- public static final class AppTarget.Builder {
- method @Deprecated @NonNull public android.app.prediction.AppTarget.Builder setTarget(@NonNull String, @NonNull android.os.UserHandle);
- method @Deprecated @NonNull public android.app.prediction.AppTarget.Builder setTarget(@NonNull android.content.pm.ShortcutInfo);
- }
-
-}
-
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index aeafccbcfa07..3d67e6574652 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -504,7 +504,7 @@ message Atom {
}
// Pulled events will start at field 10000.
- // Next: 10090
+ // Next: 10092
oneof pulled {
WifiBytesTransfer wifi_bytes_transfer = 10000 [(module) = "framework"];
WifiBytesTransferByFgBg wifi_bytes_transfer_by_fg_bg = 10001 [(module) = "framework"];
@@ -607,6 +607,8 @@ message Atom {
OutgoingSms outgoing_sms = 10087 [(module) = "telephony"];
CarrierIdMatchingTable carrier_id_table_version = 10088 [(module) = "telephony"];
DataCallSession data_call_session = 10089 [(module) = "telephony"];
+ CellularServiceState cellular_service_state = 10090 [(module) = "telephony"];
+ CellularDataServiceSwitch cellular_data_service_switch = 10091 [(module) = "telephony"];
}
// DO NOT USE field numbers above 100,000 in AOSP.
@@ -10398,7 +10400,7 @@ message VoiceCallSession {
// Number of other calls going on during call termination, for the same SIM slot.
optional int32 concurrent_call_count_at_end = 14;
- // Index of the SIM is used, 0 for single-SIM devices.
+ // Index of the SIM used, 0 for single-SIM devices.
optional int32 sim_slot_index = 15;
// Whether the device was in multi-SIM mode (with multiple active SIM profiles).
@@ -10450,7 +10452,7 @@ message VoiceCallRatUsage {
// Radio access technology.
optional android.telephony.NetworkTypeEnum rat = 2;
- // Total duration that voice calls spent on this carrier and RAT.
+ // Total duration that voice calls spent on this carrier and RAT, rounded to 5 minute.
optional int64 total_duration_seconds = 3;
// Total number of calls using this carrier and RAT.
@@ -10459,6 +10461,82 @@ message VoiceCallRatUsage {
}
/**
+ * Pulls amount of time spend in each cellular service state.
+ *
+ * Each pull creates multiple atoms, one for each SIM slot/carrier/RAT(including ENDC), the order of
+ * which is irrelevant to time. If multi SIM settings changes during the period, durations will be
+ * counted separately before and after the change. Airplane mode does not count towards durations.
+ *
+ * Pulled from:
+ * frameworks/opt/telephony/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
+ */
+message CellularServiceState {
+ // Radio access technology (RAT) for voice.
+ // NETWORK_TYPE_UNKNOWN when the device is out of service.
+ // NETWORK_TYPE_IWLAN when the device is using VoWiFi.
+ optional android.telephony.NetworkTypeEnum voice_rat = 1;
+
+ // Radio access technology (RAT) for data.
+ // NETWORK_TYPE_UNKNOWN when the device is out of service.
+ // Only cellular RATs are valid and show where the device is camped.
+ optional android.telephony.NetworkTypeEnum data_rat = 2;
+
+ // Whether the device was in roaming (domestic or international) for voice.
+ optional android.telephony.RoamingTypeEnum voice_roaming_type = 3;
+
+ // Whether the device was in roaming (domestic or international) for data.
+ optional android.telephony.RoamingTypeEnum data_roaming_type = 4;
+
+ // Whether the device is on LTE and has access to NR NSA, i.e. cell supports 5G (ENDC) and UE
+ // registration (attach/TAU) indicates ENDC is not restricted.
+ optional bool is_endc = 5;
+
+ // Index of the SIM used, 0 for single-SIM devices.
+ optional int32 sim_slot_index = 6;
+
+ // Whether the device was in multi-SIM mode (with multiple active SIM profiles).
+ optional bool is_multi_sim = 7;
+
+ // Carrier ID of the SIM card.
+ // See https://source.android.com/devices/tech/config/carrierid.
+ optional int32 carrier_id = 8;
+
+ // Total time spent in this service state, rounded to 5 minutes.
+ optional int32 total_time_seconds = 9;
+}
+
+/**
+ * Pulls the number of times cellular data service state switches.
+ *
+ * Each pull creates multiple atoms, one for each RAT combination, the order of which is irrelevant
+ * to time. Switches for different SIM slots, carrier IDs, or multi-SIM settings are counted
+ * separately.
+ *
+ * Pulled from:
+ * frameworks/opt/telephony/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
+ */
+message CellularDataServiceSwitch {
+ // Cellular RAT of the DATA domain from where the switch occurred.
+ optional android.telephony.NetworkTypeEnum rat_from = 1;
+
+ // Cellular RAT of the DATA domain to where the switch occurred.
+ optional android.telephony.NetworkTypeEnum rat_to = 2;
+
+ // Index of the SIM used, 0 for single-SIM devices.
+ optional int32 sim_slot_index = 3;
+
+ // Whether the device was in multi-SIM mode (with multiple active SIM profiles).
+ optional bool is_multi_sim = 4;
+
+ // Carrier ID of the SIM card.
+ // See https://source.android.com/devices/tech/config/carrierid.
+ optional int32 carrier_id = 5;
+
+ // Number of switches from rat_from to rat_to.
+ optional int32 switch_count = 6;
+}
+
+/**
* Pulls the number of active SIM slots and SIMs/eSIM profiles.
*
* Pulled from:
@@ -10527,7 +10605,7 @@ message IncomingSms {
// Whether the SMS was received while roaming.
optional bool is_roaming = 9;
- // Index of the SIM is used, 0 for single-SIM devices.
+ // Index of the SIM used, 0 for single-SIM devices.
optional int32 sim_slot_index = 10;
// Whether the device was in multi-SIM mode (with multiple active SIM profiles).
@@ -10579,7 +10657,7 @@ message OutgoingSms {
// Whether the default SMS application generated the SMS (regardless of which application).
optional bool is_from_default_app = 7;
- // Index of the SIM is used, 0 for single-SIM devices.
+ // Index of the SIM used, 0 for single-SIM devices.
optional int32 sim_slot_index = 8;
// Whether the device was in multi-SIM mode (with multiple active SIM profiles).
diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt
index f43bd2bd61b9..01272c7966ac 100644
--- a/config/boot-image-profile.txt
+++ b/config/boot-image-profile.txt
@@ -47131,8 +47131,8 @@ Landroid/view/IRemoteAnimationRunner;
Landroid/view/IRotationWatcher$Stub$Proxy;
Landroid/view/IRotationWatcher$Stub;
Landroid/view/IRotationWatcher;
-Landroid/view/IScrollCaptureController$Stub;
-Landroid/view/IScrollCaptureController;
+Landroid/view/IScrollCaptureCallbacks$Stub;
+Landroid/view/IScrollCaptureCallbacks;
Landroid/view/ISystemGestureExclusionListener$Stub$Proxy;
Landroid/view/ISystemGestureExclusionListener$Stub;
Landroid/view/ISystemGestureExclusionListener;
diff --git a/core/java/android/accessibilityservice/AccessibilityGestureEvent.java b/core/java/android/accessibilityservice/AccessibilityGestureEvent.java
index e3139eb798f7..d4713cb611c3 100644
--- a/core/java/android/accessibilityservice/AccessibilityGestureEvent.java
+++ b/core/java/android/accessibilityservice/AccessibilityGestureEvent.java
@@ -46,6 +46,7 @@ import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER
import static android.accessibilityservice.AccessibilityService.GESTURE_4_FINGER_TRIPLE_TAP;
import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP;
import static android.accessibilityservice.AccessibilityService.GESTURE_DOUBLE_TAP_AND_HOLD;
+import static android.accessibilityservice.AccessibilityService.GESTURE_PASSTHROUGH;
import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN;
import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN_AND_LEFT;
import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_DOWN_AND_RIGHT;
@@ -62,15 +63,21 @@ import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP
import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP_AND_DOWN;
import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP_AND_LEFT;
import static android.accessibilityservice.AccessibilityService.GESTURE_SWIPE_UP_AND_RIGHT;
+import static android.accessibilityservice.AccessibilityService.GESTURE_TOUCH_EXPLORATION;
+import static android.accessibilityservice.AccessibilityService.GESTURE_UNKNOWN;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.TestApi;
+import android.content.pm.ParceledListSlice;
import android.os.Parcel;
import android.os.Parcelable;
+import android.view.MotionEvent;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.List;
/**
* This class describes the gesture event including gesture id and which display it happens
@@ -87,6 +94,8 @@ public final class AccessibilityGestureEvent implements Parcelable {
/** @hide */
@IntDef(prefix = { "GESTURE_" }, value = {
+ GESTURE_UNKNOWN,
+ GESTURE_TOUCH_EXPLORATION,
GESTURE_2_FINGER_SINGLE_TAP,
GESTURE_2_FINGER_SINGLE_TAP_AND_HOLD,
GESTURE_2_FINGER_DOUBLE_TAP,
@@ -139,17 +148,27 @@ public final class AccessibilityGestureEvent implements Parcelable {
@GestureId
private final int mGestureId;
private final int mDisplayId;
+ private List<MotionEvent> mMotionEvents = new ArrayList<>();
/** @hide */
- @TestApi
- public AccessibilityGestureEvent(int gestureId, int displayId) {
+ public AccessibilityGestureEvent(
+ int gestureId, int displayId, @NonNull List<MotionEvent> motionEvents) {
mGestureId = gestureId;
mDisplayId = displayId;
+ mMotionEvents.addAll(motionEvents);
+ }
+
+ /** @hide */
+ @TestApi
+ public AccessibilityGestureEvent(int gestureId, int displayId) {
+ this(gestureId, displayId, new ArrayList<MotionEvent>());
}
private AccessibilityGestureEvent(@NonNull Parcel parcel) {
mGestureId = parcel.readInt();
mDisplayId = parcel.readInt();
+ ParceledListSlice<MotionEvent> slice = parcel.readParcelable(getClass().getClassLoader());
+ mMotionEvents = slice.getList();
}
/**
@@ -172,6 +191,15 @@ public final class AccessibilityGestureEvent implements Parcelable {
return mGestureId;
}
+ /**
+ * Returns the motion events that lead to this gesture.
+ *
+ */
+ @NonNull
+ public List<MotionEvent> getMotionEvents() {
+ return mMotionEvents;
+ }
+
@NonNull
@Override
public String toString() {
@@ -179,12 +207,26 @@ public final class AccessibilityGestureEvent implements Parcelable {
stringBuilder.append("gestureId: ").append(eventTypeToString(mGestureId));
stringBuilder.append(", ");
stringBuilder.append("displayId: ").append(mDisplayId);
+ stringBuilder.append(", ");
+ stringBuilder.append("Motion Events: [");
+ for (int i = 0; i < mMotionEvents.size(); ++i) {
+ String action = MotionEvent.actionToString(mMotionEvents.get(i).getActionMasked());
+ stringBuilder.append(action);
+ if (i < (mMotionEvents.size() - 1)) {
+ stringBuilder.append(", ");
+ } else {
+ stringBuilder.append("]");
+ }
+ }
stringBuilder.append(']');
return stringBuilder.toString();
}
private static String eventTypeToString(int eventType) {
switch (eventType) {
+ case GESTURE_UNKNOWN: return "GESTURE_UNKNOWN";
+ case GESTURE_PASSTHROUGH: return "GESTURE_PASSTHROUGH";
+ case GESTURE_TOUCH_EXPLORATION: return "GESTURE_TOUCH_EXPLORATION";
case GESTURE_2_FINGER_SINGLE_TAP: return "GESTURE_2_FINGER_SINGLE_TAP";
case GESTURE_2_FINGER_SINGLE_TAP_AND_HOLD:
return "GESTURE_2_FINGER_SINGLE_TAP_AND_HOLD";
@@ -252,6 +294,7 @@ public final class AccessibilityGestureEvent implements Parcelable {
public void writeToParcel(@NonNull Parcel parcel, int flags) {
parcel.writeInt(mGestureId);
parcel.writeInt(mDisplayId);
+ parcel.writeParcelable(new ParceledListSlice<MotionEvent>(mMotionEvents), 0);
}
/**
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index 7c6d4484ee12..0ad9e446dfc7 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -235,6 +235,29 @@ import java.util.function.Consumer;
public abstract class AccessibilityService extends Service {
/**
+ * The user has performed a touch-exploration gesture on the touch screen without ever
+ * triggering gesture detection. This gesture is only dispatched when {@link
+ * AccessibilityServiceInfo#FLAG_SEND_MOTION_EVENTS} is set.
+ *
+ * @hide
+ */
+ public static final int GESTURE_TOUCH_EXPLORATION = -2;
+
+ /**
+ * The user has performed a passthrough gesture on the touch screen without ever triggering
+ * gesture detection. This gesture is only dispatched when {@link
+ * AccessibilityServiceInfo#FLAG_SEND_MOTION_EVENTS} is set.
+ * @hide
+ */
+ public static final int GESTURE_PASSTHROUGH = -1;
+
+ /**
+ * The user has performed an unrecognized gesture on the touch screen. This gesture is only
+ * dispatched when {@link AccessibilityServiceInfo#FLAG_SEND_MOTION_EVENTS} is set.
+ */
+ public static final int GESTURE_UNKNOWN = 0;
+
+ /**
* The user has performed a swipe up gesture on the touch screen.
*/
public static final int GESTURE_SWIPE_UP = 1;
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index 769d006cb2b6..f953da48c217 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -376,6 +376,20 @@ public class AccessibilityServiceInfo implements Parcelable {
*/
public static final int FLAG_REQUEST_2_FINGER_PASSTHROUGH = 0x0002000;
+ /**
+ * This flag requests that when when {@link #FLAG_REQUEST_TOUCH_EXPLORATION_MODE} is enabled, a
+ * service will receive the motion events for each successfully-detected gesture. The service
+ * will also receive an AccessibilityGestureEvent of type GESTURE_INVALID for each cancelled
+ * gesture along with its motion events. A service will receive a gesture of type
+ * GESTURE_PASSTHROUGH and accompanying motion events for every passthrough gesture that does
+ * not start gesture detection. This information can be used to collect instances of improper
+ * gesture detection behavior and relay that information to framework developers. If {@link
+ * #FLAG_REQUEST_TOUCH_EXPLORATION_MODE} is disabled this flag has no effect.
+ *
+ * @see #FLAG_REQUEST_TOUCH_EXPLORATION_MODE
+ */
+ public static final int FLAG_SEND_MOTION_EVENTS = 0x0004000;
+
/** {@hide} */
public static final int FLAG_FORCE_DIRECT_BOOT_AWARE = 0x00010000;
@@ -1276,6 +1290,8 @@ public class AccessibilityServiceInfo implements Parcelable {
return "FLAG_REQUEST_MULTI_FINGER_GESTURES";
case FLAG_REQUEST_2_FINGER_PASSTHROUGH:
return "FLAG_REQUEST_2_FINGER_PASSTHROUGH";
+ case FLAG_SEND_MOTION_EVENTS:
+ return "FLAG_SEND_MOTION_EVENTS";
case FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY:
return "FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY";
case FLAG_REPORT_VIEW_IDS:
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index cb98093a1a24..250f2f0b2dc9 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -3608,7 +3608,7 @@ public class ActivityManager {
* running its code, {@link RunningAppProcessInfo#IMPORTANCE_GONE} is returned.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
public @RunningAppProcessInfo.Importance int getPackageImportance(String packageName) {
try {
@@ -3628,7 +3628,7 @@ public class ActivityManager {
* running its code, {@link RunningAppProcessInfo#IMPORTANCE_GONE} is returned.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
public @RunningAppProcessInfo.Importance int getUidImportance(int uid) {
try {
@@ -3645,7 +3645,7 @@ public class ActivityManager {
* {@link #addOnUidImportanceListener}.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public interface OnUidImportanceListener {
/**
* The importance if a given uid has changed. Will be one of the importance
@@ -3676,7 +3676,7 @@ public class ActivityManager {
* {@link android.Manifest.permission#PACKAGE_USAGE_STATS}.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
public void addOnUidImportanceListener(OnUidImportanceListener listener,
@RunningAppProcessInfo.Importance int importanceCutpoint) {
@@ -3705,7 +3705,7 @@ public class ActivityManager {
* @throws IllegalArgumentException If the listener is not registered.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.PACKAGE_USAGE_STATS)
public void removeOnUidImportanceListener(OnUidImportanceListener listener) {
synchronized (this) {
@@ -3847,7 +3847,7 @@ public class ActivityManager {
* @see #forceStopPackageAsUser(String, int)
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.FORCE_STOP_PACKAGES)
public void forceStopPackage(String packageName) {
forceStopPackageAsUser(packageName, mContext.getUserId());
@@ -4186,7 +4186,6 @@ public class ActivityManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.MANAGE_USERS)
public boolean switchUser(@NonNull UserHandle user) {
if (user == null) {
@@ -4619,7 +4618,7 @@ public class ActivityManager {
*
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.FORCE_STOP_PACKAGES)
public void killProcessesWhenImperceptible(@NonNull int[] pids, @NonNull String reason) {
try {
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index c5bc3564ceab..f3b37891876d 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -461,7 +461,6 @@ public class AppOpsManager {
* state the more important the UID is for the user.
* @hide
*/
- @TestApi
@SystemApi
public static final int UID_STATE_PERSISTENT = 100;
@@ -470,7 +469,6 @@ public class AppOpsManager {
* state the more important the UID is for the user.
* @hide
*/
- @TestApi
@SystemApi
public static final int UID_STATE_TOP = 200;
@@ -482,7 +480,6 @@ public class AppOpsManager {
* @hide
* @deprecated
*/
- @TestApi
@SystemApi
@Deprecated
public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 300;
@@ -492,7 +489,6 @@ public class AppOpsManager {
* state the more important the UID is for the user.
* @hide
*/
- @TestApi
@SystemApi
public static final int UID_STATE_FOREGROUND_SERVICE = 400;
@@ -501,7 +497,6 @@ public class AppOpsManager {
* state the more important the UID is for the user.
* @hide
*/
- @TestApi
@SystemApi
public static final int UID_STATE_FOREGROUND = 500;
@@ -517,7 +512,6 @@ public class AppOpsManager {
* state the more important the UID is for the user.
* @hide
*/
- @TestApi
@SystemApi
public static final int UID_STATE_BACKGROUND = 600;
@@ -526,7 +520,6 @@ public class AppOpsManager {
* state the more important the UID is for the user.
* @hide
*/
- @TestApi
@SystemApi
public static final int UID_STATE_CACHED = 700;
@@ -604,7 +597,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int OP_FLAG_SELF = 0x1;
@@ -615,7 +607,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int OP_FLAG_TRUSTED_PROXY = 0x2;
@@ -626,7 +617,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int OP_FLAG_UNTRUSTED_PROXY = 0x4;
@@ -637,7 +627,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int OP_FLAG_TRUSTED_PROXIED = 0x8;
@@ -648,7 +637,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int OP_FLAG_UNTRUSTED_PROXIED = 0x10;
@@ -660,7 +648,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int OP_FLAGS_ALL =
OP_FLAG_SELF
@@ -1185,7 +1172,7 @@ public class AppOpsManager {
public static final String OPSTR_GET_USAGE_STATS
= "android:get_usage_stats";
/** Activate a VPN connection without user intervention. @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_ACTIVATE_VPN
= "android:activate_vpn";
/** Allows an application to read the user's contacts data. */
@@ -1267,7 +1254,7 @@ public class AppOpsManager {
public static final String OPSTR_WRITE_SETTINGS
= "android:write_settings";
/** @hide Get device accounts. */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_GET_ACCOUNTS
= "android:get_accounts";
public static final String OPSTR_READ_PHONE_NUMBERS
@@ -1276,7 +1263,7 @@ public class AppOpsManager {
public static final String OPSTR_PICTURE_IN_PICTURE
= "android:picture_in_picture";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_INSTANT_APP_START_FOREGROUND
= "android:instant_app_start_foreground";
/** Answer incoming phone calls */
@@ -1286,129 +1273,129 @@ public class AppOpsManager {
* Accept call handover
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_ACCEPT_HANDOVER
= "android:accept_handover";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_GPS = "android:gps";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_VIBRATE = "android:vibrate";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_WIFI_SCAN = "android:wifi_scan";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_POST_NOTIFICATION = "android:post_notification";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_NEIGHBORING_CELLS = "android:neighboring_cells";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_WRITE_SMS = "android:write_sms";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_RECEIVE_EMERGENCY_BROADCAST =
"android:receive_emergency_broadcast";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_READ_ICC_SMS = "android:read_icc_sms";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_WRITE_ICC_SMS = "android:write_icc_sms";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_ACCESS_NOTIFICATIONS = "android:access_notifications";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_PLAY_AUDIO = "android:play_audio";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_READ_CLIPBOARD = "android:read_clipboard";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_WRITE_CLIPBOARD = "android:write_clipboard";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_TAKE_MEDIA_BUTTONS = "android:take_media_buttons";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_TAKE_AUDIO_FOCUS = "android:take_audio_focus";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_AUDIO_MASTER_VOLUME = "android:audio_master_volume";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_AUDIO_VOICE_VOLUME = "android:audio_voice_volume";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_AUDIO_RING_VOLUME = "android:audio_ring_volume";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_AUDIO_MEDIA_VOLUME = "android:audio_media_volume";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_AUDIO_ALARM_VOLUME = "android:audio_alarm_volume";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_AUDIO_NOTIFICATION_VOLUME =
"android:audio_notification_volume";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_AUDIO_BLUETOOTH_VOLUME = "android:audio_bluetooth_volume";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_WAKE_LOCK = "android:wake_lock";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_MUTE_MICROPHONE = "android:mute_microphone";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_TOAST_WINDOW = "android:toast_window";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_PROJECT_MEDIA = "android:project_media";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_WRITE_WALLPAPER = "android:write_wallpaper";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_ASSIST_STRUCTURE = "android:assist_structure";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_ASSIST_SCREENSHOT = "android:assist_screenshot";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_TURN_SCREEN_ON = "android:turn_screen_on";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_RUN_IN_BACKGROUND = "android:run_in_background";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_AUDIO_ACCESSIBILITY_VOLUME =
"android:audio_accessibility_volume";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_REQUEST_INSTALL_PACKAGES = "android:request_install_packages";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_RUN_ANY_IN_BACKGROUND = "android:run_any_in_background";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_CHANGE_WIFI_STATE = "android:change_wifi_state";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_REQUEST_DELETE_PACKAGES = "android:request_delete_packages";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_BIND_ACCESSIBILITY_SERVICE =
"android:bind_accessibility_service";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_MANAGE_IPSEC_TUNNELS = "android:manage_ipsec_tunnels";
/** @hide */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_START_FOREGROUND = "android:start_foreground";
/** @hide */
public static final String OPSTR_BLUETOOTH_SCAN = "android:bluetooth_scan";
@@ -1424,25 +1411,25 @@ public class AppOpsManager {
"android:sms_financial_transactions";
/** @hide Read media of audio type. */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_READ_MEDIA_AUDIO = "android:read_media_audio";
/** @hide Write media of audio type. */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_WRITE_MEDIA_AUDIO = "android:write_media_audio";
/** @hide Read media of video type. */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_READ_MEDIA_VIDEO = "android:read_media_video";
/** @hide Write media of video type. */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_WRITE_MEDIA_VIDEO = "android:write_media_video";
/** @hide Read media of image type. */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_READ_MEDIA_IMAGES = "android:read_media_images";
/** @hide Write media of image type. */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_WRITE_MEDIA_IMAGES = "android:write_media_images";
/** @hide Has a legacy (non-isolated) view of storage. */
- @SystemApi @TestApi
+ @SystemApi
public static final String OPSTR_LEGACY_STORAGE = "android:legacy_storage";
/** @hide Read location metadata from media */
public static final String OPSTR_ACCESS_MEDIA_LOCATION = "android:access_media_location";
@@ -1456,7 +1443,6 @@ public class AppOpsManager {
public static final String OPSTR_QUERY_ALL_PACKAGES = "android:query_all_packages";
/** @hide Access all external storage */
@SystemApi
- @TestApi
public static final String OPSTR_MANAGE_EXTERNAL_STORAGE =
"android:manage_external_storage";
@@ -2683,7 +2669,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static int opToDefaultMode(@NonNull String appOp) {
return opToDefaultMode(strOpToOp(appOp));
@@ -2775,7 +2760,6 @@ public class AppOpsManager {
* Class holding all of the operation information associated with an app.
* @hide
*/
- @TestApi
@SystemApi
public static final class PackageOps implements Parcelable {
private final String mPackageName;
@@ -2854,7 +2838,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
// @DataClass(genHiddenConstructor = true, genHiddenCopyConstructor = true)
// genHiddenCopyConstructor does not work for @hide @SystemApi classes
@@ -3222,7 +3205,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
@Immutable
// @DataClass(genHiddenConstructor = true) codegen verifier is broken
@@ -3796,7 +3778,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@Immutable
@SystemApi
// @DataClass(genHiddenConstructor = true) codegen verifier is broken
@@ -4474,7 +4455,6 @@ public class AppOpsManager {
* @hide
*/
@Immutable
- @TestApi
@SystemApi
public static final class HistoricalOpsRequest {
private final int mUid;
@@ -4505,7 +4485,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final class Builder {
private int mUid = Process.INVALID_UID;
@@ -4643,7 +4622,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final class HistoricalOps implements Parcelable {
private long mBeginTimeMillis;
@@ -5079,7 +5057,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final class HistoricalUidOps implements Parcelable {
private final int mUid;
@@ -5333,7 +5310,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final class HistoricalPackageOps implements Parcelable {
private final @NonNull String mPackageName;
@@ -5664,7 +5640,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
/* codegen verifier cannot deal with nested class parameters
@DataClass(genHiddenConstructor = true,
@@ -5975,7 +5950,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final class HistoricalOp implements Parcelable {
private final int mOp;
@@ -6612,7 +6586,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS)
public @NonNull List<AppOpsManager.PackageOps> getOpsForPackage(int uid,
@@ -6647,7 +6620,6 @@ public class AppOpsManager {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS)
public void getHistoricalOps(@NonNull HistoricalOpsRequest request,
@@ -6756,7 +6728,6 @@ public class AppOpsManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES)
public void setUidMode(@NonNull String appOp, int uid, @Mode int mode) {
try {
@@ -6810,7 +6781,6 @@ public class AppOpsManager {
* be changed.
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES)
public void setMode(@NonNull String op, int uid, @Nullable String packageName,
@@ -8773,7 +8743,6 @@ public class AppOpsManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.GET_APP_OPS_STATS)
public @Nullable RuntimeAppOpAccessMessage collectRuntimeAppOpAccessMessage() {
try {
@@ -8788,7 +8757,6 @@ public class AppOpsManager {
* @hide
*/
@SystemApi
- @TestApi
public static String[] getOpStrs() {
return Arrays.copyOf(sOpToString, sOpToString.length);
}
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index 1bfdaf57e7f4..f0e457e9691a 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -134,7 +134,6 @@ public final class NotificationChannel implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int USER_LOCKED_SOUND = 0x00000020;
/**
@@ -391,7 +390,6 @@ public final class NotificationChannel implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public void setBlockable(boolean blockable) {
mBlockableSystem = blockable;
}
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index aefaf781eb35..f3bd04cd132e 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -1430,7 +1430,6 @@ public class NotificationManager {
* @hide
*/
@SystemApi
- @TestApi
public boolean isNotificationAssistantAccessGranted(@NonNull ComponentName assistant) {
INotificationManager service = getService();
try {
@@ -1466,7 +1465,6 @@ public class NotificationManager {
* @hide
*/
@SystemApi
- @TestApi
public @NonNull @Adjustment.Keys List<String> getAllowedAssistantAdjustments() {
INotificationManager service = getService();
try {
@@ -1577,7 +1575,6 @@ public class NotificationManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS)
public void setNotificationListenerAccessGranted(
@NonNull ComponentName listener, boolean granted) {
@@ -1611,7 +1608,6 @@ public class NotificationManager {
* @hide
*/
@SystemApi
- @TestApi
public void setNotificationAssistantAccessGranted(@Nullable ComponentName assistant,
boolean granted) {
INotificationManager service = getService();
@@ -1631,7 +1627,6 @@ public class NotificationManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS)
public @NonNull List<ComponentName> getEnabledNotificationListeners() {
return getEnabledNotificationListeners(mContext.getUserId());
@@ -1649,7 +1644,6 @@ public class NotificationManager {
/** @hide */
@SystemApi
- @TestApi
public @Nullable ComponentName getAllowedNotificationAssistant() {
INotificationManager service = getService();
try {
diff --git a/core/java/android/app/RuntimeAppOpAccessMessage.java b/core/java/android/app/RuntimeAppOpAccessMessage.java
index a19f815c4298..db3ba4a8cc3f 100644
--- a/core/java/android/app/RuntimeAppOpAccessMessage.java
+++ b/core/java/android/app/RuntimeAppOpAccessMessage.java
@@ -20,7 +20,6 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -32,7 +31,6 @@ import com.android.internal.util.DataClass;
* @hide
*/
@Immutable
-@TestApi
@SystemApi
/*@DataClass(genConstructor = false)
@DataClass.Suppress("getOpCode")*/
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java
index 99d21272236d..864db2722d53 100644
--- a/core/java/android/app/StatusBarManager.java
+++ b/core/java/android/app/StatusBarManager.java
@@ -374,7 +374,6 @@ public class StatusBarManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.STATUS_BAR)
public void setDisabledForSetup(boolean disabled) {
try {
@@ -423,7 +422,6 @@ public class StatusBarManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.STATUS_BAR)
@NonNull
public DisableInfo getDisableInfo() {
@@ -456,7 +454,6 @@ public class StatusBarManager {
* @hide
*/
@SystemApi
- @TestApi
public static final class DisableInfo {
private boolean mStatusBarExpansion;
@@ -489,7 +486,6 @@ public class StatusBarManager {
* @hide
*/
@SystemApi
- @TestApi
public boolean isStatusBarExpansionDisabled() {
return mStatusBarExpansion;
}
@@ -505,7 +501,6 @@ public class StatusBarManager {
* @hide
*/
@SystemApi
- @TestApi
public boolean isNavigateToHomeDisabled() {
return mNavigateHome;
}
@@ -521,7 +516,6 @@ public class StatusBarManager {
* @hide
*/
@SystemApi
- @TestApi
public boolean isNotificationPeekingDisabled() {
return mNotificationPeeking;
}
@@ -537,7 +531,6 @@ public class StatusBarManager {
* @hide
*/
@SystemApi
- @TestApi
public boolean isRecentsDisabled() {
return mRecents;
}
@@ -553,7 +546,6 @@ public class StatusBarManager {
* @hide
*/
@SystemApi
- @TestApi
public boolean isSearchDisabled() {
return mSearch;
}
@@ -611,7 +603,6 @@ public class StatusBarManager {
* @hide
*/
@SystemApi
- @TestApi
public boolean areAllComponentsEnabled() {
return !mStatusBarExpansion && !mNavigateHome && !mNotificationPeeking && !mRecents
&& !mSearch && !mSystemIcons && !mClock && !mNotificationIcons;
diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java
index 06d1b74abc86..e2fc5dbf10e2 100644
--- a/core/java/android/app/UiModeManager.java
+++ b/core/java/android/app/UiModeManager.java
@@ -314,7 +314,6 @@ public class UiModeManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.ENTER_CAR_MODE_PRIORITIZED)
public void enableCarMode(@IntRange(from = 0) int priority, @EnableCarMode int flags) {
if (mService != null) {
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 0a80ccc13487..54f3209e17be 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -1766,7 +1766,6 @@ public class WallpaperManager {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT)
public boolean setWallpaperComponent(ComponentName name) {
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index b74e18b099ce..ad902a028f13 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -1465,7 +1465,7 @@ public class DevicePolicyManager {
* @see #createAdminSupportIntent(String)
* @hide
*/
- @TestApi @SystemApi
+ @SystemApi
public static final String EXTRA_RESTRICTION = "android.app.extra.RESTRICTION";
/**
@@ -2688,13 +2688,11 @@ public class DevicePolicyManager {
* </ul>
*/
@SystemApi
- @TestApi
public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED =
"android.account.DEVICE_OR_PROFILE_OWNER_ALLOWED";
/** @hide See {@link #ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED} */
@SystemApi
- @TestApi
public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED =
"android.account.DEVICE_OR_PROFILE_OWNER_DISALLOWED";
@@ -6671,7 +6669,6 @@ public class DevicePolicyManager {
* @hide
*/
@SystemApi
- @TestApi
@SuppressLint("Doclava125")
public boolean isDeviceManaged() {
try {
@@ -10381,7 +10378,6 @@ public class DevicePolicyManager {
* @hide
*/
@SystemApi
- @TestApi
@SuppressLint("Doclava125")
public @Nullable CharSequence getDeviceOwnerOrganizationName() {
try {
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java
index b5234f8e2e17..c15504cc0843 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -3,7 +3,6 @@ package android.app.assist;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
@@ -722,7 +721,6 @@ public class AssistStructure implements Parcelable {
// COntent Capture.
/** @hide */
@SystemApi
- @TestApi
public ViewNode() {
}
diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java
index 9b67587c4dcd..05313592faa5 100644
--- a/core/java/android/app/backup/BackupManager.java
+++ b/core/java/android/app/backup/BackupManager.java
@@ -21,7 +21,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
@@ -919,7 +918,6 @@ public class BackupManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.BACKUP)
public Intent getConfigurationIntent(String transportName) {
checkServiceBinder();
@@ -941,7 +939,6 @@ public class BackupManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.BACKUP)
public String getDestinationString(String transportName) {
checkServiceBinder();
@@ -963,7 +960,6 @@ public class BackupManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.BACKUP)
public Intent getDataManagementIntent(String transportName) {
checkServiceBinder();
@@ -989,7 +985,6 @@ public class BackupManager {
*/
@Deprecated
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.BACKUP)
@Nullable
public String getDataManagementLabel(@NonNull String transportName) {
@@ -1006,7 +1001,6 @@ public class BackupManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.BACKUP)
@Nullable
public CharSequence getDataManagementIntentLabel(@NonNull String transportName) {
diff --git a/core/java/android/app/prediction/AppPredictionContext.java b/core/java/android/app/prediction/AppPredictionContext.java
index d14238bb2672..99fa869cee93 100644
--- a/core/java/android/app/prediction/AppPredictionContext.java
+++ b/core/java/android/app/prediction/AppPredictionContext.java
@@ -19,7 +19,6 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcel;
@@ -32,7 +31,6 @@ import android.os.Parcelable;
* @hide
*/
@SystemApi
-@TestApi
public final class AppPredictionContext implements Parcelable {
private final int mPredictedTargetCount;
@@ -129,7 +127,6 @@ public final class AppPredictionContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final class Builder {
@NonNull
@@ -147,7 +144,6 @@ public final class AppPredictionContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public Builder(@NonNull Context context) {
mPackageName = context.getPackageName();
}
diff --git a/core/java/android/app/prediction/AppPredictionManager.java b/core/java/android/app/prediction/AppPredictionManager.java
index ca22721622b7..5da7aa97ea0f 100644
--- a/core/java/android/app/prediction/AppPredictionManager.java
+++ b/core/java/android/app/prediction/AppPredictionManager.java
@@ -17,7 +17,6 @@ package android.app.prediction;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.Context;
import java.util.Objects;
@@ -28,7 +27,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class AppPredictionManager {
private final Context mContext;
diff --git a/core/java/android/app/prediction/AppPredictionSessionId.java b/core/java/android/app/prediction/AppPredictionSessionId.java
index 876bafdfb7d1..6277a7de258f 100644
--- a/core/java/android/app/prediction/AppPredictionSessionId.java
+++ b/core/java/android/app/prediction/AppPredictionSessionId.java
@@ -18,7 +18,6 @@ package android.app.prediction;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -30,7 +29,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class AppPredictionSessionId implements Parcelable {
private final String mId;
diff --git a/core/java/android/app/prediction/AppPredictor.java b/core/java/android/app/prediction/AppPredictor.java
index fa135b10ae1f..fd1b9e3bede2 100644
--- a/core/java/android/app/prediction/AppPredictor.java
+++ b/core/java/android/app/prediction/AppPredictor.java
@@ -70,7 +70,6 @@ import java.util.function.Consumer;
* @hide
*/
@SystemApi
-@TestApi
public final class AppPredictor {
private static final String TAG = AppPredictor.class.getSimpleName();
diff --git a/core/java/android/app/prediction/AppTarget.java b/core/java/android/app/prediction/AppTarget.java
index 14e32b8397a8..fef9e7020097 100644
--- a/core/java/android/app/prediction/AppTarget.java
+++ b/core/java/android/app/prediction/AppTarget.java
@@ -19,7 +19,6 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.pm.ShortcutInfo;
import android.os.Parcel;
import android.os.Parcelable;
@@ -33,7 +32,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class AppTarget implements Parcelable {
private final AppTargetId mId;
@@ -190,7 +188,6 @@ public final class AppTarget implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final class Builder {
@NonNull
@@ -221,7 +218,6 @@ public final class AppTarget implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public Builder(@NonNull AppTargetId id, @NonNull String packageName,
@NonNull UserHandle user) {
mId = Objects.requireNonNull(id);
@@ -235,7 +231,6 @@ public final class AppTarget implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public Builder(@NonNull AppTargetId id, @NonNull ShortcutInfo info) {
mId = Objects.requireNonNull(id);
mShortcutInfo = Objects.requireNonNull(info);
diff --git a/core/java/android/app/prediction/AppTargetEvent.java b/core/java/android/app/prediction/AppTargetEvent.java
index f519145c4aa8..963e750e4fd1 100644
--- a/core/java/android/app/prediction/AppTargetEvent.java
+++ b/core/java/android/app/prediction/AppTargetEvent.java
@@ -19,7 +19,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -32,7 +31,6 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@SystemApi
-@TestApi
public final class AppTargetEvent implements Parcelable {
/**
@@ -141,7 +139,6 @@ public final class AppTargetEvent implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final class Builder {
private AppTarget mTarget;
private String mLocation;
diff --git a/core/java/android/app/prediction/AppTargetId.java b/core/java/android/app/prediction/AppTargetId.java
index 052fdc11ef21..048e12c5c48e 100644
--- a/core/java/android/app/prediction/AppTargetId.java
+++ b/core/java/android/app/prediction/AppTargetId.java
@@ -18,7 +18,6 @@ package android.app.prediction;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -28,7 +27,6 @@ import android.os.Parcelable;
* @hide
*/
@SystemApi
-@TestApi
public final class AppTargetId implements Parcelable {
@NonNull
@@ -40,7 +38,6 @@ public final class AppTargetId implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public AppTargetId(@NonNull String id) {
mId = id;
}
diff --git a/core/java/android/app/role/OnRoleHoldersChangedListener.java b/core/java/android/app/role/OnRoleHoldersChangedListener.java
index d6f76794da20..5958debc86dd 100644
--- a/core/java/android/app/role/OnRoleHoldersChangedListener.java
+++ b/core/java/android/app/role/OnRoleHoldersChangedListener.java
@@ -18,7 +18,6 @@ package android.app.role;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.UserHandle;
/**
@@ -27,7 +26,6 @@ import android.os.UserHandle;
* @hide
*/
@SystemApi
-@TestApi
public interface OnRoleHoldersChangedListener {
/**
diff --git a/core/java/android/app/role/RoleManager.java b/core/java/android/app/role/RoleManager.java
index 82159235ae28..408ce0f2ab1a 100644
--- a/core/java/android/app/role/RoleManager.java
+++ b/core/java/android/app/role/RoleManager.java
@@ -144,7 +144,6 @@ public final class RoleManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1;
/**
@@ -255,7 +254,6 @@ public final class RoleManager {
@NonNull
@RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
@SystemApi
- @TestApi
public List<String> getRoleHolders(@NonNull String roleName) {
return getRoleHoldersAsUser(roleName, Process.myUserHandle());
}
@@ -281,7 +279,6 @@ public final class RoleManager {
@NonNull
@RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
@SystemApi
- @TestApi
public List<String> getRoleHoldersAsUser(@NonNull String roleName, @NonNull UserHandle user) {
Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
Objects.requireNonNull(user, "user cannot be null");
@@ -315,7 +312,6 @@ public final class RoleManager {
*/
@RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
@SystemApi
- @TestApi
public void addRoleHolderAsUser(@NonNull String roleName, @NonNull String packageName,
@ManageHoldersFlags int flags, @NonNull UserHandle user,
@CallbackExecutor @NonNull Executor executor, @NonNull Consumer<Boolean> callback) {
@@ -354,7 +350,6 @@ public final class RoleManager {
*/
@RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
@SystemApi
- @TestApi
public void removeRoleHolderAsUser(@NonNull String roleName, @NonNull String packageName,
@ManageHoldersFlags int flags, @NonNull UserHandle user,
@CallbackExecutor @NonNull Executor executor, @NonNull Consumer<Boolean> callback) {
@@ -392,7 +387,6 @@ public final class RoleManager {
*/
@RequiresPermission(Manifest.permission.MANAGE_ROLE_HOLDERS)
@SystemApi
- @TestApi
public void clearRoleHoldersAsUser(@NonNull String roleName, @ManageHoldersFlags int flags,
@NonNull UserHandle user, @CallbackExecutor @NonNull Executor executor,
@NonNull Consumer<Boolean> callback) {
@@ -439,7 +433,6 @@ public final class RoleManager {
*/
@RequiresPermission(Manifest.permission.OBSERVE_ROLE_HOLDERS)
@SystemApi
- @TestApi
public void addOnRoleHoldersChangedListenerAsUser(@CallbackExecutor @NonNull Executor executor,
@NonNull OnRoleHoldersChangedListener listener, @NonNull UserHandle user) {
Objects.requireNonNull(executor, "executor cannot be null");
@@ -485,7 +478,6 @@ public final class RoleManager {
*/
@RequiresPermission(Manifest.permission.OBSERVE_ROLE_HOLDERS)
@SystemApi
- @TestApi
public void removeOnRoleHoldersChangedListenerAsUser(
@NonNull OnRoleHoldersChangedListener listener, @NonNull UserHandle user) {
Objects.requireNonNull(listener, "listener cannot be null");
@@ -527,7 +519,6 @@ public final class RoleManager {
*/
@RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER)
@SystemApi
- @TestApi
public void setRoleNamesFromController(@NonNull List<String> roleNames) {
Objects.requireNonNull(roleNames, "roleNames cannot be null");
try {
@@ -558,7 +549,6 @@ public final class RoleManager {
*/
@RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER)
@SystemApi
- @TestApi
public boolean addRoleHolderFromController(@NonNull String roleName,
@NonNull String packageName) {
Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
@@ -591,7 +581,6 @@ public final class RoleManager {
*/
@RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER)
@SystemApi
- @TestApi
public boolean removeRoleHolderFromController(@NonNull String roleName,
@NonNull String packageName) {
Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
@@ -614,7 +603,6 @@ public final class RoleManager {
@NonNull
@RequiresPermission(PERMISSION_MANAGE_ROLES_FROM_CONTROLLER)
@SystemApi
- @TestApi
public List<String> getHeldRolesFromController(@NonNull String packageName) {
Preconditions.checkStringNotEmpty(packageName, "packageName cannot be null or empty");
try {
diff --git a/core/java/android/app/slice/SliceProvider.java b/core/java/android/app/slice/SliceProvider.java
index cef6ab094177..0589f4a3b2bb 100644
--- a/core/java/android/app/slice/SliceProvider.java
+++ b/core/java/android/app/slice/SliceProvider.java
@@ -519,7 +519,7 @@ public abstract class SliceProvider extends ContentProvider {
intent.setData(sliceUri.buildUpon().appendQueryParameter("package", callingPackage)
.build());
- return PendingIntent.getActivity(context, 0, intent, 0);
+ return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
}
/**
diff --git a/core/java/android/app/usage/CacheQuotaHint.java b/core/java/android/app/usage/CacheQuotaHint.java
index d5c72f286a32..0ccb058d11cf 100644
--- a/core/java/android/app/usage/CacheQuotaHint.java
+++ b/core/java/android/app/usage/CacheQuotaHint.java
@@ -19,7 +19,6 @@ package android.app.usage;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -33,7 +32,6 @@ import java.util.Objects;
* allows apps to understand how much cache to use.
* {@hide}
*/
-@TestApi
@SystemApi
public final class CacheQuotaHint implements Parcelable {
public static final long QUOTA_NOT_SET = -1;
diff --git a/core/java/android/companion/CompanionDeviceManager.java b/core/java/android/companion/CompanionDeviceManager.java
index e94556b8d97b..c3c270e52eb6 100644
--- a/core/java/android/companion/CompanionDeviceManager.java
+++ b/core/java/android/companion/CompanionDeviceManager.java
@@ -21,7 +21,6 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.app.Activity;
import android.app.Application;
import android.app.PendingIntent;
@@ -285,7 +284,6 @@ public final class CompanionDeviceManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.MANAGE_COMPANION_DEVICES)
public boolean isDeviceAssociatedForWifiConnection(
@NonNull String packageName,
diff --git a/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl b/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl
index 5e3d46caae91..a630873c7f67 100644
--- a/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl
+++ b/core/java/android/companion/ICompanionDeviceDiscoveryService.aidl
@@ -23,7 +23,7 @@ import com.android.internal.infra.AndroidFuture;
/** @hide */
-interface ICompanionDeviceDiscoveryService {
+oneway interface ICompanionDeviceDiscoveryService {
void startDiscovery(
in AssociationRequest request,
in String callingPackage,
diff --git a/core/java/android/content/ApexEnvironment.java b/core/java/android/content/ApexEnvironment.java
index 9f15a425d92b..b4cc3c2bb156 100644
--- a/core/java/android/content/ApexEnvironment.java
+++ b/core/java/android/content/ApexEnvironment.java
@@ -18,7 +18,6 @@ package android.content;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Environment;
import android.os.UserHandle;
@@ -31,7 +30,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public class ApexEnvironment {
private static final String APEX_DATA = "apexdata";
diff --git a/core/java/android/content/ContentProviderClient.java b/core/java/android/content/ContentProviderClient.java
index d0f5ec467458..5af7861e1a20 100644
--- a/core/java/android/content/ContentProviderClient.java
+++ b/core/java/android/content/ContentProviderClient.java
@@ -21,7 +21,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.res.AssetFileDescriptor;
import android.database.CrossProcessCursorWrapper;
@@ -123,7 +122,6 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.REMOVE_TASKS)
public void setDetectNotResponding(@DurationMillisLong long timeoutMillis) {
synchronized (ContentProviderClient.class) {
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index c39f176ac0d1..fd7074c29891 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -4098,7 +4098,6 @@ public abstract class ContentResolver implements ContentInterface {
* @hide
*/
@SystemApi
- @TestApi
// We can't accept an already-opened FD here, since these methods are
// rewriting actual filesystem paths
@SuppressLint("StreamFiles")
@@ -4118,7 +4117,6 @@ public abstract class ContentResolver implements ContentInterface {
* @hide
*/
@SystemApi
- @TestApi
// We can't accept an already-opened FD here, since these methods are
// rewriting actual filesystem paths
@SuppressLint("StreamFiles")
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index bbc1406fb7ea..42fe0e1c465d 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -1849,7 +1849,6 @@ public abstract class Context {
*/
@RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
@SystemApi
- @TestApi
public void startActivityAsUser(@RequiresPermission @NonNull Intent intent,
@NonNull UserHandle user) {
throw new RuntimeException("Not implemented. Must override in a subclass.");
@@ -3982,7 +3981,6 @@ public abstract class Context {
* @hide
*/
@SystemApi
- @TestApi
@SuppressLint("ServiceName")
public static final String STATUS_BAR_SERVICE = "statusbar";
@@ -4194,7 +4192,6 @@ public abstract class Context {
* @hide
*/
@SystemApi
- @TestApi
public static final String ETHERNET_SERVICE = "ethernet";
/**
@@ -4517,7 +4514,6 @@ public abstract class Context {
* @see #getSystemService(String)
* @hide
*/
- @TestApi
@SystemApi
public static final String PERMISSION_SERVICE = "permission";
@@ -4548,7 +4544,7 @@ public abstract class Context {
* @see #getSystemService(String)
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final String ROLLBACK_SERVICE = "rollback";
/**
@@ -5022,7 +5018,7 @@ public abstract class Context {
* @see android.os.BugreportManager
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final String BUGREPORT_SERVICE = "bugreport";
/**
@@ -5184,7 +5180,6 @@ public abstract class Context {
* @hide
*/
@SystemApi
- @TestApi
public static final String APP_INTEGRITY_SERVICE = "app_integrity";
/**
@@ -5756,7 +5751,6 @@ public abstract class Context {
* @hide
*/
@SystemApi
- @TestApi
@NonNull
public Context createPackageContextAsUser(
@NonNull String packageName, @CreatePackageOptions int flags, @NonNull UserHandle user)
@@ -5775,7 +5769,6 @@ public abstract class Context {
* @hide
*/
@SystemApi
- @TestApi
@NonNull
public Context createContextAsUser(@NonNull UserHandle user, @CreatePackageOptions int flags) {
if (Build.IS_ENG) {
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 653064d41bff..c62194b380dd 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -28,7 +28,6 @@ import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.AppGlobals;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.pm.ActivityInfo;
@@ -1748,7 +1747,6 @@ public class Intent implements Parcelable, Cloneable {
* @hide
*/
@SystemApi
- @TestApi
public static final String EXTRA_ORIGINATING_UID
= "android.intent.extra.ORIGINATING_UID";
@@ -1979,7 +1977,6 @@ public class Intent implements Parcelable, Cloneable {
@RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS)
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
@SystemApi
- @TestApi
public static final String ACTION_MANAGE_DEFAULT_APP =
"android.intent.action.MANAGE_DEFAULT_APP";
@@ -1994,7 +1991,6 @@ public class Intent implements Parcelable, Cloneable {
* @hide
*/
@SystemApi
- @TestApi
public static final String EXTRA_ROLE_NAME = "android.intent.extra.ROLE_NAME";
/**
@@ -2541,7 +2537,7 @@ public class Intent implements Parcelable, Cloneable {
*
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_ROLLBACK_COMMITTED =
"android.intent.action.ROLLBACK_COMMITTED";
diff --git a/core/java/android/content/integrity/AppIntegrityManager.java b/core/java/android/content/integrity/AppIntegrityManager.java
index 4db4c7316433..1196064768e8 100644
--- a/core/java/android/content/integrity/AppIntegrityManager.java
+++ b/core/java/android/content/integrity/AppIntegrityManager.java
@@ -36,7 +36,6 @@ import java.util.List;
*
* @hide
*/
-@TestApi
@SystemApi
@SystemService(Context.APP_INTEGRITY_SERVICE)
public class AppIntegrityManager {
diff --git a/core/java/android/content/integrity/IntegrityFormula.java b/core/java/android/content/integrity/IntegrityFormula.java
index fc177721240c..d965ef5c71a8 100644
--- a/core/java/android/content/integrity/IntegrityFormula.java
+++ b/core/java/android/content/integrity/IntegrityFormula.java
@@ -19,7 +19,6 @@ package android.content.integrity;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.integrity.AtomicFormula.BooleanAtomicFormula;
import android.content.integrity.AtomicFormula.LongAtomicFormula;
import android.content.integrity.AtomicFormula.StringAtomicFormula;
@@ -38,7 +37,6 @@ import java.util.Arrays;
* @hide
*/
@SystemApi
-@TestApi
@VisibleForTesting
public abstract class IntegrityFormula {
diff --git a/core/java/android/content/integrity/Rule.java b/core/java/android/content/integrity/Rule.java
index 8f6d73f6f028..391d1d04d553 100644
--- a/core/java/android/content/integrity/Rule.java
+++ b/core/java/android/content/integrity/Rule.java
@@ -22,7 +22,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -39,7 +38,6 @@ import java.util.Objects;
*
* @hide
*/
-@TestApi
@SystemApi
@VisibleForTesting
public final class Rule implements Parcelable {
diff --git a/core/java/android/content/integrity/RuleSet.java b/core/java/android/content/integrity/RuleSet.java
index e121ff8bbcaa..b423b54a7d92 100644
--- a/core/java/android/content/integrity/RuleSet.java
+++ b/core/java/android/content/integrity/RuleSet.java
@@ -18,7 +18,6 @@ package android.content.integrity;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import java.util.ArrayList;
import java.util.Collections;
@@ -30,7 +29,6 @@ import java.util.Objects;
*
* @hide
*/
-@TestApi
@SystemApi
public class RuleSet {
private final String mVersion;
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index d5f2c12e8462..8f4fc261df37 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -1141,7 +1141,6 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public int targetSandboxVersion;
/**
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index f03425b9e117..e2f85282948a 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -1722,7 +1722,6 @@ public class PackageInstaller {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS)
public void setGrantedRuntimePermissions(String[] permissions) {
@@ -1794,7 +1793,7 @@ public class PackageInstaller {
* @see SessionParams#setEnableRollback(boolean, int)
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public void setEnableRollback(boolean enable) {
if (enable) {
installFlags |= PackageManager.INSTALL_ENABLE_ROLLBACK;
@@ -1818,7 +1817,7 @@ public class PackageInstaller {
* @param dataPolicy the rollback data policy for this session
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public void setEnableRollback(boolean enable,
@PackageManager.RollbackDataPolicy int dataPolicy) {
if (enable) {
@@ -1841,7 +1840,7 @@ public class PackageInstaller {
}
/** {@hide} */
- @SystemApi @TestApi
+ @SystemApi
public void setRequestDowngrade(boolean requestDowngrade) {
if (requestDowngrade) {
installFlags |= PackageManager.INSTALL_REQUEST_DOWNGRADE;
@@ -1880,7 +1879,6 @@ public class PackageInstaller {
/** {@hide} */
@SystemApi
- @TestApi
public void setInstallAsInstantApp(boolean isInstantApp) {
if (isInstantApp) {
installFlags |= PackageManager.INSTALL_INSTANT_APP;
@@ -1965,7 +1963,7 @@ public class PackageInstaller {
*
* {@hide}
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.INSTALL_PACKAGES)
public void setStaged() {
this.isStaged = true;
@@ -1976,7 +1974,7 @@ public class PackageInstaller {
*
* {@hide}
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.INSTALL_PACKAGES)
public void setInstallAsApex() {
installFlags |= PackageManager.INSTALL_APEX;
@@ -2480,7 +2478,6 @@ public class PackageInstaller {
*
* @hide
*/
- @TestApi
@SystemApi
public @NonNull Set<String> getWhitelistedRestrictedPermissions() {
if ((installFlags & PackageManager.INSTALL_ALL_WHITELIST_RESTRICTED_PERMISSIONS) != 0) {
@@ -2504,7 +2501,6 @@ public class PackageInstaller {
*
* @hide
*/
- @TestApi
@SystemApi
public int getAutoRevokePermissionsMode() {
return autoRevokePermissionsMode;
@@ -2633,7 +2629,7 @@ public class PackageInstaller {
*
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@PackageManager.RollbackDataPolicy
public int getRollbackDataPolicy() {
return rollbackDataPolicy;
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 923f8cb38d38..fc7b3e011cad 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -120,7 +120,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public interface OnPermissionsChangedListener {
/**
@@ -479,7 +478,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int MATCH_FACTORY_ONLY = 0x00200000;
/**
@@ -611,7 +609,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int MODULE_APEX_NAME = 0x00000001;
/** @hide */
@@ -3319,7 +3316,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_USER_SET = 1 << 0;
/**
@@ -3330,7 +3326,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_USER_FIXED = 1 << 1;
/**
@@ -3341,7 +3336,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_POLICY_FIXED = 1 << 2;
/**
@@ -3358,7 +3352,6 @@ public abstract class PackageManager {
*/
@Deprecated
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 1 << 3;
/**
@@ -3368,7 +3361,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_SYSTEM_FIXED = 1 << 4;
/**
@@ -3380,7 +3372,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 1 << 5;
/**
@@ -3390,7 +3381,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 1 << 6;
/**
@@ -3428,7 +3418,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT = 1 << 11;
@@ -3440,7 +3429,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT = 1 << 12;
@@ -3453,7 +3441,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT = 1 << 13;
@@ -3466,7 +3453,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int FLAG_PERMISSION_APPLY_RESTRICTION = 1 << 14;
@@ -3476,7 +3462,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_GRANTED_BY_ROLE = 1 << 15;
/**
@@ -3488,7 +3473,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_REVOKED_COMPAT = FLAG_PERMISSION_REVOKE_ON_UPGRADE;
/**
@@ -3498,7 +3482,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_PERMISSION_ONE_TIME = 1 << 16;
/**
@@ -3516,7 +3499,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int FLAG_PERMISSION_RESTRICTION_ROLE_EXEMPT = 1 << 18;
@@ -4083,7 +4065,7 @@ public abstract class PackageManager {
*
* @hide
*/
- @TestApi @SystemApi
+ @SystemApi
public abstract boolean arePermissionsIndividuallyControlled();
/**
@@ -4334,7 +4316,6 @@ public abstract class PackageManager {
* @hide
*/
@NonNull
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
public abstract List<PackageInfo> getInstalledPackagesAsUser(@PackageInfoFlags int flags,
@@ -4495,7 +4476,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS)
public abstract void grantRuntimePermission(@NonNull String packageName,
@@ -4522,7 +4502,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS)
public abstract void revokeRuntimePermission(@NonNull String packageName,
@@ -4550,7 +4529,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS)
public void revokeRuntimePermission(@NonNull String packageName,
@@ -4569,7 +4547,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(anyOf = {
android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS,
@@ -4592,7 +4569,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(anyOf = {
android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS
@@ -6440,7 +6416,6 @@ public abstract class PackageManager {
* @hide
*/
@Nullable
- @TestApi
@SystemApi
@RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL)
public abstract String getDefaultBrowserPackageNameAsUser(@UserIdInt int userId);
@@ -7094,7 +7069,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS)
public abstract void addOnPermissionsChangeListener(
@NonNull OnPermissionsChangedListener listener);
@@ -7107,7 +7081,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS)
public abstract void removeOnPermissionsChangeListener(
@NonNull OnPermissionsChangedListener listener);
@@ -8126,7 +8099,6 @@ public abstract class PackageManager {
* @hide
*/
@SystemApi
- @TestApi
@Nullable
public String getIncidentReportApproverPackageName() {
throw new UnsupportedOperationException(
diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java
index 5d4c843d2eab..e730fee7f812 100644
--- a/core/java/android/content/pm/PermissionInfo.java
+++ b/core/java/android/content/pm/PermissionInfo.java
@@ -160,7 +160,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROTECTION_FLAG_OEM = 0x4000;
/**
@@ -181,7 +180,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 0x10000;
/**
@@ -192,7 +190,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROTECTION_FLAG_WELLBEING = 0x20000;
/**
@@ -202,7 +199,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROTECTION_FLAG_DOCUMENTER = 0x40000;
/**
@@ -212,7 +208,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROTECTION_FLAG_CONFIGURATOR = 0x80000;
/**
@@ -223,7 +218,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROTECTION_FLAG_INCIDENT_REPORT_APPROVER = 0x100000;
/**
@@ -234,7 +228,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROTECTION_FLAG_APP_PREDICTOR = 0x200000;
/**
@@ -245,7 +238,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROTECTION_FLAG_COMPANION = 0x800000;
/**
@@ -256,7 +248,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROTECTION_FLAG_RETAIL_DEMO = 0x1000000;
/** @hide */
@@ -340,7 +331,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* value of {@link android.R.attr#permissionFlags}.
* @hide
*/
- @TestApi
@SystemApi
public static final int FLAG_REMOVED = 1<<1;
@@ -436,7 +426,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public final @Nullable String backgroundPermission;
/**
diff --git a/core/java/android/content/rollback/PackageRollbackInfo.java b/core/java/android/content/rollback/PackageRollbackInfo.java
index 642a76b453c9..0140280cd3d5 100644
--- a/core/java/android/content/rollback/PackageRollbackInfo.java
+++ b/core/java/android/content/rollback/PackageRollbackInfo.java
@@ -18,7 +18,6 @@ package android.content.rollback;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.os.Parcel;
@@ -32,7 +31,7 @@ import java.util.List;
*
* @hide
*/
-@SystemApi @TestApi
+@SystemApi
public final class PackageRollbackInfo implements Parcelable {
private final VersionedPackage mVersionRolledBackFrom;
diff --git a/core/java/android/content/rollback/RollbackInfo.java b/core/java/android/content/rollback/RollbackInfo.java
index c09cfd54866c..a363718a8b1d 100644
--- a/core/java/android/content/rollback/RollbackInfo.java
+++ b/core/java/android/content/rollback/RollbackInfo.java
@@ -18,7 +18,6 @@ package android.content.rollback;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.pm.VersionedPackage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -31,7 +30,7 @@ import java.util.List;
*
* @hide
*/
-@SystemApi @TestApi
+@SystemApi
public final class RollbackInfo implements Parcelable {
/**
diff --git a/core/java/android/content/rollback/RollbackManager.java b/core/java/android/content/rollback/RollbackManager.java
index 7ebeb212b64a..3636222f558c 100644
--- a/core/java/android/content/rollback/RollbackManager.java
+++ b/core/java/android/content/rollback/RollbackManager.java
@@ -24,7 +24,6 @@ import android.annotation.SystemService;
import android.annotation.TestApi;
import android.content.Context;
import android.content.IntentSender;
-import android.content.pm.PackageInstaller;
import android.content.pm.ParceledListSlice;
import android.content.pm.VersionedPackage;
import android.os.RemoteException;
@@ -43,7 +42,7 @@ import java.util.List;
* @see PackageInstaller.SessionParams#setEnableRollback(boolean)
* @hide
*/
-@SystemApi @TestApi
+@SystemApi
@SystemService(Context.ROLLBACK_SERVICE)
public final class RollbackManager {
private final String mCallerPackageName;
diff --git a/core/java/android/hardware/biometrics/BiometricConstants.java b/core/java/android/hardware/biometrics/BiometricConstants.java
index 3040932f69dd..bed9a0640693 100644
--- a/core/java/android/hardware/biometrics/BiometricConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricConstants.java
@@ -172,8 +172,7 @@ public interface BiometricConstants {
BIOMETRIC_ERROR_NEGATIVE_BUTTON,
BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL,
BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED,
- BIOMETRIC_PAUSED_REJECTED,
- BIOMETRIC_ERROR_VENDOR_BASE})
+ BIOMETRIC_PAUSED_REJECTED})
@Retention(RetentionPolicy.SOURCE)
@interface Errors {}
@@ -182,6 +181,19 @@ public interface BiometricConstants {
//
/**
+ * @hide
+ */
+ @IntDef({BIOMETRIC_ACQUIRED_GOOD,
+ BIOMETRIC_ACQUIRED_PARTIAL,
+ BIOMETRIC_ACQUIRED_INSUFFICIENT,
+ BIOMETRIC_ACQUIRED_IMAGER_DIRTY,
+ BIOMETRIC_ACQUIRED_TOO_SLOW,
+ BIOMETRIC_ACQUIRED_TOO_FAST,
+ BIOMETRIC_ACQUIRED_VENDOR})
+ @Retention(RetentionPolicy.SOURCE)
+ @interface Acquired {}
+
+ /**
* The image acquired was good.
*/
int BIOMETRIC_ACQUIRED_GOOD = 0;
diff --git a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
index 46e8cc036809..c7b554b3aafc 100644
--- a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
@@ -16,11 +16,15 @@
package android.hardware.biometrics;
+import android.annotation.IntDef;
import android.app.KeyguardManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.hardware.biometrics.BiometricManager.Authenticators;
import android.hardware.fingerprint.FingerprintManager;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
/**
* Interface containing all of the fingerprint-specific constants.
*
@@ -36,6 +40,27 @@ public interface BiometricFingerprintConstants {
//
/**
+ * @hide
+ */
+ @IntDef({FINGERPRINT_ERROR_HW_UNAVAILABLE,
+ FINGERPRINT_ERROR_UNABLE_TO_PROCESS,
+ FINGERPRINT_ERROR_TIMEOUT,
+ FINGERPRINT_ERROR_NO_SPACE,
+ FINGERPRINT_ERROR_CANCELED,
+ FINGERPRINT_ERROR_UNABLE_TO_REMOVE,
+ FINGERPRINT_ERROR_LOCKOUT,
+ FINGERPRINT_ERROR_VENDOR,
+ FINGERPRINT_ERROR_LOCKOUT_PERMANENT,
+ FINGERPRINT_ERROR_USER_CANCELED,
+ FINGERPRINT_ERROR_NO_FINGERPRINTS,
+ FINGERPRINT_ERROR_HW_NOT_PRESENT,
+ FINGERPRINT_ERROR_NEGATIVE_BUTTON,
+ BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL,
+ BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED})
+ @Retention(RetentionPolicy.SOURCE)
+ @interface FingerprintError {}
+
+ /**
* The hardware is unavailable. Try again later.
*/
int FINGERPRINT_ERROR_HW_UNAVAILABLE = 1;
@@ -150,6 +175,20 @@ public interface BiometricFingerprintConstants {
//
/**
+ * @hide
+ */
+ @IntDef({FINGERPRINT_ACQUIRED_GOOD,
+ FINGERPRINT_ACQUIRED_PARTIAL,
+ FINGERPRINT_ACQUIRED_INSUFFICIENT,
+ FINGERPRINT_ACQUIRED_IMAGER_DIRTY,
+ FINGERPRINT_ACQUIRED_TOO_SLOW,
+ FINGERPRINT_ACQUIRED_TOO_FAST,
+ FINGERPRINT_ACQUIRED_VENDOR,
+ FINGERPRINT_ACQUIRED_START})
+ @Retention(RetentionPolicy.SOURCE)
+ @interface FingerprintAcquired {}
+
+ /**
* The image acquired was good.
*/
int FINGERPRINT_ACQUIRED_GOOD = 0;
diff --git a/core/java/android/hardware/biometrics/BiometricTestSession.java b/core/java/android/hardware/biometrics/BiometricTestSession.java
index 4c7aa27968fe..802655b0d364 100644
--- a/core/java/android/hardware/biometrics/BiometricTestSession.java
+++ b/core/java/android/hardware/biometrics/BiometricTestSession.java
@@ -22,6 +22,7 @@ import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.TestApi;
import android.content.Context;
+import android.hardware.fingerprint.FingerprintManager;
import android.os.RemoteException;
import android.util.ArraySet;
@@ -128,11 +129,14 @@ public class BiometricTestSession implements AutoCloseable {
* Simulates an acquired message from the HAL.
*
* @param userId User that this command applies to.
+ * @param acquireInfo See
+ * {@link BiometricPrompt.AuthenticationCallback#onAuthenticationAcquired(int)} and
+ * {@link FingerprintManager.AuthenticationCallback#onAuthenticationAcquired(int)}
*/
@RequiresPermission(TEST_BIOMETRIC)
- public void notifyAcquired(int userId) {
+ public void notifyAcquired(int userId, int acquireInfo) {
try {
- mTestSession.notifyAcquired(userId);
+ mTestSession.notifyAcquired(userId, acquireInfo);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -142,11 +146,14 @@ public class BiometricTestSession implements AutoCloseable {
* Simulates an error message from the HAL.
*
* @param userId User that this command applies to.
+ * @param errorCode See
+ * {@link BiometricPrompt.AuthenticationCallback#onAuthenticationError(int, CharSequence)} and
+ * {@link FingerprintManager.AuthenticationCallback#onAuthenticationError(int, CharSequence)}
*/
@RequiresPermission(TEST_BIOMETRIC)
- public void notifyError(int userId) {
+ public void notifyError(int userId, int errorCode) {
try {
- mTestSession.notifyError(userId);
+ mTestSession.notifyError(userId, errorCode);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/core/java/android/hardware/biometrics/ITestSession.aidl b/core/java/android/hardware/biometrics/ITestSession.aidl
index 5677f6517ae5..6112f17949d7 100644
--- a/core/java/android/hardware/biometrics/ITestSession.aidl
+++ b/core/java/android/hardware/biometrics/ITestSession.aidl
@@ -42,10 +42,10 @@ interface ITestSession {
void rejectAuthentication(int userId);
// Simulates an acquired message from the HAL.
- void notifyAcquired(int userId);
+ void notifyAcquired(int userId, int acquireInfo);
// Simulates an error message from the HAL.
- void notifyError(int userId);
+ void notifyError(int userId, int errorCode);
// Matches the framework's cached enrollments against the HAL's enrollments. Any enrollment
// that isn't known by both sides are deleted. This should generally be used when the test
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index decf05396c1f..cd137078818c 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.hardware.camera2.params.InputConfiguration;
import android.hardware.camera2.params.OutputConfiguration;
import android.hardware.camera2.params.SessionConfiguration;
@@ -358,7 +357,6 @@ public abstract class CameraDevice implements AutoCloseable {
* @hide
*/
@SystemApi
- @TestApi
public static final int SESSION_OPERATION_MODE_NORMAL =
0; // ICameraDeviceUser.NORMAL_MODE;
@@ -369,7 +367,6 @@ public abstract class CameraDevice implements AutoCloseable {
* @hide
*/
@SystemApi
- @TestApi
public static final int SESSION_OPERATION_MODE_CONSTRAINED_HIGH_SPEED =
1; // ICameraDeviceUser.CONSTRAINED_HIGH_SPEED_MODE;
@@ -380,7 +377,6 @@ public abstract class CameraDevice implements AutoCloseable {
* @hide
*/
@SystemApi
- @TestApi
public static final int SESSION_OPERATION_MODE_VENDOR_START =
0x8000; // ICameraDeviceUser.VENDOR_MODE_START;
@@ -423,7 +419,6 @@ public abstract class CameraDevice implements AutoCloseable {
* @hide
*/
@SystemApi
- @TestApi
@Deprecated
public abstract void createCustomCaptureSession(
InputConfiguration inputConfig,
diff --git a/core/java/android/hardware/display/AmbientBrightnessDayStats.java b/core/java/android/hardware/display/AmbientBrightnessDayStats.java
index 26fd2654239f..8aff911ea42c 100644
--- a/core/java/android/hardware/display/AmbientBrightnessDayStats.java
+++ b/core/java/android/hardware/display/AmbientBrightnessDayStats.java
@@ -19,7 +19,6 @@ package android.hardware.display;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -36,7 +35,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class AmbientBrightnessDayStats implements Parcelable {
/** The localdate for which brightness stats are being tracked */
diff --git a/core/java/android/hardware/display/BrightnessChangeEvent.java b/core/java/android/hardware/display/BrightnessChangeEvent.java
index a6a44bea816b..e2d836c59099 100644
--- a/core/java/android/hardware/display/BrightnessChangeEvent.java
+++ b/core/java/android/hardware/display/BrightnessChangeEvent.java
@@ -19,7 +19,6 @@ package android.hardware.display;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -32,7 +31,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class BrightnessChangeEvent implements Parcelable {
/** Brightness in nits */
public final float brightness;
diff --git a/core/java/android/hardware/display/BrightnessConfiguration.java b/core/java/android/hardware/display/BrightnessConfiguration.java
index 6412a0ce7219..d9c1063cd39d 100644
--- a/core/java/android/hardware/display/BrightnessConfiguration.java
+++ b/core/java/android/hardware/display/BrightnessConfiguration.java
@@ -20,7 +20,6 @@ import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.pm.ApplicationInfo;
import android.os.Parcel;
import android.os.Parcelable;
@@ -44,7 +43,6 @@ import java.util.Objects;
/** @hide */
@SystemApi
-@TestApi
public final class BrightnessConfiguration implements Parcelable {
private static final String TAG_BRIGHTNESS_CURVE = "brightness-curve";
private static final String TAG_BRIGHTNESS_POINT = "brightness-point";
diff --git a/core/java/android/hardware/display/BrightnessCorrection.java b/core/java/android/hardware/display/BrightnessCorrection.java
index 0879787077aa..bbfc45edb89a 100644
--- a/core/java/android/hardware/display/BrightnessCorrection.java
+++ b/core/java/android/hardware/display/BrightnessCorrection.java
@@ -20,7 +20,6 @@ import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.MathUtils;
@@ -44,7 +43,6 @@ import java.io.IOException;
* @hide
*/
@SystemApi
-@TestApi
public final class BrightnessCorrection implements Parcelable {
private static final int SCALE_AND_TRANSLATE_LOG = 1;
diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java
index fc14b89d83f7..68b9d5227746 100644
--- a/core/java/android/hardware/display/DisplayManager.java
+++ b/core/java/android/hardware/display/DisplayManager.java
@@ -699,7 +699,6 @@ public final class DisplayManager {
* @hide
*/
@SystemApi
- @TestApi
public Point getStableDisplaySize() {
return mGlobal.getStableDisplaySize();
}
@@ -709,7 +708,6 @@ public final class DisplayManager {
* @hide until we make it a system api.
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.BRIGHTNESS_SLIDER_USAGE)
public List<BrightnessChangeEvent> getBrightnessEvents() {
return mGlobal.getBrightnessEvents(mContext.getOpPackageName());
@@ -721,7 +719,6 @@ public final class DisplayManager {
* @hide until we make it a system api
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.ACCESS_AMBIENT_LIGHT_STATS)
public List<AmbientBrightnessDayStats> getAmbientBrightnessStats() {
return mGlobal.getAmbientBrightnessStats();
@@ -733,7 +730,6 @@ public final class DisplayManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS)
public void setBrightnessConfiguration(BrightnessConfiguration c) {
setBrightnessConfigurationForUser(c, mContext.getUserId(), mContext.getPackageName());
@@ -758,7 +754,6 @@ public final class DisplayManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS)
public BrightnessConfiguration getBrightnessConfiguration() {
return getBrightnessConfigurationForUser(mContext.getUserId());
@@ -784,7 +779,6 @@ public final class DisplayManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS)
@Nullable
public BrightnessConfiguration getDefaultBrightnessConfiguration() {
diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java
index e5e73200c8ef..5b186c78df54 100644
--- a/core/java/android/hardware/hdmi/HdmiControlManager.java
+++ b/core/java/android/hardware/hdmi/HdmiControlManager.java
@@ -28,7 +28,6 @@ import android.annotation.StringDef;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Binder;
@@ -60,7 +59,6 @@ import java.util.concurrent.Executor;
* @hide
*/
@SystemApi
-@TestApi
@SystemService(Context.HDMI_CONTROL_SERVICE)
@RequiresFeature(PackageManager.FEATURE_HDMI_CEC)
public final class HdmiControlManager {
diff --git a/core/java/android/hardware/hdmi/HdmiPortInfo.java b/core/java/android/hardware/hdmi/HdmiPortInfo.java
index 52c3628f358b..e97e120109bf 100644
--- a/core/java/android/hardware/hdmi/HdmiPortInfo.java
+++ b/core/java/android/hardware/hdmi/HdmiPortInfo.java
@@ -18,7 +18,6 @@ package android.hardware.hdmi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -29,7 +28,6 @@ import android.os.Parcelable;
* @hide
*/
@SystemApi
-@TestApi
public final class HdmiPortInfo implements Parcelable {
/** HDMI port type: Input */
public static final int PORT_INPUT = 0;
diff --git a/core/java/android/hardware/hdmi/HdmiSwitchClient.java b/core/java/android/hardware/hdmi/HdmiSwitchClient.java
index 4685e1e04618..cbfbe3940e47 100644
--- a/core/java/android/hardware/hdmi/HdmiSwitchClient.java
+++ b/core/java/android/hardware/hdmi/HdmiSwitchClient.java
@@ -18,7 +18,6 @@ package android.hardware.hdmi;
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.hardware.hdmi.HdmiControlManager.ControlCallbackResult;
import android.os.Binder;
import android.os.RemoteException;
@@ -39,7 +38,6 @@ import java.util.concurrent.Executor;
* @hide
*/
@SystemApi
-@TestApi
public class HdmiSwitchClient extends HdmiClient {
private static final String TAG = "HdmiSwitchClient";
diff --git a/core/java/android/hardware/lights/Light.java b/core/java/android/hardware/lights/Light.java
index 1c95fb632548..da270182052d 100644
--- a/core/java/android/hardware/lights/Light.java
+++ b/core/java/android/hardware/lights/Light.java
@@ -19,7 +19,6 @@ package android.hardware.lights;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -29,7 +28,6 @@ import android.os.Parcelable;
* @hide
*/
@SystemApi
-@TestApi
public final class Light implements Parcelable {
private final int mId;
private final int mOrdinal;
diff --git a/core/java/android/hardware/lights/LightState.java b/core/java/android/hardware/lights/LightState.java
index e55aa702f15c..cd39e6df91a9 100644
--- a/core/java/android/hardware/lights/LightState.java
+++ b/core/java/android/hardware/lights/LightState.java
@@ -19,7 +19,6 @@ package android.hardware.lights;
import android.annotation.ColorInt;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -36,7 +35,6 @@ import android.os.Parcelable;
* @hide
*/
@SystemApi
-@TestApi
public final class LightState implements Parcelable {
private final int mColor;
diff --git a/core/java/android/hardware/lights/LightsManager.java b/core/java/android/hardware/lights/LightsManager.java
index 8cd231224472..33e5fcaf2abb 100644
--- a/core/java/android/hardware/lights/LightsManager.java
+++ b/core/java/android/hardware/lights/LightsManager.java
@@ -45,7 +45,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
@SystemService(Context.LIGHTS_SERVICE)
public final class LightsManager {
private static final String TAG = "LightsManager";
diff --git a/core/java/android/hardware/lights/LightsRequest.java b/core/java/android/hardware/lights/LightsRequest.java
index 5c4fc6707e96..a318992c35ee 100644
--- a/core/java/android/hardware/lights/LightsRequest.java
+++ b/core/java/android/hardware/lights/LightsRequest.java
@@ -18,7 +18,6 @@ package android.hardware.lights;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.util.SparseArray;
import com.android.internal.util.Preconditions;
@@ -29,7 +28,6 @@ import com.android.internal.util.Preconditions;
* @hide
*/
@SystemApi
-@TestApi
public final class LightsRequest {
/** Visible to {@link LightsManager.Session}. */
diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java
index ecdbf4cdf9ec..e58403fe387d 100644
--- a/core/java/android/hardware/soundtrigger/SoundTrigger.java
+++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java
@@ -67,7 +67,6 @@ import java.util.UUID;
*
* @hide
*/
-@TestApi
@SystemApi
public class SoundTrigger {
private static final String TAG = "SoundTrigger";
diff --git a/core/java/android/metrics/LogMaker.java b/core/java/android/metrics/LogMaker.java
index d8a2082f4eae..a19eb5668d55 100644
--- a/core/java/android/metrics/LogMaker.java
+++ b/core/java/android/metrics/LogMaker.java
@@ -16,7 +16,6 @@
package android.metrics;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.ComponentName;
import android.util.Log;
import android.util.SparseArray;
@@ -32,7 +31,6 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
* @hide
*/
@SystemApi
-@TestApi
public class LogMaker {
private static final String TAG = "LogBuilder";
diff --git a/core/java/android/metrics/MetricsReader.java b/core/java/android/metrics/MetricsReader.java
index 27f9a5dbf51c..5f356ca00d88 100644
--- a/core/java/android/metrics/MetricsReader.java
+++ b/core/java/android/metrics/MetricsReader.java
@@ -16,7 +16,6 @@
package android.metrics;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.util.EventLog;
import com.android.internal.annotations.VisibleForTesting;
@@ -36,7 +35,6 @@ import java.util.concurrent.TimeUnit;
* @hide
*/
@SystemApi
-@TestApi
public class MetricsReader {
private Queue<LogMaker> mPendingQueue = new LinkedList<>();
private Queue<LogMaker> mSeenQueue = new LinkedList<>();
diff --git a/core/java/android/net/CaptivePortal.java b/core/java/android/net/CaptivePortal.java
index 8afeb3033cdb..c2586fa0c825 100644
--- a/core/java/android/net/CaptivePortal.java
+++ b/core/java/android/net/CaptivePortal.java
@@ -19,7 +19,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
@@ -42,7 +41,6 @@ public class CaptivePortal implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int APP_RETURN_DISMISSED = 0;
/**
* Response code from the captive portal application, indicating that the user did not login and
@@ -52,7 +50,6 @@ public class CaptivePortal implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int APP_RETURN_UNWANTED = 1;
/**
* Response code from the captive portal application, indicating that the user does not wish to
@@ -62,7 +59,6 @@ public class CaptivePortal implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int APP_RETURN_WANTED_AS_IS = 2;
/** Event offset of request codes from captive portal application. */
private static final int APP_REQUEST_BASE = 100;
@@ -74,7 +70,6 @@ public class CaptivePortal implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int APP_REQUEST_REEVALUATION_REQUIRED = APP_REQUEST_BASE + 0;
private final IBinder mBinder;
@@ -154,7 +149,6 @@ public class CaptivePortal implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public void useNetwork() {
try {
ICaptivePortal.Stub.asInterface(mBinder).appResponse(APP_RETURN_WANTED_AS_IS);
@@ -167,7 +161,6 @@ public class CaptivePortal implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.NETWORK_STACK)
public void reevaluateNetwork() {
try {
@@ -183,7 +176,6 @@ public class CaptivePortal implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public void logEvent(@EventId int eventId, @NonNull String packageName) {
try {
ICaptivePortal.Stub.asInterface(mBinder).logEvent(eventId, packageName);
diff --git a/core/java/android/net/CaptivePortalData.java b/core/java/android/net/CaptivePortalData.java
index 09f47625a8e4..59e62a675abc 100644
--- a/core/java/android/net/CaptivePortalData.java
+++ b/core/java/android/net/CaptivePortalData.java
@@ -19,7 +19,6 @@ package android.net;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -30,7 +29,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class CaptivePortalData implements Parcelable {
private final long mRefreshTimeMillis;
@Nullable
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index b2eba6318730..1012f47f8c0a 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -269,7 +269,6 @@ public class ConnectivityManager {
* {@hide}
*/
@SystemApi
- @TestApi
public static final String EXTRA_CAPTIVE_PORTAL_PROBE_SPEC =
"android.net.extra.CAPTIVE_PORTAL_PROBE_SPEC";
@@ -278,7 +277,6 @@ public class ConnectivityManager {
* {@hide}
*/
@SystemApi
- @TestApi
public static final String EXTRA_CAPTIVE_PORTAL_USER_AGENT =
"android.net.extra.CAPTIVE_PORTAL_USER_AGENT";
@@ -4413,7 +4411,6 @@ public class ConnectivityManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK)
public void startCaptivePortalApp(@NonNull Network network, @NonNull Bundle appExtras) {
try {
diff --git a/core/java/android/net/EthernetManager.java b/core/java/android/net/EthernetManager.java
index d975017f9c8e..5860e20ad3b4 100644
--- a/core/java/android/net/EthernetManager.java
+++ b/core/java/android/net/EthernetManager.java
@@ -37,7 +37,6 @@ import java.util.concurrent.Executor;
* @hide
*/
@SystemApi
-@TestApi
@SystemService(Context.ETHERNET_SERVICE)
public class EthernetManager {
private static final String TAG = "EthernetManager";
diff --git a/core/java/android/net/IpPrefix.java b/core/java/android/net/IpPrefix.java
index 06f5f270d189..bcb65fab8571 100644
--- a/core/java/android/net/IpPrefix.java
+++ b/core/java/android/net/IpPrefix.java
@@ -20,7 +20,6 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Pair;
@@ -89,7 +88,6 @@ public final class IpPrefix implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public IpPrefix(@NonNull InetAddress address, @IntRange(from = 0, to = 128) int prefixLength) {
// We don't reuse the (byte[], int) constructor because it calls clone() on the byte array,
// which is unnecessary because getAddress() already returns a clone.
@@ -108,7 +106,6 @@ public final class IpPrefix implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public IpPrefix(@NonNull String prefix) {
// We don't reuse the (InetAddress, int) constructor because "error: call to this must be
// first statement in constructor". We could factor out setting the member variables to an
diff --git a/core/java/android/net/IpSecAlgorithm.java b/core/java/android/net/IpSecAlgorithm.java
index a4f7b7454bd9..e89451e4f4ef 100644
--- a/core/java/android/net/IpSecAlgorithm.java
+++ b/core/java/android/net/IpSecAlgorithm.java
@@ -201,14 +201,16 @@ public final class IpSecAlgorithm implements Parcelable {
@VisibleForTesting
public static final Map<String, Integer> ALGO_TO_REQUIRED_FIRST_SDK = new HashMap<>();
+ private static final int SDK_VERSION_ZERO = 0;
+
static {
- ALGO_TO_REQUIRED_FIRST_SDK.put(CRYPT_AES_CBC, Build.VERSION_CODES.P);
- ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_MD5, Build.VERSION_CODES.P);
- ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_SHA1, Build.VERSION_CODES.P);
- ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_SHA256, Build.VERSION_CODES.P);
- ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_SHA384, Build.VERSION_CODES.P);
- ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_SHA512, Build.VERSION_CODES.P);
- ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_CRYPT_AES_GCM, Build.VERSION_CODES.P);
+ ALGO_TO_REQUIRED_FIRST_SDK.put(CRYPT_AES_CBC, SDK_VERSION_ZERO);
+ ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_MD5, SDK_VERSION_ZERO);
+ ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_SHA1, SDK_VERSION_ZERO);
+ ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_SHA256, SDK_VERSION_ZERO);
+ ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_SHA384, SDK_VERSION_ZERO);
+ ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_HMAC_SHA512, SDK_VERSION_ZERO);
+ ALGO_TO_REQUIRED_FIRST_SDK.put(AUTH_CRYPT_AES_GCM, SDK_VERSION_ZERO);
// STOPSHIP: b/170424293 Use Build.VERSION_CODES.S when it is defined
ALGO_TO_REQUIRED_FIRST_SDK.put(CRYPT_AES_CTR, Build.VERSION_CODES.R + 1);
diff --git a/core/java/android/net/LinkAddress.java b/core/java/android/net/LinkAddress.java
index 772c685856c7..d1bdaa078cdc 100644
--- a/core/java/android/net/LinkAddress.java
+++ b/core/java/android/net/LinkAddress.java
@@ -30,7 +30,6 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.os.Parcel;
@@ -158,7 +157,6 @@ public class LinkAddress implements Parcelable {
* @return true if the address is IPv6.
* @hide
*/
- @TestApi
@SystemApi
public boolean isIpv6() {
return address instanceof Inet6Address;
@@ -180,7 +178,6 @@ public class LinkAddress implements Parcelable {
* @return true if the address is IPv4 or is a mapped IPv4 address.
* @hide
*/
- @TestApi
@SystemApi
public boolean isIpv4() {
return address instanceof Inet4Address;
@@ -243,7 +240,6 @@ public class LinkAddress implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public LinkAddress(@NonNull InetAddress address, @IntRange(from = 0, to = 128) int prefixLength,
int flags, int scope) {
init(address, prefixLength, flags, scope, LIFETIME_UNKNOWN, LIFETIME_UNKNOWN);
@@ -275,7 +271,6 @@ public class LinkAddress implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public LinkAddress(@NonNull InetAddress address, @IntRange(from = 0, to = 128) int prefixLength,
int flags, int scope, long deprecationTime, long expirationTime) {
init(address, prefixLength, flags, scope, deprecationTime, expirationTime);
@@ -289,7 +284,6 @@ public class LinkAddress implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public LinkAddress(@NonNull InetAddress address,
@IntRange(from = 0, to = 128) int prefixLength) {
this(address, prefixLength, 0, 0);
@@ -314,7 +308,6 @@ public class LinkAddress implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public LinkAddress(@NonNull String address) {
this(address, 0, 0);
this.scope = scopeForUnicastAddress(this.address);
@@ -329,7 +322,6 @@ public class LinkAddress implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public LinkAddress(@NonNull String address, int flags, int scope) {
// This may throw an IllegalArgumentException; catching it is the caller's responsibility.
// TODO: consider rejecting mapped IPv4 addresses such as "::ffff:192.0.2.5/24".
@@ -389,7 +381,6 @@ public class LinkAddress implements Parcelable {
* otherwise.
* @hide
*/
- @TestApi
@SystemApi
public boolean isSameAddressAs(@Nullable LinkAddress other) {
if (other == null) {
@@ -469,7 +460,6 @@ public class LinkAddress implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public long getDeprecationTime() {
return deprecationTime;
}
@@ -485,7 +475,6 @@ public class LinkAddress implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public long getExpirationTime() {
return expirationTime;
}
@@ -496,7 +485,6 @@ public class LinkAddress implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public boolean isGlobalPreferred() {
/**
diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java
index 7cb3f920cf93..25a76f43553a 100644
--- a/core/java/android/net/LinkProperties.java
+++ b/core/java/android/net/LinkProperties.java
@@ -19,7 +19,6 @@ package android.net;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.net.util.LinkPropertiesUtils;
import android.os.Build;
@@ -161,7 +160,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public LinkProperties(@Nullable LinkProperties source) {
this(source, false /* parcelSensitiveFields */);
}
@@ -177,7 +175,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public LinkProperties(@Nullable LinkProperties source, boolean parcelSensitiveFields) {
mParcelSensitiveFields = parcelSensitiveFields;
if (source == null) return;
@@ -292,7 +289,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public boolean addLinkAddress(@NonNull LinkAddress address) {
if (address == null) {
return false;
@@ -321,7 +317,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public boolean removeLinkAddress(@NonNull LinkAddress toRemove) {
int i = findLinkAddressIndex(toRemove);
if (i >= 0) {
@@ -375,7 +370,6 @@ public final class LinkProperties implements Parcelable {
* @return true if the DNS server was added, false if it was already present.
* @hide
*/
- @TestApi
@SystemApi
public boolean addDnsServer(@NonNull InetAddress dnsServer) {
if (dnsServer != null && !mDnses.contains(dnsServer)) {
@@ -392,7 +386,6 @@ public final class LinkProperties implements Parcelable {
* @return true if the DNS server was removed, false if it did not exist.
* @hide
*/
- @TestApi
@SystemApi
public boolean removeDnsServer(@NonNull InetAddress dnsServer) {
return mDnses.remove(dnsServer);
@@ -427,7 +420,6 @@ public final class LinkProperties implements Parcelable {
* @param usePrivateDns The private DNS state.
* @hide
*/
- @TestApi
@SystemApi
public void setUsePrivateDns(boolean usePrivateDns) {
mUsePrivateDns = usePrivateDns;
@@ -454,7 +446,6 @@ public final class LinkProperties implements Parcelable {
* @param privateDnsServerName The private DNS server name.
* @hide
*/
- @TestApi
@SystemApi
public void setPrivateDnsServerName(@Nullable String privateDnsServerName) {
mPrivateDnsServerName = privateDnsServerName;
@@ -533,7 +524,6 @@ public final class LinkProperties implements Parcelable {
* object.
* @hide
*/
- @TestApi
@SystemApi
public void setValidatedPrivateDnsServers(@NonNull Collection<InetAddress> dnsServers) {
mValidatedPrivateDnses.clear();
@@ -550,7 +540,6 @@ public final class LinkProperties implements Parcelable {
* DNS servers on this link.
* @hide
*/
- @TestApi
@SystemApi
public @NonNull List<InetAddress> getValidatedPrivateDnsServers() {
return Collections.unmodifiableList(mValidatedPrivateDnses);
@@ -591,7 +580,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public void setPcscfServers(@NonNull Collection<InetAddress> pcscfServers) {
mPcscfs.clear();
for (InetAddress pcscfServer: pcscfServers) {
@@ -607,7 +595,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public @NonNull List<InetAddress> getPcscfServers() {
return Collections.unmodifiableList(mPcscfs);
}
@@ -661,7 +648,6 @@ public final class LinkProperties implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public void setTcpBufferSizes(@Nullable String tcpBufferSizes) {
mTcpBufferSizes = tcpBufferSizes;
@@ -674,7 +660,6 @@ public final class LinkProperties implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public @Nullable String getTcpBufferSizes() {
return mTcpBufferSizes;
@@ -743,7 +728,6 @@ public final class LinkProperties implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public boolean removeRoute(@NonNull RouteInfo route) {
return Objects.equals(mIfaceName, route.getInterface()) && mRoutes.remove(route);
@@ -1020,7 +1004,6 @@ public final class LinkProperties implements Parcelable {
* @return {@code true} if there is an IPv4 address, {@code false} otherwise.
* @hide
*/
- @TestApi
@SystemApi
public boolean hasIpv4Address() {
for (LinkAddress address : mLinkAddresses) {
@@ -1061,7 +1044,6 @@ public final class LinkProperties implements Parcelable {
* @return {@code true} if there is a global preferred IPv6 address, {@code false} otherwise.
* @hide
*/
- @TestApi
@SystemApi
public boolean hasGlobalIpv6Address() {
for (LinkAddress address : mLinkAddresses) {
@@ -1148,7 +1130,6 @@ public final class LinkProperties implements Parcelable {
* @return {@code true} if there is an IPv6 default route, {@code false} otherwise.
* @hide
*/
- @TestApi
@SystemApi
public boolean hasIpv6DefaultRoute() {
for (RouteInfo r : mRoutes) {
@@ -1264,7 +1245,6 @@ public final class LinkProperties implements Parcelable {
* @return {@code true} if the link is provisioned, {@code false} otherwise.
* @hide
*/
- @TestApi
@SystemApi
public boolean isIpv4Provisioned() {
return (hasIpv4Address()
@@ -1279,7 +1259,6 @@ public final class LinkProperties implements Parcelable {
* @return {@code true} if the link is provisioned, {@code false} otherwise.
* @hide
*/
- @TestApi
@SystemApi
public boolean isIpv6Provisioned() {
return (hasGlobalIpv6Address()
@@ -1307,7 +1286,6 @@ public final class LinkProperties implements Parcelable {
* @return {@code true} if the link is provisioned, {@code false} otherwise.
* @hide
*/
- @TestApi
@SystemApi
public boolean isProvisioned() {
return (isIpv4Provisioned() || isIpv6Provisioned());
@@ -1320,7 +1298,6 @@ public final class LinkProperties implements Parcelable {
* {@code false} otherwise.
* @hide
*/
- @TestApi
@SystemApi
public boolean isReachable(@NonNull InetAddress ip) {
final List<RouteInfo> allRoutes = getAllRoutes();
@@ -1577,7 +1554,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public void setCaptivePortalApiUrl(@Nullable Uri url) {
mCaptivePortalApiUrl = url;
}
@@ -1592,7 +1568,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
@Nullable
public Uri getCaptivePortalApiUrl() {
return mCaptivePortalApiUrl;
@@ -1603,7 +1578,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public void setCaptivePortalData(@Nullable CaptivePortalData data) {
mCaptivePortalData = data;
}
@@ -1617,7 +1591,6 @@ public final class LinkProperties implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
@Nullable
public CaptivePortalData getCaptivePortalData() {
return mCaptivePortalData;
diff --git a/core/java/android/net/Network.java b/core/java/android/net/Network.java
index 10ee72e48ecc..3e4f73555e58 100644
--- a/core/java/android/net/Network.java
+++ b/core/java/android/net/Network.java
@@ -19,7 +19,6 @@ package android.net;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -128,7 +127,6 @@ public class Network implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public Network(@NonNull Network that) {
this(that.netId, that.mPrivateDnsBypass);
}
@@ -165,7 +163,6 @@ public class Network implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public @NonNull Network getPrivateDnsBypassingCopy() {
return new Network(netId, true);
@@ -176,7 +173,6 @@ public class Network implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public int getNetId() {
return netId;
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 004f84422b44..be33f4edb5d1 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -850,7 +850,6 @@ public final class NetworkCapabilities implements Parcelable {
* @return an array of transport type values for this instance.
* @hide
*/
- @TestApi
@SystemApi
@NonNull public @Transport int[] getTransportTypes() {
return BitUtils.unpackBits(mTransportTypes);
@@ -1025,7 +1024,6 @@ public final class NetworkCapabilities implements Parcelable {
*/
@NonNull
@SystemApi
- @TestApi
public int[] getAdministratorUids() {
return Arrays.copyOf(mAdministratorUids, mAdministratorUids.length);
}
@@ -1506,7 +1504,6 @@ public final class NetworkCapabilities implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public @Nullable String getSsid() {
return mSSID;
}
@@ -1590,7 +1587,6 @@ public final class NetworkCapabilities implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public boolean satisfiedByNetworkCapabilities(@Nullable NetworkCapabilities nc) {
return satisfiedByNetworkCapabilities(nc, false);
@@ -2136,7 +2132,6 @@ public final class NetworkCapabilities implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final class Builder {
private final NetworkCapabilities mCaps;
diff --git a/core/java/android/net/NetworkStack.java b/core/java/android/net/NetworkStack.java
index 86f3dfd412f6..79f9e6ef2a97 100644
--- a/core/java/android/net/NetworkStack.java
+++ b/core/java/android/net/NetworkStack.java
@@ -33,7 +33,6 @@ import java.util.Arrays;
* @hide
*/
@SystemApi
-@TestApi
public class NetworkStack {
/**
* Permission granted only to the NetworkStack APK, defined in NetworkStackStub with signature
@@ -41,7 +40,6 @@ public class NetworkStack {
* @hide
*/
@SystemApi
- @TestApi
public static final String PERMISSION_MAINLINE_NETWORK_STACK =
"android.permission.MAINLINE_NETWORK_STACK";
@@ -54,7 +52,6 @@ public class NetworkStack {
*/
@Nullable
@SystemApi
- @TestApi
public static IBinder getService() {
final IBinder mockService = sMockService;
if (mockService != null) return mockService;
diff --git a/core/java/android/net/RouteInfo.java b/core/java/android/net/RouteInfo.java
index d9568756bbac..93ad41f7c524 100644
--- a/core/java/android/net/RouteInfo.java
+++ b/core/java/android/net/RouteInfo.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.net.util.NetUtils;
import android.os.Build;
@@ -87,17 +86,14 @@ public final class RouteInfo implements Parcelable {
/** Unicast route. @hide */
@SystemApi
- @TestApi
public static final int RTN_UNICAST = 1;
/** Unreachable route. @hide */
@SystemApi
- @TestApi
public static final int RTN_UNREACHABLE = 7;
/** Throw route. @hide */
@SystemApi
- @TestApi
public static final int RTN_THROW = 9;
/**
@@ -135,7 +131,6 @@ public final class RouteInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public RouteInfo(@Nullable IpPrefix destination, @Nullable InetAddress gateway,
@Nullable String iface, @RouteType int type) {
this(destination, gateway, iface, type, 0);
@@ -397,7 +392,6 @@ public final class RouteInfo implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
@RouteType
public int getType() {
diff --git a/core/java/android/net/StaticIpConfiguration.java b/core/java/android/net/StaticIpConfiguration.java
index a973455baa04..f56d656f07ed 100644
--- a/core/java/android/net/StaticIpConfiguration.java
+++ b/core/java/android/net/StaticIpConfiguration.java
@@ -19,7 +19,6 @@ package android.net;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -52,7 +51,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class StaticIpConfiguration implements Parcelable {
/** @hide */
@UnsupportedAppUsage
diff --git a/core/java/android/net/apf/ApfCapabilities.java b/core/java/android/net/apf/ApfCapabilities.java
index 92c543294ae1..bf5b26e278f9 100644
--- a/core/java/android/net/apf/ApfCapabilities.java
+++ b/core/java/android/net/apf/ApfCapabilities.java
@@ -19,7 +19,6 @@ package android.net.apf;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
@@ -36,7 +35,6 @@ import com.android.internal.R;
* @hide
*/
@SystemApi
-@TestApi
public final class ApfCapabilities implements Parcelable {
/**
* Version of APF instruction set supported for packet filtering. 0 indicates no support for
diff --git a/core/java/android/net/metrics/ApfProgramEvent.java b/core/java/android/net/metrics/ApfProgramEvent.java
index f93907a37f3f..c50bae90488b 100644
--- a/core/java/android/net/metrics/ApfProgramEvent.java
+++ b/core/java/android/net/metrics/ApfProgramEvent.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -40,7 +39,6 @@ import java.util.List;
* the APF program in place with a new APF program.
* {@hide}
*/
-@TestApi
@SystemApi
public final class ApfProgramEvent implements IpConnectivityLog.Event {
diff --git a/core/java/android/net/metrics/ApfStats.java b/core/java/android/net/metrics/ApfStats.java
index b221cb97b28f..2a601b273ef4 100644
--- a/core/java/android/net/metrics/ApfStats.java
+++ b/core/java/android/net/metrics/ApfStats.java
@@ -19,7 +19,6 @@ package android.net.metrics;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -29,7 +28,6 @@ import android.os.Parcelable;
* {@hide}
*/
@SystemApi
-@TestApi
public final class ApfStats implements IpConnectivityLog.Event {
/**
@@ -126,7 +124,6 @@ public final class ApfStats implements IpConnectivityLog.Event {
* @hide
*/
@SystemApi
- @TestApi
public static final class Builder {
private long mDurationMs;
private int mReceivedRas;
diff --git a/core/java/android/net/metrics/DhcpClientEvent.java b/core/java/android/net/metrics/DhcpClientEvent.java
index 8fc1ef80bba9..e0a93dd1c18f 100644
--- a/core/java/android/net/metrics/DhcpClientEvent.java
+++ b/core/java/android/net/metrics/DhcpClientEvent.java
@@ -19,7 +19,6 @@ package android.net.metrics;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -30,7 +29,6 @@ import android.text.TextUtils;
* {@hide}
*/
@SystemApi
-@TestApi
public final class DhcpClientEvent implements IpConnectivityLog.Event {
// Names for recording DhcpClient pseudo-state transitions.
diff --git a/core/java/android/net/metrics/DhcpErrorEvent.java b/core/java/android/net/metrics/DhcpErrorEvent.java
index 32efb5adafcd..de3129d5e94d 100644
--- a/core/java/android/net/metrics/DhcpErrorEvent.java
+++ b/core/java/android/net/metrics/DhcpErrorEvent.java
@@ -18,7 +18,6 @@ package android.net.metrics;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseArray;
@@ -30,7 +29,6 @@ import com.android.internal.util.MessageUtils;
* {@hide}
*/
@SystemApi
-@TestApi
public final class DhcpErrorEvent implements IpConnectivityLog.Event {
public static final int L2_ERROR = 1;
public static final int L3_ERROR = 2;
diff --git a/core/java/android/net/metrics/IpConnectivityLog.java b/core/java/android/net/metrics/IpConnectivityLog.java
index 680c01573f98..a008d855025a 100644
--- a/core/java/android/net/metrics/IpConnectivityLog.java
+++ b/core/java/android/net/metrics/IpConnectivityLog.java
@@ -18,7 +18,6 @@ package android.net.metrics;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.net.ConnectivityMetricsEvent;
import android.net.IIpConnectivityMetrics;
import android.net.Network;
@@ -35,7 +34,6 @@ import com.android.internal.util.BitUtils;
* {@hide}
*/
@SystemApi
-@TestApi
public class IpConnectivityLog {
private static final String TAG = IpConnectivityLog.class.getSimpleName();
private static final boolean DBG = false;
@@ -52,7 +50,6 @@ public class IpConnectivityLog {
/** @hide */
@SystemApi
- @TestApi
public IpConnectivityLog() {
}
diff --git a/core/java/android/net/metrics/IpManagerEvent.java b/core/java/android/net/metrics/IpManagerEvent.java
index f14abb895cb4..4f7f3263117b 100644
--- a/core/java/android/net/metrics/IpManagerEvent.java
+++ b/core/java/android/net/metrics/IpManagerEvent.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseArray;
@@ -36,7 +35,6 @@ import java.lang.annotation.RetentionPolicy;
* {@hide}
*/
@SystemApi
-@TestApi
public final class IpManagerEvent implements IpConnectivityLog.Event {
public static final int PROVISIONING_OK = 1;
diff --git a/core/java/android/net/metrics/IpReachabilityEvent.java b/core/java/android/net/metrics/IpReachabilityEvent.java
index 79e01d7116b6..d5003badd614 100644
--- a/core/java/android/net/metrics/IpReachabilityEvent.java
+++ b/core/java/android/net/metrics/IpReachabilityEvent.java
@@ -19,7 +19,6 @@ package android.net.metrics;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseArray;
@@ -32,7 +31,6 @@ import com.android.internal.util.MessageUtils;
* {@hide}
*/
@SystemApi
-@TestApi
public final class IpReachabilityEvent implements IpConnectivityLog.Event {
// Event types.
diff --git a/core/java/android/net/metrics/NetworkEvent.java b/core/java/android/net/metrics/NetworkEvent.java
index fe603cf9305c..8c28f7a7d643 100644
--- a/core/java/android/net/metrics/NetworkEvent.java
+++ b/core/java/android/net/metrics/NetworkEvent.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseArray;
@@ -34,7 +33,6 @@ import java.lang.annotation.RetentionPolicy;
* {@hide}
*/
@SystemApi
-@TestApi
public final class NetworkEvent implements IpConnectivityLog.Event {
public static final int NETWORK_CONNECTED = 1;
diff --git a/core/java/android/net/metrics/RaEvent.java b/core/java/android/net/metrics/RaEvent.java
index 661f648fc74e..b54874f5a573 100644
--- a/core/java/android/net/metrics/RaEvent.java
+++ b/core/java/android/net/metrics/RaEvent.java
@@ -19,7 +19,6 @@ package android.net.metrics;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -28,7 +27,6 @@ import android.os.Parcelable;
* {@hide}
*/
@SystemApi
-@TestApi
public final class RaEvent implements IpConnectivityLog.Event {
private static final long NO_LIFETIME = -1L;
diff --git a/core/java/android/net/metrics/ValidationProbeEvent.java b/core/java/android/net/metrics/ValidationProbeEvent.java
index 8fab64ae6c4e..7f4e4a73677e 100644
--- a/core/java/android/net/metrics/ValidationProbeEvent.java
+++ b/core/java/android/net/metrics/ValidationProbeEvent.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseArray;
@@ -35,7 +34,6 @@ import java.lang.annotation.RetentionPolicy;
* {@hide}
*/
@SystemApi
-@TestApi
public final class ValidationProbeEvent implements IpConnectivityLog.Event {
public static final int PROBE_DNS = 0;
diff --git a/core/java/android/net/util/SocketUtils.java b/core/java/android/net/util/SocketUtils.java
index 696708408c22..e64060f1b220 100644
--- a/core/java/android/net/util/SocketUtils.java
+++ b/core/java/android/net/util/SocketUtils.java
@@ -22,7 +22,6 @@ import static android.system.OsConstants.SO_BINDTODEVICE;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.net.NetworkUtils;
import android.system.ErrnoException;
import android.system.NetlinkSocketAddress;
@@ -40,7 +39,6 @@ import java.net.SocketAddress;
* @hide
*/
@SystemApi
-@TestApi
public final class SocketUtils {
/**
* Create a raw datagram socket that is bound to an interface.
diff --git a/core/java/android/os/BatteryManager.java b/core/java/android/os/BatteryManager.java
index 12ec0a0c21d5..9a16d3fee600 100644
--- a/core/java/android/os/BatteryManager.java
+++ b/core/java/android/os/BatteryManager.java
@@ -20,7 +20,6 @@ import android.Manifest.permission;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
@@ -392,7 +391,6 @@ public class BatteryManager {
*/
@RequiresPermission(permission.POWER_SAVER)
@SystemApi
- @TestApi
public boolean setChargingStateUpdateDelayMillis(int delayMillis) {
try {
return mBatteryStats.setChargingStateUpdateDelayMillis(delayMillis);
diff --git a/core/java/android/os/BugreportManager.java b/core/java/android/os/BugreportManager.java
index 9e996d15fa84..fe4d7296503f 100644
--- a/core/java/android/os/BugreportManager.java
+++ b/core/java/android/os/BugreportManager.java
@@ -24,13 +24,13 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
+
import com.android.internal.R;
import com.android.internal.util.Preconditions;
@@ -48,7 +48,6 @@ import java.util.concurrent.Executor;
* @hide
*/
@SystemApi
-@TestApi
@SystemService(Context.BUGREPORT_SERVICE)
public final class BugreportManager {
diff --git a/core/java/android/os/BugreportParams.java b/core/java/android/os/BugreportParams.java
index c834781346f6..279ccae7c94f 100644
--- a/core/java/android/os/BugreportParams.java
+++ b/core/java/android/os/BugreportParams.java
@@ -18,7 +18,6 @@ package android.os;
import android.annotation.IntDef;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -29,7 +28,6 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@SystemApi
-@TestApi
public final class BugreportParams {
private final int mMode;
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 085681d412e9..5745187fcbb9 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -256,7 +256,6 @@ public class Environment {
* @hide
*/
@SystemApi
- @TestApi
public static @NonNull File getOemDirectory() {
return DIR_OEM_ROOT;
}
@@ -268,7 +267,6 @@ public class Environment {
* @hide
*/
@SystemApi
- @TestApi
public static @NonNull File getOdmDirectory() {
return DIR_ODM_ROOT;
}
@@ -279,7 +277,6 @@ public class Environment {
* @hide
*/
@SystemApi
- @TestApi
public static @NonNull File getVendorDirectory() {
return DIR_VENDOR_ROOT;
}
@@ -291,7 +288,6 @@ public class Environment {
* @hide
*/
@SystemApi
- @TestApi
public static @NonNull File getProductDirectory() {
return DIR_PRODUCT_ROOT;
}
@@ -318,7 +314,6 @@ public class Environment {
* @hide
*/
@SystemApi
- @TestApi
public static @NonNull File getSystemExtDirectory() {
return DIR_SYSTEM_EXT_ROOT;
}
diff --git a/core/java/android/os/HidlMemory.java b/core/java/android/os/HidlMemory.java
index 02d1e0ce9109..26fc6f0ae4ce 100644
--- a/core/java/android/os/HidlMemory.java
+++ b/core/java/android/os/HidlMemory.java
@@ -20,7 +20,6 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import java.io.Closeable;
import java.io.IOException;
@@ -41,7 +40,6 @@ import java.io.IOException;
* @hide
*/
@SystemApi
-@TestApi
public class HidlMemory implements Closeable {
private final @NonNull String mName;
private final long mSize;
diff --git a/core/java/android/os/HwBinder.java b/core/java/android/os/HwBinder.java
index 64ab1d711765..0d2bfdf04905 100644
--- a/core/java/android/os/HwBinder.java
+++ b/core/java/android/os/HwBinder.java
@@ -17,7 +17,6 @@
package android.os;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import libcore.util.NativeAllocationRegistry;
@@ -26,7 +25,6 @@ import java.util.NoSuchElementException;
/** @hide */
@SystemApi
-@TestApi
public abstract class HwBinder implements IHwBinder {
private static final String TAG = "HwBinder";
diff --git a/core/java/android/os/HwBlob.java b/core/java/android/os/HwBlob.java
index 154227b2a786..a43fbdbde4d2 100644
--- a/core/java/android/os/HwBlob.java
+++ b/core/java/android/os/HwBlob.java
@@ -19,7 +19,6 @@ package android.os;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import libcore.util.NativeAllocationRegistry;
@@ -30,7 +29,6 @@ import libcore.util.NativeAllocationRegistry;
* @hide
*/
@SystemApi
-@TestApi
public class HwBlob {
private static final String TAG = "HwBlob";
diff --git a/core/java/android/os/HwParcel.java b/core/java/android/os/HwParcel.java
index 228548ad7802..9fd37d4548ac 100644
--- a/core/java/android/os/HwParcel.java
+++ b/core/java/android/os/HwParcel.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import dalvik.annotation.optimization.FastNative;
@@ -34,7 +33,6 @@ import java.util.Arrays;
/** @hide */
@SystemApi
-@TestApi
public class HwParcel {
private static final String TAG = "HwParcel";
diff --git a/core/java/android/os/IHwBinder.java b/core/java/android/os/IHwBinder.java
index 46fa6ef3b783..249eb3aa3456 100644
--- a/core/java/android/os/IHwBinder.java
+++ b/core/java/android/os/IHwBinder.java
@@ -17,11 +17,9 @@
package android.os;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
/** @hide */
@SystemApi
-@TestApi
public interface IHwBinder {
/**
* Process a hwbinder transaction.
diff --git a/core/java/android/os/IHwInterface.java b/core/java/android/os/IHwInterface.java
index 0a5a71550b06..f21f6e30a041 100644
--- a/core/java/android/os/IHwInterface.java
+++ b/core/java/android/os/IHwInterface.java
@@ -17,11 +17,9 @@
package android.os;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
/** @hide */
@SystemApi
-@TestApi
public interface IHwInterface {
/**
* @return the binder object that corresponds to this interface.
diff --git a/core/java/android/os/IncidentManager.java b/core/java/android/os/IncidentManager.java
index 565d31a26dbc..a543a2d6a983 100644
--- a/core/java/android/os/IncidentManager.java
+++ b/core/java/android/os/IncidentManager.java
@@ -23,7 +23,6 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.content.Context;
import android.net.Uri;
import android.util.Slog;
@@ -45,7 +44,6 @@ import java.util.concurrent.Executor;
* @hide
*/
@SystemApi
-@TestApi
@SystemService(Context.INCIDENT_SERVICE)
public class IncidentManager {
private static final String TAG = "IncidentManager";
@@ -159,7 +157,6 @@ public class IncidentManager {
* @hide
*/
@SystemApi
- @TestApi
public static class PendingReport {
/**
* Encoded data.
@@ -277,7 +274,6 @@ public class IncidentManager {
* @hide
*/
@SystemApi
- @TestApi
public static class IncidentReport implements Parcelable, Closeable {
private final long mTimestampNs;
private final int mPrivacyPolicy;
diff --git a/core/java/android/os/IncidentReportArgs.java b/core/java/android/os/IncidentReportArgs.java
index 7e858e1dc390..73e4914ce6ae 100644
--- a/core/java/android/os/IncidentReportArgs.java
+++ b/core/java/android/os/IncidentReportArgs.java
@@ -18,7 +18,6 @@ package android.os;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.IntArray;
@@ -30,7 +29,6 @@ import java.util.ArrayList;
* {@hide}
*/
@SystemApi
-@TestApi
public final class IncidentReportArgs implements Parcelable {
private final IntArray mSections = new IntArray();
diff --git a/core/java/android/os/NativeHandle.java b/core/java/android/os/NativeHandle.java
index 8d341b603eb4..a26873a87552 100644
--- a/core/java/android/os/NativeHandle.java
+++ b/core/java/android/os/NativeHandle.java
@@ -20,7 +20,6 @@ import static android.system.OsConstants.F_DUPFD_CLOEXEC;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.system.ErrnoException;
import android.system.Os;
@@ -33,7 +32,6 @@ import java.io.FileDescriptor;
* @hide
*/
@SystemApi
-@TestApi
public final class NativeHandle implements Closeable {
// whether this object owns mFds
private boolean mOwn = false;
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 50f0c28cb8f8..000b23f5d5ca 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -1565,7 +1565,6 @@ public final class PowerManager {
* @see #isPowerSaveMode()
*/
@SystemApi
- @TestApi
@RequiresPermission(anyOf = {
android.Manifest.permission.DEVICE_POWER,
android.Manifest.permission.POWER_SAVER
@@ -1610,7 +1609,6 @@ public final class PowerManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(permission.POWER_SAVER)
public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold) {
try {
@@ -1670,7 +1668,6 @@ public final class PowerManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int POWER_SAVE_MODE_TRIGGER_PERCENTAGE = 0;
/**
@@ -1683,7 +1680,6 @@ public final class PowerManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int POWER_SAVE_MODE_TRIGGER_DYNAMIC = 1;
/** @hide */
@@ -1708,7 +1704,6 @@ public final class PowerManager {
*/
@AutoPowerSaveModeTriggers
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.POWER_SAVER)
public int getPowerSaveModeTrigger() {
try {
@@ -1732,7 +1727,6 @@ public final class PowerManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.DEVICE_POWER)
public void setBatteryDischargePrediction(@NonNull Duration timeRemaining,
boolean isPersonalized) {
diff --git a/core/java/android/os/RemoteCallback.java b/core/java/android/os/RemoteCallback.java
index 373060f4ff4b..49f84adf2c21 100644
--- a/core/java/android/os/RemoteCallback.java
+++ b/core/java/android/os/RemoteCallback.java
@@ -19,14 +19,12 @@ package android.os;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
/**
* @hide
*/
@SystemApi
-@TestApi
public final class RemoteCallback implements Parcelable {
public interface OnResultListener {
diff --git a/core/java/android/os/SystemConfigManager.java b/core/java/android/os/SystemConfigManager.java
index 12a1ffaf69c1..3f0632be90d1 100644
--- a/core/java/android/os/SystemConfigManager.java
+++ b/core/java/android/os/SystemConfigManager.java
@@ -20,7 +20,6 @@ import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.content.Context;
import android.util.ArraySet;
import android.util.Log;
@@ -40,7 +39,6 @@ import java.util.Set;
* @hide
*/
@SystemApi
-@TestApi
@SystemService(Context.SYSTEM_CONFIG_SERVICE)
public class SystemConfigManager {
private static final String TAG = SystemConfigManager.class.getSimpleName();
diff --git a/core/java/android/os/SystemProperties.java b/core/java/android/os/SystemProperties.java
index c5e5cc40d54e..a16452705efc 100644
--- a/core/java/android/os/SystemProperties.java
+++ b/core/java/android/os/SystemProperties.java
@@ -19,7 +19,6 @@ package android.os;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.util.Log;
import android.util.MutableInt;
@@ -52,7 +51,6 @@ import java.util.HashMap;
* {@hide}
*/
@SystemApi
-@TestApi
public class SystemProperties {
private static final String TAG = "SystemProperties";
private static final boolean TRACK_KEY_ACCESS = false;
@@ -146,7 +144,6 @@ public class SystemProperties {
*/
@NonNull
@SystemApi
- @TestApi
public static String get(@NonNull String key) {
if (TRACK_KEY_ACCESS) onKeyAccess(key);
return native_get(key);
@@ -163,7 +160,6 @@ public class SystemProperties {
*/
@NonNull
@SystemApi
- @TestApi
public static String get(@NonNull String key, @Nullable String def) {
if (TRACK_KEY_ACCESS) onKeyAccess(key);
return native_get(key, def);
@@ -179,7 +175,6 @@ public class SystemProperties {
* @hide
*/
@SystemApi
- @TestApi
public static int getInt(@NonNull String key, int def) {
if (TRACK_KEY_ACCESS) onKeyAccess(key);
return native_get_int(key, def);
@@ -195,7 +190,6 @@ public class SystemProperties {
* @hide
*/
@SystemApi
- @TestApi
public static long getLong(@NonNull String key, long def) {
if (TRACK_KEY_ACCESS) onKeyAccess(key);
return native_get_long(key, def);
@@ -216,7 +210,6 @@ public class SystemProperties {
* @hide
*/
@SystemApi
- @TestApi
public static boolean getBoolean(@NonNull String key, boolean def) {
if (TRACK_KEY_ACCESS) onKeyAccess(key);
return native_get_boolean(key, def);
diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java
index 60447e76f75e..d39c5328e330 100644
--- a/core/java/android/os/UserHandle.java
+++ b/core/java/android/os/UserHandle.java
@@ -47,7 +47,6 @@ public final class UserHandle implements Parcelable {
/** @hide A user handle to indicate all users on the device */
@SystemApi
- @TestApi
public static final @NonNull UserHandle ALL = new UserHandle(USER_ALL);
/** @hide A user id to indicate the currently active user */
@@ -56,7 +55,6 @@ public final class UserHandle implements Parcelable {
/** @hide A user handle to indicate the current user of the device */
@SystemApi
- @TestApi
public static final @NonNull UserHandle CURRENT = new UserHandle(USER_CURRENT);
/** @hide A user id to indicate that we would like to send to the current
@@ -107,7 +105,6 @@ public final class UserHandle implements Parcelable {
/** @hide A user handle to indicate the "system" user of the device */
@SystemApi
- @TestApi
public static final @NonNull UserHandle SYSTEM = new UserHandle(USER_SYSTEM);
/**
@@ -280,7 +277,6 @@ public final class UserHandle implements Parcelable {
}
/** @hide */
- @TestApi
@SystemApi
public static UserHandle of(@UserIdInt int userId) {
if (userId == USER_SYSTEM) {
@@ -325,7 +321,6 @@ public final class UserHandle implements Parcelable {
* Returns the app id (or base uid) for a given uid, stripping out the user id from it.
* @hide
*/
- @TestApi
@SystemApi
public static @AppIdInt int getAppId(int uid) {
return uid % PER_USER_RANGE;
@@ -483,7 +478,6 @@ public final class UserHandle implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static @UserIdInt int myUserId() {
return getUserId(Process.myUid());
}
@@ -522,7 +516,6 @@ public final class UserHandle implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public @UserIdInt int getIdentifier() {
return mHandle;
}
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 42ae93030f38..b0e76e3ea851 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -1407,8 +1407,7 @@ public class UserManager {
*
* @hide
*/
- @SystemApi
- @TestApi // To allow seeing it from CTS.
+ @SystemApi // To allow seeing it from CTS.
public static final String ACTION_USER_RESTRICTIONS_CHANGED =
"android.os.action.USER_RESTRICTIONS_CHANGED";
@@ -1468,6 +1467,48 @@ public class UserManager {
public @interface UserSwitchabilityResult {}
/**
+ * A response code from {@link #removeUserOrSetEphemeral(int)} indicating that the specified
+ * user has been successfully removed.
+ * @hide
+ */
+ public static final int REMOVE_RESULT_REMOVED = 0;
+
+ /**
+ * A response code from {@link #removeUserOrSetEphemeral(int)} indicating that the specified
+ * user has had its {@link UserInfo#FLAG_EPHEMERAL} flag set to {@code true}, so that it will be
+ * removed when the user is stopped or on boot.
+ * @hide
+ */
+ public static final int REMOVE_RESULT_SET_EPHEMERAL = 1;
+
+ /**
+ * A response code from {@link #removeUserOrSetEphemeral(int)} indicating that the specified
+ * user is already in the process of being removed.
+ * @hide
+ */
+ public static final int REMOVE_RESULT_ALREADY_BEING_REMOVED = 2;
+
+ /**
+ * A response code from {@link #removeUserOrSetEphemeral(int)} indicating that an error occurred
+ * that prevented the user from being removed or set as ephemeral.
+ * @hide
+ */
+ public static final int REMOVE_RESULT_ERROR = 3;
+
+ /**
+ * Possible response codes from {@link #removeUserOrSetEphemeral(int)}.
+ * @hide
+ */
+ @IntDef(prefix = { "REMOVE_RESULT_" }, value = {
+ REMOVE_RESULT_REMOVED,
+ REMOVE_RESULT_SET_EPHEMERAL,
+ REMOVE_RESULT_ALREADY_BEING_REMOVED,
+ REMOVE_RESULT_ERROR,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface RemoveResult {}
+
+ /**
* Indicates user operation is successful.
*/
public static final int USER_OPERATION_SUCCESS = 0;
@@ -3982,11 +4023,11 @@ public class UserManager {
* the current user, then set the user as ephemeral so that it will be removed when it is
* stopped.
*
- * @return the {@link com.android.server.pm.UserManagerService.RemoveResult} code
+ * @return the {@link RemoveResult} code
* @hide
*/
@RequiresPermission(android.Manifest.permission.MANAGE_USERS)
- public int removeUserOrSetEphemeral(@UserIdInt int userId) {
+ public @RemoveResult int removeUserOrSetEphemeral(@UserIdInt int userId) {
try {
return mService.removeUserOrSetEphemeral(userId);
} catch (RemoteException re) {
diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java
index 0c0e6b5d73a6..7d85d13094a1 100644
--- a/core/java/android/os/Vibrator.java
+++ b/core/java/android/os/Vibrator.java
@@ -23,7 +23,6 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.app.ActivityThread;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
@@ -469,7 +468,6 @@ public abstract class Vibrator {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
public boolean isVibrating() {
return false;
@@ -483,7 +481,6 @@ public abstract class Vibrator {
* @hide
*/
@SystemApi
- @TestApi
public interface OnVibratorStateChangedListener {
/**
* Called when the vibrator state has changed.
@@ -502,7 +499,6 @@ public abstract class Vibrator {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
public void addVibratorStateListener(@NonNull OnVibratorStateChangedListener listener) {
}
@@ -516,7 +512,6 @@ public abstract class Vibrator {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
public void addVibratorStateListener(
@NonNull @CallbackExecutor Executor executor,
@@ -531,7 +526,6 @@ public abstract class Vibrator {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
public void removeVibratorStateListener(@NonNull OnVibratorStateChangedListener listener) {
}
diff --git a/core/java/android/os/WorkSource.java b/core/java/android/os/WorkSource.java
index a1b4dc3ffded..e0927ebd261a 100644
--- a/core/java/android/os/WorkSource.java
+++ b/core/java/android/os/WorkSource.java
@@ -98,7 +98,6 @@ public class WorkSource implements Parcelable {
* @param uid the uid performing the work
* @hide
*/
- @TestApi
@SystemApi
public WorkSource(int uid) {
mNum = 1;
@@ -152,7 +151,6 @@ public class WorkSource implements Parcelable {
* Returns the number of uids in this work source.
* @hide
*/
- @TestApi
@SystemApi
public int size() {
return mNum;
@@ -173,7 +171,6 @@ public class WorkSource implements Parcelable {
* If {@code index} < 0 or {@code index} >= {@link #size() N}, then the behavior is undefined.
* @hide
*/
- @TestApi
@SystemApi
public int getUid(int index) {
return mUids[index];
@@ -209,7 +206,6 @@ public class WorkSource implements Parcelable {
* If {@code index} < 0 or {@code index} >= {@link #size() N}, then the behavior is undefined.
* @hide
*/
- @TestApi
@SystemApi
@Nullable
public String getPackageName(int index) {
@@ -455,7 +451,6 @@ public class WorkSource implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
@NonNull
public WorkSource withoutNames() {
final WorkSource copy = new WorkSource(this);
@@ -582,7 +577,6 @@ public class WorkSource implements Parcelable {
* @hide for internal use only.
*/
@SystemApi
- @TestApi
public boolean isEmpty() {
return mNum == 0 && (mChains == null || mChains.isEmpty());
}
diff --git a/core/java/android/os/image/DynamicSystemClient.java b/core/java/android/os/image/DynamicSystemClient.java
index 50d8d8079ed5..58268e2fc914 100644
--- a/core/java/android/os/image/DynamicSystemClient.java
+++ b/core/java/android/os/image/DynamicSystemClient.java
@@ -22,7 +22,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -68,7 +67,6 @@ import java.util.concurrent.Executor;
* @hide
*/
@SystemApi
-@TestApi
public class DynamicSystemClient {
/** @hide */
@IntDef(prefix = { "STATUS_" }, value = {
@@ -286,7 +284,6 @@ public class DynamicSystemClient {
* @hide
*/
@SystemApi
- @TestApi
public DynamicSystemClient(@NonNull Context context) {
mContext = context;
mConnection = new DynSystemServiceConnection();
@@ -322,7 +319,6 @@ public class DynamicSystemClient {
*/
@RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
@SystemApi
- @TestApi
public void bind() {
if (!featureFlagEnabled()) {
Slog.w(TAG, FeatureFlagUtils.DYNAMIC_SYSTEM + " not enabled; bind() aborted.");
@@ -345,7 +341,6 @@ public class DynamicSystemClient {
*/
@RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
@SystemApi
- @TestApi
public void unbind() {
if (!mBound) {
return;
@@ -381,7 +376,6 @@ public class DynamicSystemClient {
*/
@RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
@SystemApi
- @TestApi
public void start(@NonNull Uri systemUrl, @BytesLong long systemSize) {
start(systemUrl, systemSize, 0 /* Use the default userdata size */);
}
diff --git a/core/java/android/os/incremental/IIncrementalService.aidl b/core/java/android/os/incremental/IIncrementalService.aidl
index 52475e9cd89d..ca92ad5deae6 100644
--- a/core/java/android/os/incremental/IIncrementalService.aidl
+++ b/core/java/android/os/incremental/IIncrementalService.aidl
@@ -144,4 +144,14 @@ interface IIncrementalService {
* Stop listening for the loading progress change for a storage.
*/
boolean unregisterLoadingProgressListener(int storageId);
+
+ /**
+ * Register storage health status listener.
+ */
+ boolean registerStorageHealthListener(int storageId, in StorageHealthCheckParams params, in IStorageHealthListener listener);
+
+ /**
+ * Register storage health status listener.
+ */
+ void unregisterStorageHealthListener(int storageId);
}
diff --git a/core/java/android/os/incremental/IStorageHealthListener.aidl b/core/java/android/os/incremental/IStorageHealthListener.aidl
index 9f93ede5c9fc..c71e73f9ec8e 100644
--- a/core/java/android/os/incremental/IStorageHealthListener.aidl
+++ b/core/java/android/os/incremental/IStorageHealthListener.aidl
@@ -26,9 +26,15 @@ oneway interface IStorageHealthListener {
/** There are reads pending for params.blockedTimeoutMs, waiting till
* params.unhealthyTimeoutMs to confirm unhealthy state. */
const int HEALTH_STATUS_BLOCKED = 2;
- /** There are reads pending for params.unhealthyTimeoutMs>,
- * marking storage as unhealthy. */
+ /** There are reads pending for params.unhealthyTimeoutMs,
+ * marking storage as unhealthy due to unknown issues. */
const int HEALTH_STATUS_UNHEALTHY = 3;
+ /** There are reads pending for params.unhealthyTimeoutMs,
+ * due to data transportation issues. */
+ const int HEALTH_STATUS_UNHEALTHY_TRANSPORT = 4;
+ /** There are reads pending for params.unhealthyTimeoutMs,
+ * due to limited storage space. */
+ const int HEALTH_STATUS_UNHEALTHY_STORAGE = 5;
/** Health status callback. */
void onHealthStatus(in int storageId, in int status);
diff --git a/core/java/android/os/incremental/IncrementalManager.java b/core/java/android/os/incremental/IncrementalManager.java
index 768ef975bd99..fb47ef04b231 100644
--- a/core/java/android/os/incremental/IncrementalManager.java
+++ b/core/java/android/os/incremental/IncrementalManager.java
@@ -283,6 +283,7 @@ public final class IncrementalManager {
return;
}
mLoadingProgressCallbacks.cleanUpCallbacks(storage);
+ unregisterHealthListener(codePath);
mService.deleteStorage(storage.getId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -297,7 +298,7 @@ public final class IncrementalManager {
* @param callback To report loading progress to.
* @return True if the package name and associated storage id are valid. False otherwise.
*/
- public boolean registerCallback(@NonNull String codePath,
+ public boolean registerLoadingProgressCallback(@NonNull String codePath,
@NonNull IPackageLoadingProgressCallback callback) {
final IncrementalStorage storage = openStorage(codePath);
if (storage == null) {
@@ -314,7 +315,7 @@ public final class IncrementalManager {
* @param codePath Path of the installed package
* @return True if the package name and associated storage id are valid. False otherwise.
*/
- public boolean unregisterCallback(@NonNull String codePath,
+ public boolean unregisterLoadingProgressCallback(@NonNull String codePath,
@NonNull IPackageLoadingProgressCallback callback) {
final IncrementalStorage storage = openStorage(codePath);
if (storage == null) {
@@ -414,6 +415,38 @@ public final class IncrementalManager {
}
}
+ /**
+ * Specify the health check params and listener for listening to Incremental Storage health
+ * status changes. Notice that this will overwrite the previously registered listener.
+ * @param codePath Path of the installed package. This path is on an Incremental Storage.
+ * @param healthCheckParams The params for health state change timeouts.
+ * @param listener To report health status change.
+ * @return True if listener was successfully registered.
+ */
+ public boolean registerHealthListener(@NonNull String codePath,
+ @NonNull StorageHealthCheckParams healthCheckParams,
+ @NonNull IStorageHealthListener.Stub listener) {
+ final IncrementalStorage storage = openStorage(codePath);
+ if (storage == null) {
+ // storage does not exist, package not installed
+ return false;
+ }
+ return storage.registerStorageHealthListener(healthCheckParams, listener);
+ }
+
+ /**
+ * Stop listening to health status changes on an Incremental Storage.
+ * @param codePath Path of the installed package. This path is on an Incremental Storage.
+ */
+ public void unregisterHealthListener(@NonNull String codePath) {
+ final IncrementalStorage storage = openStorage(codePath);
+ if (storage == null) {
+ // storage does not exist, package not installed
+ return;
+ }
+ storage.unregisterStorageHealthListener();
+ }
+
/* Native methods */
private static native boolean nativeIsEnabled();
private static native boolean nativeIsIncrementalPath(@NonNull String path);
diff --git a/core/java/android/os/incremental/IncrementalStorage.java b/core/java/android/os/incremental/IncrementalStorage.java
index a1c3cc697e02..b913faf9cc83 100644
--- a/core/java/android/os/incremental/IncrementalStorage.java
+++ b/core/java/android/os/incremental/IncrementalStorage.java
@@ -545,4 +545,31 @@ public final class IncrementalStorage {
return false;
}
}
+
+ /**
+ * Register to listen to the status changes of the storage health.
+ * @param healthCheckParams Params to specify status change timeouts.
+ * @param listener To report health status change from Incremental Service to the caller.
+ */
+ public boolean registerStorageHealthListener(StorageHealthCheckParams healthCheckParams,
+ IStorageHealthListener listener) {
+ try {
+ return mService.registerStorageHealthListener(mId, healthCheckParams, listener);
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ return false;
+ }
+ }
+
+ /**
+ * Stops listening to the status changes of the storage health.
+ */
+ public void unregisterStorageHealthListener() {
+ try {
+ mService.unregisterStorageHealthListener(mId);
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ return;
+ }
+ }
}
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index 6b5eb16d7bff..270115beb09b 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -43,7 +43,6 @@ import android.annotation.SdkConstant;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.annotation.WorkerThread;
import android.app.Activity;
import android.app.ActivityThread;
@@ -1701,7 +1700,6 @@ public class StorageManager {
* @hide
*/
@SystemApi
- @TestApi
public static boolean hasIsolatedStorage() {
// Prefer to use snapshot for current boot when available
return SystemProperties.getBoolean(PROP_ISOLATED_STORAGE_SNAPSHOT,
diff --git a/core/java/android/permission/PermissionControllerManager.java b/core/java/android/permission/PermissionControllerManager.java
index d6c95db95e85..0ba09fdab808 100644
--- a/core/java/android/permission/PermissionControllerManager.java
+++ b/core/java/android/permission/PermissionControllerManager.java
@@ -79,7 +79,6 @@ import java.util.function.Consumer;
*
* @hide
*/
-@TestApi
@SystemApi
@SystemService(Context.PERMISSION_CONTROLLER_SERVICE)
public final class PermissionControllerManager {
diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java
index 70b536d7ede0..c319e8580f76 100644
--- a/core/java/android/permission/PermissionManager.java
+++ b/core/java/android/permission/PermissionManager.java
@@ -24,7 +24,6 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.ActivityThread;
@@ -57,7 +56,6 @@ import java.util.function.Consumer;
*
* @hide
*/
-@TestApi
@SystemApi
@SystemService(Context.PERMISSION_SERVICE)
public final class PermissionManager {
@@ -115,7 +113,6 @@ public final class PermissionManager {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(anyOf = {
Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY,
@@ -136,7 +133,6 @@ public final class PermissionManager {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(anyOf = {
Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY,
diff --git a/core/java/android/permission/RuntimePermissionPresentationInfo.java b/core/java/android/permission/RuntimePermissionPresentationInfo.java
index d696feabfc30..4fce14cef3f0 100644
--- a/core/java/android/permission/RuntimePermissionPresentationInfo.java
+++ b/core/java/android/permission/RuntimePermissionPresentationInfo.java
@@ -18,7 +18,6 @@ package android.permission;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -33,7 +32,6 @@ import com.android.internal.util.Preconditions;
*
* @hide
*/
-@TestApi
@SystemApi
public final class RuntimePermissionPresentationInfo implements Parcelable {
private static final int FLAG_GRANTED = 1 << 0;
diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java
index 99ffee3e2ad9..0315b561c120 100644
--- a/core/java/android/provider/DeviceConfig.java
+++ b/core/java/android/provider/DeviceConfig.java
@@ -55,7 +55,6 @@ import java.util.concurrent.Executor;
* @hide
*/
@SystemApi
-@TestApi
public final class DeviceConfig {
/**
* The content:// style URL for the config table.
@@ -116,7 +115,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
public static final String NAMESPACE_AUTOFILL = "autofill";
/**
@@ -150,7 +148,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture";
/**
@@ -250,7 +247,7 @@ public final class DeviceConfig {
*
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final String NAMESPACE_ROLLBACK = "rollback";
/**
@@ -258,7 +255,7 @@ public final class DeviceConfig {
*
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final String NAMESPACE_ROLLBACK_BOOT = "rollback_boot";
/**
@@ -403,7 +400,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
public static final String NAMESPACE_PRIVACY = "privacy";
/**
@@ -412,7 +408,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
public static final String NAMESPACE_BIOMETRICS = "biometrics";
/**
@@ -421,7 +416,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
public static final String NAMESPACE_PERMISSIONS = "permissions";
/**
@@ -467,7 +461,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_DEVICE_CONFIG)
public static String getProperty(@NonNull String namespace, @NonNull String name) {
// Fetch all properties for the namespace at once and cache them in the local process, so we
@@ -496,7 +489,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
@NonNull
@RequiresPermission(READ_DEVICE_CONFIG)
public static Properties getProperties(@NonNull String namespace, @NonNull String ... names) {
@@ -516,7 +508,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_DEVICE_CONFIG)
public static String getString(@NonNull String namespace, @NonNull String name,
@Nullable String defaultValue) {
@@ -535,7 +526,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_DEVICE_CONFIG)
public static boolean getBoolean(@NonNull String namespace, @NonNull String name,
boolean defaultValue) {
@@ -554,7 +544,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_DEVICE_CONFIG)
public static int getInt(@NonNull String namespace, @NonNull String name, int defaultValue) {
String value = getProperty(namespace, name);
@@ -580,7 +569,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_DEVICE_CONFIG)
public static long getLong(@NonNull String namespace, @NonNull String name, long defaultValue) {
String value = getProperty(namespace, name);
@@ -606,7 +594,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_DEVICE_CONFIG)
public static float getFloat(@NonNull String namespace, @NonNull String name,
float defaultValue) {
@@ -642,7 +629,6 @@ public final class DeviceConfig {
* @see #resetToDefaults(int, String).
*/
@SystemApi
- @TestApi
@RequiresPermission(WRITE_DEVICE_CONFIG)
public static boolean setProperty(@NonNull String namespace, @NonNull String name,
@Nullable String value, boolean makeDefault) {
@@ -666,7 +652,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(WRITE_DEVICE_CONFIG)
public static boolean setProperties(@NonNull Properties properties) throws BadConfigException {
ContentResolver contentResolver = ActivityThread.currentApplication().getContentResolver();
@@ -686,7 +671,6 @@ public final class DeviceConfig {
* @see #setProperty(String, String, String, boolean)
*/
@SystemApi
- @TestApi
@RequiresPermission(WRITE_DEVICE_CONFIG)
public static void resetToDefaults(@ResetMode int resetMode, @Nullable String namespace) {
ContentResolver contentResolver = ActivityThread.currentApplication().getContentResolver();
@@ -708,7 +692,6 @@ public final class DeviceConfig {
* @see #removeOnPropertiesChangedListener(OnPropertiesChangedListener)
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_DEVICE_CONFIG)
public static void addOnPropertiesChangedListener(
@NonNull String namespace,
@@ -743,7 +726,6 @@ public final class DeviceConfig {
* @see #addOnPropertiesChangedListener(String, Executor, OnPropertiesChangedListener)
*/
@SystemApi
- @TestApi
public static void removeOnPropertiesChangedListener(
@NonNull OnPropertiesChangedListener onPropertiesChangedListener) {
Preconditions.checkNotNull(onPropertiesChangedListener);
@@ -878,7 +860,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
public interface OnPropertiesChangedListener {
/**
* Called when one or more properties have changed, providing a Properties object with all
@@ -899,7 +880,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
public static class BadConfigException extends Exception {}
/**
@@ -908,7 +888,6 @@ public final class DeviceConfig {
* @hide
*/
@SystemApi
- @TestApi
public static class Properties {
private final String mNamespace;
private final HashMap<String, String> mMap;
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index 8f69edb982cb..062d92900643 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -22,7 +22,6 @@ import static com.android.internal.util.Preconditions.checkCollectionNotEmpty;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ContentProvider;
import android.content.ContentResolver;
@@ -1304,7 +1303,6 @@ public final class DocumentsContract {
* {@hide}
*/
@SystemApi
- @TestApi
public static @NonNull Uri setManageMode(@NonNull Uri uri) {
Preconditions.checkNotNull(uri, "uri can not be null");
return uri.buildUpon().appendQueryParameter(PARAM_MANAGE, "true").build();
@@ -1316,7 +1314,6 @@ public final class DocumentsContract {
* {@hide}
*/
@SystemApi
- @TestApi
public static boolean isManageMode(@NonNull Uri uri) {
Preconditions.checkNotNull(uri, "uri can not be null");
return uri.getBooleanQueryParameter(PARAM_MANAGE, false);
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 2eee6436beae..0e3708e04dd9 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -229,7 +229,6 @@ public final class Settings {
*/
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
@SystemApi
- @TestApi
public static final String ACTION_TETHER_PROVISIONING_UI =
"android.settings.TETHER_PROVISIONING_UI";
@@ -1053,7 +1052,6 @@ public final class Settings {
*
* @hide
*/
- @TestApi
@SystemApi
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_MANAGE_APP_OVERLAY_PERMISSION =
@@ -2017,7 +2015,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS
= "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
@@ -2100,7 +2097,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_REQUEST_ENABLE_CONTENT_CAPTURE =
"android.settings.REQUEST_ENABLE_CONTENT_CAPTURE";
@@ -5580,7 +5576,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
public static void resetToDefaults(@NonNull ContentResolver resolver,
@Nullable String tag) {
@@ -6051,7 +6046,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String AUTOFILL_FEATURE_FIELD_CLASSIFICATION =
"autofill_field_classification";
@@ -6085,7 +6079,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String AUTOFILL_USER_DATA_MAX_USER_DATA_SIZE =
"autofill_user_data_max_user_data_size";
@@ -6096,7 +6089,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String AUTOFILL_USER_DATA_MAX_FIELD_CLASSIFICATION_IDS_SIZE =
"autofill_user_data_max_field_classification_size";
@@ -6107,7 +6099,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String AUTOFILL_USER_DATA_MAX_CATEGORY_COUNT =
"autofill_user_data_max_category_count";
@@ -6117,7 +6108,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String AUTOFILL_USER_DATA_MAX_VALUE_LENGTH =
"autofill_user_data_max_value_length";
@@ -6127,7 +6117,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String AUTOFILL_USER_DATA_MIN_VALUE_LENGTH =
"autofill_user_data_min_value_length";
@@ -6177,7 +6166,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String USER_SETUP_COMPLETE = "user_setup_complete";
/**
@@ -6553,7 +6541,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS =
"lock_screen_allow_private_notifications";
@@ -7841,7 +7828,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String DOZE_ALWAYS_ON = "doze_always_on";
/**
@@ -8274,7 +8260,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS =
"lock_screen_show_notifications";
@@ -8961,7 +8946,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String LOCATION_ACCESS_CHECK_INTERVAL_MILLIS =
"location_access_check_interval_millis";
@@ -8970,7 +8954,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String LOCATION_ACCESS_CHECK_DELAY_MILLIS =
"location_access_check_delay_millis";
@@ -10391,7 +10374,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String TETHER_OFFLOAD_DISABLED = "tether_offload_disabled";
/**
@@ -13369,7 +13351,6 @@ public final class Settings {
* @hide
*/
@SystemApi
- @TestApi
public static final String AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES =
"autofill_compat_mode_allowed_packages";
diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java
index 79d6bb4a062a..2c735fd9012f 100644
--- a/core/java/android/provider/Telephony.java
+++ b/core/java/android/provider/Telephony.java
@@ -4045,7 +4045,6 @@ public final class Telephony {
* @hide
*/
@SystemApi
- @TestApi
public static final class CellBroadcasts implements BaseColumns {
/**
diff --git a/core/java/android/service/appprediction/AppPredictionService.java b/core/java/android/service/appprediction/AppPredictionService.java
index be20570ef62d..2d8aee567010 100644
--- a/core/java/android/service/appprediction/AppPredictionService.java
+++ b/core/java/android/service/appprediction/AppPredictionService.java
@@ -22,7 +22,6 @@ import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.app.prediction.AppPredictionContext;
import android.app.prediction.AppPredictionSessionId;
@@ -52,7 +51,6 @@ import java.util.function.Consumer;
* @hide
*/
@SystemApi
-@TestApi
public abstract class AppPredictionService extends Service {
private static final String TAG = "AppPredictionService";
diff --git a/core/java/android/service/autofill/AutofillFieldClassificationService.java b/core/java/android/service/autofill/AutofillFieldClassificationService.java
index 28842a7fa1d7..9d9b881ebdfc 100644
--- a/core/java/android/service/autofill/AutofillFieldClassificationService.java
+++ b/core/java/android/service/autofill/AutofillFieldClassificationService.java
@@ -20,7 +20,6 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
@@ -53,7 +52,6 @@ import java.util.Map;
* {@hide}
*/
@SystemApi
-@TestApi
public abstract class AutofillFieldClassificationService extends Service {
private static final String TAG = "AutofillFieldClassificationService";
@@ -121,7 +119,6 @@ public abstract class AutofillFieldClassificationService extends Service {
/** @hide */
@SystemApi
- @TestApi
public AutofillFieldClassificationService() {
}
diff --git a/core/java/android/service/autofill/Dataset.java b/core/java/android/service/autofill/Dataset.java
index 2d99c413cc89..18d79927388b 100644
--- a/core/java/android/service/autofill/Dataset.java
+++ b/core/java/android/service/autofill/Dataset.java
@@ -21,7 +21,6 @@ import static android.view.autofill.Helper.sDebug;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.IntentSender;
import android.os.Parcel;
import android.os.Parcelable;
@@ -249,7 +248,6 @@ public final class Dataset implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public Builder(@NonNull InlinePresentation inlinePresentation) {
Preconditions.checkNotNull(inlinePresentation, "inlinePresentation must be non-null");
mInlinePresentation = inlinePresentation;
@@ -604,7 +602,6 @@ public final class Dataset implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public @NonNull Builder setFieldInlinePresentation(@NonNull AutofillId id,
@Nullable AutofillValue value, @Nullable Pattern filter,
@NonNull InlinePresentation inlinePresentation) {
diff --git a/core/java/android/service/autofill/InlineSuggestionRenderService.java b/core/java/android/service/autofill/InlineSuggestionRenderService.java
index 839caff5c3d4..cdcd65910974 100644
--- a/core/java/android/service/autofill/InlineSuggestionRenderService.java
+++ b/core/java/android/service/autofill/InlineSuggestionRenderService.java
@@ -20,7 +20,6 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.Intent;
import android.content.IntentSender;
@@ -51,7 +50,6 @@ import java.lang.ref.WeakReference;
* {@hide}
*/
@SystemApi
-@TestApi
public abstract class InlineSuggestionRenderService extends Service {
private static final String TAG = "InlineSuggestionRenderService";
diff --git a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
index 620c457024b8..b34c2dceeee8 100644
--- a/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
+++ b/core/java/android/service/autofill/augmented/AugmentedAutofillService.java
@@ -25,7 +25,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
@@ -70,7 +69,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
public abstract class AugmentedAutofillService extends Service {
private static final String TAG = AugmentedAutofillService.class.getSimpleName();
diff --git a/core/java/android/service/autofill/augmented/FillCallback.java b/core/java/android/service/autofill/augmented/FillCallback.java
index fc3baf1c9836..9fc7f34ec0ef 100644
--- a/core/java/android/service/autofill/augmented/FillCallback.java
+++ b/core/java/android/service/autofill/augmented/FillCallback.java
@@ -20,7 +20,6 @@ import static android.service.autofill.augmented.AugmentedAutofillService.sDebug
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Bundle;
import android.service.autofill.Dataset;
import android.service.autofill.augmented.AugmentedAutofillService.AutofillProxy;
@@ -34,7 +33,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
public final class FillCallback {
private static final String TAG = FillCallback.class.getSimpleName();
diff --git a/core/java/android/service/autofill/augmented/FillController.java b/core/java/android/service/autofill/augmented/FillController.java
index 7d552d62fa72..7cd674e847fd 100644
--- a/core/java/android/service/autofill/augmented/FillController.java
+++ b/core/java/android/service/autofill/augmented/FillController.java
@@ -19,7 +19,6 @@ import static android.service.autofill.augmented.AugmentedAutofillService.sDebug
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.RemoteException;
import android.service.autofill.augmented.AugmentedAutofillService.AutofillProxy;
import android.util.Log;
@@ -37,7 +36,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
public final class FillController {
private static final String TAG = FillController.class.getSimpleName();
diff --git a/core/java/android/service/autofill/augmented/FillResponse.java b/core/java/android/service/autofill/augmented/FillResponse.java
index f72eb782c407..53484cf200c4 100644
--- a/core/java/android/service/autofill/augmented/FillResponse.java
+++ b/core/java/android/service/autofill/augmented/FillResponse.java
@@ -18,7 +18,6 @@ package android.service.autofill.augmented;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Bundle;
import android.service.autofill.Dataset;
@@ -33,7 +32,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
@DataClass(
genBuilder = true,
genHiddenGetters = true)
diff --git a/core/java/android/service/autofill/augmented/FillWindow.java b/core/java/android/service/autofill/augmented/FillWindow.java
index 8e866466e8df..d4f7e114c291 100644
--- a/core/java/android/service/autofill/augmented/FillWindow.java
+++ b/core/java/android/service/autofill/augmented/FillWindow.java
@@ -23,7 +23,6 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.graphics.Rect;
import android.os.Handler;
import android.os.Looper;
@@ -64,7 +63,6 @@ import java.lang.ref.WeakReference;
* @hide
*/
@SystemApi
-@TestApi
public final class FillWindow implements AutoCloseable {
private static final String TAG = FillWindow.class.getSimpleName();
diff --git a/core/java/android/service/autofill/augmented/PresentationParams.java b/core/java/android/service/autofill/augmented/PresentationParams.java
index 8b3a001f58e6..fe78d2218266 100644
--- a/core/java/android/service/autofill/augmented/PresentationParams.java
+++ b/core/java/android/service/autofill/augmented/PresentationParams.java
@@ -18,7 +18,6 @@ package android.service.autofill.augmented;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.graphics.Rect;
import android.service.autofill.augmented.AugmentedAutofillService.AutofillProxy;
import android.view.View;
@@ -36,7 +35,6 @@ import java.io.PrintWriter;
* @hide
*/
@SystemApi
-@TestApi
public abstract class PresentationParams {
// /** @hide */
@@ -61,7 +59,6 @@ public abstract class PresentationParams {
* @hide
*/
@SystemApi
- @TestApi
public abstract static class Area {
/** @hide */
diff --git a/core/java/android/service/contentcapture/ActivityEvent.java b/core/java/android/service/contentcapture/ActivityEvent.java
index b741cff9328e..1188a3f1021e 100644
--- a/core/java/android/service/contentcapture/ActivityEvent.java
+++ b/core/java/android/service/contentcapture/ActivityEvent.java
@@ -19,7 +19,6 @@ package android.service.contentcapture;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.usage.UsageEvents.Event;
import android.content.ComponentName;
import android.os.Parcel;
@@ -34,7 +33,6 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@SystemApi
-@TestApi
public final class ActivityEvent implements Parcelable {
/**
diff --git a/core/java/android/service/contentcapture/ContentCaptureService.java b/core/java/android/service/contentcapture/ContentCaptureService.java
index 84f602820f4a..3c44cfd4c7f6 100644
--- a/core/java/android/service/contentcapture/ContentCaptureService.java
+++ b/core/java/android/service/contentcapture/ContentCaptureService.java
@@ -26,7 +26,6 @@ import android.annotation.CallSuper;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.ComponentName;
import android.content.ContentCaptureOptions;
@@ -74,7 +73,6 @@ import java.util.function.Consumer;
* @hide
*/
@SystemApi
-@TestApi
public abstract class ContentCaptureService extends Service {
private static final String TAG = ContentCaptureService.class.getSimpleName();
@@ -344,7 +342,6 @@ public abstract class ContentCaptureService extends Service {
* @hide
*/
@SystemApi
- @TestApi
public void onDataShareRequest(@NonNull DataShareRequest request,
@NonNull DataShareCallback callback) {
if (sVerbose) Log.v(TAG, "onDataShareRequest()");
diff --git a/core/java/android/service/contentcapture/DataShareCallback.java b/core/java/android/service/contentcapture/DataShareCallback.java
index 5df8a4b174bf..e3c7bb3cd24f 100644
--- a/core/java/android/service/contentcapture/DataShareCallback.java
+++ b/core/java/android/service/contentcapture/DataShareCallback.java
@@ -19,7 +19,6 @@ package android.service.contentcapture;
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import java.util.concurrent.Executor;
@@ -33,7 +32,6 @@ import java.util.concurrent.Executor;
* @hide
**/
@SystemApi
-@TestApi
public interface DataShareCallback {
/** Accept the data share.
diff --git a/core/java/android/service/contentcapture/DataShareReadAdapter.java b/core/java/android/service/contentcapture/DataShareReadAdapter.java
index 8cd9eea1e6e0..4526aba6933b 100644
--- a/core/java/android/service/contentcapture/DataShareReadAdapter.java
+++ b/core/java/android/service/contentcapture/DataShareReadAdapter.java
@@ -18,7 +18,6 @@ package android.service.contentcapture;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.ParcelFileDescriptor;
import android.view.contentcapture.ContentCaptureManager.DataShareError;
@@ -29,7 +28,6 @@ import android.view.contentcapture.ContentCaptureManager.DataShareError;
* @hide
**/
@SystemApi
-@TestApi
public interface DataShareReadAdapter {
/**
diff --git a/core/java/android/service/contentcapture/SnapshotData.java b/core/java/android/service/contentcapture/SnapshotData.java
index 5b3930ab6336..bf469b4b3ad8 100644
--- a/core/java/android/service/contentcapture/SnapshotData.java
+++ b/core/java/android/service/contentcapture/SnapshotData.java
@@ -19,7 +19,6 @@ package android.service.contentcapture;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.assist.AssistContent;
import android.app.assist.AssistStructure;
import android.os.Bundle;
@@ -32,7 +31,6 @@ import android.os.Parcelable;
* @hide
*/
@SystemApi
-@TestApi
public final class SnapshotData implements Parcelable {
private final @NonNull Bundle mAssistData;
diff --git a/core/java/android/service/notification/Adjustment.java b/core/java/android/service/notification/Adjustment.java
index 8464c6df4425..4b25c8832068 100644
--- a/core/java/android/service/notification/Adjustment.java
+++ b/core/java/android/service/notification/Adjustment.java
@@ -19,7 +19,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringDef;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Notification;
import android.os.Bundle;
import android.os.Parcel;
@@ -42,7 +41,6 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@SystemApi
-@TestApi
public final class Adjustment implements Parcelable {
private final String mPackage;
private final String mKey;
@@ -148,7 +146,6 @@ public final class Adjustment implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public Adjustment(String pkg, String key, Bundle signals, CharSequence explanation, int user) {
mPackage = pkg;
mKey = key;
@@ -232,7 +229,6 @@ public final class Adjustment implements Parcelable {
/** @hide */
@SystemApi
- @TestApi
public int getUser() {
return mUser;
}
diff --git a/core/java/android/service/notification/NotificationAssistantService.java b/core/java/android/service/notification/NotificationAssistantService.java
index 975e75ccaeeb..632014936425 100644
--- a/core/java/android/service/notification/NotificationAssistantService.java
+++ b/core/java/android/service/notification/NotificationAssistantService.java
@@ -23,7 +23,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SdkConstant;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
@@ -66,7 +65,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
public abstract class NotificationAssistantService extends NotificationListenerService {
private static final String TAG = "NotificationAssistants";
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index e1b2dfb3c3f0..25f140f29e00 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -22,7 +22,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SdkConstant;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.ActivityManager;
import android.app.INotificationManager;
import android.app.Notification;
@@ -452,7 +451,6 @@ public abstract class NotificationListenerService extends Service {
*
* @hide
*/
- @TestApi
@SystemApi
public void onNotificationRemoved(@NonNull StatusBarNotification sbn,
@NonNull RankingMap rankingMap, @NonNull NotificationStats stats, int reason) {
diff --git a/core/java/android/service/notification/NotificationStats.java b/core/java/android/service/notification/NotificationStats.java
index 2cd8b8ba42d9..206e4fa4fb11 100644
--- a/core/java/android/service/notification/NotificationStats.java
+++ b/core/java/android/service/notification/NotificationStats.java
@@ -19,7 +19,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.RemoteInput;
import android.os.Parcel;
import android.os.Parcelable;
@@ -31,7 +30,6 @@ import java.lang.annotation.RetentionPolicy;
* Information about how the user has interacted with a given notification.
* @hide
*/
-@TestApi
@SystemApi
public final class NotificationStats implements Parcelable {
diff --git a/core/java/android/service/notification/SnoozeCriterion.java b/core/java/android/service/notification/SnoozeCriterion.java
index eb624c9d85f4..d3da07a6fb80 100644
--- a/core/java/android/service/notification/SnoozeCriterion.java
+++ b/core/java/android/service/notification/SnoozeCriterion.java
@@ -17,7 +17,6 @@ package android.service.notification;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -27,7 +26,6 @@ import android.os.Parcelable;
* @hide
*/
@SystemApi
-@TestApi
public final class SnoozeCriterion implements Parcelable {
private final String mId;
private final CharSequence mExplanation;
diff --git a/core/java/android/service/textclassifier/TextClassifierService.java b/core/java/android/service/textclassifier/TextClassifierService.java
index 93faa5872a69..1fb18fab3775 100644
--- a/core/java/android/service/textclassifier/TextClassifierService.java
+++ b/core/java/android/service/textclassifier/TextClassifierService.java
@@ -22,7 +22,6 @@ import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
@@ -88,7 +87,6 @@ import java.util.concurrent.Executors;
* @hide
*/
@SystemApi
-@TestApi
public abstract class TextClassifierService extends Service {
private static final String LOG_TAG = "TextClassifierService";
diff --git a/core/java/android/service/watchdog/ExplicitHealthCheckService.java b/core/java/android/service/watchdog/ExplicitHealthCheckService.java
index b1647fe0fcf9..49e00d6f6328 100644
--- a/core/java/android/service/watchdog/ExplicitHealthCheckService.java
+++ b/core/java/android/service/watchdog/ExplicitHealthCheckService.java
@@ -66,7 +66,6 @@ import java.util.concurrent.TimeUnit;
* </pre>
* @hide
*/
-@TestApi
@SystemApi
public abstract class ExplicitHealthCheckService extends Service {
@@ -195,7 +194,6 @@ public abstract class ExplicitHealthCheckService extends Service {
*
* @hide
*/
- @TestApi
@SystemApi
public static final class PackageConfig implements Parcelable {
private static final long DEFAULT_HEALTH_CHECK_TIMEOUT_MILLIS = TimeUnit.HOURS.toMillis(1);
diff --git a/core/java/android/telephony/PhoneStateListener.java b/core/java/android/telephony/PhoneStateListener.java
index 70c11f282a2b..6a5d5c63cb4d 100644
--- a/core/java/android/telephony/PhoneStateListener.java
+++ b/core/java/android/telephony/PhoneStateListener.java
@@ -20,7 +20,6 @@ import android.Manifest;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.ChangeId;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Binder;
@@ -437,7 +436,6 @@ public class PhoneStateListener {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION)
public static final int LISTEN_OUTGOING_EMERGENCY_CALL = 0x10000000;
@@ -450,7 +448,6 @@ public class PhoneStateListener {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION)
public static final int LISTEN_OUTGOING_EMERGENCY_SMS = 0x20000000;
@@ -969,7 +966,6 @@ public class PhoneStateListener {
* @hide
*/
@SystemApi
- @TestApi
@Deprecated
public void onOutgoingEmergencyCall(@NonNull EmergencyNumber placedEmergencyNumber) {
// default implementation empty
@@ -994,7 +990,6 @@ public class PhoneStateListener {
* @hide
*/
@SystemApi
- @TestApi
public void onOutgoingEmergencyCall(@NonNull EmergencyNumber placedEmergencyNumber,
int subscriptionId) {
// Default implementation for backwards compatibility
@@ -1011,7 +1006,6 @@ public class PhoneStateListener {
* @hide
*/
@SystemApi
- @TestApi
@Deprecated
public void onOutgoingEmergencySms(@NonNull EmergencyNumber sentEmergencyNumber) {
// default implementation empty
@@ -1033,7 +1027,6 @@ public class PhoneStateListener {
* @hide
*/
@SystemApi
- @TestApi
public void onOutgoingEmergencySms(@NonNull EmergencyNumber sentEmergencyNumber,
int subscriptionId) {
// Default implementation for backwards compatibility
diff --git a/core/java/android/uwb/AngleMeasurement.java b/core/java/android/uwb/AngleMeasurement.java
new file mode 100644
index 000000000000..7ef145cfe470
--- /dev/null
+++ b/core/java/android/uwb/AngleMeasurement.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2020 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.uwb;
+
+import android.annotation.FloatRange;
+
+/**
+ * Angle measurement
+ *
+ * <p>The actual angle is interpreted as:
+ * {@link #getRadians()} +/- {@link #getErrorRadians()} ()} at {@link #getConfidenceLevel()}
+ *
+ * @hide
+ */
+public final class AngleMeasurement {
+ /**
+ * Angle measurement in radians
+ *
+ * @return angle in radians
+ */
+ @FloatRange(from = -Math.PI, to = +Math.PI)
+ public double getRadians() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Error of angle measurement in radians
+ *
+ * <p>Must be a positive value
+ *
+ * @return angle measurement error in radians
+ */
+ @FloatRange(from = 0.0, to = +Math.PI)
+ public double getErrorRadians() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Angle measurement confidence level expressed as a value between
+ * 0.0 to 1.0.
+ *
+ * <p>A value of 0.0 indicates there is no confidence in the measurement. A value of 1.0
+ * indicates there is maximum confidence in the measurement.
+ *
+ * @return the confidence level of the angle measurement
+ */
+ @FloatRange(from = 0.0, to = 1.0)
+ public double getConfidenceLevel() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/core/java/android/uwb/AngleOfArrivalMeasurement.java b/core/java/android/uwb/AngleOfArrivalMeasurement.java
new file mode 100644
index 000000000000..030d5299d53b
--- /dev/null
+++ b/core/java/android/uwb/AngleOfArrivalMeasurement.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2020 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.uwb;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+/**
+ * Represents an angle of arrival measurement between two devices using Ultra Wideband
+ *
+ * @hide
+ */
+public final class AngleOfArrivalMeasurement {
+ /**
+ * Azimuth angle measurement
+ * <p>Azimuth {@link AngleMeasurement} of remote device in horizontal coordinate system, this is
+ * the angle clockwise from the meridian when viewing above the north pole.
+ *
+ * <p>See: https://en.wikipedia.org/wiki/Horizontal_coordinate_system
+ *
+ * <p>On an Android device, azimuth north is defined as the angle perpendicular away from the
+ * back of the device when holding it in portrait mode upright.
+ *
+ * <p>Azimuth angle must be supported when Angle of Arrival is supported
+ *
+ * @return the azimuth {@link AngleMeasurement}
+ */
+ @NonNull
+ public AngleMeasurement getAzimuth() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Altitude angle measurement
+ * <p>Altitude {@link AngleMeasurement} of remote device in horizontal coordinate system, this
+ * is the angle above the equator when the north pole is up.
+ *
+ * <p>See: https://en.wikipedia.org/wiki/Horizontal_coordinate_system
+ *
+ * <p>On an Android device, altitude is defined as the angle vertical from ground when holding
+ * the device in portrait mode upright.
+ *
+ * @return altitude {@link AngleMeasurement} or null when this is not available
+ */
+ @Nullable
+ public AngleMeasurement getAltitude() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/core/java/android/uwb/DistanceMeasurement.java b/core/java/android/uwb/DistanceMeasurement.java
new file mode 100644
index 000000000000..f4e6d3ed644b
--- /dev/null
+++ b/core/java/android/uwb/DistanceMeasurement.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2020 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.uwb;
+
+import android.annotation.FloatRange;
+
+/**
+ * A data point for the distance measurement
+ *
+ * <p>The actual distance is interpreted as:
+ * {@link #getMeters()} +/- {@link #getErrorMeters()} at {@link #getConfidenceLevel()}
+ *
+ * @hide
+ */
+public final class DistanceMeasurement {
+ /**
+ * Distance measurement in meters
+ *
+ * @return distance in meters
+ */
+ public double getMeters() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Error of distance measurement in meters
+ * <p>Must be positive
+ *
+ * @return error of distance measurement in meters
+ */
+ public double getErrorMeters() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Distance measurement confidence level expressed as a value between 0.0 to 1.0.
+ *
+ * <p>A value of 0.0 indicates no confidence in the measurement. A value of 1.0 represents
+ * maximum confidence in the measurement
+ *
+ * @return confidence level
+ */
+ @FloatRange(from = 0.0, to = 1.0)
+ public double getConfidenceLevel() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/core/java/android/uwb/RangingMeasurement.java b/core/java/android/uwb/RangingMeasurement.java
new file mode 100644
index 000000000000..a249802366e0
--- /dev/null
+++ b/core/java/android/uwb/RangingMeasurement.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2020 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.uwb;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.os.SystemClock;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Representation of a ranging measurement between the local device and a remote device
+ *
+ * @hide
+ */
+public final class RangingMeasurement {
+ /**
+ * Get the remote device's {@link UwbAddress}
+ *
+ * @return the remote device's {@link UwbAddress}
+ */
+ @NonNull
+ public UwbAddress getRemoteDeviceAddress() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(value = {
+ RANGING_STATUS_SUCCESS,
+ RANGING_STATUS_FAILURE_OUT_OF_RANGE,
+ RANGING_STATUS_FAILURE_UNKNOWN_ERROR})
+ public @interface Status {}
+
+ /**
+ * Ranging attempt was successful for this device
+ */
+ public static final int RANGING_STATUS_SUCCESS = 0;
+
+ /**
+ * Ranging failed for this device because it is out of range
+ */
+ public static final int RANGING_STATUS_FAILURE_OUT_OF_RANGE = 1;
+
+ /**
+ * Ranging failed for this device because of unknown error
+ */
+ public static final int RANGING_STATUS_FAILURE_UNKNOWN_ERROR = -1;
+
+ /**
+ * Get the status of this ranging measurement
+ *
+ * <p>Possible values are
+ * {@link #RANGING_STATUS_SUCCESS},
+ * {@link #RANGING_STATUS_FAILURE_OUT_OF_RANGE},
+ * {@link #RANGING_STATUS_FAILURE_UNKNOWN_ERROR}.
+ *
+ * @return the status of the ranging measurement
+ */
+ @Status
+ public int getStatus() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Timestamp of this ranging measurement in time since boot nanos in the same namespace as
+ * {@link SystemClock#elapsedRealtimeNanos()}
+ *
+ * @return timestamp of ranging measurement in nanoseconds
+ */
+ @SuppressLint("MethodNameUnits")
+ public long getElapsedRealtimeNanos() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Get the distance measurement
+ *
+ * @return a {@link DistanceMeasurement} or null if {@link #getStatus()} !=
+ * {@link #RANGING_STATUS_SUCCESS}
+ */
+ @Nullable
+ public DistanceMeasurement getDistance() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Get the angle of arrival measurement
+ *
+ * @return an {@link AngleOfArrivalMeasurement} or null if {@link #getStatus()} !=
+ * {@link #RANGING_STATUS_SUCCESS}
+ */
+ @Nullable
+ public AngleOfArrivalMeasurement getAngleOfArrival() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/core/java/android/uwb/RangingParams.java b/core/java/android/uwb/RangingParams.java
new file mode 100644
index 000000000000..9727696f0391
--- /dev/null
+++ b/core/java/android/uwb/RangingParams.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright 2020 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.uwb;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.PersistableBundle;
+import android.util.Duration;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.List;
+
+/**
+ * An object used when requesting to open a new {@link RangingSession}.
+ * <p>Use {@link RangingParams.Builder} to create an instance of this class.
+ *
+ * @hide
+ */
+public final class RangingParams {
+ /**
+ * Standard builder interface as the class is not modifiable
+ */
+ public static class Builder {
+ // TODO implement
+ }
+
+ /**
+ * Get if the local device is the initiator
+ *
+ * @return true if the device is the initiator
+ */
+ public boolean isInitiator() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Get if the local device is the controller
+ *
+ * @return true if the device is the controller
+ */
+ public boolean isController() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * The desired amount of time between two adjacent samples of measurement
+ *
+ * @return the ranging sample period
+ */
+ @NonNull
+ public Duration getSamplingPeriod() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Local device's {@link UwbAddress}
+ *
+ * <p>Simultaneous {@link RangingSession}s on the same device can have different results for
+ * {@link #getLocalDeviceAddress()}.
+ *
+ * @return the local device's {@link UwbAddress}
+ */
+ @NonNull
+ public UwbAddress getLocalDeviceAddress() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Gets a list of all remote device's {@link UwbAddress}
+ *
+ * @return a {@link List} of {@link UwbAddress} representing the remote devices
+ */
+ @NonNull
+ public List<UwbAddress> getRemoteDeviceAddresses() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Channel number used between this device pair as defined by 802.15.4z
+ *
+ * Range: -1, 0-15
+ *
+ * @return the channel to use
+ */
+ public int getChannelNumber() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Preamble index used between this device pair as defined by 802.15.4z
+ *
+ * Range: 0, 0-32
+ *
+ * @return the preamble index to use for transmitting
+ */
+ public int getTxPreambleIndex() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * preamble index used between this device pair as defined by 802.15.4z
+ *
+ * Range: 0, 13-16, 21-32
+ *
+ * @return the preamble index to use for receiving
+ */
+ public int getRxPreambleIndex() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(value = {
+ STS_PHY_PACKET_TYPE_SP0,
+ STS_PHY_PACKET_TYPE_SP1,
+ STS_PHY_PACKET_TYPE_SP2,
+ STS_PHY_PACKET_TYPE_SP3})
+ public @interface StsPhyPacketType {}
+
+ /**
+ * PHY packet type SP0 when STS is used as defined by 802.15.4z
+ */
+ public static final int STS_PHY_PACKET_TYPE_SP0 = 0;
+
+ /**
+ * PHY packet type SP1 when STS is used as defined by 802.15.4z
+ */
+ public static final int STS_PHY_PACKET_TYPE_SP1 = 1;
+
+ /**
+ * PHY packet type SP2 when STS is used as defined by 802.15.4z
+ */
+ public static final int STS_PHY_PACKET_TYPE_SP2 = 2;
+
+ /**
+ * PHY packet type SP3 when STS is used as defined by 802.15.4z
+ */
+ public static final int STS_PHY_PACKET_TYPE_SP3 = 3;
+
+ /**
+ * Get the type of PHY packet when STS is used as defined by 802.15.4z
+ *
+ * @return the {@link StsPhyPacketType} to use
+ */
+ @StsPhyPacketType
+ public int getStsPhyPacketType() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Parameters for a specific UWB protocol constructed using a support library.
+ *
+ * <p>Android reserves the '^android.*' namespace
+ *
+ * @return a {@link PersistableBundle} of protocol specific parameters
+ */
+ public @Nullable PersistableBundle getSpecificationParameters() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/core/java/android/uwb/RangingReport.java b/core/java/android/uwb/RangingReport.java
new file mode 100644
index 000000000000..037bdfd5f224
--- /dev/null
+++ b/core/java/android/uwb/RangingReport.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2020 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.uwb;
+
+import android.annotation.NonNull;
+
+import java.util.List;
+
+/**
+ * This class contains the UWB ranging data
+ *
+ * @hide
+ */
+public final class RangingReport {
+ /**
+ * Get a {@link List} of {@link RangingMeasurement} objects in the last measurement interval
+ * <p>The underlying UWB adapter may choose to do multiple measurements in each ranging
+ * interval.
+ *
+ * <p>The entries in the {@link List} are ordered in ascending order based on
+ * {@link RangingMeasurement#getElapsedRealtimeNanos()}
+ *
+ * @return a {@link List} of {@link RangingMeasurement} objects
+ */
+ @NonNull
+ public List<RangingMeasurement> getMeasurements() {
+ throw new UnsupportedOperationException();
+ }
+}
+
diff --git a/core/java/android/view/IScrollCaptureController.aidl b/core/java/android/view/IScrollCaptureCallbacks.aidl
index 8474a00b302f..d97e3c66cc5d 100644
--- a/core/java/android/view/IScrollCaptureController.aidl
+++ b/core/java/android/view/IScrollCaptureCallbacks.aidl
@@ -20,32 +20,31 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.view.Surface;
-import android.view.IScrollCaptureClient;
+import android.view.IScrollCaptureConnection;
/**
- * Interface to a controller passed to the {@link IScrollCaptureClient} which provides the client an
- * asynchronous callback channel for responses.
+ * Asynchronous callback channel for responses to scroll capture requests.
*
* {@hide}
*/
-interface IScrollCaptureController {
+interface IScrollCaptureCallbacks {
/**
- * Scroll capture is available, and a client connect has been returned.
+ * Scroll capture is available, and a connection has been provided.
*
- * @param client interface to a ScrollCaptureCallback in the window process
+ * @param connection a connection to a window process and scrollable content
* @param scrollAreaInWindow the location of scrolling in global (window) coordinate space
*/
- oneway void onClientConnected(in IScrollCaptureClient client, in Rect scrollBounds,
+ oneway void onConnected(in IScrollCaptureConnection connection, in Rect scrollBounds,
in Point positionInWindow);
/**
- * Nothing in the window can be scrolled, scroll capture not offered.
+ * The window does not support scroll capture.
*/
- oneway void onClientUnavailable();
+ oneway void onUnavailable();
/**
- * Notifies the system that the client has confirmed the request and is ready to begin providing
- * image requests.
+ * Called when the remote end has confirmed the request and is ready to begin providing image
+ * requests.
*/
oneway void onCaptureStarted();
diff --git a/core/java/android/view/IScrollCaptureClient.aidl b/core/java/android/view/IScrollCaptureConnection.aidl
index 5f135a37dfef..63a4f48aeb20 100644
--- a/core/java/android/view/IScrollCaptureClient.aidl
+++ b/core/java/android/view/IScrollCaptureConnection.aidl
@@ -26,7 +26,7 @@ import android.view.Surface;
*
* {@hide}
*/
-interface IScrollCaptureClient {
+interface IScrollCaptureConnection {
/**
* Informs the client that it has been selected for scroll capture and should prepare to
diff --git a/core/java/android/view/IWindow.aidl b/core/java/android/view/IWindow.aidl
index 193e674dd1b0..e685b30421be 100644
--- a/core/java/android/view/IWindow.aidl
+++ b/core/java/android/view/IWindow.aidl
@@ -26,7 +26,7 @@ import android.view.DisplayCutout;
import android.view.DragEvent;
import android.view.InsetsSourceControl;
import android.view.InsetsState;
-import android.view.IScrollCaptureController;
+import android.view.IScrollCaptureCallbacks;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.window.ClientWindowFrames;
@@ -137,7 +137,7 @@ oneway interface IWindow {
/**
* Called when Scroll Capture support is requested for a window.
*
- * @param controller the controller to receive responses
+ * @param callbacks to receive responses
*/
- void requestScrollCapture(in IScrollCaptureController controller);
+ void requestScrollCapture(in IScrollCaptureCallbacks callbacks);
}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index c460f74e7460..3c5d336b840d 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -42,7 +42,7 @@ import android.view.IDisplayFoldListener;
import android.view.IDisplayWindowRotationController;
import android.view.IOnKeyguardExitResult;
import android.view.IPinnedStackListener;
-import android.view.IScrollCaptureController;
+import android.view.IScrollCaptureCallbacks;
import android.view.RemoteAnimationAdapter;
import android.view.IRotationWatcher;
import android.view.ISystemGestureExclusionListener;
@@ -751,12 +751,10 @@ interface IWindowManager
* @param behindClient token for a window, used to filter the search to windows behind it, or
* {@code null} to accept a window at any zOrder
* @param taskId specifies the id of a task the result must belong to, or -1 to ignore task ids
- * @param controller the controller to receive results, a call to either
- * {@link IScrollCaptureController#onClientConnected} or
- * {@link IScrollCaptureController#onClientUnavailable}.
+ * @param callbacks the object to receive replies
*/
void requestScrollCapture(int displayId, IBinder behindClient, int taskId,
- IScrollCaptureController controller);
+ IScrollCaptureCallbacks callbacks);
/**
* Holds the WM lock for the specified amount of milliseconds.
diff --git a/core/java/android/view/NotificationHeaderView.java b/core/java/android/view/NotificationHeaderView.java
index 8b0de0807872..546e26a85d6e 100644
--- a/core/java/android/view/NotificationHeaderView.java
+++ b/core/java/android/view/NotificationHeaderView.java
@@ -27,7 +27,6 @@ import android.graphics.Outline;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
-import android.widget.ImageView;
import android.widget.RemoteViews;
import com.android.internal.R;
@@ -344,14 +343,6 @@ public class NotificationHeaderView extends ViewGroup {
}
}
- public View getWorkProfileIcon() {
- return mProfileBadge;
- }
-
- public CachingIconView getIcon() {
- return mIcon;
- }
-
/**
* Sets the margin end for the text portion of the header, excluding right-aligned elements
* @param headerTextMarginEnd margin size
@@ -490,10 +481,6 @@ public class NotificationHeaderView extends ViewGroup {
return this;
}
- public ImageView getExpandButton() {
- return mExpandButton;
- }
-
@Override
public boolean hasOverlappingRendering() {
return false;
diff --git a/core/java/android/view/ScrollCaptureCallback.java b/core/java/android/view/ScrollCaptureCallback.java
index e1a4e7443600..d3aad2c72d27 100644
--- a/core/java/android/view/ScrollCaptureCallback.java
+++ b/core/java/android/view/ScrollCaptureCallback.java
@@ -29,8 +29,8 @@ import java.util.function.Consumer;
* callbacks registered within the window.
* <p>
* A callback is assigned to a View using {@link View#setScrollCaptureCallback}, or to the window as
- * {@link Window#addScrollCaptureCallback}. The point where the callback is registered defines the
- * frame of reference for the bounds measurements used.
+ * {@link Window#registerScrollCaptureCallback}. The point where the callback is registered defines
+ * the frame of reference for the bounds measurements used.
* <p>
* <b>Terminology</b>
* <dl>
@@ -39,9 +39,9 @@ import java.util.function.Consumer;
* is assigned directly to a window.</dd>
*
* <dt>Scroll Bounds</dt>
- * <dd>A rectangle which describes an area within the containing view where scrolling content may
- * be positioned. This may be the Containing View bounds itself, or any rectangle within.
- * Requested by {@link #onScrollCaptureSearch}.</dd>
+ * <dd>A rectangle which describes an area within the containing view where scrolling content
+ * appears. This may be the entire view or any rectangle within. This defines a frame of reference
+ * for requests as well as the width and maximum height of a single request.</dd>
*
* <dt>Scroll Delta</dt>
* <dd>The distance the scroll position has moved since capture started. Implementations are
@@ -57,7 +57,7 @@ import java.util.function.Consumer;
*
* @see View#setScrollCaptureHint(int)
* @see View#setScrollCaptureCallback(ScrollCaptureCallback)
- * @see Window#addScrollCaptureCallback(ScrollCaptureCallback)
+ * @see Window#registerScrollCaptureCallback(ScrollCaptureCallback)
*
* @hide
*/
diff --git a/core/java/android/view/ScrollCaptureClient.java b/core/java/android/view/ScrollCaptureConnection.java
index f163124f3a98..0e6cdd1dbec5 100644
--- a/core/java/android/view/ScrollCaptureClient.java
+++ b/core/java/android/view/ScrollCaptureConnection.java
@@ -19,7 +19,6 @@ package android.view;
import static java.util.Objects.requireNonNull;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.annotation.UiThread;
import android.annotation.WorkerThread;
import android.graphics.Point;
@@ -33,15 +32,15 @@ import com.android.internal.annotations.VisibleForTesting;
import java.util.concurrent.atomic.AtomicBoolean;
/**
- * A client of the system providing Scroll Capture capability on behalf of a Window.
+ * Mediator between a selected scroll capture target view and a remote process.
* <p>
* An instance is created to wrap the selected {@link ScrollCaptureCallback}.
*
* @hide
*/
-public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
+public class ScrollCaptureConnection extends IScrollCaptureConnection.Stub {
- private static final String TAG = "ScrollCaptureClient";
+ private static final String TAG = "ScrollCaptureConnection";
private static final int DEFAULT_TIMEOUT = 1000;
private final Handler mHandler;
@@ -49,7 +48,7 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
private int mTimeoutMillis = DEFAULT_TIMEOUT;
protected Surface mSurface;
- private IScrollCaptureController mController;
+ private IScrollCaptureCallbacks mCallbacks;
private final Rect mScrollBounds;
private final Point mPositionInWindow;
@@ -62,18 +61,18 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
private DelayedAction mTimeoutAction;
/**
- * Constructs a ScrollCaptureClient.
+ * Constructs a ScrollCaptureConnection.
*
* @param selectedTarget the target the client is controlling
- * @param controller the callbacks to reply to system requests
+ * @param callbacks the callbacks to reply to system requests
*
* @hide
*/
- public ScrollCaptureClient(
+ public ScrollCaptureConnection(
@NonNull ScrollCaptureTarget selectedTarget,
- @NonNull IScrollCaptureController controller) {
+ @NonNull IScrollCaptureCallbacks callbacks) {
requireNonNull(selectedTarget, "<selectedTarget> must non-null");
- requireNonNull(controller, "<controller> must non-null");
+ requireNonNull(callbacks, "<callbacks> must non-null");
final Rect scrollBounds = requireNonNull(selectedTarget.getScrollBounds(),
"target.getScrollBounds() must be non-null to construct a client");
@@ -82,7 +81,7 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
mScrollBounds = new Rect(scrollBounds);
mPositionInWindow = new Point(selectedTarget.getPositionInWindow());
- mController = controller;
+ mCallbacks = callbacks;
mCloseGuard = new CloseGuard();
mCloseGuard.open("close");
@@ -106,14 +105,13 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
mTimeoutMillis = timeoutMillis;
}
- @Nullable
@VisibleForTesting
public DelayedAction getTimeoutAction() {
return mTimeoutAction;
}
private void checkConnected() {
- if (mSelectedTarget == null || mController == null) {
+ if (mSelectedTarget == null || mCallbacks == null) {
throw new IllegalStateException("This client has been disconnected.");
}
}
@@ -124,7 +122,7 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
}
}
- @WorkerThread // IScrollCaptureClient
+ @WorkerThread // IScrollCaptureConnection
@Override
public void startCapture(Surface surface) throws RemoteException {
checkConnected();
@@ -140,7 +138,7 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
if (cancelTimeout()) {
mHandler.post(() -> {
try {
- mController.onCaptureStarted();
+ mCallbacks.onCaptureStarted();
} catch (RemoteException e) {
doShutdown();
}
@@ -153,7 +151,7 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
endCapture();
}
- @WorkerThread // IScrollCaptureClient
+ @WorkerThread // IScrollCaptureConnection
@Override
public void requestImage(Rect requestRect) {
checkConnected();
@@ -170,7 +168,7 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
if (cancelTimeout()) {
mHandler.post(() -> {
try {
- mController.onCaptureBufferSent(frameNumber, finalCapturedArea);
+ mCallbacks.onCaptureBufferSent(frameNumber, finalCapturedArea);
} catch (RemoteException e) {
doShutdown();
}
@@ -183,7 +181,7 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
endCapture();
}
- @WorkerThread // IScrollCaptureClient
+ @WorkerThread // IScrollCaptureConnection
@Override
public void endCapture() {
if (isStarted()) {
@@ -196,7 +194,7 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
}
private boolean isStarted() {
- return mController != null && mSelectedTarget != null;
+ return mCallbacks != null && mSelectedTarget != null;
}
@UiThread
@@ -214,8 +212,8 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
private void doShutdown() {
try {
- if (mController != null) {
- mController.onConnectionClosed();
+ if (mCallbacks != null) {
+ mCallbacks.onConnectionClosed();
}
} catch (RemoteException e) {
// Ignore
@@ -235,15 +233,15 @@ public class ScrollCaptureClient extends IScrollCaptureClient.Stub {
}
mSelectedTarget = null;
- mController = null;
+ mCallbacks = null;
}
/** @return a string representation of the state of this client */
public String toString() {
- return "ScrollCaptureClient{"
+ return "ScrollCaptureConnection{"
+ ", session=" + mSession
+ ", selectedTarget=" + mSelectedTarget
- + ", clientCallbacks=" + mController
+ + ", clientCallbacks=" + mCallbacks
+ "}";
}
diff --git a/core/java/android/view/ScrollCaptureSession.java b/core/java/android/view/ScrollCaptureSession.java
index 628e23fb3f5e..92617a325265 100644
--- a/core/java/android/view/ScrollCaptureSession.java
+++ b/core/java/android/view/ScrollCaptureSession.java
@@ -36,15 +36,15 @@ public class ScrollCaptureSession {
private final Point mPositionInWindow;
@Nullable
- private ScrollCaptureClient mClient;
+ private ScrollCaptureConnection mConnection;
/** @hide */
public ScrollCaptureSession(Surface surface, Rect scrollBounds, Point positionInWindow,
- ScrollCaptureClient client) {
+ ScrollCaptureConnection connection) {
mSurface = surface;
mScrollBounds = scrollBounds;
mPositionInWindow = positionInWindow;
- mClient = client;
+ mConnection = connection;
}
/**
@@ -88,8 +88,8 @@ public class ScrollCaptureSession {
* @param capturedArea the area captured, relative to scroll bounds
*/
public void notifyBufferSent(long frameNumber, @NonNull Rect capturedArea) {
- if (mClient != null) {
- mClient.onRequestImageCompleted(frameNumber, capturedArea);
+ if (mConnection != null) {
+ mConnection.onRequestImageCompleted(frameNumber, capturedArea);
}
}
@@ -97,7 +97,7 @@ public class ScrollCaptureSession {
* @hide
*/
public void disconnect() {
- mClient = null;
+ mConnection = null;
if (mSurface.isValid()) {
mSurface.release();
}
diff --git a/core/java/android/view/ScrollCaptureTargetResolver.java b/core/java/android/view/ScrollCaptureTargetResolver.java
index 71e82c511e2c..5106534694a1 100644
--- a/core/java/android/view/ScrollCaptureTargetResolver.java
+++ b/core/java/android/view/ScrollCaptureTargetResolver.java
@@ -57,7 +57,6 @@ import java.util.function.Consumer;
@UiThread
public class ScrollCaptureTargetResolver {
private static final String TAG = "ScrollCaptureTargetRes";
- private static final boolean DEBUG = true;
private final Object mLock = new Object();
@@ -86,18 +85,11 @@ public class ScrollCaptureTargetResolver {
* Binary operator which selects the best {@link ScrollCaptureTarget}.
*/
private static ScrollCaptureTarget chooseTarget(ScrollCaptureTarget a, ScrollCaptureTarget b) {
- Log.d(TAG, "chooseTarget: " + a + " or " + b);
- // Nothing plus nothing is still nothing.
if (a == null && b == null) {
- Log.d(TAG, "chooseTarget: (both null) return " + null);
return null;
- }
- // Prefer non-null.
- if (a == null || b == null) {
+ } else if (a == null || b == null) {
ScrollCaptureTarget c = (a == null) ? b : a;
- Log.d(TAG, "chooseTarget: (other is null) return " + c);
return c;
-
}
boolean emptyScrollBoundsA = nullOrEmpty(a.getScrollBounds());
@@ -155,8 +147,7 @@ public class ScrollCaptureTargetResolver {
*
* @param targets a list of {@link ScrollCaptureTarget} as collected by {@link
* View#dispatchScrollCaptureSearch}.
- * @param uiHandler the UI thread handler for the view tree
- * @see #start(long, Consumer)
+ * @see #start(Handler, long, Consumer)
*/
public ScrollCaptureTargetResolver(Queue<ScrollCaptureTarget> targets) {
mTargets = targets;
@@ -184,7 +175,6 @@ public class ScrollCaptureTargetResolver {
return mResult;
}
-
private void supplyResult(ScrollCaptureTarget target) {
checkThread();
if (mFinished) {
@@ -232,12 +222,11 @@ public class ScrollCaptureTargetResolver {
return;
}
mStarted = true;
- uiHandler.post(() -> run(timeLimitMillis, resultConsumer));
+ uiHandler.post(this::run);
}
}
-
- private void run(long timeLimitMillis, Consumer<ScrollCaptureTarget> resultConsumer) {
+ private void run() {
checkThread();
mPendingBoundsRequests = mTargets.size();
@@ -248,15 +237,11 @@ public class ScrollCaptureTargetResolver {
mHandler.postAtTime(mTimeoutRunnable, mDeadlineMillis);
}
- private final Runnable mTimeoutRunnable = new Runnable() {
- @Override
- public void run() {
- checkThread();
- supplyResult(null);
- }
+ private final Runnable mTimeoutRunnable = () -> {
+ checkThread();
+ supplyResult(null);
};
-
/**
* Adds a target to the list and requests {@link ScrollCaptureCallback#onScrollCaptureSearch}
* scrollBounds} from it. Results are returned by a call to {@link #onScrollBoundsProvided}.
@@ -274,7 +259,6 @@ public class ScrollCaptureTargetResolver {
// Queue and consume on the UI thread
((scrollBounds) -> mHandler.post(
() -> onScrollBoundsProvided(target, scrollBounds)))));
-
}
@UiThread
@@ -300,14 +284,8 @@ public class ScrollCaptureTargetResolver {
supplyResult(target);
}
- System.err.println("mPendingBoundsRequests: " + mPendingBoundsRequests);
- System.err.println("mDeadlineMillis: " + mDeadlineMillis);
- System.err.println("SystemClock.elapsedRealtime(): " + SystemClock.elapsedRealtime());
-
if (!mFinished) {
// Reschedule the timeout.
- System.err.println(
- "We think we're NOT done yet and will check back at " + mDeadlineMillis);
mHandler.postAtTime(mTimeoutRunnable, mDeadlineMillis);
}
}
@@ -334,44 +312,17 @@ public class ScrollCaptureTargetResolver {
return otherParent == view;
}
- private static int findRelation(@NonNull View a, @NonNull View b) {
- if (a == b) {
- return 0;
- }
-
- ViewParent parentA = a.getParent();
- ViewParent parentB = b.getParent();
-
- while (parentA != null || parentB != null) {
- if (parentA == parentB) {
- return 0;
- }
- if (parentA == b) {
- return 1; // A is descendant of B
- }
- if (parentB == a) {
- return -1; // B is descendant of A
- }
- if (parentA != null) {
- parentA = parentA.getParent();
- }
- if (parentB != null) {
- parentB = parentB.getParent();
- }
- }
- return 0;
- }
-
/**
* A safe wrapper for a consumer callbacks intended to accept a single value. It ensures
* that the receiver of the consumer does not retain a reference to {@code target} after use nor
* cause race conditions by invoking {@link Consumer#accept accept} more than once.
- *
- * @param target the target consumer
*/
static class SingletonConsumer<T> implements Consumer<T> {
final AtomicReference<Consumer<T>> mAtomicRef;
+ /**
+ * @param target the target consumer
+ **/
SingletonConsumer(Consumer<T> target) {
mAtomicRef = new AtomicReference<>(target);
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 80f5c0fb8257..f0203011b4f2 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -649,7 +649,7 @@ public final class ViewRootImpl implements ViewParent,
private final InsetsController mInsetsController;
private final ImeFocusController mImeFocusController;
- private ScrollCaptureClient mScrollCaptureClient;
+ private ScrollCaptureConnection mScrollCaptureConnection;
/**
* @return {@link ImeFocusController} for this instance.
@@ -659,10 +659,10 @@ public final class ViewRootImpl implements ViewParent,
return mImeFocusController;
}
- /** @return The current {@link ScrollCaptureClient} for this instance, if any is active. */
+ /** @return The current {@link ScrollCaptureConnection} for this instance, if any is active. */
@Nullable
- public ScrollCaptureClient getScrollCaptureClient() {
- return mScrollCaptureClient;
+ public ScrollCaptureConnection getScrollCaptureConnection() {
+ return mScrollCaptureConnection;
}
private final GestureExclusionTracker mGestureExclusionTracker = new GestureExclusionTracker();
@@ -5192,7 +5192,7 @@ public final class ViewRootImpl implements ViewParent,
updateLocationInParentDisplay(msg.arg1, msg.arg2);
} break;
case MSG_REQUEST_SCROLL_CAPTURE:
- handleScrollCaptureRequest((IScrollCaptureController) msg.obj);
+ handleScrollCaptureRequest((IScrollCaptureCallbacks) msg.obj);
break;
}
}
@@ -8979,10 +8979,10 @@ public final class ViewRootImpl implements ViewParent,
/**
* Dispatches a scroll capture request to the view hierarchy on the ui thread.
*
- * @param controller the controller to receive replies
+ * @param callbacks for replies
*/
- public void dispatchScrollCaptureRequest(@NonNull IScrollCaptureController controller) {
- mHandler.obtainMessage(MSG_REQUEST_SCROLL_CAPTURE, controller).sendToTarget();
+ public void dispatchScrollCaptureRequest(@NonNull IScrollCaptureCallbacks callbacks) {
+ mHandler.obtainMessage(MSG_REQUEST_SCROLL_CAPTURE, callbacks).sendToTarget();
}
/**
@@ -9007,14 +9007,14 @@ public final class ViewRootImpl implements ViewParent,
* Handles an inbound request for scroll capture from the system. If a client is not already
* active, a search will be dispatched through the view tree to locate scrolling content.
* <p>
- * Either {@link IScrollCaptureController#onClientConnected(IScrollCaptureClient, Rect,
- * Point)} or {@link IScrollCaptureController#onClientUnavailable()} will be returned
+ * Either {@link IScrollCaptureCallbacks#onClientConnected(IScrollCaptureConnection, Rect,
+ * Point)} or {@link IScrollCaptureCallbacks#onUnavailable()} will be returned
* depending on the results of the search.
*
- * @param controller the interface to the system controller
+ * @param callbacks to receive responses
* @see ScrollCaptureTargetResolver
*/
- private void handleScrollCaptureRequest(@NonNull IScrollCaptureController controller) {
+ private void handleScrollCaptureRequest(@NonNull IScrollCaptureCallbacks callbacks) {
LinkedList<ScrollCaptureTarget> targetList = new LinkedList<>();
// Window (root) level callbacks
@@ -9029,7 +9029,7 @@ public final class ViewRootImpl implements ViewParent,
// No-op path. Scroll capture not offered for this window.
if (targetList.isEmpty()) {
- dispatchScrollCaptureSearchResult(controller, null);
+ dispatchScrollCaptureSearchResult(callbacks, null);
return;
}
@@ -9037,12 +9037,12 @@ public final class ViewRootImpl implements ViewParent,
// Continues with the consumer once all responses are consumed, or the timeout expires.
ScrollCaptureTargetResolver resolver = new ScrollCaptureTargetResolver(targetList);
resolver.start(mHandler, 1000,
- (selected) -> dispatchScrollCaptureSearchResult(controller, selected));
+ (selected) -> dispatchScrollCaptureSearchResult(callbacks, selected));
}
/** Called by {@link #handleScrollCaptureRequest} when a result is returned */
private void dispatchScrollCaptureSearchResult(
- @NonNull IScrollCaptureController controller,
+ @NonNull IScrollCaptureCallbacks callbacks,
@Nullable ScrollCaptureTarget selectedTarget) {
// If timeout or no eligible targets found.
@@ -9051,31 +9051,31 @@ public final class ViewRootImpl implements ViewParent,
if (DEBUG_SCROLL_CAPTURE) {
Log.d(TAG, "scrollCaptureSearch returned no targets available.");
}
- controller.onClientUnavailable();
+ callbacks.onUnavailable();
} catch (RemoteException e) {
if (DEBUG_SCROLL_CAPTURE) {
- Log.w(TAG, "Failed to notify controller of scroll capture search result.", e);
+ Log.w(TAG, "Failed to send scroll capture search result.", e);
}
}
return;
}
// Create a client instance and return it to the caller
- mScrollCaptureClient = new ScrollCaptureClient(selectedTarget, controller);
+ mScrollCaptureConnection = new ScrollCaptureConnection(selectedTarget, callbacks);
try {
if (DEBUG_SCROLL_CAPTURE) {
- Log.d(TAG, "scrollCaptureSearch returning client: " + getScrollCaptureClient());
+ Log.d(TAG, "scrollCaptureSearch returning client: " + getScrollCaptureConnection());
}
- controller.onClientConnected(
- mScrollCaptureClient,
+ callbacks.onConnected(
+ mScrollCaptureConnection,
selectedTarget.getScrollBounds(),
selectedTarget.getPositionInWindow());
} catch (RemoteException e) {
if (DEBUG_SCROLL_CAPTURE) {
- Log.w(TAG, "Failed to notify controller of scroll capture search result.", e);
+ Log.w(TAG, "Failed to send scroll capture search result.", e);
}
- mScrollCaptureClient.disconnect();
- mScrollCaptureClient = null;
+ mScrollCaptureConnection.disconnect();
+ mScrollCaptureConnection = null;
}
}
@@ -9373,10 +9373,10 @@ public final class ViewRootImpl implements ViewParent,
}
@Override
- public void requestScrollCapture(IScrollCaptureController controller) {
+ public void requestScrollCapture(IScrollCaptureCallbacks callbacks) {
final ViewRootImpl viewAncestor = mViewAncestor.get();
if (viewAncestor != null) {
- viewAncestor.dispatchScrollCaptureRequest(controller);
+ viewAncestor.dispatchScrollCaptureRequest(callbacks);
}
}
}
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 1dbf37aca689..5331a1b8d538 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -2560,19 +2560,20 @@ public abstract class Window {
/**
* System request to begin scroll capture.
*
- * @param controller the controller to receive responses
+ * @param callbacks to receive responses
* @hide
*/
- public void requestScrollCapture(IScrollCaptureController controller) {
+ public void requestScrollCapture(IScrollCaptureCallbacks callbacks) {
}
/**
- * Registers a {@link ScrollCaptureCallback} with the root of this window.
+ * Used to provide scroll capture support for an arbitrary window. This registeres the given
+ * callback with the root view of the window.
*
* @param callback the callback to add
* @hide
*/
- public void addScrollCaptureCallback(@NonNull ScrollCaptureCallback callback) {
+ public void registerScrollCaptureCallback(@NonNull ScrollCaptureCallback callback) {
}
/**
@@ -2581,7 +2582,7 @@ public abstract class Window {
* @param callback the callback to remove
* @hide
*/
- public void removeScrollCaptureCallback(@NonNull ScrollCaptureCallback callback) {
+ public void unregisterScrollCaptureCallback(@NonNull ScrollCaptureCallback callback) {
}
/** @hide */
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index e96e98b437a1..964ea3488710 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -224,12 +224,6 @@ public interface WindowManager extends ViewManager {
int TRANSIT_ACTIVITY_RELAUNCH = 18;
/**
- * A task is being docked from recents.
- * @hide
- */
- int TRANSIT_DOCK_TASK_FROM_RECENTS = 19;
-
- /**
* Keyguard is going away.
* @hide
*/
@@ -302,7 +296,6 @@ public interface WindowManager extends ViewManager {
TRANSIT_WALLPAPER_INTRA_CLOSE,
TRANSIT_TASK_OPEN_BEHIND,
TRANSIT_ACTIVITY_RELAUNCH,
- TRANSIT_DOCK_TASK_FROM_RECENTS,
TRANSIT_KEYGUARD_GOING_AWAY,
TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER,
TRANSIT_KEYGUARD_OCCLUDE,
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index aed9b89747d0..a9e8d5498a57 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -1249,7 +1249,6 @@ public final class AccessibilityManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY)
public void performAccessibilityShortcut() {
performAccessibilityShortcut(null);
@@ -1294,7 +1293,6 @@ public final class AccessibilityManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY)
public void registerSystemAction(@NonNull RemoteAction action, int actionId) {
final IAccessibilityManager service;
@@ -1322,7 +1320,6 @@ public final class AccessibilityManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY)
public void unregisterSystemAction(int actionId) {
final IAccessibilityManager service;
diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java
index 9ba886aba81a..fb66b5298839 100644
--- a/core/java/android/view/autofill/AutofillManager.java
+++ b/core/java/android/view/autofill/AutofillManager.java
@@ -2076,7 +2076,6 @@ public final class AutofillManager {
* @hide
*/
@SystemApi
- @TestApi
public void setAugmentedAutofillWhitelist(@Nullable Set<String> packages,
@Nullable Set<ComponentName> activities) {
if (!hasAutofillFeature()) {
diff --git a/core/java/android/view/contentcapture/ContentCaptureContext.java b/core/java/android/view/contentcapture/ContentCaptureContext.java
index b84cb88ccd84..9bf3626fe868 100644
--- a/core/java/android/view/contentcapture/ContentCaptureContext.java
+++ b/core/java/android/view/contentcapture/ContentCaptureContext.java
@@ -21,7 +21,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.TaskInfo;
import android.content.ComponentName;
import android.content.Context;
@@ -58,7 +57,6 @@ public final class ContentCaptureContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_DISABLED_BY_APP = 0x1;
/**
@@ -69,7 +67,6 @@ public final class ContentCaptureContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_DISABLED_BY_FLAG_SECURE = 0x2;
/**
@@ -79,7 +76,6 @@ public final class ContentCaptureContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final int FLAG_RECONNECTED = 0x4;
/** @hide */
@@ -173,7 +169,6 @@ public final class ContentCaptureContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public int getTaskId() {
return mTaskId;
}
@@ -184,7 +179,6 @@ public final class ContentCaptureContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public @Nullable ComponentName getActivityComponent() {
return mComponentName;
}
@@ -197,7 +191,6 @@ public final class ContentCaptureContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public @Nullable ContentCaptureSessionId getParentSessionId() {
return mParentSessionId == NO_SESSION_ID ? null
: new ContentCaptureSessionId(mParentSessionId);
@@ -215,7 +208,6 @@ public final class ContentCaptureContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public int getDisplayId() {
return mDisplayId;
}
@@ -229,7 +221,6 @@ public final class ContentCaptureContext implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public @ContextCreationFlags int getFlags() {
return mFlags;
}
diff --git a/core/java/android/view/contentcapture/ContentCaptureEvent.java b/core/java/android/view/contentcapture/ContentCaptureEvent.java
index f49b1beee8ad..2b12230510bf 100644
--- a/core/java/android/view/contentcapture/ContentCaptureEvent.java
+++ b/core/java/android/view/contentcapture/ContentCaptureEvent.java
@@ -22,7 +22,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.graphics.Insets;
import android.os.Parcel;
import android.os.Parcelable;
@@ -39,7 +38,6 @@ import java.util.List;
/** @hide */
@SystemApi
-@TestApi
public final class ContentCaptureEvent implements Parcelable {
private static final String TAG = ContentCaptureEvent.class.getSimpleName();
diff --git a/core/java/android/view/contentcapture/ContentCaptureManager.java b/core/java/android/view/contentcapture/ContentCaptureManager.java
index 029552d4902e..10f6c610d5d3 100644
--- a/core/java/android/view/contentcapture/ContentCaptureManager.java
+++ b/core/java/android/view/contentcapture/ContentCaptureManager.java
@@ -644,7 +644,6 @@ public final class ContentCaptureManager {
* @hide
*/
@SystemApi
- @TestApi
public boolean isContentCaptureFeatureEnabled() {
final SyncResultReceiver resultReceiver = syncRun(
(r) -> mService.isContentCaptureFeatureEnabled(r));
diff --git a/core/java/android/view/contentcapture/ViewNode.java b/core/java/android/view/contentcapture/ViewNode.java
index e035c620d1fd..e731d4b76fb9 100644
--- a/core/java/android/view/contentcapture/ViewNode.java
+++ b/core/java/android/view/contentcapture/ViewNode.java
@@ -42,7 +42,6 @@ import com.android.internal.util.Preconditions;
// instead
/** @hide */
@SystemApi
-@TestApi
public final class ViewNode extends AssistStructure.ViewNode {
private static final String TAG = ViewNode.class.getSimpleName();
diff --git a/core/java/android/window/ITaskOrganizerController.aidl b/core/java/android/window/ITaskOrganizerController.aidl
index 3a84c1f98ce6..b5a11b1a8136 100644
--- a/core/java/android/window/ITaskOrganizerController.aidl
+++ b/core/java/android/window/ITaskOrganizerController.aidl
@@ -39,8 +39,12 @@ interface ITaskOrganizerController {
*/
void unregisterTaskOrganizer(ITaskOrganizer organizer);
- /** Creates a persistent root task in WM for a particular windowing-mode. */
- ActivityManager.RunningTaskInfo createRootTask(int displayId, int windowingMode);
+ /**
+ * Creates a persistent root task in WM for a particular windowing-mode.
+ * {@link TaskOrganizer#onTaskAppeared} won't be called since we are returning
+ * {@link TaskAppearedInfo} here.
+ */
+ TaskAppearedInfo createRootTask(int displayId, int windowingMode);
/** Deletes a persistent root task in WM */
boolean deleteRootTask(in WindowContainerToken task);
diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java
index 909bb47bf1a5..5c86e1c124f7 100644
--- a/core/java/android/window/TaskOrganizer.java
+++ b/core/java/android/window/TaskOrganizer.java
@@ -99,7 +99,7 @@ public class TaskOrganizer extends WindowOrganizer {
/** Creates a persistent root task in WM for a particular windowing-mode. */
@RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS)
@Nullable
- public ActivityManager.RunningTaskInfo createRootTask(int displayId, int windowingMode) {
+ public TaskAppearedInfo createRootTask(int displayId, int windowingMode) {
try {
return mTaskOrganizerController.createRootTask(displayId, windowingMode);
} catch (RemoteException e) {
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 50eed27976ad..e848da9b8ee3 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -77,7 +77,7 @@ import android.util.TypedValue;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.IRotationWatcher.Stub;
-import android.view.IScrollCaptureController;
+import android.view.IScrollCaptureCallbacks;
import android.view.IWindowManager;
import android.view.InputDevice;
import android.view.InputEvent;
@@ -1511,11 +1511,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
if (drawable != mBackgroundDrawable) {
mBackgroundDrawable = drawable;
if (mDecor != null) {
+ mDecor.startChanging();
mDecor.setWindowBackground(drawable);
if (mBackgroundFallbackDrawable != null) {
mDecor.setBackgroundFallback(drawable != null ? null :
mBackgroundFallbackDrawable);
}
+ mDecor.finishChanging();
}
}
}
@@ -3910,12 +3912,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
/**
* System request to begin scroll capture.
*
- * @param controller the controller to receive responses
+ * @param callbacks to receive responses
* @hide
*/
@Override
- public void requestScrollCapture(IScrollCaptureController controller) {
- getViewRootImpl().dispatchScrollCaptureRequest(controller);
+ public void requestScrollCapture(IScrollCaptureCallbacks callbacks) {
+ getViewRootImpl().dispatchScrollCaptureRequest(callbacks);
}
/**
@@ -3924,7 +3926,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
* @param callback the callback to add
*/
@Override
- public void addScrollCaptureCallback(@NonNull ScrollCaptureCallback callback) {
+ public void registerScrollCaptureCallback(@NonNull ScrollCaptureCallback callback) {
getViewRootImpl().addScrollCaptureCallback(callback);
}
@@ -3934,7 +3936,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
* @param callback the callback to remove
*/
@Override
- public void removeScrollCaptureCallback(@NonNull ScrollCaptureCallback callback) {
+ public void unregisterScrollCaptureCallback(@NonNull ScrollCaptureCallback callback) {
getViewRootImpl().removeScrollCaptureCallback(callback);
}
diff --git a/core/java/com/android/internal/view/BaseIWindow.java b/core/java/com/android/internal/view/BaseIWindow.java
index fff9ac9e49b7..8962dc3d59da 100644
--- a/core/java/com/android/internal/view/BaseIWindow.java
+++ b/core/java/com/android/internal/view/BaseIWindow.java
@@ -24,7 +24,7 @@ import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.util.MergedConfiguration;
import android.view.DragEvent;
-import android.view.IScrollCaptureController;
+import android.view.IScrollCaptureCallbacks;
import android.view.IWindow;
import android.view.IWindowSession;
import android.view.InsetsSourceControl;
@@ -162,9 +162,9 @@ public class BaseIWindow extends IWindow.Stub {
}
@Override
- public void requestScrollCapture(IScrollCaptureController controller) {
+ public void requestScrollCapture(IScrollCaptureCallbacks callbacks) {
try {
- controller.onClientUnavailable();
+ callbacks.onUnavailable();
} catch (RemoteException ex) {
// ignore
}
diff --git a/core/jni/android_graphics_BLASTBufferQueue.cpp b/core/jni/android_graphics_BLASTBufferQueue.cpp
index b07c29307339..0fc0451c6d4b 100644
--- a/core/jni/android_graphics_BLASTBufferQueue.cpp
+++ b/core/jni/android_graphics_BLASTBufferQueue.cpp
@@ -55,7 +55,7 @@ static void nativeDestroy(JNIEnv* env, jclass clazz, jlong ptr) {
static jobject nativeGetSurface(JNIEnv* env, jclass clazz, jlong ptr) {
sp<BLASTBufferQueue> queue = reinterpret_cast<BLASTBufferQueue*>(ptr);
- return android_view_Surface_createFromIGraphicBufferProducer(env, queue->getIGraphicBufferProducer());
+ return android_view_Surface_createFromSurface(env, queue->getSurface());
}
static void nativeSetNextTransaction(JNIEnv* env, jclass clazz, jlong ptr, jlong transactionPtr) {
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index 6a07cf7bbf40..5c87f1973bed 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -313,7 +313,7 @@ static jlong nativeGetFromBlastBufferQueue(JNIEnv* env, jclass clazz, jlong nati
return nativeObject;
}
- sp<Surface> surface(new Surface(bufferProducer, true));
+ sp<Surface> surface = queue->getSurface();
if (surface != NULL) {
surface->incStrong(&sRefBaseOwner);
}
diff --git a/core/proto/android/telephony/enums.proto b/core/proto/android/telephony/enums.proto
index e7fdde6473b5..d2c02769aa78 100644
--- a/core/proto/android/telephony/enums.proto
+++ b/core/proto/android/telephony/enums.proto
@@ -91,6 +91,14 @@ enum NetworkTypeEnum {
NETWORK_TYPE_NR = 20;
}
+// Roaming type enums, see android.telephony.ServiceState.RoamingType for definitions.
+enum RoamingTypeEnum {
+ ROAMING_TYPE_NOT_ROAMING = 0;
+ ROAMING_TYPE_ROAMING = 1;
+ ROAMING_TYPE_ROAMING_DOMESTIC = 2;
+ ROAMING_TYPE_ROAMING_INTERNATIONAL = 3;
+}
+
// Signal strength levels, primarily used by android/telephony/SignalStrength.java.
enum SignalStrengthEnum {
SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
diff --git a/core/proto/android/view/enums.proto b/core/proto/android/view/enums.proto
index 0172e7899a18..a601abee17f6 100644
--- a/core/proto/android/view/enums.proto
+++ b/core/proto/android/view/enums.proto
@@ -60,7 +60,7 @@ enum TransitionTypeEnum {
TRANSIT_TASK_OPEN_BEHIND = 16;
TRANSIT_TASK_IN_PLACE = 17;
TRANSIT_ACTIVITY_RELAUNCH = 18;
- TRANSIT_DOCK_TASK_FROM_RECENTS = 19;
+ TRANSIT_DOCK_TASK_FROM_RECENTS = 19 [deprecated=true];
TRANSIT_KEYGUARD_GOING_AWAY = 20;
TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER = 21;
TRANSIT_KEYGUARD_OCCLUDE = 22;
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 64de32c9ad09..b74f96de33b1 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -3748,6 +3748,7 @@
<flag name="flagServiceHandlesDoubleTap" value="0x00000800" />
<!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_MULTI_FINGER_GESTURES}. -->
<flag name="flagRequestMultiFingerGestures" value="0x00001000" />
+ <flag name="flagSendMotionEvents" value="0x0004000" />
</attr>
<!-- Component name of an activity that allows the user to modify
the settings for this service. This setting cannot be changed at runtime. -->
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 645bae728c02..c2120de74d01 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -4494,8 +4494,9 @@
shown in the warning dialog about the accessibility shortcut. -->
<string name="color_correction_feature_name">Color Correction</string>
+ <!-- TODO(b/170970602): remove translatable=false when RBC has official name and strings -->
<!-- Title of Reduce Bright Colors feature, shown in the warning dialog about the accessibility shortcut. [CHAR LIMIT=none] -->
- <string name="reduce_bright_colors_feature_name">Reduce Bright Colors</string>
+ <string name="reduce_bright_colors_feature_name" translatable="false">Reduce Bright Colors</string>
<!-- Text in toast to alert the user that the accessibility shortcut turned on an accessibility service. [CHAR LIMIT=none] -->
<string name="accessibility_shortcut_enabling_service">Held volume keys. <xliff:g id="service_name" example="TalkBack">%1$s</xliff:g> turned on.</string>
diff --git a/core/tests/coretests/src/android/view/ScrollCaptureClientTest.java b/core/tests/coretests/src/android/view/ScrollCaptureConnectionTest.java
index e6ac2d6c43da..b9cf1e4a234c 100644
--- a/core/tests/coretests/src/android/view/ScrollCaptureClientTest.java
+++ b/core/tests/coretests/src/android/view/ScrollCaptureConnectionTest.java
@@ -47,11 +47,11 @@ import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer;
/**
- * Tests of {@link ScrollCaptureClient}.
+ * Tests of {@link ScrollCaptureConnection}.
*/
@SuppressWarnings("UnnecessaryLocalVariable")
@RunWith(AndroidJUnit4.class)
-public class ScrollCaptureClientTest {
+public class ScrollCaptureConnectionTest {
private final Point mPositionInWindow = new Point(1, 2);
private final Rect mLocalVisibleRect = new Rect(2, 3, 4, 5);
@@ -63,7 +63,7 @@ public class ScrollCaptureClientTest {
@Mock
private Surface mSurface;
@Mock
- private IScrollCaptureController mClientCallbacks;
+ private IScrollCaptureCallbacks mConnectionCallbacks;
@Mock
private View mMockView1;
@Mock
@@ -86,8 +86,8 @@ public class ScrollCaptureClientTest {
@Test
public void testDelayedAction() {
Runnable action = Mockito.mock(Runnable.class);
- ScrollCaptureClient.DelayedAction delayed =
- new ScrollCaptureClient.DelayedAction(mHandler, 100, action);
+ ScrollCaptureConnection.DelayedAction delayed =
+ new ScrollCaptureConnection.DelayedAction(mHandler, 100, action);
try {
Thread.sleep(200);
} catch (InterruptedException ex) {
@@ -103,8 +103,8 @@ public class ScrollCaptureClientTest {
@Test
public void testDelayedAction_cancel() {
Runnable action = Mockito.mock(Runnable.class);
- ScrollCaptureClient.DelayedAction delayed =
- new ScrollCaptureClient.DelayedAction(mHandler, 100, action);
+ ScrollCaptureConnection.DelayedAction delayed =
+ new ScrollCaptureConnection.DelayedAction(mHandler, 100, action);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
@@ -125,8 +125,8 @@ public class ScrollCaptureClientTest {
@Test
public void testDelayedAction_timeoutNow() {
Runnable action = Mockito.mock(Runnable.class);
- ScrollCaptureClient.DelayedAction delayed =
- new ScrollCaptureClient.DelayedAction(mHandler, 100, action);
+ ScrollCaptureConnection.DelayedAction delayed =
+ new ScrollCaptureConnection.DelayedAction(mHandler, 100, action);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
@@ -141,7 +141,7 @@ public class ScrollCaptureClientTest {
/** Test creating a client with valid info */
@Test
public void testConstruction() {
- new ScrollCaptureClient(mTarget1, mClientCallbacks);
+ new ScrollCaptureConnection(mTarget1, mConnectionCallbacks);
}
/** Test creating a client fails if arguments are not valid. */
@@ -149,7 +149,7 @@ public class ScrollCaptureClientTest {
public void testConstruction_requiresScrollBounds() {
try {
mTarget1.setScrollBounds(null);
- new ScrollCaptureClient(mTarget1, mClientCallbacks);
+ new ScrollCaptureConnection(mTarget1, mConnectionCallbacks);
fail("An exception was expected.");
} catch (RuntimeException ex) {
// Ignore, expected.
@@ -174,48 +174,51 @@ public class ScrollCaptureClientTest {
};
}
- /** @see ScrollCaptureClient#startCapture(Surface) */
+ /** @see ScrollCaptureConnection#startCapture(Surface) */
@Test
public void testStartCapture() throws Exception {
- final ScrollCaptureClient client = new ScrollCaptureClient(mTarget1, mClientCallbacks);
+ final ScrollCaptureConnection connection = new ScrollCaptureConnection(mTarget1,
+ mConnectionCallbacks);
// Have the session start accepted immediately
doAnswer(runRunnable(1)).when(mCallback1)
.onScrollCaptureStart(any(ScrollCaptureSession.class), any(Runnable.class));
- client.startCapture(mSurface);
+ connection.startCapture(mSurface);
getInstrumentation().waitForIdleSync();
verify(mCallback1, times(1))
.onScrollCaptureStart(any(ScrollCaptureSession.class), any(Runnable.class));
- verify(mClientCallbacks, times(1)).onCaptureStarted();
- verifyNoMoreInteractions(mClientCallbacks);
+ verify(mConnectionCallbacks, times(1)).onCaptureStarted();
+ verifyNoMoreInteractions(mConnectionCallbacks);
}
@Test
public void testStartCaptureTimeout() throws Exception {
- final ScrollCaptureClient client = new ScrollCaptureClient(mTarget1, mClientCallbacks);
- client.startCapture(mSurface);
+ final ScrollCaptureConnection connection = new ScrollCaptureConnection(mTarget1,
+ mConnectionCallbacks);
+ connection.startCapture(mSurface);
// Force timeout to fire
- client.getTimeoutAction().timeoutNow();
+ connection.getTimeoutAction().timeoutNow();
getInstrumentation().waitForIdleSync();
verify(mCallback1, times(1)).onScrollCaptureEnd(any(Runnable.class));
}
- private void startClient(ScrollCaptureClient client) throws Exception {
+ private void startCapture(ScrollCaptureConnection connection) throws Exception {
doAnswer(runRunnable(1)).when(mCallback1)
.onScrollCaptureStart(any(ScrollCaptureSession.class), any(Runnable.class));
- client.startCapture(mSurface);
+ connection.startCapture(mSurface);
getInstrumentation().waitForIdleSync();
- reset(mCallback1, mClientCallbacks);
+ reset(mCallback1, mConnectionCallbacks);
}
- /** @see ScrollCaptureClient#requestImage(Rect) */
+ /** @see ScrollCaptureConnection#requestImage(Rect) */
@Test
public void testRequestImage() throws Exception {
- final ScrollCaptureClient client = new ScrollCaptureClient(mTarget1, mClientCallbacks);
- startClient(client);
+ final ScrollCaptureConnection connection = new ScrollCaptureConnection(mTarget1,
+ mConnectionCallbacks);
+ startCapture(connection);
// Stub the callback to complete the request immediately
doAnswer(reportBufferSent(/* sessionArg */ 0, /* frameNum */ 1L, new Rect(1, 2, 3, 4)))
@@ -223,7 +226,7 @@ public class ScrollCaptureClientTest {
.onScrollCaptureImageRequest(any(ScrollCaptureSession.class), any(Rect.class));
// Make the inbound binder call
- client.requestImage(new Rect(1, 2, 3, 4));
+ connection.requestImage(new Rect(1, 2, 3, 4));
// Wait for handler thread dispatch
getInstrumentation().waitForIdleSync();
@@ -232,18 +235,20 @@ public class ScrollCaptureClientTest {
// Wait for binder thread dispatch
getInstrumentation().waitForIdleSync();
- verify(mClientCallbacks, times(1)).onCaptureBufferSent(eq(1L), eq(new Rect(1, 2, 3, 4)));
+ verify(mConnectionCallbacks, times(1))
+ .onCaptureBufferSent(eq(1L), eq(new Rect(1, 2, 3, 4)));
- verifyNoMoreInteractions(mCallback1, mClientCallbacks);
+ verifyNoMoreInteractions(mCallback1, mConnectionCallbacks);
}
@Test
public void testRequestImageTimeout() throws Exception {
- final ScrollCaptureClient client = new ScrollCaptureClient(mTarget1, mClientCallbacks);
- startClient(client);
+ final ScrollCaptureConnection connection = new ScrollCaptureConnection(mTarget1,
+ mConnectionCallbacks);
+ startCapture(connection);
// Make the inbound binder call
- client.requestImage(new Rect(1, 2, 3, 4));
+ connection.requestImage(new Rect(1, 2, 3, 4));
// Wait for handler thread dispatch
getInstrumentation().waitForIdleSync();
@@ -251,20 +256,21 @@ public class ScrollCaptureClientTest {
any(ScrollCaptureSession.class), eq(new Rect(1, 2, 3, 4)));
// Force timeout to fire
- client.getTimeoutAction().timeoutNow();
+ connection.getTimeoutAction().timeoutNow();
getInstrumentation().waitForIdleSync();
// (callback not stubbed, does nothing)
// Timeout triggers request to end capture
verify(mCallback1, times(1)).onScrollCaptureEnd(any(Runnable.class));
- verifyNoMoreInteractions(mCallback1, mClientCallbacks);
+ verifyNoMoreInteractions(mCallback1, mConnectionCallbacks);
}
- /** @see ScrollCaptureClient#endCapture() */
+ /** @see ScrollCaptureConnection#endCapture() */
@Test
public void testEndCapture() throws Exception {
- final ScrollCaptureClient client = new ScrollCaptureClient(mTarget1, mClientCallbacks);
- startClient(client);
+ final ScrollCaptureConnection connection = new ScrollCaptureConnection(mTarget1,
+ mConnectionCallbacks);
+ startCapture(connection);
// Stub the callback to complete the request immediately
doAnswer(runRunnable(0))
@@ -272,7 +278,7 @@ public class ScrollCaptureClientTest {
.onScrollCaptureEnd(any(Runnable.class));
// Make the inbound binder call
- client.endCapture();
+ connection.endCapture();
// Wait for handler thread dispatch
getInstrumentation().waitForIdleSync();
@@ -280,30 +286,31 @@ public class ScrollCaptureClientTest {
// Wait for binder thread dispatch
getInstrumentation().waitForIdleSync();
- verify(mClientCallbacks, times(1)).onConnectionClosed();
+ verify(mConnectionCallbacks, times(1)).onConnectionClosed();
- verifyNoMoreInteractions(mCallback1, mClientCallbacks);
+ verifyNoMoreInteractions(mCallback1, mConnectionCallbacks);
}
@Test
public void testEndCaptureTimeout() throws Exception {
- final ScrollCaptureClient client = new ScrollCaptureClient(mTarget1, mClientCallbacks);
- startClient(client);
+ final ScrollCaptureConnection connection = new ScrollCaptureConnection(mTarget1,
+ mConnectionCallbacks);
+ startCapture(connection);
// Make the inbound binder call
- client.endCapture();
+ connection.endCapture();
// Wait for handler thread dispatch
getInstrumentation().waitForIdleSync();
verify(mCallback1, times(1)).onScrollCaptureEnd(any(Runnable.class));
// Force timeout to fire
- client.getTimeoutAction().timeoutNow();
+ connection.getTimeoutAction().timeoutNow();
// Wait for binder thread dispatch
getInstrumentation().waitForIdleSync();
- verify(mClientCallbacks, times(1)).onConnectionClosed();
+ verify(mConnectionCallbacks, times(1)).onConnectionClosed();
- verifyNoMoreInteractions(mCallback1, mClientCallbacks);
+ verifyNoMoreInteractions(mCallback1, mConnectionCallbacks);
}
}
diff --git a/keystore/java/android/security/keystore/AttestationUtils.java b/keystore/java/android/security/keystore/AttestationUtils.java
index c8d4be319bab..f48da74eb397 100644
--- a/keystore/java/android/security/keystore/AttestationUtils.java
+++ b/keystore/java/android/security/keystore/AttestationUtils.java
@@ -20,7 +20,6 @@ import android.Manifest;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.Context;
import android.os.Build;
import android.security.KeyStore;
@@ -44,7 +43,6 @@ import java.util.Set;
* @hide
*/
@SystemApi
-@TestApi
public abstract class AttestationUtils {
private AttestationUtils() {
}
diff --git a/keystore/java/android/security/keystore/DeviceIdAttestationException.java b/keystore/java/android/security/keystore/DeviceIdAttestationException.java
index 8ba0317845d0..4f9f9e633a98 100644
--- a/keystore/java/android/security/keystore/DeviceIdAttestationException.java
+++ b/keystore/java/android/security/keystore/DeviceIdAttestationException.java
@@ -18,7 +18,6 @@ package android.security.keystore;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
/**
* Thrown when {@link AttestationUtils} is unable to attest the given device ids.
@@ -26,7 +25,6 @@ import android.annotation.TestApi;
* @hide
*/
@SystemApi
-@TestApi
public class DeviceIdAttestationException extends Exception {
/**
* Constructs a new {@code DeviceIdAttestationException} with the current stack trace and the
diff --git a/libs/WindowManager/Shell/res/raw/wm_shell_protolog.json b/libs/WindowManager/Shell/res/raw/wm_shell_protolog.json
index 3f6ca0fc5246..02bf38504725 100644
--- a/libs/WindowManager/Shell/res/raw/wm_shell_protolog.json
+++ b/libs/WindowManager/Shell/res/raw/wm_shell_protolog.json
@@ -31,6 +31,12 @@
"group": "WM_SHELL_TASK_ORG",
"at": "com\/android\/wm\/shell\/ShellTaskOrganizer.java"
},
+ "-1312360667": {
+ "message": "createRootTask() displayId=%d winMode=%d listener=%s",
+ "level": "VERBOSE",
+ "group": "WM_SHELL_TASK_ORG",
+ "at": "com\/android\/wm\/shell\/ShellTaskOrganizer.java"
+ },
"-880817403": {
"message": "Task vanished taskId=%d",
"level": "VERBOSE",
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
index 9f3c83c09507..8bd7193843f7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
@@ -128,11 +128,24 @@ public class ShellTaskOrganizer extends TaskOrganizer {
final TaskAppearedInfo info = taskInfos.get(i);
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, "Existing task: id=%d component=%s",
info.getTaskInfo().taskId, info.getTaskInfo().baseIntent);
- onTaskAppeared(info.getTaskInfo(), info.getLeash());
+ onTaskAppeared(info);
}
return taskInfos;
}
+ public TaskAppearedInfo createRootTask(
+ int displayId, int windowingMode, TaskListener listener) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG,
+ "createRootTask() displayId=%d winMode=%d listener=%s",
+ displayId, windowingMode, listener.toString());
+ final TaskAppearedInfo info = super.createRootTask(displayId, windowingMode);
+
+ // Add the listener and send the task appeared signal
+ mTaskListeners.put(info.getTaskInfo().taskId, listener);
+ onTaskAppeared(info);
+ return info;
+ }
+
/**
* Adds a listener for a specific task id.
*/
@@ -216,12 +229,17 @@ public class ShellTaskOrganizer extends TaskOrganizer {
@Override
public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) {
- ProtoLog.v(WM_SHELL_TASK_ORG, "Task appeared taskId=%d", taskInfo.taskId);
- mTasks.put(taskInfo.taskId, new TaskAppearedInfo(taskInfo, leash));
+ onTaskAppeared(new TaskAppearedInfo(taskInfo, leash));
+ }
+
+ private void onTaskAppeared(TaskAppearedInfo info) {
+ final int taskId = info.getTaskInfo().taskId;
+ ProtoLog.v(WM_SHELL_TASK_ORG, "Task appeared taskId=%d", taskId);
+ mTasks.put(taskId, info);
final TaskListener listener =
- getTaskListener(taskInfo, true /*removeLaunchCookieIfNeeded*/);
+ getTaskListener(info.getTaskInfo(), true /*removeLaunchCookieIfNeeded*/);
if (listener != null) {
- listener.onTaskAppeared(taskInfo, leash);
+ listener.onTaskAppeared(info.getTaskInfo(), info.getLeash());
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java
index 17fd16bccc4a..eaf5d7960aa9 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java
@@ -32,7 +32,7 @@ import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;
import android.view.DragEvent;
-import android.view.IScrollCaptureController;
+import android.view.IScrollCaptureCallbacks;
import android.view.IWindow;
import android.view.IWindowManager;
import android.view.IWindowSession;
@@ -373,9 +373,9 @@ public class SystemWindows {
public void dispatchPointerCaptureChanged(boolean hasCapture) {}
@Override
- public void requestScrollCapture(IScrollCaptureController controller) {
+ public void requestScrollCapture(IScrollCaptureCallbacks callbacks) {
try {
- controller.onClientUnavailable();
+ callbacks.onUnavailable();
} catch (RemoteException ex) {
// ignore
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsHandler.java
index 2ab087cf245d..6d6cc204538a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsHandler.java
@@ -119,6 +119,13 @@ public class PipBoundsHandler {
}
/**
+ * Get the current saved display info.
+ */
+ public DisplayInfo getDisplayInfo() {
+ return mDisplayInfo;
+ }
+
+ /**
* Update the Min edge size for {@link PipSnapAlgorithm} to calculate corresponding bounds
* @param minEdgeSize
*/
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
index 6990186ece3d..cd5d35bf0c4c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
@@ -79,6 +79,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
+import java.util.function.IntConsumer;
/**
* Manages PiP tasks such as resize and offset.
@@ -248,6 +249,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory
mSurfaceControlTransactionFactory;
private PictureInPictureParams mPictureInPictureParams;
+ private IntConsumer mOnDisplayIdChangeCallback;
/**
* If set to {@code true}, the entering animation will be skipped and we will wait for
@@ -315,6 +317,13 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
}
/**
+ * Registers a callback when a display change has been detected when we enter PiP.
+ */
+ public void registerOnDisplayIdChangeCallback(IntConsumer onDisplayIdChangeCallback) {
+ mOnDisplayIdChangeCallback = onDisplayIdChangeCallback;
+ }
+
+ /**
* Sets the preferred animation type for one time.
* This is typically used to set the animation type to
* {@link PipAnimationController#ANIM_TYPE_ALPHA}.
@@ -403,9 +412,13 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
@Override
public void onTransactionReady(int id, SurfaceControl.Transaction t) {
t.apply();
- scheduleAnimateResizePip(mPipBoundsState.getBounds(),
- destinationBounds, getValidSourceHintRect(mTaskInfo, destinationBounds),
- direction, animationDurationMs, null /* updateBoundsCallback */);
+ // Make sure to grab the latest source hint rect as it could have been updated
+ // right after applying the windowing mode change.
+ final Rect sourceHintRect = getValidSourceHintRect(mPictureInPictureParams,
+ destinationBounds);
+ scheduleAnimateResizePip(mPipBoundsState.getBounds(), destinationBounds,
+ sourceHintRect, direction, animationDurationMs,
+ null /* updateBoundsCallback */);
mState = State.EXITING_PIP;
}
});
@@ -473,6 +486,13 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
mPipUiEventLoggerLogger.setTaskInfo(mTaskInfo);
mPipUiEventLoggerLogger.log(PipUiEventLogger.PipUiEventEnum.PICTURE_IN_PICTURE_ENTER);
+ // If the displayId of the task is different than what PipBoundsHandler has, then update
+ // it. This is possible if we entered PiP on an external display.
+ if (info.displayId != mPipBoundsHandler.getDisplayInfo().displayId
+ && mOnDisplayIdChangeCallback != null) {
+ mOnDisplayIdChangeCallback.accept(info.displayId);
+ }
+
if (mShouldIgnoreEnteringPipTransition) {
// Animation has been finished together with Recents, directly apply the sync
// transaction to PiP here.
@@ -501,7 +521,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
final Rect currentBounds = mTaskInfo.configuration.windowConfiguration.getBounds();
if (mOneShotAnimationType == ANIM_TYPE_BOUNDS) {
- final Rect sourceHintRect = getValidSourceHintRect(info, currentBounds);
+ final Rect sourceHintRect = getValidSourceHintRect(info.pictureInPictureParams,
+ currentBounds);
scheduleAnimateResizePip(currentBounds, destinationBounds, sourceHintRect,
TRANSITION_DIRECTION_TO_PIP, mEnterExitAnimationDuration,
null /* updateBoundsCallback */);
@@ -518,10 +539,10 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
* Returns the source hint rect if it is valid (if provided and is contained by the current
* task bounds).
*/
- private Rect getValidSourceHintRect(ActivityManager.RunningTaskInfo info, Rect sourceBounds) {
- final Rect sourceHintRect = info.pictureInPictureParams != null
- && info.pictureInPictureParams.hasSourceBoundsHint()
- ? info.pictureInPictureParams.getSourceRectHint()
+ private Rect getValidSourceHintRect(PictureInPictureParams params, Rect sourceBounds) {
+ final Rect sourceHintRect = params != null
+ && params.hasSourceBoundsHint()
+ ? params.getSourceRectHint()
: null;
if (sourceHintRect != null && sourceBounds.contains(sourceHintRect)) {
return sourceHintRect;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
index a3d21f2d8466..a08983740f9a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
@@ -228,6 +228,14 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac
mPipBoundsState = pipBoundsState;
mPipTaskOrganizer = pipTaskOrganizer;
mPipTaskOrganizer.registerPipTransitionCallback(this);
+ mPipTaskOrganizer.registerOnDisplayIdChangeCallback((int displayId) -> {
+ final DisplayInfo newDisplayInfo = new DisplayInfo();
+ displayController.getDisplay(displayId).getDisplayInfo(newDisplayInfo);
+ mPipBoundsHandler.onDisplayInfoChanged(newDisplayInfo);
+ updateMovementBounds(null /* toBounds */, false /* fromRotation */,
+ false /* fromImeAdjustment */, false /* fromShelfAdustment */,
+ null /* wct */);
+ });
mMediaController = pipMediaController;
mMenuController = pipMenuActivityController;
mTouchHandler = pipTouchHandler;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTaskOrganizer.java
index f763d6d714c4..0a1aadc90a62 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTaskOrganizer.java
@@ -33,6 +33,7 @@ import android.util.Log;
import android.view.Display;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
+import android.window.TaskAppearedInfo;
import androidx.annotation.NonNull;
@@ -68,10 +69,15 @@ class SplitScreenTaskOrganizer implements ShellTaskOrganizer.TaskListener {
void init() throws RemoteException {
synchronized (this) {
try {
- mPrimary = mTaskOrganizer.createRootTask(Display.DEFAULT_DISPLAY,
- WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
- mSecondary = mTaskOrganizer.createRootTask(Display.DEFAULT_DISPLAY,
- WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+ final TaskAppearedInfo primary = mTaskOrganizer.createRootTask(
+ Display.DEFAULT_DISPLAY, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, this);
+ final TaskAppearedInfo secondary = mTaskOrganizer.createRootTask(
+ Display.DEFAULT_DISPLAY, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, this);
+ mPrimary = primary.getTaskInfo();
+ mPrimarySurface = primary.getLeash();
+ mSecondary = secondary.getTaskInfo();
+ mSecondarySurface = secondary.getLeash();
+ enableSplitScreenSupportIfNeeded();
} catch (Exception e) {
// teardown to prevent callbacks
mTaskOrganizer.removeListener(this);
@@ -92,43 +98,29 @@ class SplitScreenTaskOrganizer implements ShellTaskOrganizer.TaskListener {
mSplitScreenController.mTransactionPool.release(t);
}
- @Override
- public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) {
- synchronized (this) {
- if (mPrimary == null || mSecondary == null) {
- Log.w(TAG, "Received onTaskAppeared before creating root tasks " + taskInfo);
- return;
- }
-
- if (taskInfo.token.equals(mPrimary.token)) {
- mPrimarySurface = leash;
- } else if (taskInfo.token.equals(mSecondary.token)) {
- mSecondarySurface = leash;
- }
-
- if (!mSplitScreenSupported && mPrimarySurface != null && mSecondarySurface != null) {
- mSplitScreenSupported = true;
-
- // Initialize dim surfaces:
- mPrimaryDim = new SurfaceControl.Builder(mSurfaceSession)
- .setParent(mPrimarySurface).setColorLayer()
- .setName("Primary Divider Dim")
- .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared")
- .build();
- mSecondaryDim = new SurfaceControl.Builder(mSurfaceSession)
- .setParent(mSecondarySurface).setColorLayer()
- .setName("Secondary Divider Dim")
- .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared")
- .build();
- SurfaceControl.Transaction t = getTransaction();
- t.setLayer(mPrimaryDim, Integer.MAX_VALUE);
- t.setColor(mPrimaryDim, new float[]{0f, 0f, 0f});
- t.setLayer(mSecondaryDim, Integer.MAX_VALUE);
- t.setColor(mSecondaryDim, new float[]{0f, 0f, 0f});
- t.apply();
- releaseTransaction(t);
- }
- }
+ private void enableSplitScreenSupportIfNeeded() {
+ if (mSplitScreenSupported || mPrimarySurface == null || mSecondarySurface == null) return;
+
+ mSplitScreenSupported = true;
+
+ // Initialize dim surfaces:
+ mPrimaryDim = new SurfaceControl.Builder(mSurfaceSession)
+ .setParent(mPrimarySurface).setColorLayer()
+ .setName("Primary Divider Dim")
+ .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared")
+ .build();
+ mSecondaryDim = new SurfaceControl.Builder(mSurfaceSession)
+ .setParent(mSecondarySurface).setColorLayer()
+ .setName("Secondary Divider Dim")
+ .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared")
+ .build();
+ SurfaceControl.Transaction t = getTransaction();
+ t.setLayer(mPrimaryDim, Integer.MAX_VALUE);
+ t.setColor(mPrimaryDim, new float[]{0f, 0f, 0f});
+ t.setLayer(mSecondaryDim, Integer.MAX_VALUE);
+ t.setColor(mSecondaryDim, new float[]{0f, 0f, 0f});
+ t.apply();
+ releaseTransaction(t);
}
@Override
diff --git a/libs/androidfw/CursorWindow.cpp b/libs/androidfw/CursorWindow.cpp
index 915c0d75a280..1b8db46c54b6 100644
--- a/libs/androidfw/CursorWindow.cpp
+++ b/libs/androidfw/CursorWindow.cpp
@@ -291,11 +291,11 @@ status_t CursorWindow::allocRow() {
return INVALID_OPERATION;
}
size_t size = mNumColumns * kSlotSizeBytes;
- off_t newOffset = mSlotsOffset - size;
- if (newOffset < mAllocOffset) {
+ int32_t newOffset = mSlotsOffset - size;
+ if (newOffset < (int32_t) mAllocOffset) {
maybeInflate();
newOffset = mSlotsOffset - size;
- if (newOffset < mAllocOffset) {
+ if (newOffset < (int32_t) mAllocOffset) {
return NO_MEMORY;
}
}
@@ -311,7 +311,7 @@ status_t CursorWindow::freeLastRow() {
return INVALID_OPERATION;
}
size_t size = mNumColumns * kSlotSizeBytes;
- off_t newOffset = mSlotsOffset + size;
+ size_t newOffset = mSlotsOffset + size;
if (newOffset > mSize) {
return NO_MEMORY;
}
@@ -326,7 +326,7 @@ status_t CursorWindow::alloc(size_t size, uint32_t* outOffset) {
return INVALID_OPERATION;
}
size_t alignedSize = (size + 3) & ~3;
- off_t newOffset = mAllocOffset + alignedSize;
+ size_t newOffset = mAllocOffset + alignedSize;
if (newOffset > mSlotsOffset) {
maybeInflate();
newOffset = mAllocOffset + alignedSize;
@@ -345,7 +345,7 @@ CursorWindow::FieldSlot* CursorWindow::getFieldSlot(uint32_t row, uint32_t colum
// see CursorWindow_bench.cpp for more details
void *result = static_cast<uint8_t*>(mSlotsStart)
- (((row * mNumColumns) + column) << kSlotShift);
- if (result < mSlotsEnd || column >= mNumColumns) {
+ if (result < mSlotsEnd || result > mSlotsStart || column >= mNumColumns) {
LOG(ERROR) << "Failed to read row " << row << ", column " << column
<< " from a window with " << mNumRows << " rows, " << mNumColumns << " columns";
return nullptr;
diff --git a/libs/androidfw/tests/CursorWindow_test.cpp b/libs/androidfw/tests/CursorWindow_test.cpp
index dfcf76e6edf6..15be80c48192 100644
--- a/libs/androidfw/tests/CursorWindow_test.cpp
+++ b/libs/androidfw/tests/CursorWindow_test.cpp
@@ -166,6 +166,14 @@ TEST(CursorWindowTest, StoreBounds) {
ASSERT_EQ(w->getFieldSlot(0, 3), nullptr);
ASSERT_EQ(w->getFieldSlot(3, 0), nullptr);
ASSERT_EQ(w->getFieldSlot(3, 3), nullptr);
+
+ // Can't work with invalid indexes
+ ASSERT_NE(w->putLong(-1, 0, 0xcafe), OK);
+ ASSERT_NE(w->putLong(0, -1, 0xcafe), OK);
+ ASSERT_NE(w->putLong(-1, -1, 0xcafe), OK);
+ ASSERT_EQ(w->getFieldSlot(-1, 0), nullptr);
+ ASSERT_EQ(w->getFieldSlot(0, -1), nullptr);
+ ASSERT_EQ(w->getFieldSlot(-1, -1), nullptr);
}
TEST(CursorWindowTest, Inflate) {
diff --git a/location/java/android/location/Location.java b/location/java/android/location/Location.java
index 46bd22148fb2..62b4bc173bb9 100644
--- a/location/java/android/location/Location.java
+++ b/location/java/android/location/Location.java
@@ -19,7 +19,6 @@ package android.location;
import static java.util.concurrent.TimeUnit.NANOSECONDS;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.os.Bundle;
@@ -75,7 +74,6 @@ public class Location implements Parcelable {
* gps locations separate from other locations for coarsening. Providers that do not need to
* support platforms below Android R should not use this constant.
*/
- @TestApi
@SystemApi
@Deprecated
public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
@@ -1074,7 +1072,6 @@ public class Location implements Parcelable {
* @see #isComplete
* @hide
*/
- @TestApi
@SystemApi
public void makeComplete() {
if (mProvider == null) mProvider = "?";
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 30a4ada1b388..ac775ca05cab 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -575,7 +575,6 @@ public class LocationManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(WRITE_SECURE_SETTINGS)
public void setLocationEnabledForUser(boolean enabled, @NonNull UserHandle userHandle) {
try {
@@ -751,7 +750,6 @@ public class LocationManager {
*/
@Deprecated
@SystemApi
- @TestApi
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void getCurrentLocation(@NonNull LocationRequest locationRequest,
@Nullable CancellationSignal cancellationSignal,
@@ -1192,7 +1190,6 @@ public class LocationManager {
*/
@Deprecated
@SystemApi
- @TestApi
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(
@Nullable LocationRequest locationRequest,
@@ -1223,7 +1220,6 @@ public class LocationManager {
*/
@Deprecated
@SystemApi
- @TestApi
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(
@Nullable LocationRequest locationRequest,
@@ -1255,7 +1251,6 @@ public class LocationManager {
*/
@Deprecated
@SystemApi
- @TestApi
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(
@Nullable LocationRequest locationRequest,
diff --git a/location/java/android/location/LocationRequest.java b/location/java/android/location/LocationRequest.java
index 4977c2161be9..d0706c6b84cb 100644
--- a/location/java/android/location/LocationRequest.java
+++ b/location/java/android/location/LocationRequest.java
@@ -27,7 +27,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledAfter;
import android.compat.annotation.UnsupportedAppUsage;
@@ -75,19 +74,27 @@ public final class LocationRequest implements Parcelable {
/**
* A quality constant indicating a location provider may choose to satisfy this request by
- * providing very accurate locations at the expense of potentially increased power usage.
+ * providing very accurate locations at the expense of potentially increased power usage. Each
+ * location provider may interpret this field differently, but as an example, the network
+ * provider may choose to return only wifi based locations rather than cell based locations in
+ * order to have greater accuracy when this flag is present.
*/
public static final int QUALITY_HIGH_ACCURACY = 100;
/**
* A quality constant indicating a location provider may choose to satisfy this request by
- * equally balancing power and accuracy constraints.
+ * equally balancing power and accuracy constraints. Each location provider may interpret this
+ * field differently, but location providers will generally use their default behavior when this
+ * flag is present.
*/
public static final int QUALITY_BALANCED_POWER_ACCURACY = 102;
/**
* A quality constant indicating a location provider may choose to satisfy this request by
- * providing less accurate locations in order to save power.
+ * providing less accurate locations in order to save power. Each location provider may
+ * interpret this field differently, but as an example, the network provider may choose to
+ * return cell based locations rather than wifi based locations in order to save power when this
+ * flag is present.
*/
public static final int QUALITY_LOW_POWER = 104;
@@ -101,7 +108,6 @@ public final class LocationRequest implements Parcelable {
*/
@Deprecated
@SystemApi
- @TestApi
public static final int ACCURACY_FINE = QUALITY_HIGH_ACCURACY;
/**
@@ -116,7 +122,6 @@ public final class LocationRequest implements Parcelable {
*/
@Deprecated
@SystemApi
- @TestApi
public static final int ACCURACY_BLOCK = QUALITY_BALANCED_POWER_ACCURACY;
/**
@@ -131,7 +136,6 @@ public final class LocationRequest implements Parcelable {
*/
@Deprecated
@SystemApi
- @TestApi
public static final int ACCURACY_CITY = QUALITY_LOW_POWER;
/**
@@ -159,7 +163,6 @@ public final class LocationRequest implements Parcelable {
*/
@Deprecated
@SystemApi
- @TestApi
public static final int POWER_LOW = 201;
/**
@@ -172,7 +175,6 @@ public final class LocationRequest implements Parcelable {
*/
@Deprecated
@SystemApi
- @TestApi
public static final int POWER_HIGH = 203;
private static final long IMPLICIT_MIN_UPDATE_INTERVAL = -1;
@@ -618,7 +620,6 @@ public final class LocationRequest implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public boolean isHiddenFromAppOps() {
return mHideFromAppOps;
@@ -644,7 +645,6 @@ public final class LocationRequest implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public boolean isLocationSettingsIgnored() {
return mLocationSettingsIgnored;
@@ -680,7 +680,6 @@ public final class LocationRequest implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public boolean isLowPower() {
return mLowPower;
@@ -707,7 +706,6 @@ public final class LocationRequest implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
public @NonNull WorkSource getWorkSource() {
return mWorkSource;
@@ -1038,7 +1036,6 @@ public final class LocationRequest implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(Manifest.permission.UPDATE_APP_OPS_STATS)
public @NonNull Builder setHiddenFromAppOps(boolean hiddenFromAppOps) {
@@ -1057,7 +1054,6 @@ public final class LocationRequest implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
public @NonNull Builder setLocationSettingsIgnored(boolean locationSettingsIgnored) {
@@ -1075,7 +1071,6 @@ public final class LocationRequest implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(Manifest.permission.LOCATION_HARDWARE)
public @NonNull Builder setLowPower(boolean lowPower) {
@@ -1093,7 +1088,6 @@ public final class LocationRequest implements Parcelable {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(Manifest.permission.UPDATE_DEVICE_STATS)
public @NonNull Builder setWorkSource(@Nullable WorkSource workSource) {
diff --git a/media/java/android/media/AudioFocusInfo.java b/media/java/android/media/AudioFocusInfo.java
index 675cf7360b82..3647b6ebcfbc 100644
--- a/media/java/android/media/AudioFocusInfo.java
+++ b/media/java/android/media/AudioFocusInfo.java
@@ -19,7 +19,6 @@ package android.media;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -29,7 +28,6 @@ import java.util.Objects;
* @hide
* A class to encapsulate information about an audio focus owner or request.
*/
-@TestApi
@SystemApi
public final class AudioFocusInfo implements Parcelable {
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 22b5ca53e7e9..195122db146a 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -3916,7 +3916,6 @@ public class AudioManager {
* @param requestResult the result to the focus request to be passed to the requester
* @param ap a valid registered {@link AudioPolicy} configured as a focus policy.
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
public void setFocusRequestResult(@NonNull AudioFocusInfo afi,
@@ -3956,7 +3955,6 @@ public class AudioManager {
* if there was an error sending the request.
* @throws NullPointerException if the {@link AudioFocusInfo} or {@link AudioPolicy} are null.
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
public int dispatchAudioFocusChange(@NonNull AudioFocusInfo afi, int focusChange,
@@ -4219,7 +4217,6 @@ public class AudioManager {
* {@link android.Manifest.permission#MODIFY_AUDIO_ROUTING} permission,
* {@link #SUCCESS} otherwise.
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
public int registerAudioPolicy(@NonNull AudioPolicy policy) {
@@ -4254,7 +4251,6 @@ public class AudioManager {
* Unregisters an {@link AudioPolicy} asynchronously.
* @param policy the non-null {@link AudioPolicy} to unregister.
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
public void unregisterAudioPolicyAsync(@NonNull AudioPolicy policy) {
@@ -4281,7 +4277,6 @@ public class AudioManager {
* associated with mixes of this policy.
* @param policy the non-null {@link AudioPolicy} to unregister.
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
public void unregisterAudioPolicy(@NonNull AudioPolicy policy) {
@@ -5619,7 +5614,6 @@ public class AudioManager {
*/
/** @hide */
- @TestApi
@SystemApi
public static final int SUCCESS = AudioSystem.SUCCESS;
/**
diff --git a/media/java/android/media/MediaTranscodeManager.java b/media/java/android/media/MediaTranscodeManager.java
index 8676462c5c54..046403670693 100644
--- a/media/java/android/media/MediaTranscodeManager.java
+++ b/media/java/android/media/MediaTranscodeManager.java
@@ -22,7 +22,6 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
@@ -101,7 +100,6 @@ import java.util.concurrent.Executors;
TODO(hkuang): Clarify whether supports framerate conversion.
@hide
*/
-@TestApi
@SystemApi
public final class MediaTranscodeManager {
private static final String TAG = "MediaTranscodeManager";
diff --git a/media/java/android/media/audiopolicy/AudioMix.java b/media/java/android/media/audiopolicy/AudioMix.java
index 61113bc858db..4e451c6e42b1 100644
--- a/media/java/android/media/audiopolicy/AudioMix.java
+++ b/media/java/android/media/audiopolicy/AudioMix.java
@@ -19,7 +19,6 @@ package android.media.audiopolicy;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.media.AudioDeviceInfo;
import android.media.AudioFormat;
@@ -32,7 +31,6 @@ import java.util.Objects;
/**
* @hide
*/
-@TestApi
@SystemApi
public class AudioMix {
diff --git a/media/java/android/media/audiopolicy/AudioMixingRule.java b/media/java/android/media/audiopolicy/AudioMixingRule.java
index 68c9593d102d..f6f982a4ebe2 100644
--- a/media/java/android/media/audiopolicy/AudioMixingRule.java
+++ b/media/java/android/media/audiopolicy/AudioMixingRule.java
@@ -18,7 +18,6 @@ package android.media.audiopolicy;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.media.AudioAttributes;
import android.os.Parcel;
@@ -42,7 +41,6 @@ import java.util.Objects;
* .build();
* </pre>
*/
-@TestApi
@SystemApi
public class AudioMixingRule {
diff --git a/media/java/android/media/audiopolicy/AudioPolicy.java b/media/java/android/media/audiopolicy/AudioPolicy.java
index 8a17465c53b3..3e8d76ac7551 100644
--- a/media/java/android/media/audiopolicy/AudioPolicy.java
+++ b/media/java/android/media/audiopolicy/AudioPolicy.java
@@ -58,7 +58,6 @@ import java.util.Objects;
* @hide
* AudioPolicy provides access to the management of audio routing and audio focus.
*/
-@TestApi
@SystemApi
public class AudioPolicy {
@@ -418,7 +417,6 @@ public class AudioPolicy {
* @param devices list of devices to which the audio stream of the application may be routed.
* @return true if the change was successful, false otherwise.
*/
- @TestApi
@SystemApi
public boolean setUidDeviceAffinity(int uid, @NonNull List<AudioDeviceInfo> devices) {
if (devices == null) {
@@ -460,7 +458,6 @@ public class AudioPolicy {
* @param uid UID of the application affected.
* @return true if the change was successful, false otherwise.
*/
- @TestApi
@SystemApi
public boolean removeUidDeviceAffinity(int uid) {
synchronized (mLock) {
@@ -486,7 +483,6 @@ public class AudioPolicy {
* {@link UserHandle#getIdentifier}. Not to be confused with application uid.
* @return true if the change was successful, false otherwise.
*/
- @TestApi
@SystemApi
public boolean removeUserIdDeviceAffinity(@UserIdInt int userId) {
synchronized (mLock) {
@@ -519,7 +515,6 @@ public class AudioPolicy {
* @param devices list of devices to which the audio stream of the application may be routed.
* @return true if the change was successful, false otherwise.
*/
- @TestApi
@SystemApi
public boolean setUserIdDeviceAffinity(@UserIdInt int userId,
@NonNull List<AudioDeviceInfo> devices) {
diff --git a/media/java/android/media/musicrecognition/MusicRecognitionManager.java b/media/java/android/media/musicrecognition/MusicRecognitionManager.java
index c7f55dfe1c76..6bbcfd3b5b66 100644
--- a/media/java/android/media/musicrecognition/MusicRecognitionManager.java
+++ b/media/java/android/media/musicrecognition/MusicRecognitionManager.java
@@ -25,7 +25,6 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.content.Context;
import android.media.MediaMetadata;
import android.os.Bundle;
@@ -41,7 +40,6 @@ import java.util.concurrent.Executor;
* @hide
*/
@SystemApi
-@TestApi
@SystemService(Context.MUSIC_RECOGNITION_SERVICE)
public class MusicRecognitionManager {
diff --git a/media/java/android/media/musicrecognition/MusicRecognitionService.java b/media/java/android/media/musicrecognition/MusicRecognitionService.java
index b75d2c4f1e50..e2071b84c00b 100644
--- a/media/java/android/media/musicrecognition/MusicRecognitionService.java
+++ b/media/java/android/media/musicrecognition/MusicRecognitionService.java
@@ -21,7 +21,6 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.Intent;
import android.media.AudioFormat;
@@ -41,7 +40,6 @@ import android.util.Log;
* @hide
*/
@SystemApi
-@TestApi
public abstract class MusicRecognitionService extends Service {
private static final String TAG = MusicRecognitionService.class.getSimpleName();
diff --git a/media/java/android/media/musicrecognition/RecognitionRequest.java b/media/java/android/media/musicrecognition/RecognitionRequest.java
index 65b2ccd37f79..e4f484873cd4 100644
--- a/media/java/android/media/musicrecognition/RecognitionRequest.java
+++ b/media/java/android/media/musicrecognition/RecognitionRequest.java
@@ -23,7 +23,6 @@ import static java.util.Objects.requireNonNull;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.media.AudioAttributes;
import android.media.AudioFormat;
import android.media.AudioRecord;
@@ -37,7 +36,6 @@ import android.os.Parcelable;
* @hide
*/
@SystemApi
-@TestApi
public final class RecognitionRequest implements Parcelable {
@NonNull private final AudioAttributes mAudioAttributes;
@NonNull private final AudioFormat mAudioFormat;
@@ -82,7 +80,6 @@ public final class RecognitionRequest implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public static final class Builder {
private AudioFormat mAudioFormat = new AudioFormat.Builder()
.setSampleRate(16000)
diff --git a/media/java/android/media/tv/tuner/TunerVersionChecker.java b/media/java/android/media/tv/tuner/TunerVersionChecker.java
index 739f87dd711d..b40ba1e763c1 100644
--- a/media/java/android/media/tv/tuner/TunerVersionChecker.java
+++ b/media/java/android/media/tv/tuner/TunerVersionChecker.java
@@ -31,7 +31,6 @@ import java.lang.annotation.RetentionPolicy;
*
* @hide
*/
-@TestApi
@SystemApi
public final class TunerVersionChecker {
private static final String TAG = "TunerVersionChecker";
diff --git a/media/java/android/media/tv/tuner/filter/AvSettings.java b/media/java/android/media/tv/tuner/filter/AvSettings.java
index e9b3660ab12f..5d9d53174b3e 100644
--- a/media/java/android/media/tv/tuner/filter/AvSettings.java
+++ b/media/java/android/media/tv/tuner/filter/AvSettings.java
@@ -16,9 +16,15 @@
package android.media.tv.tuner.filter;
+import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
+import android.hardware.tv.tuner.V1_1.Constants;
import android.media.tv.tuner.TunerUtils;
+import android.media.tv.tuner.TunerVersionChecker;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
/**
* Filter Settings for a Video and Audio.
@@ -27,15 +33,160 @@ import android.media.tv.tuner.TunerUtils;
*/
@SystemApi
public class AvSettings extends Settings {
+ /** @hide */
+ @IntDef(prefix = "VIDEO_STREAM_TYPE_",
+ value = {VIDEO_STREAM_TYPE_UNDEFINED, VIDEO_STREAM_TYPE_RESERVED,
+ VIDEO_STREAM_TYPE_MPEG1, VIDEO_STREAM_TYPE_MPEG2,
+ VIDEO_STREAM_TYPE_MPEG4P2, VIDEO_STREAM_TYPE_AVC, VIDEO_STREAM_TYPE_HEVC,
+ VIDEO_STREAM_TYPE_VC1, VIDEO_STREAM_TYPE_VP8, VIDEO_STREAM_TYPE_VP9,
+ VIDEO_STREAM_TYPE_AV1, VIDEO_STREAM_TYPE_AVS, VIDEO_STREAM_TYPE_AVS2})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface VideoStreamType {}
+
+ /*
+ * Undefined Video stream type
+ */
+ public static final int VIDEO_STREAM_TYPE_UNDEFINED = Constants.VideoStreamType.UNDEFINED;
+ /*
+ * ITU-T | ISO/IEC Reserved
+ */
+ public static final int VIDEO_STREAM_TYPE_RESERVED = Constants.VideoStreamType.RESERVED;
+ /*
+ * ISO/IEC 11172
+ */
+ public static final int VIDEO_STREAM_TYPE_MPEG1 = Constants.VideoStreamType.MPEG1;
+ /*
+ * ITU-T Rec.H.262 and ISO/IEC 13818-2
+ */
+ public static final int VIDEO_STREAM_TYPE_MPEG2 = Constants.VideoStreamType.MPEG2;
+ /*
+ * ISO/IEC 14496-2 (MPEG-4 H.263 based video)
+ */
+ public static final int VIDEO_STREAM_TYPE_MPEG4P2 = Constants.VideoStreamType.MPEG4P2;
+ /*
+ * ITU-T Rec.H.264 and ISO/IEC 14496-10
+ */
+ public static final int VIDEO_STREAM_TYPE_AVC = Constants.VideoStreamType.AVC;
+ /*
+ * ITU-T Rec. H.265 and ISO/IEC 23008-2
+ */
+ public static final int VIDEO_STREAM_TYPE_HEVC = Constants.VideoStreamType.HEVC;
+ /*
+ * Microsoft VC.1
+ */
+ public static final int VIDEO_STREAM_TYPE_VC1 = Constants.VideoStreamType.VC1;
+ /*
+ * Google VP8
+ */
+ public static final int VIDEO_STREAM_TYPE_VP8 = Constants.VideoStreamType.VP8;
+ /*
+ * Google VP9
+ */
+ public static final int VIDEO_STREAM_TYPE_VP9 = Constants.VideoStreamType.VP9;
+ /*
+ * AOMedia Video 1
+ */
+ public static final int VIDEO_STREAM_TYPE_AV1 = Constants.VideoStreamType.AV1;
+ /*
+ * Chinese Standard
+ */
+ public static final int VIDEO_STREAM_TYPE_AVS = Constants.VideoStreamType.AVS;
+ /*
+ * New Chinese Standard
+ */
+ public static final int VIDEO_STREAM_TYPE_AVS2 = Constants.VideoStreamType.AVS2;
+
+ /** @hide */
+ @IntDef(prefix = "AUDIO_STREAM_TYPE_",
+ value = {AUDIO_STREAM_TYPE_UNDEFINED, AUDIO_STREAM_TYPE_PCM, AUDIO_STREAM_TYPE_MP3,
+ AUDIO_STREAM_TYPE_MPEG1, AUDIO_STREAM_TYPE_MPEG2, AUDIO_STREAM_TYPE_MPEGH,
+ AUDIO_STREAM_TYPE_AAC, AUDIO_STREAM_TYPE_AC3, AUDIO_STREAM_TYPE_EAC3,
+ AUDIO_STREAM_TYPE_AC4, AUDIO_STREAM_TYPE_DTS, AUDIO_STREAM_TYPE_DTS_HD,
+ AUDIO_STREAM_TYPE_WMA, AUDIO_STREAM_TYPE_OPUS, AUDIO_STREAM_TYPE_VORBIS,
+ AUDIO_STREAM_TYPE_DRA})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface AudioStreamType {}
+
+ /*
+ * Undefined Audio stream type
+ */
+ public static final int AUDIO_STREAM_TYPE_UNDEFINED = Constants.AudioStreamType.UNDEFINED;
+ /*
+ * Uncompressed Audio
+ */
+ public static final int AUDIO_STREAM_TYPE_PCM = Constants.AudioStreamType.PCM;
+ /*
+ * MPEG Audio Layer III versions
+ */
+ public static final int AUDIO_STREAM_TYPE_MP3 = Constants.AudioStreamType.MP3;
+ /*
+ * ISO/IEC 11172 Audio
+ */
+ public static final int AUDIO_STREAM_TYPE_MPEG1 = Constants.AudioStreamType.MPEG1;
+ /*
+ * ISO/IEC 13818-3
+ */
+ public static final int AUDIO_STREAM_TYPE_MPEG2 = Constants.AudioStreamType.MPEG2;
+ /*
+ * ISO/IEC 23008-3 (MPEG-H Part 3)
+ */
+ public static final int AUDIO_STREAM_TYPE_MPEGH = Constants.AudioStreamType.MPEGH;
+ /*
+ * ISO/IEC 14496-3
+ */
+ public static final int AUDIO_STREAM_TYPE_AAC = Constants.AudioStreamType.AAC;
+ /*
+ * Dolby Digital
+ */
+ public static final int AUDIO_STREAM_TYPE_AC3 = Constants.AudioStreamType.AC3;
+ /*
+ * Dolby Digital Plus
+ */
+ public static final int AUDIO_STREAM_TYPE_EAC3 = Constants.AudioStreamType.EAC3;
+ /*
+ * Dolby AC-4
+ */
+ public static final int AUDIO_STREAM_TYPE_AC4 = Constants.AudioStreamType.AC4;
+ /*
+ * Basic DTS
+ */
+ public static final int AUDIO_STREAM_TYPE_DTS = Constants.AudioStreamType.DTS;
+ /*
+ * High Resolution DTS
+ */
+ public static final int AUDIO_STREAM_TYPE_DTS_HD = Constants.AudioStreamType.DTS_HD;
+ /*
+ * Windows Media Audio
+ */
+ public static final int AUDIO_STREAM_TYPE_WMA = Constants.AudioStreamType.WMA;
+ /*
+ * Opus Interactive Audio Codec
+ */
+ public static final int AUDIO_STREAM_TYPE_OPUS = Constants.AudioStreamType.OPUS;
+ /*
+ * VORBIS Interactive Audio Codec
+ */
+ public static final int AUDIO_STREAM_TYPE_VORBIS = Constants.AudioStreamType.VORBIS;
+ /*
+ * SJ/T 11368-2006
+ */
+ public static final int AUDIO_STREAM_TYPE_DRA = Constants.AudioStreamType.DRA;
+
+
private final boolean mIsPassthrough;
+ private int mAudioStreamType = AUDIO_STREAM_TYPE_UNDEFINED;
+ private int mVideoStreamType = VIDEO_STREAM_TYPE_UNDEFINED;
- private AvSettings(int mainType, boolean isAudio, boolean isPassthrough) {
+ private AvSettings(int mainType, boolean isAudio, boolean isPassthrough,
+ int audioStreamType, int videoStreamType) {
super(TunerUtils.getFilterSubtype(
mainType,
isAudio
? Filter.SUBTYPE_AUDIO
: Filter.SUBTYPE_VIDEO));
mIsPassthrough = isPassthrough;
+ mAudioStreamType = audioStreamType;
+ mVideoStreamType = videoStreamType;
}
/**
@@ -46,6 +197,20 @@ public class AvSettings extends Settings {
}
/**
+ * Get the Audio Stream Type.
+ */
+ public int getAudioStreamType() {
+ return mAudioStreamType;
+ }
+
+ /**
+ * Get the Video Stream Type.
+ */
+ public int getVideoStreamType() {
+ return mVideoStreamType;
+ }
+
+ /**
* Creates a builder for {@link AvSettings}.
*
* @param mainType the filter main type.
@@ -63,6 +228,8 @@ public class AvSettings extends Settings {
private final int mMainType;
private final boolean mIsAudio;
private boolean mIsPassthrough;
+ private int mAudioStreamType = AUDIO_STREAM_TYPE_UNDEFINED;
+ private int mVideoStreamType = VIDEO_STREAM_TYPE_UNDEFINED;
private Builder(int mainType, boolean isAudio) {
mMainType = mainType;
@@ -79,11 +246,48 @@ public class AvSettings extends Settings {
}
/**
+ * Sets the Audio Stream Type.
+ *
+ * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause
+ * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
+ *
+ * @param audioStreamType the {@link AudioStreamType} to set.
+ */
+ @NonNull
+ public Builder setAudioStreamType(@AudioStreamType int audioStreamType) {
+ if (TunerVersionChecker.checkHigherOrEqualVersionTo(
+ TunerVersionChecker.TUNER_VERSION_1_1, "setAudioStreamType") && mIsAudio) {
+ mAudioStreamType = audioStreamType;
+ mVideoStreamType = VIDEO_STREAM_TYPE_UNDEFINED;
+ }
+ return this;
+ }
+
+ /**
+ * Sets the Video Stream Type.
+ *
+ * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause
+ * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version.
+ *
+ * @param videoStreamType the {@link VideoStreamType} to set.
+ */
+ @NonNull
+ public Builder setVideoStreamType(@VideoStreamType int videoStreamType) {
+ if (TunerVersionChecker.checkHigherOrEqualVersionTo(
+ TunerVersionChecker.TUNER_VERSION_1_1, "setVideoStreamType") && !mIsAudio) {
+ mVideoStreamType = videoStreamType;
+ mAudioStreamType = AUDIO_STREAM_TYPE_UNDEFINED;
+ }
+ return this;
+ }
+
+ /**
* Builds a {@link AvSettings} object.
*/
@NonNull
public AvSettings build() {
- return new AvSettings(mMainType, mIsAudio, mIsPassthrough);
+ return new AvSettings(mMainType, mIsAudio, mIsPassthrough,
+ mAudioStreamType, mVideoStreamType);
}
}
}
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index 9b86b529af47..1be0d4439e69 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -132,6 +132,8 @@ using ::android::hardware::tv::tuner::V1_0::LnbTone;
using ::android::hardware::tv::tuner::V1_0::LnbVoltage;
using ::android::hardware::tv::tuner::V1_0::PlaybackSettings;
using ::android::hardware::tv::tuner::V1_0::RecordSettings;
+using ::android::hardware::tv::tuner::V1_1::AudioStreamType;
+using ::android::hardware::tv::tuner::V1_1::AvStreamType;
using ::android::hardware::tv::tuner::V1_1::Constant;
using ::android::hardware::tv::tuner::V1_1::Constant64Bit;
using ::android::hardware::tv::tuner::V1_1::FrontendAnalogAftFlag;
@@ -157,6 +159,7 @@ using ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion;
using ::android::hardware::tv::tuner::V1_1::FrontendStatusExt1_1;
using ::android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1;
using ::android::hardware::tv::tuner::V1_1::FrontendTransmissionMode;
+using ::android::hardware::tv::tuner::V1_1::VideoStreamType;
struct fields_t {
jfieldID tunerContext;
@@ -993,6 +996,77 @@ Return<void> FrontendCallback::onScanMessage(FrontendScanMessageType type, const
return Void();
}
+Return<void> FrontendCallback::onScanMessageExt1_1(FrontendScanMessageTypeExt1_1 type,
+ const FrontendScanMessageExt1_1& message) {
+ ALOGD("FrontendCallback::onScanMessageExt1_1, type=%d", type);
+ JNIEnv *env = AndroidRuntime::getJNIEnv();
+ jclass clazz = env->FindClass("android/media/tv/tuner/Tuner");
+ switch(type) {
+ case FrontendScanMessageTypeExt1_1::MODULATION: {
+ jint modulation = -1;
+ switch (message.modulation().getDiscriminator()) {
+ case FrontendModulation::hidl_discriminator::dvbc: {
+ modulation = (jint) message.modulation().dvbc();
+ break;
+ }
+ case FrontendModulation::hidl_discriminator::dvbt: {
+ modulation = (jint) message.modulation().dvbt();
+ break;
+ }
+ case FrontendModulation::hidl_discriminator::dvbs: {
+ modulation = (jint) message.modulation().dvbs();
+ break;
+ }
+ case FrontendModulation::hidl_discriminator::isdbs: {
+ modulation = (jint) message.modulation().isdbs();
+ break;
+ }
+ case FrontendModulation::hidl_discriminator::isdbs3: {
+ modulation = (jint) message.modulation().isdbs3();
+ break;
+ }
+ case FrontendModulation::hidl_discriminator::isdbt: {
+ modulation = (jint) message.modulation().isdbt();
+ break;
+ }
+ case FrontendModulation::hidl_discriminator::atsc: {
+ modulation = (jint) message.modulation().atsc();
+ break;
+ }
+ case FrontendModulation::hidl_discriminator::atsc3: {
+ modulation = (jint) message.modulation().atsc3();
+ break;
+ }
+ case FrontendModulation::hidl_discriminator::dtmb: {
+ modulation = (jint) message.modulation().dtmb();
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+ if (modulation > 0) {
+ env->CallVoidMethod(
+ mObject,
+ env->GetMethodID(clazz, "onModulationReported", "(I)V"),
+ modulation);
+ }
+ break;
+ }
+ case FrontendScanMessageTypeExt1_1::HIGH_PRIORITY: {
+ bool isHighPriority = message.isHighPriority();
+ env->CallVoidMethod(
+ mObject,
+ env->GetMethodID(clazz, "onPriorityReported", "([B)V"),
+ isHighPriority);
+ break;
+ }
+ default:
+ break;
+ }
+ return Void();
+}
+
/////////////// Tuner ///////////////////////
sp<ITuner> JTuner::mTuner;
@@ -3417,6 +3491,31 @@ static DemuxFilterAvSettings getFilterAvSettings(JNIEnv *env, const jobject& set
return filterAvSettings;
}
+static bool getAvStreamType(JNIEnv *env, jobject filterConfigObj, AvStreamType& type) {
+ jobject settingsObj =
+ env->GetObjectField(
+ filterConfigObj,
+ env->GetFieldID(
+ env->FindClass("android/media/tv/tuner/filter/FilterConfiguration"),
+ "mSettings",
+ "Landroid/media/tv/tuner/filter/Settings;"));
+ jclass clazz = env->FindClass("android/media/tv/tuner/filter/AvSettings");
+ AvStreamType streamType;
+ AudioStreamType audioStreamType = static_cast<AudioStreamType>(
+ env->GetIntField(settingsObj, env->GetFieldID(clazz, "mAudioStreamType", "I")));
+ if (audioStreamType != AudioStreamType::UNDEFINED) {
+ type.audio(audioStreamType);
+ return true;
+ }
+ VideoStreamType videoStreamType = static_cast<VideoStreamType>(
+ env->GetIntField(settingsObj, env->GetFieldID(clazz, "mVideoStreamType", "I")));
+ if (videoStreamType != VideoStreamType::UNDEFINED) {
+ type.video(videoStreamType);
+ return true;
+ }
+ return false;
+}
+
static DemuxFilterPesDataSettings getFilterPesDataSettings(JNIEnv *env, const jobject& settings) {
jclass clazz = env->FindClass("android/media/tv/tuner/filter/PesSettings");
uint16_t streamId = static_cast<uint16_t>(
@@ -3739,6 +3838,16 @@ static jint copyData(JNIEnv *env, std::unique_ptr<MQ>& mq, EventFlag* flag, jbyt
return size;
}
+static bool isAvFilterSettings(DemuxFilterSettings filterSettings) {
+ return (filterSettings.getDiscriminator() == DemuxFilterSettings::hidl_discriminator::ts
+ && filterSettings.ts().filterSettings.getDiscriminator()
+ == DemuxTsFilterSettings::FilterSettings::hidl_discriminator::av)
+ ||
+ (filterSettings.getDiscriminator() == DemuxFilterSettings::hidl_discriminator::mmtp
+ && filterSettings.mmtp().filterSettings.getDiscriminator()
+ == DemuxMmtpFilterSettings::FilterSettings::hidl_discriminator::av);
+}
+
static jint android_media_tv_Tuner_configure_filter(
JNIEnv *env, jobject filter, int type, int subtype, jobject settings) {
ALOGD("configure filter type=%d, subtype=%d", type, subtype);
@@ -3762,6 +3871,20 @@ static jint android_media_tv_Tuner_configure_filter(
}
}
+ AvStreamType streamType;
+ if (isAvFilterSettings(filterSettings) && getAvStreamType(env, settings, streamType)) {
+ sp<::android::hardware::tv::tuner::V1_1::IFilter> iFilterSp_1_1;
+ iFilterSp_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(iFilterSp);
+ if (iFilterSp_1_1 != NULL) {
+ res = iFilterSp_1_1->configureAvStreamType(streamType);
+ } else {
+ ALOGW("configureAvStreamType is not supported with the current HAL implementation.");
+ }
+ if (res != Result::SUCCESS) {
+ return (jint) res;
+ }
+ }
+
MQDescriptorSync<uint8_t> filterMQDesc;
Result getQueueDescResult = Result::UNKNOWN_ERROR;
if (filterSp->mFilterMQ == NULL) {
diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h
index 3f74d24b29c5..71d2983b7c51 100644
--- a/media/jni/android_media_tv_Tuner.h
+++ b/media/jni/android_media_tv_Tuner.h
@@ -20,6 +20,7 @@
#include <android/hardware/tv/tuner/1.1/IFilter.h>
#include <android/hardware/tv/tuner/1.1/IFilterCallback.h>
#include <android/hardware/tv/tuner/1.1/IFrontend.h>
+#include <android/hardware/tv/tuner/1.1/IFrontendCallback.h>
#include <android/hardware/tv/tuner/1.1/ITuner.h>
#include <android/hardware/tv/tuner/1.1/types.h>
@@ -63,7 +64,6 @@ using ::android::hardware::tv::tuner::V1_0::IDvrCallback;
using ::android::hardware::tv::tuner::V1_0::IFilter;
using ::android::hardware::tv::tuner::V1_1::IFilterCallback;
using ::android::hardware::tv::tuner::V1_0::IFrontend;
-using ::android::hardware::tv::tuner::V1_0::IFrontendCallback;
using ::android::hardware::tv::tuner::V1_0::ILnb;
using ::android::hardware::tv::tuner::V1_0::ILnbCallback;
using ::android::hardware::tv::tuner::V1_0::ITimeFilter;
@@ -73,6 +73,9 @@ using ::android::hardware::tv::tuner::V1_0::LnbId;
using ::android::hardware::tv::tuner::V1_0::PlaybackStatus;
using ::android::hardware::tv::tuner::V1_0::RecordStatus;
using ::android::hardware::tv::tuner::V1_0::Result;
+using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1;
+using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1;
+using ::android::hardware::tv::tuner::V1_1::IFrontendCallback;
using MQ = MessageQueue<uint8_t, kSynchronizedReadWrite>;
@@ -191,6 +194,8 @@ struct FrontendCallback : public IFrontendCallback {
virtual Return<void> onEvent(FrontendEventType frontendEventType);
virtual Return<void> onScanMessage(
FrontendScanMessageType type, const FrontendScanMessage& message);
+ virtual Return<void> onScanMessageExt1_1(
+ FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& messageExt);
jweak mObject;
FrontendId mId;
diff --git a/non-updatable-api/current.txt b/non-updatable-api/current.txt
index babd54d723b8..225a2e70e998 100644
--- a/non-updatable-api/current.txt
+++ b/non-updatable-api/current.txt
@@ -2851,6 +2851,7 @@ package android.accessibilityservice {
method public int describeContents();
method public int getDisplayId();
method public int getGestureId();
+ method @NonNull public java.util.List<android.view.MotionEvent> getMotionEvents();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.accessibilityservice.AccessibilityGestureEvent> CREATOR;
}
@@ -2932,6 +2933,7 @@ package android.accessibilityservice {
field public static final int GESTURE_SWIPE_UP_AND_DOWN = 7; // 0x7
field public static final int GESTURE_SWIPE_UP_AND_LEFT = 13; // 0xd
field public static final int GESTURE_SWIPE_UP_AND_RIGHT = 14; // 0xe
+ field public static final int GESTURE_UNKNOWN = 0; // 0x0
field public static final int GLOBAL_ACTION_ACCESSIBILITY_ALL_APPS = 14; // 0xe
field public static final int GLOBAL_ACTION_ACCESSIBILITY_BUTTON = 11; // 0xb
field public static final int GLOBAL_ACTION_ACCESSIBILITY_BUTTON_CHOOSER = 12; // 0xc
@@ -3047,6 +3049,7 @@ package android.accessibilityservice {
field public static final int FLAG_REQUEST_SHORTCUT_WARNING_DIALOG_SPOKEN_FEEDBACK = 1024; // 0x400
field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
field public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 64; // 0x40
+ field public static final int FLAG_SEND_MOTION_EVENTS = 16384; // 0x4000
field public static final int FLAG_SERVICE_HANDLES_DOUBLE_TAP = 2048; // 0x800
field public int eventTypes;
field public int feedbackType;
diff --git a/non-updatable-api/system-current.txt b/non-updatable-api/system-current.txt
index 93fdfba276db..3b6673509f36 100644
--- a/non-updatable-api/system-current.txt
+++ b/non-updatable-api/system-current.txt
@@ -5150,12 +5150,45 @@ package android.media.tv.tuner.filter {
public class AvSettings extends android.media.tv.tuner.filter.Settings {
method @NonNull public static android.media.tv.tuner.filter.AvSettings.Builder builder(int, boolean);
+ method public int getAudioStreamType();
+ method public int getVideoStreamType();
method public boolean isPassthrough();
+ field public static final int AUDIO_STREAM_TYPE_AAC = 6; // 0x6
+ field public static final int AUDIO_STREAM_TYPE_AC3 = 7; // 0x7
+ field public static final int AUDIO_STREAM_TYPE_AC4 = 9; // 0x9
+ field public static final int AUDIO_STREAM_TYPE_DRA = 15; // 0xf
+ field public static final int AUDIO_STREAM_TYPE_DTS = 10; // 0xa
+ field public static final int AUDIO_STREAM_TYPE_DTS_HD = 11; // 0xb
+ field public static final int AUDIO_STREAM_TYPE_EAC3 = 8; // 0x8
+ field public static final int AUDIO_STREAM_TYPE_MP3 = 2; // 0x2
+ field public static final int AUDIO_STREAM_TYPE_MPEG1 = 3; // 0x3
+ field public static final int AUDIO_STREAM_TYPE_MPEG2 = 4; // 0x4
+ field public static final int AUDIO_STREAM_TYPE_MPEGH = 5; // 0x5
+ field public static final int AUDIO_STREAM_TYPE_OPUS = 13; // 0xd
+ field public static final int AUDIO_STREAM_TYPE_PCM = 1; // 0x1
+ field public static final int AUDIO_STREAM_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int AUDIO_STREAM_TYPE_VORBIS = 14; // 0xe
+ field public static final int AUDIO_STREAM_TYPE_WMA = 12; // 0xc
+ field public static final int VIDEO_STREAM_TYPE_AV1 = 10; // 0xa
+ field public static final int VIDEO_STREAM_TYPE_AVC = 5; // 0x5
+ field public static final int VIDEO_STREAM_TYPE_AVS = 11; // 0xb
+ field public static final int VIDEO_STREAM_TYPE_AVS2 = 12; // 0xc
+ field public static final int VIDEO_STREAM_TYPE_HEVC = 6; // 0x6
+ field public static final int VIDEO_STREAM_TYPE_MPEG1 = 2; // 0x2
+ field public static final int VIDEO_STREAM_TYPE_MPEG2 = 3; // 0x3
+ field public static final int VIDEO_STREAM_TYPE_MPEG4P2 = 4; // 0x4
+ field public static final int VIDEO_STREAM_TYPE_RESERVED = 1; // 0x1
+ field public static final int VIDEO_STREAM_TYPE_UNDEFINED = 0; // 0x0
+ field public static final int VIDEO_STREAM_TYPE_VC1 = 7; // 0x7
+ field public static final int VIDEO_STREAM_TYPE_VP8 = 8; // 0x8
+ field public static final int VIDEO_STREAM_TYPE_VP9 = 9; // 0x9
}
public static class AvSettings.Builder {
method @NonNull public android.media.tv.tuner.filter.AvSettings build();
+ method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setAudioStreamType(int);
method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setPassthrough(boolean);
+ method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setVideoStreamType(int);
}
public class DownloadEvent extends android.media.tv.tuner.filter.FilterEvent {
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index 0eac4add7b09..02751e27874d 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -737,18 +737,20 @@ public class BugreportProgressService extends Service {
final Intent infoIntent = new Intent(mContext, BugreportProgressService.class);
infoIntent.setAction(INTENT_BUGREPORT_INFO_LAUNCH);
infoIntent.putExtra(EXTRA_ID, info.id);
+ // Simple notification action button clicks are immutable
final PendingIntent infoPendingIntent =
PendingIntent.getService(mContext, info.id, infoIntent,
- PendingIntent.FLAG_UPDATE_CURRENT);
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
final Action infoAction = new Action.Builder(null,
mContext.getString(R.string.bugreport_info_action),
infoPendingIntent).build();
final Intent screenshotIntent = new Intent(mContext, BugreportProgressService.class);
screenshotIntent.setAction(INTENT_BUGREPORT_SCREENSHOT);
screenshotIntent.putExtra(EXTRA_ID, info.id);
+ // Simple notification action button clicks are immutable
PendingIntent screenshotPendingIntent = mTakingScreenshot ? null : PendingIntent
.getService(mContext, info.id, screenshotIntent,
- PendingIntent.FLAG_UPDATE_CURRENT);
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
final Action screenshotAction = new Action.Builder(null,
mContext.getString(R.string.bugreport_screenshot_action),
screenshotPendingIntent).build();
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index a9a5671d5b03..80a6257fd7a9 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -139,7 +139,9 @@ android_library {
"SystemUI-tags",
"SystemUI-proto",
"metrics-helper-lib",
- "androidx.test.rules", "hamcrest-library",
+ "hamcrest-library",
+ "androidx.test.rules",
+ "androidx.test.uiautomator",
"mockito-target-extended-minus-junit4",
"testables",
"truth-prebuilt",
diff --git a/packages/SystemUI/res/layout/qs_footer_impl.xml b/packages/SystemUI/res/layout/qs_footer_impl.xml
index 436188a83d4f..0822947e8b16 100644
--- a/packages/SystemUI/res/layout/qs_footer_impl.xml
+++ b/packages/SystemUI/res/layout/qs_footer_impl.xml
@@ -16,7 +16,7 @@
-->
<!-- Extends FrameLayout -->
-<com.android.systemui.qs.QSFooterImpl
+<com.android.systemui.qs.QSFooterView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/qs_footer"
android:layout_width="match_parent"
@@ -130,4 +130,4 @@
</com.android.systemui.statusbar.AlphaOptimizedFrameLayout>
</com.android.keyguard.AlphaOptimizedLinearLayout>
</LinearLayout>
-</com.android.systemui.qs.QSFooterImpl>
+</com.android.systemui.qs.QSFooterView>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java
index 97196d1ef451..5b41d5f90975 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java
@@ -55,8 +55,6 @@ public class WindowManagerWrapper {
WindowManager.TRANSIT_WALLPAPER_INTRA_CLOSE;
public static final int TRANSIT_TASK_OPEN_BEHIND = WindowManager.TRANSIT_TASK_OPEN_BEHIND;
public static final int TRANSIT_ACTIVITY_RELAUNCH = WindowManager.TRANSIT_ACTIVITY_RELAUNCH;
- public static final int TRANSIT_DOCK_TASK_FROM_RECENTS =
- WindowManager.TRANSIT_DOCK_TASK_FROM_RECENTS;
public static final int TRANSIT_KEYGUARD_GOING_AWAY = WindowManager.TRANSIT_KEYGUARD_GOING_AWAY;
public static final int TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER =
WindowManager.TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardRootViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardRootViewController.java
index 5c125fcc95cb..4e375c2d1227 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardRootViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardRootViewController.java
@@ -19,7 +19,7 @@ package com.android.keyguard;
import android.view.ViewGroup;
import com.android.keyguard.dagger.KeyguardBouncerScope;
-import com.android.keyguard.dagger.RootView;
+import com.android.systemui.dagger.qualifiers.RootView;
import com.android.systemui.statusbar.phone.KeyguardBouncer;
import com.android.systemui.util.ViewController;
diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java
index 881108858b51..4fad9a916d0d 100644
--- a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java
+++ b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java
@@ -24,6 +24,7 @@ import com.android.keyguard.KeyguardMessageArea;
import com.android.keyguard.KeyguardSecurityContainer;
import com.android.keyguard.KeyguardSecurityViewFlipper;
import com.android.systemui.R;
+import com.android.systemui.dagger.qualifiers.RootView;
import com.android.systemui.statusbar.phone.KeyguardBouncer;
import dagger.Module;
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
index 4814501c840d..bdd0b55b27ea 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
@@ -85,10 +85,12 @@ public class SystemUIFactory {
@VisibleForTesting
public void init(Context context, boolean fromTest)
throws ExecutionException, InterruptedException {
+ final boolean initializeComponents = !fromTest
+ && android.os.Process.myUserHandle().isSystem();
mRootComponent = buildGlobalRootComponent(context);
// Stand up WMComponent
mWMComponent = mRootComponent.getWMComponentBuilder().build();
- if (!fromTest) {
+ if (initializeComponents) {
// Only initialize when not starting from tests since this currently initializes some
// components that shouldn't be run in the test environment
mWMComponent.init();
@@ -96,7 +98,7 @@ public class SystemUIFactory {
// And finally, retrieve whatever SysUI needs from WMShell and build SysUI.
SysUIComponent.Builder builder = mRootComponent.getSysUIComponent();
- if (!fromTest) {
+ if (initializeComponents) {
// Only initialize when not starting from tests since this currently initializes some
// components that shouldn't be run in the test environment
builder = builder.setPip(mWMComponent.getPip())
@@ -111,7 +113,7 @@ public class SystemUIFactory {
.setInputConsumerController(mWMComponent.getInputConsumerController())
.setShellTaskOrganizer(mWMComponent.getShellTaskOrganizer())
.build();
- if (!fromTest) {
+ if (initializeComponents) {
mSysUIComponent.init();
}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleFlyoutView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleFlyoutView.java
index 009114ffa0be..d8b32500db85 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleFlyoutView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleFlyoutView.java
@@ -61,7 +61,8 @@ public class BubbleFlyoutView extends FrameLayout {
/** Translation Y of fade animation. */
private static final float FLYOUT_FADE_Y = 40f;
- private static final long FLYOUT_FADE_DURATION = 200L;
+ private static final long FLYOUT_FADE_OUT_DURATION = 150L;
+ private static final long FLYOUT_FADE_IN_DURATION = 250L;
private final int mFlyoutPadding;
private final int mFlyoutSpaceFromBubble;
@@ -235,26 +236,32 @@ public class BubbleFlyoutView extends FrameLayout {
* Fade animation for consecutive flyouts.
*/
void animateUpdate(Bubble.FlyoutMessage flyoutMessage, float parentWidth, float stackY) {
- fade(false /* in */);
- updateFlyoutMessage(flyoutMessage, parentWidth);
- // Wait for TextViews to layout with updated height.
- post(() -> {
- mFlyoutY = stackY + (mBubbleSize - mFlyoutTextContainer.getHeight()) / 2f;
- fade(true /* in */);
- });
+ final Runnable afterFadeOut = () -> {
+ updateFlyoutMessage(flyoutMessage, parentWidth);
+ // Wait for TextViews to layout with updated height.
+ post(() -> {
+ mFlyoutY = stackY + (mBubbleSize - mFlyoutTextContainer.getHeight()) / 2f;
+ fade(true /* in */, () -> {} /* after */);
+ } /* after */ );
+ };
+ fade(false /* in */, afterFadeOut);
}
- private void fade(boolean in) {
+ /*
+ * Fade-out above or fade-in from below.
+ */
+ private void fade(boolean in, Runnable afterFade) {
setAlpha(in ? 0f : 1f);
- setTranslationY(in ? mFlyoutY : mFlyoutY + FLYOUT_FADE_Y);
+ setTranslationY(in ? mFlyoutY + FLYOUT_FADE_Y : mFlyoutY);
animate()
.alpha(in ? 1f : 0f)
- .setDuration(FLYOUT_FADE_DURATION)
+ .setDuration(in ? FLYOUT_FADE_IN_DURATION : FLYOUT_FADE_OUT_DURATION)
.setInterpolator(in ? ALPHA_IN : ALPHA_OUT);
animate()
.translationY(in ? mFlyoutY : mFlyoutY - FLYOUT_FADE_Y)
- .setDuration(FLYOUT_FADE_DURATION)
- .setInterpolator(in ? ALPHA_IN : ALPHA_OUT);
+ .setDuration(in ? FLYOUT_FADE_IN_DURATION : FLYOUT_FADE_OUT_DURATION)
+ .setInterpolator(in ? ALPHA_IN : ALPHA_OUT)
+ .withEndAction(afterFade);
}
private void updateFlyoutMessage(Bubble.FlyoutMessage flyoutMessage, float parentWidth) {
diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/RootView.java b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/RootView.java
index 5ebff097604b..e6c46c07fff8 100644
--- a/packages/SystemUI/src/com/android/keyguard/dagger/RootView.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/RootView.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2019 The Android Open Source Project
+ * Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.keyguard.dagger;
+package com.android.systemui.dagger.qualifiers;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt
index dc157a8dd257..81076475c5ce 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/DoubleLineTileLayout.kt
@@ -33,7 +33,7 @@ class DoubleLineTileLayout(
private const val NUM_LINES = 2
}
- protected val mRecords = ArrayList<QSPanel.TileRecord>()
+ protected val mRecords = ArrayList<QSPanelControllerBase.TileRecord>()
private var _listening = false
private var smallTileSize = 0
private val twoLineHeight
@@ -50,17 +50,17 @@ class DoubleLineTileLayout(
updateResources()
}
- override fun addTile(tile: QSPanel.TileRecord) {
+ override fun addTile(tile: QSPanelControllerBase.TileRecord) {
mRecords.add(tile)
tile.tile.setListening(this, _listening)
addTileView(tile)
}
- protected fun addTileView(tile: QSPanel.TileRecord) {
+ protected fun addTileView(tile: QSPanelControllerBase.TileRecord) {
addView(tile.tileView)
}
- override fun removeTile(tile: QSPanel.TileRecord) {
+ override fun removeTile(tile: QSPanelControllerBase.TileRecord) {
mRecords.remove(tile)
tile.tile.setListening(this, false)
removeView(tile.tileView)
@@ -72,7 +72,7 @@ class DoubleLineTileLayout(
super.removeAllViews()
}
- override fun getOffsetTop(tile: QSPanel.TileRecord?) = top
+ override fun getOffsetTop(tile: QSPanelControllerBase.TileRecord?) = top
override fun updateResources(): Boolean {
with(mContext.resources) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
index 04f379ef35ea..3062a77bcbe1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
@@ -26,7 +26,7 @@ import com.android.internal.logging.UiEventLogger;
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.qs.QSPanel.QSTileLayout;
-import com.android.systemui.qs.QSPanel.TileRecord;
+import com.android.systemui.qs.QSPanelControllerBase.TileRecord;
import java.util.ArrayList;
import java.util.Set;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java
index 9dcc924f161e..4d4195063227 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java
@@ -28,12 +28,17 @@ import com.android.systemui.qs.QSHost.Callback;
import com.android.systemui.qs.QSPanel.QSTileLayout;
import com.android.systemui.qs.TouchAnimator.Builder;
import com.android.systemui.qs.TouchAnimator.Listener;
+import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;
import java.util.ArrayList;
import java.util.Collection;
+import javax.inject.Inject;
+
+/** */
+@QSScope
public class QSAnimator implements Callback, PageListener, Listener, OnLayoutChangeListener,
OnAttachStateChangeListener, Tunable {
@@ -53,6 +58,9 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
private final ArrayList<View> mQuickQsViews = new ArrayList<>();
private final QuickQSPanel mQuickQsPanel;
private final QSPanel mQsPanel;
+ private final QSPanelController mQsPanelController;
+ private final QuickQSPanelController mQuickQSPanelController;
+ private final QSSecurityFooter mSecurityFooter;
private final QS mQs;
private PagedTileLayout mPagedLayout;
@@ -78,10 +86,19 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
private QSTileHost mHost;
private boolean mShowCollapsedOnKeyguard;
- public QSAnimator(QS qs, QuickQSPanel quickPanel, QSPanel panel) {
+ @Inject
+ public QSAnimator(QS qs, QuickQSPanel quickPanel, QSPanel panel,
+ QSPanelController qsPanelController, QuickQSPanelController quickQSPanelController,
+ QSTileHost qsTileHost,
+ QSSecurityFooter securityFooter) {
mQs = qs;
mQuickQsPanel = quickPanel;
mQsPanel = panel;
+ mQsPanelController = qsPanelController;
+ mQuickQSPanelController = quickQSPanelController;
+ mSecurityFooter = securityFooter;
+ mHost = qsTileHost;
+ mHost.addCallback(this);
mQsPanel.addOnAttachStateChangeListener(this);
qs.getView().addOnLayoutChangeListener(this);
if (mQsPanel.isAttachedToWindow()) {
@@ -134,12 +151,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
&& !mShowCollapsedOnKeyguard ? View.INVISIBLE : View.VISIBLE);
}
- public void setHost(QSTileHost qsh) {
- mHost = qsh;
- qsh.addCallback(this);
- updateAnimators();
- }
-
@Override
public void onViewAttachedToWindow(View v) {
Dependency.get(TunerService.class).addTunable(this, ALLOW_FANCY_ANIMATION,
@@ -148,9 +159,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
@Override
public void onViewDetachedFromWindow(View v) {
- if (mHost != null) {
- mHost.removeCallback(this);
- }
+ mHost.removeCallback(this);
Dependency.get(TunerService.class).removeTunable(this);
}
@@ -185,8 +194,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
TouchAnimator.Builder translationXBuilder = new Builder();
TouchAnimator.Builder translationYBuilder = new Builder();
- if (mQsPanel.getHost() == null) return;
- Collection<QSTile> tiles = mQsPanel.getHost().getTiles();
+ Collection<QSTile> tiles = mHost.getTiles();
int count = 0;
int[] loc1 = new int[2];
int[] loc2 = new int[2];
@@ -206,7 +214,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
firstPageBuilder.addFloat(tileLayout, "translationY", heightDiff, 0);
for (QSTile tile : tiles) {
- QSTileView tileView = mQsPanel.getTileView(tile);
+ QSTileView tileView = mQsPanelController.getTileView(tile);
if (tileView == null) {
Log.e(TAG, "tileView is null " + tile.getTileSpec());
continue;
@@ -217,7 +225,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
// This case: less tiles to animate in small displays.
if (count < mQuickQsPanel.getTileLayout().getNumVisibleTiles() && mAllowFancy) {
// Quick tiles.
- QSTileView quickTileView = mQuickQsPanel.getTileView(tile);
+ QSTileView quickTileView = mQuickQSPanelController.getTileView(tile);
if (quickTileView == null) continue;
lastX = loc1[0];
@@ -302,16 +310,12 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
// Fade in the security footer and the divider as we reach the final position
builder = new Builder().setStartDelay(EXPANDED_TILE_DELAY);
- if (mQsPanel.getSecurityFooter() != null) {
- builder.addFloat(mQsPanel.getSecurityFooter().getView(), "alpha", 0, 1);
- }
+ builder.addFloat(mSecurityFooter.getView(), "alpha", 0, 1);
if (mQsPanel.getDivider() != null) {
builder.addFloat(mQsPanel.getDivider(), "alpha", 0, 1);
}
mAllPagesDelayedAnimator = builder.build();
- if (mQsPanel.getSecurityFooter() != null) {
- mAllViews.add(mQsPanel.getSecurityFooter().getView());
- }
+ mAllViews.add(mSecurityFooter.getView());
if (mQsPanel.getDivider() != null) {
mAllViews.add(mQsPanel.getDivider());
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java
index 1e239b1e9ec9..acead987a06a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java
@@ -16,19 +16,21 @@
package com.android.systemui.qs;
-import com.android.systemui.R;
+import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.util.ViewController;
import javax.inject.Inject;
-class QSContainerImplController extends ViewController<QSContainerImpl> {
+/** */
+@QSScope
+public class QSContainerImplController extends ViewController<QSContainerImpl> {
private final QuickStatusBarHeaderController mQuickStatusBarHeaderController;
- private QSContainerImplController(QSContainerImpl view,
- QuickStatusBarHeaderController.Builder quickStatusBarHeaderControllerBuilder) {
+ @Inject
+ QSContainerImplController(QSContainerImpl view,
+ QuickStatusBarHeaderController quickStatusBarHeaderController) {
super(view);
- mQuickStatusBarHeaderController = quickStatusBarHeaderControllerBuilder
- .setQuickStatusBarHeader(mView.findViewById(R.id.header)).build();
+ mQuickStatusBarHeaderController = quickStatusBarHeaderController;
}
@Override
@@ -49,23 +51,7 @@ class QSContainerImplController extends ViewController<QSContainerImpl> {
protected void onViewDetached() {
}
- static class Builder {
- private final QuickStatusBarHeaderController.Builder mQuickStatusBarHeaderControllerBuilder;
- private QSContainerImpl mView;
-
- @Inject
- Builder(
- QuickStatusBarHeaderController.Builder quickStatusBarHeaderControllerBuilder) {
- mQuickStatusBarHeaderControllerBuilder = quickStatusBarHeaderControllerBuilder;
- }
-
- public Builder setQSContainerImpl(QSContainerImpl view) {
- mView = view;
- return this;
- }
-
- public QSContainerImplController build() {
- return new QSContainerImplController(mView, mQuickStatusBarHeaderControllerBuilder);
- }
+ public QSContainerImpl getView() {
+ return mView;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
index 2be8a9704e1c..cfcceb2b2951 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
@@ -76,7 +76,7 @@ public class QSDetail extends LinearLayout {
private int mOpenY;
private boolean mAnimatingOpen;
private boolean mSwitchState;
- private View mFooter;
+ private QSFooter mFooter;
public QSDetail(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
@@ -120,7 +120,8 @@ public class QSDetail extends LinearLayout {
mDetailDoneButton.setOnClickListener(doneListener);
}
- public void setQsPanel(QSPanel panel, QuickStatusBarHeader header, View footer) {
+ /** */
+ public void setQsPanel(QSPanel panel, QuickStatusBarHeader header, QSFooter footer) {
mQsPanel = panel;
mHeader = header;
mFooter = footer;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java
index 84563a078447..8b9dae14c809 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2020 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.
@@ -11,19 +11,14 @@
* 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
+ * limitations under the License.
*/
package com.android.systemui.qs;
import static android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS;
-import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;
-
-import android.content.ClipData;
-import android.content.ClipboardManager;
import android.content.Context;
-import android.content.Intent;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.graphics.PorterDuff.Mode;
@@ -36,50 +31,27 @@ import android.os.Handler;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
-import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
-import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.settingslib.Utils;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.drawable.UserIconDrawable;
-import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.R.dimen;
-import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.TouchAnimator.Builder;
-import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.MultiUserSwitch;
import com.android.systemui.statusbar.phone.SettingsButton;
-import com.android.systemui.statusbar.policy.DeviceProvisionedController;
-import com.android.systemui.statusbar.policy.UserInfoController;
-import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener;
-import com.android.systemui.tuner.TunerService;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-public class QSFooterImpl extends FrameLayout implements QSFooter,
- OnClickListener, OnUserInfoChangedListener {
- private static final String TAG = "QSFooterImpl";
-
- private final ActivityStarter mActivityStarter;
- private final UserInfoController mUserInfoController;
- private final DeviceProvisionedController mDeviceProvisionedController;
- private final UserTracker mUserTracker;
+/** */
+public class QSFooterView extends FrameLayout {
private SettingsButton mSettingsButton;
protected View mSettingsContainer;
private PageIndicator mPageIndicator;
@@ -87,7 +59,6 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
private boolean mShouldShowBuildText;
private boolean mQsDisabled;
- private QSPanel mQsPanel;
private QuickQSPanel mQuickQsPanel;
private boolean mExpanded;
@@ -117,39 +88,19 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
}
};
- @Inject
- public QSFooterImpl(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
- ActivityStarter activityStarter, UserInfoController userInfoController,
- DeviceProvisionedController deviceProvisionedController, UserTracker userTracker) {
+ public QSFooterView(Context context, AttributeSet attrs) {
super(context, attrs);
- mActivityStarter = activityStarter;
- mUserInfoController = userInfoController;
- mDeviceProvisionedController = deviceProvisionedController;
- mUserTracker = userTracker;
- }
-
- @VisibleForTesting
- public QSFooterImpl(Context context, AttributeSet attrs) {
- this(context, attrs,
- Dependency.get(ActivityStarter.class),
- Dependency.get(UserInfoController.class),
- Dependency.get(DeviceProvisionedController.class),
- Dependency.get(UserTracker.class));
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mEdit = findViewById(android.R.id.edit);
- mEdit.setOnClickListener(view ->
- mActivityStarter.postQSRunnableDismissingKeyguard(() ->
- mQsPanel.showEdit(view)));
mPageIndicator = findViewById(R.id.footer_page_indicator);
mSettingsButton = findViewById(R.id.settings_button);
mSettingsContainer = findViewById(R.id.settings_button_container);
- mSettingsButton.setOnClickListener(this);
mMultiUserSwitch = findViewById(R.id.multi_user_switch);
mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
@@ -157,19 +108,6 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
mActionsContainer = findViewById(R.id.qs_footer_actions_container);
mEditContainer = findViewById(R.id.qs_footer_actions_edit_container);
mBuildText = findViewById(R.id.build);
- mBuildText.setOnLongClickListener(view -> {
- CharSequence buildText = mBuildText.getText();
- if (!TextUtils.isEmpty(buildText)) {
- ClipboardManager service =
- mUserTracker.getUserContext().getSystemService(ClipboardManager.class);
- String label = mContext.getString(R.string.build_number_clip_data_label);
- service.setPrimaryClip(ClipData.newPlainText(label, buildText));
- Toast.makeText(mContext, R.string.build_number_copy_toast, Toast.LENGTH_SHORT)
- .show();
- return true;
- }
- return false;
- });
// RenderThread is doing more harm than good when touching the header (to expand quick
// settings), so disable it for this view
@@ -180,7 +118,6 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight,
oldBottom) -> updateAnimator(right - left));
setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
- updateEverything();
setBuildText();
}
@@ -249,24 +186,22 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
.build();
}
- @Override
- public void setKeyguardShowing(boolean keyguardShowing) {
+ /** */
+ public void setKeyguardShowing() {
setExpansion(mExpansionAmount);
}
- @Override
public void setExpandClickListener(OnClickListener onClickListener) {
mExpandClickListener = onClickListener;
}
- @Override
- public void setExpanded(boolean expanded) {
+ void setExpanded(boolean expanded, boolean isTunerEnabled) {
if (mExpanded == expanded) return;
mExpanded = expanded;
- updateEverything();
+ updateEverything(isTunerEnabled);
}
- @Override
+ /** */
public void setExpansion(float headerExpansionFraction) {
mExpansionAmount = headerExpansionFraction;
if (mSettingsCogAnimator != null) mSettingsCogAnimator.setPosition(headerExpansionFraction);
@@ -287,18 +222,16 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
@Override
@VisibleForTesting
public void onDetachedFromWindow() {
- setListening(false);
mContext.getContentResolver().unregisterContentObserver(mDeveloperSettingsObserver);
super.onDetachedFromWindow();
}
- @Override
+ /** */
public void setListening(boolean listening) {
if (listening == mListening) {
return;
}
mListening = listening;
- updateListeners();
}
@Override
@@ -318,17 +251,16 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND);
}
- @Override
- public void disable(int state1, int state2, boolean animate) {
+ void disable(int state2, boolean isTunerEnabled) {
final boolean disabled = (state2 & DISABLE2_QUICK_SETTINGS) != 0;
if (disabled == mQsDisabled) return;
mQsDisabled = disabled;
- updateEverything();
+ updateEverything(isTunerEnabled);
}
- public void updateEverything() {
+ void updateEverything(boolean isTunerEnabled) {
post(() -> {
- updateVisibilities();
+ updateVisibilities(isTunerEnabled);
updateClickabilities();
setClickable(false);
});
@@ -341,11 +273,10 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
mBuildText.setLongClickable(mBuildText.getVisibility() == View.VISIBLE);
}
- private void updateVisibilities() {
+ private void updateVisibilities(boolean isTunerEnabled) {
mSettingsContainer.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE);
mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(
- TunerService.isTunerEnabled(mContext, mUserTracker.getUserHandle()) ? View.VISIBLE
- : View.INVISIBLE);
+ isTunerEnabled ? View.VISIBLE : View.INVISIBLE);
final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
mMultiUserSwitch.setVisibility(showUserSwitcher() ? View.VISIBLE : View.INVISIBLE);
mEditContainer.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
@@ -358,78 +289,22 @@ public class QSFooterImpl extends FrameLayout implements QSFooter,
return mExpanded && mMultiUserSwitch.isMultiUserEnabled();
}
- private void updateListeners() {
- if (mListening) {
- mUserInfoController.addCallback(this);
- } else {
- mUserInfoController.removeCallback(this);
- }
- }
-
- @Override
+ /** */
public void setQSPanel(final QSPanel qsPanel) {
- mQsPanel = qsPanel;
- if (mQsPanel != null) {
+ if (qsPanel != null) {
mMultiUserSwitch.setQsPanel(qsPanel);
- mQsPanel.setFooterPageIndicator(mPageIndicator);
+ qsPanel.setFooterPageIndicator(mPageIndicator);
}
}
- @Override
public void setQQSPanel(@Nullable QuickQSPanel panel) {
mQuickQsPanel = panel;
}
- @Override
- public void onClick(View v) {
- // Don't do anything until view are unhidden
- if (!mExpanded) {
- return;
- }
-
- if (v == mSettingsButton) {
- if (!mDeviceProvisionedController.isCurrentUserSetup()) {
- // If user isn't setup just unlock the device and dump them back at SUW.
- mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
- });
- return;
- }
- MetricsLogger.action(mContext,
- mExpanded ? MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH
- : MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH);
- if (mSettingsButton.isTunerClick()) {
- mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
- if (TunerService.isTunerEnabled(mContext, mUserTracker.getUserHandle())) {
- TunerService.showResetRequest(mContext, mUserTracker.getUserHandle(),
- () -> {
- // Relaunch settings so that the tuner disappears.
- startSettingsActivity();
- });
- } else {
- Toast.makeText(getContext(), R.string.tuner_toast,
- Toast.LENGTH_LONG).show();
- TunerService.setTunerEnabled(mContext, mUserTracker.getUserHandle(), true);
- }
- startSettingsActivity();
-
- });
- } else {
- startSettingsActivity();
- }
- }
- }
-
- private void startSettingsActivity() {
- mActivityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
- true /* dismissShade */);
- }
- @Override
- public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
- if (picture != null &&
- UserManager.get(mContext).isGuestUser(KeyguardUpdateMonitor.getCurrentUser()) &&
- !(picture instanceof UserIconDrawable)) {
- picture = picture.getConstantState().newDrawable(mContext.getResources()).mutate();
+ void onUserInfoChanged(Drawable picture, boolean isGuestUser) {
+ if (picture != null && isGuestUser && !(picture instanceof UserIconDrawable)) {
+ picture = picture.getConstantState().newDrawable(getResources()).mutate();
picture.setColorFilter(
Utils.getColorAttrDefaultColor(mContext, android.R.attr.colorForeground),
Mode.SRC_IN);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java
new file mode 100644
index 000000000000..e3af04bdc31e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.UserManager;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.systemui.R;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.qs.dagger.QSScope;
+import com.android.systemui.settings.UserTracker;
+import com.android.systemui.statusbar.phone.SettingsButton;
+import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.statusbar.policy.UserInfoController;
+import com.android.systemui.tuner.TunerService;
+import com.android.systemui.util.ViewController;
+
+import javax.inject.Inject;
+
+/**
+ * Controller for {@link QSFooterView}.
+ */
+@QSScope
+public class QSFooterViewController extends ViewController<QSFooterView> implements QSFooter {
+
+ private final UserManager mUserManager;
+ private final UserInfoController mUserInfoController;
+ private final ActivityStarter mActivityStarter;
+ private final DeviceProvisionedController mDeviceProvisionedController;
+ private final UserTracker mUserTracker;
+ private final QSPanelController mQsPanelController;
+ private final TunerService mTunerService;
+ private final MetricsLogger mMetricsLogger;
+ private final SettingsButton mSettingsButton;
+ private final TextView mBuildText;
+ private final View mEdit;
+
+ private final UserInfoController.OnUserInfoChangedListener mOnUserInfoChangedListener =
+ new UserInfoController.OnUserInfoChangedListener() {
+ @Override
+ public void onUserInfoChanged(String name, Drawable picture, String userAccount) {
+ boolean isGuestUser = mUserManager.isGuestUser(KeyguardUpdateMonitor.getCurrentUser());
+ mView.onUserInfoChanged(picture, isGuestUser);
+ }
+ };
+
+ private final View.OnClickListener mSettingsOnClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // Don't do anything until view are unhidden
+ if (!mExpanded) {
+ return;
+ }
+
+ if (v == mSettingsButton) {
+ if (!mDeviceProvisionedController.isCurrentUserSetup()) {
+ // If user isn't setup just unlock the device and dump them back at SUW.
+ mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
+ });
+ return;
+ }
+ mMetricsLogger.action(
+ mExpanded ? MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH
+ : MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH);
+ if (mSettingsButton.isTunerClick()) {
+ mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
+ if (isTunerEnabled()) {
+ mTunerService.showResetRequest(
+ mUserTracker.getUserHandle(),
+ () -> {
+ // Relaunch settings so that the tuner disappears.
+ startSettingsActivity();
+ });
+ } else {
+ Toast.makeText(getContext(), R.string.tuner_toast,
+ Toast.LENGTH_LONG).show();
+ mTunerService.setTunerEnabled(mUserTracker.getUserHandle(), true);
+ }
+ startSettingsActivity();
+
+ });
+ } else {
+ startSettingsActivity();
+ }
+ }
+ }
+ };
+
+ private boolean mListening;
+ private boolean mExpanded;
+
+ @Inject
+ QSFooterViewController(QSFooterView view, UserManager userManager,
+ UserInfoController userInfoController, ActivityStarter activityStarter,
+ DeviceProvisionedController deviceProvisionedController, UserTracker userTracker,
+ QSPanelController qsPanelController, TunerService tunerService,
+ MetricsLogger metricsLogger) {
+ super(view);
+ mUserManager = userManager;
+ mUserInfoController = userInfoController;
+ mActivityStarter = activityStarter;
+ mDeviceProvisionedController = deviceProvisionedController;
+ mUserTracker = userTracker;
+ mQsPanelController = qsPanelController;
+ mTunerService = tunerService;
+ mMetricsLogger = metricsLogger;
+
+ mSettingsButton = mView.findViewById(R.id.settings_button);
+ mBuildText = mView.findViewById(R.id.build);
+ mEdit = mView.findViewById(android.R.id.edit);
+ }
+
+
+ @Override
+ protected void onViewAttached() {
+ mSettingsButton.setOnClickListener(mSettingsOnClickListener);
+ mBuildText.setOnLongClickListener(view -> {
+ CharSequence buildText = mBuildText.getText();
+ if (!TextUtils.isEmpty(buildText)) {
+ ClipboardManager service =
+ mUserTracker.getUserContext().getSystemService(ClipboardManager.class);
+ String label = getResources().getString(R.string.build_number_clip_data_label);
+ service.setPrimaryClip(ClipData.newPlainText(label, buildText));
+ Toast.makeText(getContext(), R.string.build_number_copy_toast, Toast.LENGTH_SHORT)
+ .show();
+ return true;
+ }
+ return false;
+ });
+
+ mEdit.setOnClickListener(view ->
+ mActivityStarter.postQSRunnableDismissingKeyguard(() ->
+ mQsPanelController.showEdit(view)));
+
+ mView.updateEverything(isTunerEnabled());
+ }
+
+ @Override
+ protected void onViewDetached() {
+ setListening(false);
+ }
+
+
+ @Override
+ public void setQSPanel(@Nullable QSPanel panel) {
+ mView.setQSPanel(panel);
+ }
+
+ @Override
+ public void setVisibility(int visibility) {
+ mView.setVisibility(visibility);
+ }
+
+ @Override
+ public void setExpanded(boolean expanded) {
+ mExpanded = expanded;
+ mView.setExpanded(expanded, isTunerEnabled());
+ }
+
+
+ @Override
+ public int getHeight() {
+ return mView.getHeight();
+ }
+
+ @Override
+ public void setExpansion(float expansion) {
+ mView.setExpansion(expansion);
+ }
+
+ @Override
+ public void setListening(boolean listening) {
+ if (mListening == listening) {
+ return;
+ }
+
+ mListening = listening;
+ if (mListening) {
+ mUserInfoController.addCallback(mOnUserInfoChangedListener);
+ } else {
+ mUserInfoController.removeCallback(mOnUserInfoChangedListener);
+ }
+ }
+
+ @Override
+ public void setKeyguardShowing(boolean keyguardShowing) {
+ mView.setKeyguardShowing();
+ }
+
+ /** */
+ @Override
+ public void setExpandClickListener(View.OnClickListener onClickListener) {
+ mView.setExpandClickListener(onClickListener);
+ }
+
+ @Override
+ public void setQQSPanel(@Nullable QuickQSPanel panel) {
+ mView.setQQSPanel(panel);
+ }
+
+ @Override
+ public void disable(int state1, int state2, boolean animate) {
+ mView.disable(state2, isTunerEnabled());
+ }
+
+
+ private void startSettingsActivity() {
+ mActivityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
+ true /* dismissShade */);
+ }
+
+ private boolean isTunerEnabled() {
+ return mTunerService.isTunerEnabled(mUserTracker.getUserHandle());
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
index 3a783653a2d8..1a7d366d84b4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
@@ -35,11 +35,11 @@ import androidx.annotation.VisibleForTesting;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
-import com.android.systemui.R.id;
import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.customize.QSCustomizer;
+import com.android.systemui.qs.dagger.QSFragmentComponent;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
@@ -70,7 +70,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
private HeightListener mPanelView;
protected QuickStatusBarHeader mHeader;
private QSCustomizer mQSCustomizer;
- protected QSPanel mQSPanel;
protected NonInterceptingScrollView mQSPanelScrollView;
private QSDetail mQSDetail;
private boolean mListening;
@@ -82,7 +81,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
private final InjectionInflationController mInjectionInflater;
- private final QSContainerImplController.Builder mQSContainerImplControllerBuilder;
+ private final QSFragmentComponent.Factory mQsComponentFactory;
private final QSTileHost mHost;
private boolean mShowCollapsedOnKeyguard;
private boolean mLastKeyguardAndExpanded;
@@ -96,15 +95,17 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
private int[] mTmpLocation = new int[2];
private int mLastViewHeight;
private float mLastHeaderTranslation;
+ private QSPanelController mQSPanelController;
+ private QuickQSPanelController mQuickQSPanelController;
@Inject
public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
InjectionInflationController injectionInflater, QSTileHost qsTileHost,
StatusBarStateController statusBarStateController, CommandQueue commandQueue,
- QSContainerImplController.Builder qsContainerImplControllerBuilder) {
+ QSFragmentComponent.Factory qsComponentFactory) {
mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;
mInjectionInflater = injectionInflater;
- mQSContainerImplControllerBuilder = qsContainerImplControllerBuilder;
+ mQsComponentFactory = qsComponentFactory;
commandQueue.observe(getLifecycle(), this);
mHost = qsTileHost;
mStatusBarStateController = statusBarStateController;
@@ -120,8 +121,13 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- mQSPanel = view.findViewById(R.id.quick_settings_panel);
+ QSFragmentComponent qsFragmentComponent = mQsComponentFactory.create(this);
+ mQSPanelController = qsFragmentComponent.getQSPanelController();
+ mQuickQSPanelController = qsFragmentComponent.getQuickQSPanelController();
+
+ mQSPanelController.init();
+ mQuickQSPanelController.init();
+
mQSPanelScrollView = view.findViewById(R.id.expanded_qs_scroll_view);
mQSPanelScrollView.addOnLayoutChangeListener(
(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
@@ -135,18 +141,15 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
});
mQSDetail = view.findViewById(R.id.qs_detail);
mHeader = view.findViewById(R.id.header);
- mQSPanel.setHeaderContainer(view.findViewById(R.id.header_text_container));
- mFooter = view.findViewById(R.id.qs_footer);
- mContainer = view.findViewById(id.quick_settings_container);
+ mQSPanelController.setHeaderContainer(view.findViewById(R.id.header_text_container));
+ mFooter = qsFragmentComponent.getQSFooter();
- mQSContainerImplController = mQSContainerImplControllerBuilder
- .setQSContainerImpl((QSContainerImpl) view)
- .build();
+ mQSContainerImplController = qsFragmentComponent.getQSContainerImplController();
mQSContainerImplController.init();
+ mContainer = mQSContainerImplController.getView();
- mQSDetail.setQsPanel(mQSPanel, mHeader, (View) mFooter);
- mQSAnimator = new QSAnimator(this, mHeader.findViewById(R.id.quick_qs_panel), mQSPanel);
-
+ mQSDetail.setQsPanel(mQSPanelController.getView(), mHeader, mFooter);
+ mQSAnimator = qsFragmentComponent.getQSAnimator();
mQSCustomizer = view.findViewById(R.id.qs_customize);
mQSCustomizer.setQs(this);
@@ -156,7 +159,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
setEditLocation(view);
mQSCustomizer.restoreInstanceState(savedInstanceState);
if (mQsExpanded) {
- mQSPanel.getTileLayout().restoreInstanceState(savedInstanceState);
+ mQSPanelController.getTileLayout().restoreInstanceState(savedInstanceState);
}
}
setHost(mHost);
@@ -188,7 +191,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
outState.putBoolean(EXTRA_LISTENING, mListening);
mQSCustomizer.saveInstanceState(outState);
if (mQsExpanded) {
- mQSPanel.getTileLayout().saveInstanceState(outState);
+ mQSPanelController.getTileLayout().saveInstanceState(outState);
}
}
@@ -249,14 +252,10 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
}
public void setHost(QSTileHost qsh) {
- mQSPanel.setHost(qsh, mQSCustomizer);
- mHeader.setQSPanel(mQSPanel);
- mFooter.setQSPanel(mQSPanel);
+ mQSPanelController.setCustomizer(mQSCustomizer);
+ mHeader.setQSPanel(mQSPanelController.getView());
+ mFooter.setQSPanel(mQSPanelController.getView());
mQSDetail.setHost(qsh);
-
- if (mQSAnimator != null) {
- mQSAnimator.setHost(qsh);
- }
}
@Override
@@ -278,7 +277,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
private void updateQsState() {
final boolean expandVisually = mQsExpanded || mStackScrollerOverscrolling
|| mHeaderAnimating;
- mQSPanel.setExpanded(mQsExpanded);
+ mQSPanelController.setExpanded(mQsExpanded);
mQSDetail.setExpanded(mQsExpanded);
boolean keyguardShowing = isKeyguardShowing();
mHeader.setVisibility((mQsExpanded || !keyguardShowing || mHeaderAnimating
@@ -294,7 +293,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
: View.INVISIBLE);
mFooter.setExpanded((keyguardShowing && !mHeaderAnimating && !mShowCollapsedOnKeyguard)
|| (mQsExpanded && !mStackScrollerOverscrolling));
- mQSPanel.setVisibility(!mQsDisabled && expandVisually ? View.VISIBLE : View.INVISIBLE);
+ mQSPanelController.setVisibility(
+ !mQsDisabled && expandVisually ? View.VISIBLE : View.INVISIBLE);
}
private boolean isKeyguardShowing() {
@@ -317,8 +317,12 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
}
}
+ public QSPanelController getQSPanelController() {
+ return mQSPanelController;
+ }
+
public QSPanel getQsPanel() {
- return mQSPanel;
+ return mQSPanelController.getView();
}
public QSCustomizer getCustomizer() {
@@ -327,7 +331,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
@Override
public boolean isShowingDetail() {
- return mQSPanel.isShowingCustomize() || mQSDetail.isShowingDetail();
+ return mQSPanelController.isShowingCustomize() || mQSDetail.isShowingDetail();
}
@Override
@@ -339,7 +343,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
public void setExpanded(boolean expanded) {
if (DEBUG) Log.d(TAG, "setExpanded " + expanded);
mQsExpanded = expanded;
- mQSPanel.setListening(mListening, mQsExpanded);
+ mQSPanelController.setListening(mListening, mQsExpanded);
updateQsState();
}
@@ -368,7 +372,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
mListening = listening;
mQSContainerImplController.setListening(listening);
mFooter.setListening(listening);
- mQSPanel.setListening(mListening, mQsExpanded);
+ mQSPanelController.setListening(mListening, mQsExpanded);
}
@Override
@@ -406,11 +410,15 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
float panelTranslationY = translationScaleY * heightDiff;
// Let the views animate their contents correctly by giving them the necessary context.
- mHeader.setExpansion(onKeyguardAndExpanded, expansion,
- panelTranslationY);
+ mHeader.setExpansion(onKeyguardAndExpanded, expansion, panelTranslationY);
+ if (expansion < 1 && expansion > 0.99) {
+ if (mQuickQSPanelController.switchTileLayout(false)) {
+ mHeader.updateResources();
+ }
+ }
mFooter.setExpansion(onKeyguardAndExpanded ? 1 : expansion);
- mQSPanel.getQsTileRevealController().setExpansion(expansion);
- mQSPanel.getTileLayout().setExpansion(expansion);
+ mQSPanelController.getQsTileRevealController().setExpansion(expansion);
+ mQSPanelController.getTileLayout().setExpansion(expansion);
mQSPanelScrollView.setTranslationY(translationScaleY * heightDiff);
if (fullyCollapsed) {
mQSPanelScrollView.setScrollY(0);
@@ -448,7 +456,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
float expandedMediaPosition = absoluteBottomPosition - mQSPanelScrollView.getScrollY()
+ mQSPanelScrollView.getScrollRange();
// The expanded media host should never move below the laid out position
- pinToBottom(expandedMediaPosition, mQSPanel.getMediaHost(), true /* expanded */);
+ pinToBottom(
+ expandedMediaPosition, mQSPanelController.getMediaHost(), true /* expanded */);
// The expanded media host should never move above the laid out position
pinToBottom(absoluteBottomPosition, mHeader.getHeaderQsPanel().getMediaHost(),
false /* expanded */);
@@ -538,7 +547,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
@Override
public void closeDetail() {
- mQSPanel.closeDetail();
+ mQSPanelController.closeDetail();
}
public void notifyCustomizeChanged() {
@@ -553,8 +562,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
}
/**
- * The height this view wants to be. This is different from {@link #getMeasuredHeight} such that
- * during closing the detail panel, this already returns the smaller height.
+ * The height this view wants to be. This is different from {@link View#getMeasuredHeight} such
+ * that during closing the detail panel, this already returns the smaller height.
*/
@Override
public int getDesiredHeight() {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index efe46096239f..1b17a2a277f2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -22,11 +22,9 @@ import static com.android.systemui.util.Utils.useQsMediaPlayer;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.content.ComponentName;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.metrics.LogMaker;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -43,41 +41,30 @@ import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.widget.RemeasuringLinearLayout;
import com.android.systemui.Dependency;
-import com.android.systemui.Dumpable;
import com.android.systemui.R;
-import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaHierarchyManager;
import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.plugins.qs.QSTile;
-import com.android.systemui.plugins.qs.QSTileView;
-import com.android.systemui.qs.QSHost.Callback;
import com.android.systemui.qs.customize.QSCustomizer;
-import com.android.systemui.qs.external.CustomTile;
import com.android.systemui.qs.logging.QSLogger;
-import com.android.systemui.settings.BrightnessController;
import com.android.systemui.settings.ToggleSliderView;
-import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import com.android.systemui.statusbar.policy.BrightnessMirrorController.BrightnessMirrorListener;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;
import com.android.systemui.util.animation.DisappearParameters;
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import java.util.function.Consumer;
-import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Named;
/** View that represents the quick settings tile panel (when expanded/pulled down). **/
-public class QSPanel extends LinearLayout implements Tunable, Callback, BrightnessMirrorListener,
- Dumpable {
+public class QSPanel extends LinearLayout implements Tunable, BrightnessMirrorListener {
public static final String QS_SHOW_BRIGHTNESS = "qs_show_brightness";
public static final String QS_SHOW_HEADER = "qs_show_header";
@@ -85,20 +72,15 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
private static final String TAG = "QSPanel";
protected final Context mContext;
- protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
- private final BroadcastDispatcher mBroadcastDispatcher;
protected final MediaHost mMediaHost;
/**
* The index where the content starts that needs to be moved between parents
*/
private final int mMovableContentStartIndex;
- private String mCachedSpecs = "";
@Nullable
protected View mBrightnessView;
- @Nullable
- private BrightnessController mBrightnessController;
private final H mHandler = new H();
private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);
@@ -112,14 +94,14 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
protected boolean mListening;
private QSDetail.Callback mCallback;
- private final DumpManager mDumpManager;
private final QSLogger mQSLogger;
protected final UiEventLogger mUiEventLogger;
protected QSTileHost mHost;
- private final UserTracker mUserTracker;
+ private final List<OnConfigurationChangedListener> mOnConfigurationChangedListeners =
+ new ArrayList<>();
@Nullable
- protected QSSecurityFooter mSecurityFooter;
+ protected View mSecurityFooter;
@Nullable
protected View mFooter;
@@ -156,12 +138,9 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
public QSPanel(
@Named(VIEW_CONTEXT) Context context,
AttributeSet attrs,
- DumpManager dumpManager,
- BroadcastDispatcher broadcastDispatcher,
QSLogger qsLogger,
@Named(QS_PANEL) MediaHost mediaHost,
- UiEventLogger uiEventLogger,
- UserTracker userTracker
+ UiEventLogger uiEventLogger
) {
super(context, attrs);
mUsingMediaPlayer = useQsMediaPlayer(context);
@@ -174,16 +153,14 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
});
mContext = context;
mQSLogger = qsLogger;
- mDumpManager = dumpManager;
- mBroadcastDispatcher = broadcastDispatcher;
mUiEventLogger = uiEventLogger;
- mUserTracker = userTracker;
setOrientation(VERTICAL);
addViewsAboveTiles();
mMovableContentStartIndex = getChildCount();
mRegularTileLayout = createRegularTileLayout();
+ mTileLayout = mRegularTileLayout;
if (mUsingMediaPlayer) {
mHorizontalLinearLayout = new RemeasuringLinearLayout(mContext);
@@ -209,35 +186,27 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
initMediaHostState();
}
- addSecurityFooter();
if (mRegularTileLayout instanceof PagedTileLayout) {
mQsTileRevealController = new QSTileRevealController(mContext, this,
(PagedTileLayout) mRegularTileLayout);
}
- mQSLogger.logAllTilesChangeListening(mListening, getDumpableTag(), mCachedSpecs);
- updateResources();
+ mQSLogger.logAllTilesChangeListening(mListening, getDumpableTag(), "");
}
protected void onMediaVisibilityChanged(Boolean visible) {
- switchTileLayout();
if (mMediaVisibilityChangedListener != null) {
mMediaVisibilityChangedListener.accept(visible);
}
}
- protected void addSecurityFooter() {
- mSecurityFooter = new QSSecurityFooter(this, mContext, mUserTracker);
- }
-
protected void addViewsAboveTiles() {
mBrightnessView = LayoutInflater.from(mContext).inflate(
R.layout.quick_settings_brightness_dialog, this, false);
addView(mBrightnessView);
- mBrightnessController = new BrightnessController(getContext(),
- findViewById(R.id.brightness_slider), mBroadcastDispatcher);
}
- protected QSTileLayout createRegularTileLayout() {
+ /** */
+ public QSTileLayout createRegularTileLayout() {
if (mRegularTileLayout == null) {
mRegularTileLayout = (QSTileLayout) LayoutInflater.from(mContext).inflate(
R.layout.qs_paged_tile_layout, this, false);
@@ -337,37 +306,10 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
@Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- final TunerService tunerService = Dependency.get(TunerService.class);
- tunerService.addTunable(this, QS_SHOW_BRIGHTNESS);
-
- if (mHost != null) {
- setTiles(mHost.getTiles());
- }
- if (mBrightnessMirrorController != null) {
- mBrightnessMirrorController.addCallback(this);
- }
- mDumpManager.registerDumpable(getDumpableTag(), this);
- }
-
- @Override
protected void onDetachedFromWindow() {
- Dependency.get(TunerService.class).removeTunable(this);
- if (mHost != null) {
- mHost.removeCallback(this);
- }
if (mTileLayout != null) {
mTileLayout.setListening(false);
}
- for (TileRecord record : mRecords) {
- record.tile.removeCallbacks();
- }
- mRecords.clear();
- if (mBrightnessMirrorController != null) {
- mBrightnessMirrorController.removeCallback(this);
- }
- mDumpManager.unregisterDumpable(getDumpableTag());
super.onDetachedFromWindow();
}
@@ -376,11 +318,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
@Override
- public void onTilesChanged() {
- setTiles(mHost.getTiles());
- }
-
- @Override
public void onTuningChanged(String key, String newValue) {
if (QS_SHOW_BRIGHTNESS.equals(key) && mBrightnessView != null) {
updateViewVisibilityForTuningValue(mBrightnessView, newValue);
@@ -391,8 +328,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
view.setVisibility(TunerService.parseIntegerSwitch(newValue, true) ? VISIBLE : GONE);
}
- public void openDetails(String subPanel) {
- QSTile tile = getTile(subPanel);
+ /** */
+ public void openDetails(QSTile tile) {
// If there's no tile with that name (as defined in QSFactoryImpl or other QSFactory),
// QSFactory will not be able to create a tile and getTile will return null
if (tile != null) {
@@ -400,15 +337,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
}
- private QSTile getTile(String subPanel) {
- for (int i = 0; i < mRecords.size(); i++) {
- if (subPanel.equals(mRecords.get(i).tile.getTileSpec())) {
- return mRecords.get(i).tile;
- }
- }
- return mHost.createTile(subPanel);
- }
-
public void setBrightnessMirror(BrightnessMirrorController c) {
if (mBrightnessMirrorController != null) {
mBrightnessMirrorController.removeCallback(this);
@@ -434,17 +362,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
mCallback = callback;
}
- public void setHost(QSTileHost host, QSCustomizer customizer) {
- mHost = host;
- mHost.addCallback(this);
- setTiles(mHost.getTiles());
- if (mSecurityFooter != null) {
- mSecurityFooter.setHostEnvironment(host);
- }
+ void setCustomizer(QSCustomizer customizer) {
mCustomizePanel = customizer;
- if (mCustomizePanel != null) {
- mCustomizePanel.setHost(mHost);
- }
}
/**
@@ -483,9 +402,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
updatePageIndicator();
- if (mListening) {
- refreshAllTiles();
- }
if (mTileLayout != null) {
mTileLayout.updateResources();
}
@@ -506,20 +422,21 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
res.getDimensionPixelSize(R.dimen.qs_panel_padding_bottom));
}
+ void addOnConfigurationChangedListener(OnConfigurationChangedListener listener) {
+ mOnConfigurationChangedListeners.add(listener);
+ }
+
+ void removeOnConfigurationChangedListener(OnConfigurationChangedListener listener) {
+ mOnConfigurationChangedListeners.remove(listener);
+ }
+
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- if (mSecurityFooter != null) {
- mSecurityFooter.onConfigurationChanged();
- }
- updateResources();
+ mOnConfigurationChangedListeners.forEach(
+ listener -> listener.onConfigurationChange(newConfig));
updateBrightnessMirror();
-
- if (newConfig.orientation != mLastOrientation) {
- mLastOrientation = newConfig.orientation;
- switchTileLayout();
- }
}
@Override
@@ -527,14 +444,9 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
super.onFinishInflate();
mFooter = findViewById(R.id.qs_footer);
mDivider = findViewById(R.id.divider);
- switchTileLayout(true /* force */);
- }
-
- boolean switchTileLayout() {
- return switchTileLayout(false /* force */);
}
- private boolean switchTileLayout(boolean force) {
+ boolean switchTileLayout(boolean force, List<QSPanelControllerBase.TileRecord> records) {
/** Whether or not the QuickQSPanel currently contains a media player. */
boolean horizontal = shouldUseHorizontalLayout();
if (mDivider != null) {
@@ -562,13 +474,12 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
reAttachMediaHost();
if (mTileLayout != null) {
mTileLayout.setListening(false);
- for (TileRecord record : mRecords) {
+ for (QSPanelControllerBase.TileRecord record : records) {
mTileLayout.removeTile(record);
record.tile.removeCallback(record.callback);
}
}
mTileLayout = newLayout;
- if (mHost != null) setTiles(mHost.getTiles());
newLayout.setListening(mListening);
if (needsDynamicRowsAndColumns()) {
newLayout.setMinRows(horizontal ? 2 : 1);
@@ -617,20 +528,20 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
index++;
if (mSecurityFooter != null) {
- View view = mSecurityFooter.getView();
- LinearLayout.LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
+ LinearLayout.LayoutParams layoutParams =
+ (LayoutParams) mSecurityFooter.getLayoutParams();
if (mUsingHorizontalLayout && mHeaderContainer != null) {
// Adding the security view to the header, that enables us to avoid scrolling
layoutParams.width = 0;
layoutParams.weight = 1.6f;
- switchToParent(view, mHeaderContainer, 1 /* always in second place */);
+ switchToParent(mSecurityFooter, mHeaderContainer, 1 /* always in second place */);
} else {
layoutParams.width = LayoutParams.WRAP_CONTENT;
layoutParams.weight = 0;
- switchToParent(view, parent, index);
+ switchToParent(mSecurityFooter, parent, index);
index++;
}
- view.setLayoutParams(layoutParams);
+ mSecurityFooter.setLayoutParams(layoutParams);
}
if (mFooter != null) {
@@ -703,14 +614,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
if (!mExpanded && mTileLayout instanceof PagedTileLayout) {
((PagedTileLayout) mTileLayout).setCurrentItem(0, false);
}
- mMetricsLogger.visibility(MetricsEvent.QS_PANEL, mExpanded);
- if (!mExpanded) {
- mUiEventLogger.log(closePanelEvent());
- closeDetail();
- } else {
- mUiEventLogger.log(openPanelEvent());
- logTiles();
- }
}
public void setPageListener(final PagedTileLayout.PageListener pageListener) {
@@ -723,56 +626,16 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
return mExpanded;
}
- public void setListening(boolean listening) {
+ /** */
+ public void setListening(boolean listening, String cachedSpecs) {
if (mListening == listening) return;
mListening = listening;
if (mTileLayout != null) {
- mQSLogger.logAllTilesChangeListening(listening, getDumpableTag(), mCachedSpecs);
+ mQSLogger.logAllTilesChangeListening(listening, getDumpableTag(), cachedSpecs);
mTileLayout.setListening(listening);
}
- if (mListening) {
- refreshAllTiles();
- }
}
- private String getTilesSpecs() {
- return mRecords.stream()
- .map(tileRecord -> tileRecord.tile.getTileSpec())
- .collect(Collectors.joining(","));
- }
-
- public void setListening(boolean listening, boolean expanded) {
- setListening(listening && expanded);
- if (mSecurityFooter != null) {
- mSecurityFooter.setListening(listening);
- }
- // Set the listening as soon as the QS fragment starts listening regardless of the expansion,
- // so it will update the current brightness before the slider is visible.
- setBrightnessListening(listening);
- }
-
- public void setBrightnessListening(boolean listening) {
- if (mBrightnessController == null) {
- return;
- }
- if (listening) {
- mBrightnessController.registerCallbacks();
- } else {
- mBrightnessController.unregisterCallbacks();
- }
- }
-
- public void refreshAllTiles() {
- if (mBrightnessController != null) {
- mBrightnessController.checkRestrictionAndSetEnabled();
- }
- for (TileRecord r : mRecords) {
- r.tile.refreshState();
- }
- if (mSecurityFooter != null) {
- mSecurityFooter.refreshState();
- }
- }
public void showDetailAdapter(boolean show, DetailAdapter adapter, int[] locationInWindow) {
int xInWindow = locationInWindow[0];
@@ -794,33 +657,10 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
mHandler.obtainMessage(H.SHOW_DETAIL, show ? 1 : 0, 0, r).sendToTarget();
}
- public void setTiles(Collection<QSTile> tiles) {
- setTiles(tiles, false);
- }
-
- public void setTiles(Collection<QSTile> tiles, boolean collapsedView) {
- if (!collapsedView) {
- mQsTileRevealController.updateRevealedTiles(tiles);
- }
- for (TileRecord record : mRecords) {
- mTileLayout.removeTile(record);
- record.tile.removeCallback(record.callback);
- }
- mRecords.clear();
- mCachedSpecs = "";
- for (QSTile tile : tiles) {
- addTile(tile, collapsedView);
- }
- }
-
- protected void drawTile(TileRecord r, QSTile.State state) {
+ protected void drawTile(QSPanelControllerBase.TileRecord r, QSTile.State state) {
r.tileView.onStateChanged(state);
}
- protected QSTileView createTileView(QSTile tile, boolean collapsedView) {
- return mHost.createTileView(tile, collapsedView);
- }
-
protected QSEvent openPanelEvent() {
return QSEvent.QS_PANEL_EXPANDED;
}
@@ -837,14 +677,15 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
return mExpanded;
}
- protected TileRecord addTile(final QSTile tile, boolean collapsedView) {
- final TileRecord r = new TileRecord();
- r.tile = tile;
- r.tileView = createTileView(tile, collapsedView);
+ void updateRevealedTiles(Collection<QSTile> tiles) {
+ mQsTileRevealController.updateRevealedTiles(tiles);
+ }
+
+ void addTile(QSPanelControllerBase.TileRecord tileRecord) {
final QSTile.Callback callback = new QSTile.Callback() {
@Override
public void onStateChanged(QSTile.State state) {
- drawTile(r, state);
+ drawTile(tileRecord, state);
}
@Override
@@ -852,22 +693,22 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
// Both the collapsed and full QS panels get this callback, this check determines
// which one should handle showing the detail.
if (shouldShowDetail()) {
- QSPanel.this.showDetail(show, r);
+ QSPanel.this.showDetail(show, tileRecord);
}
}
@Override
public void onToggleStateChanged(boolean state) {
- if (mDetailRecord == r) {
+ if (mDetailRecord == tileRecord) {
fireToggleStateChanged(state);
}
}
@Override
public void onScanStateChanged(boolean state) {
- r.scanState = state;
- if (mDetailRecord == r) {
- fireScanStateChanged(r.scanState);
+ tileRecord.scanState = state;
+ if (mDetailRecord == tileRecord) {
+ fireScanStateChanged(tileRecord.scanState);
}
}
@@ -879,20 +720,20 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
}
};
- r.tile.addCallback(callback);
- r.callback = callback;
- r.tileView.init(r.tile);
- r.tile.refreshState();
- mRecords.add(r);
- mCachedSpecs = getTilesSpecs();
+
+ tileRecord.tile.addCallback(callback);
+ tileRecord.callback = callback;
+ tileRecord.tileView.init(tileRecord.tile);
+ tileRecord.tile.refreshState();
if (mTileLayout != null) {
- mTileLayout.addTile(r);
+ mTileLayout.addTile(tileRecord);
}
-
- return r;
}
+ void removeTile(QSPanelControllerBase.TileRecord tileRecord) {
+ mTileLayout.removeTile(tileRecord);
+ }
public void showEdit(final View v) {
v.post(new Runnable() {
@@ -925,8 +766,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
protected void handleShowDetail(Record r, boolean show) {
- if (r instanceof TileRecord) {
- handleShowDetailTile((TileRecord) r, show);
+ if (r instanceof QSPanelControllerBase.TileRecord) {
+ handleShowDetailTile((QSPanelControllerBase.TileRecord) r, show);
} else {
int x = 0;
int y = 0;
@@ -938,7 +779,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
}
- private void handleShowDetailTile(TileRecord r, boolean show) {
+ private void handleShowDetailTile(QSPanelControllerBase.TileRecord r, boolean show) {
if ((mDetailRecord != null) == show && mDetailRecord == r) return;
if (show) {
@@ -959,8 +800,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
protected void setDetailRecord(Record r) {
if (r == mDetailRecord) return;
mDetailRecord = r;
- final boolean scanState = mDetailRecord instanceof TileRecord
- && ((TileRecord) mDetailRecord).scanState;
+ final boolean scanState = mDetailRecord instanceof QSPanelControllerBase.TileRecord
+ && ((QSPanelControllerBase.TileRecord) mDetailRecord).scanState;
fireScanStateChanged(scanState);
}
@@ -972,15 +813,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
mGridContentVisible = visible;
}
-
- private void logTiles() {
- for (int i = 0; i < mRecords.size(); i++) {
- QSTile tile = mRecords.get(i).tile;
- mMetricsLogger.write(tile.populate(new LogMaker(tile.getMetricsCategory())
- .setType(MetricsEvent.TYPE_OPEN)));
- }
- }
-
private void fireShowingDetail(DetailAdapter detail, int x, int y) {
if (mCallback != null) {
mCallback.onShowingDetail(detail, x, y);
@@ -999,46 +831,15 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
}
- public void clickTile(ComponentName tile) {
- final String spec = CustomTile.toSpec(tile);
- final int N = mRecords.size();
- for (int i = 0; i < N; i++) {
- if (mRecords.get(i).tile.getTileSpec().equals(spec)) {
- mRecords.get(i).tile.click();
- break;
- }
- }
- }
-
QSTileLayout getTileLayout() {
return mTileLayout;
}
- QSTileView getTileView(QSTile tile) {
- for (TileRecord r : mRecords) {
- if (r.tile == tile) {
- return r.tileView;
- }
- }
- return null;
- }
-
- @Nullable
- public QSSecurityFooter getSecurityFooter() {
- return mSecurityFooter;
- }
-
@Nullable
public View getDivider() {
return mDivider;
}
- public void showDeviceMonitoringDialog() {
- if (mSecurityFooter != null) {
- mSecurityFooter.showDeviceMonitoringDialog();
- }
- }
-
public void setContentMargins(int startMargin, int endMargin) {
// Only some views actually want this content padding, others want to go all the way
// to the edge like the brightness slider
@@ -1121,9 +922,11 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
*/
protected void updateMargins(View view, int start, int end) {
LayoutParams lp = (LayoutParams) view.getLayoutParams();
- lp.setMarginStart(start);
- lp.setMarginEnd(end);
- view.setLayoutParams(lp);
+ if (lp != null) {
+ lp.setMarginStart(start);
+ lp.setMarginEnd(end);
+ view.setLayoutParams(lp);
+ }
}
public MediaHost getMediaHost() {
@@ -1141,6 +944,14 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
mMediaVisibilityChangedListener = visibilityChangedListener;
}
+ public boolean isListening() {
+ return mListening;
+ }
+
+ public void setSecurityFooter(View view) {
+ mSecurityFooter = view;
+ }
+
private class H extends Handler {
private static final int SHOW_DETAIL = 1;
private static final int SET_TILE_VISIBILITY = 2;
@@ -1156,46 +967,32 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
}
}
- @Override
- public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- pw.println(getClass().getSimpleName() + ":");
- pw.println(" Tile records:");
- for (TileRecord record : mRecords) {
- if (record.tile instanceof Dumpable) {
- pw.print(" "); ((Dumpable) record.tile).dump(fd, pw, args);
- pw.print(" "); pw.println(record.tileView.toString());
- }
- }
- }
-
-
protected static class Record {
DetailAdapter detailAdapter;
int x;
int y;
}
- public static final class TileRecord extends Record {
- public QSTile tile;
- public com.android.systemui.plugins.qs.QSTileView tileView;
- public boolean scanState;
- public QSTile.Callback callback;
- }
-
public interface QSTileLayout {
-
+ /** */
default void saveInstanceState(Bundle outState) {}
+ /** */
default void restoreInstanceState(Bundle savedInstanceState) {}
- void addTile(TileRecord tile);
+ /** */
+ void addTile(QSPanelControllerBase.TileRecord tile);
- void removeTile(TileRecord tile);
+ /** */
+ void removeTile(QSPanelControllerBase.TileRecord tile);
- int getOffsetTop(TileRecord tile);
+ /** */
+ int getOffsetTop(QSPanelControllerBase.TileRecord tile);
+ /** */
boolean updateResources();
+ /** */
void setListening(boolean listening);
/**
@@ -1222,4 +1019,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
int getNumVisibleTiles();
}
+
+ interface OnConfigurationChangedListener {
+ void onConfigurationChange(Configuration newConfig);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java
new file mode 100644
index 000000000000..f222b0d1ccc0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs;
+
+import static com.android.systemui.qs.QSPanel.QS_SHOW_BRIGHTNESS;
+
+import android.annotation.NonNull;
+import android.content.res.Configuration;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.UiEventLogger;
+import com.android.systemui.R;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.media.MediaHost;
+import com.android.systemui.plugins.qs.QSTile;
+import com.android.systemui.qs.customize.QSCustomizer;
+import com.android.systemui.qs.dagger.QSScope;
+import com.android.systemui.settings.BrightnessController;
+import com.android.systemui.statusbar.policy.BrightnessMirrorController;
+import com.android.systemui.tuner.TunerService;
+
+import javax.inject.Inject;
+
+/**
+ * Controller for {@link QSPanel}.
+ */
+@QSScope
+public class QSPanelController extends QSPanelControllerBase<QSPanel> {
+ private final QSSecurityFooter mQsSecurityFooter;
+ private final TunerService mTunerService;
+ private final BrightnessController mBrightnessController;
+
+ private final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener =
+ new QSPanel.OnConfigurationChangedListener() {
+ @Override
+ public void onConfigurationChange(Configuration newConfig) {
+ mView.updateResources();
+ mQsSecurityFooter.onConfigurationChanged();
+ if (mView.isListening()) {
+ refreshAllTiles();
+ }
+ }
+ };
+ private BrightnessMirrorController mBrightnessMirrorController;
+
+ @Inject
+ QSPanelController(QSPanel view, QSSecurityFooter qsSecurityFooter, TunerService tunerService,
+ QSTileHost qstileHost, DumpManager dumpManager,
+ MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
+ BrightnessController.Factory brightnessControllerFactory) {
+ super(view, qstileHost, metricsLogger, uiEventLogger, dumpManager);
+ mQsSecurityFooter = qsSecurityFooter;
+ mTunerService = tunerService;
+ mQsSecurityFooter.setHostEnvironment(qstileHost);
+ mBrightnessController = brightnessControllerFactory.create(
+ mView.findViewById(R.id.brightness_slider));
+ }
+
+ @Override
+ protected void onViewAttached() {
+ super.onViewAttached();
+ mTunerService.addTunable(mView, QS_SHOW_BRIGHTNESS);
+ mView.updateResources();
+ if (mView.isListening()) {
+ refreshAllTiles();
+ }
+ mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
+ mView.setSecurityFooter(mQsSecurityFooter.getView());
+ switchTileLayout(true);
+ if (mBrightnessMirrorController != null) {
+ mBrightnessMirrorController.addCallback(mView);
+ }
+ }
+
+ @Override
+ protected void onViewDetached() {
+ mTunerService.removeTunable(mView);
+ mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
+ if (mBrightnessMirrorController != null) {
+ mBrightnessMirrorController.removeCallback(mView);
+ }
+ super.onViewDetached();
+ }
+
+ /** TODO(b/168904199): Remove this method once view is controllerized. */
+ QSPanel getView() {
+ return mView;
+ }
+
+ /**
+ * Set the header container of quick settings.
+ */
+ public void setHeaderContainer(@NonNull ViewGroup headerContainer) {
+ mView.setHeaderContainer(headerContainer);
+ }
+
+ public QSPanel.QSTileLayout getTileLayout() {
+ return mView.getTileLayout();
+ }
+
+ /** */
+ public void setCustomizer(QSCustomizer customizer) {
+ mView.setCustomizer(customizer);
+ }
+
+ /** */
+ public boolean isShowingCustomize() {
+ return mView.isShowingCustomize();
+ }
+
+ /** */
+ public void setVisibility(int visibility) {
+ mView.setVisibility(visibility);
+ }
+
+ /** */
+ public void setListening(boolean listening, boolean expanded) {
+ setListening(listening && expanded);
+ if (mView.isListening()) {
+ refreshAllTiles();
+ }
+
+ mQsSecurityFooter.setListening(listening);
+
+ // Set the listening as soon as the QS fragment starts listening regardless of the
+ //expansion, so it will update the current brightness before the slider is visible.
+ if (listening) {
+ mBrightnessController.registerCallbacks();
+ } else {
+ mBrightnessController.unregisterCallbacks();
+ }
+ }
+
+ /** */
+ public QSTileRevealController getQsTileRevealController() {
+ return mView.getQsTileRevealController();
+ }
+
+ /** */
+ public MediaHost getMediaHost() {
+ return mView.getMediaHost();
+ }
+
+ /** */
+ public void setBrightnessMirror(BrightnessMirrorController brightnessMirrorController) {
+ mBrightnessMirrorController = brightnessMirrorController;
+ mView.setBrightnessMirror(brightnessMirrorController);
+ }
+
+ /** Get the QSTileHost this panel uses. */
+ public QSTileHost getHost() {
+ return mHost;
+ }
+
+
+ /** Open the details for a specific tile.. */
+ public void openDetails(String subPanel) {
+ QSTile tile = getTile(subPanel);
+ if (tile != null) {
+ mView.openDetails(tile);
+ }
+ }
+
+ /** Show the device monitoring dialog. */
+ public void showDeviceMonitoringDialog() {
+ mQsSecurityFooter.showDeviceMonitoringDialog();
+ }
+
+ /** Update appearance of QSPanel. */
+ public void updateResources() {
+ mView.updateResources();
+ }
+
+ /** Update state of all tiles. */
+ public void refreshAllTiles() {
+ mBrightnessController.checkRestrictionAndSetEnabled();
+ super.refreshAllTiles();
+ mQsSecurityFooter.refreshState();
+ }
+
+ /** Start customizing the Quick Settings. */
+ public void showEdit(View view) {
+ mView.showEdit(view);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
new file mode 100644
index 000000000000..fe92827806c6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs;
+
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
+import android.content.ComponentName;
+import android.content.res.Configuration;
+import android.metrics.LogMaker;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.UiEventLogger;
+import com.android.systemui.Dumpable;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.media.MediaHost;
+import com.android.systemui.plugins.qs.QSTile;
+import com.android.systemui.plugins.qs.QSTileView;
+import com.android.systemui.qs.external.CustomTile;
+import com.android.systemui.util.ViewController;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+/**
+ * Controller for QSPanel views.
+ *
+ * @param <T> Type of QSPanel.
+ */
+public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewController<T>
+ implements Dumpable{
+ protected final QSTileHost mHost;
+ private final MediaHost mMediaHost;
+ private final MetricsLogger mMetricsLogger;
+ private final UiEventLogger mUiEventLogger;
+ private final DumpManager mDumpManager;
+ protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
+
+ private int mLastOrientation;
+
+ private final QSHost.Callback mQSHostCallback = this::setTiles;
+
+ private final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener =
+ new QSPanel.OnConfigurationChangedListener() {
+ @Override
+ public void onConfigurationChange(Configuration newConfig) {
+ if (newConfig.orientation != mLastOrientation) {
+ mLastOrientation = newConfig.orientation;
+ switchTileLayout(false);
+ }
+ }
+ };
+ private String mCachedSpecs = "";
+
+ protected QSPanelControllerBase(T view, QSTileHost host,
+ MetricsLogger metricsLogger, UiEventLogger uiEventLogger, DumpManager dumpManager) {
+ super(view);
+ mHost = host;
+ mMediaHost = mView.getMediaHost();
+ mMetricsLogger = metricsLogger;
+ mUiEventLogger = uiEventLogger;
+ mDumpManager = dumpManager;
+ }
+
+ @Override
+ protected void onViewAttached() {
+ mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
+ mHost.addCallback(mQSHostCallback);
+ mMediaHost.addVisibilityChangeListener(aBoolean -> {
+ switchTileLayout(false);
+ return null;
+ });
+ setTiles();
+ switchTileLayout(true);
+ mDumpManager.registerDumpable(mView.getDumpableTag(), this);
+ }
+
+ @Override
+ protected void onViewDetached() {
+ mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
+ mHost.removeCallback(mQSHostCallback);
+
+ for (TileRecord record : mRecords) {
+ record.tile.removeCallbacks();
+ }
+ mRecords.clear();
+ mDumpManager.unregisterDumpable(mView.getDumpableTag());
+ }
+
+ /** */
+ public void setTiles() {
+ setTiles(mHost.getTiles(), false);
+ }
+
+ /** */
+ public void setTiles(Collection<QSTile> tiles, boolean collapsedView) {
+ if (!collapsedView) {
+ mView.updateRevealedTiles(tiles);
+ }
+ for (QSPanelControllerBase.TileRecord record : mRecords) {
+ mView.removeTile(record);
+ record.tile.removeCallback(record.callback);
+ }
+ mRecords.clear();
+ mCachedSpecs = "";
+ for (QSTile tile : tiles) {
+ addTile(tile, collapsedView);
+ }
+ }
+
+ /** */
+ public void refreshAllTiles() {
+ for (QSPanelControllerBase.TileRecord r : mRecords) {
+ r.tile.refreshState();
+ }
+ }
+
+ private void addTile(final QSTile tile, boolean collapsedView) {
+ final TileRecord r = new TileRecord();
+ r.tile = tile;
+ r.tileView = mHost.createTileView(tile, collapsedView);
+ mView.addTile(r);
+ mRecords.add(r);
+ mCachedSpecs = getTilesSpecs();
+
+ }
+
+ /** */
+ public void clickTile(ComponentName tile) {
+ final String spec = CustomTile.toSpec(tile);
+ for (TileRecord record : mRecords) {
+ if (record.tile.getTileSpec().equals(spec)) {
+ record.tile.click();
+ break;
+ }
+ }
+ }
+ protected QSTile getTile(String subPanel) {
+ for (int i = 0; i < mRecords.size(); i++) {
+ if (subPanel.equals(mRecords.get(i).tile.getTileSpec())) {
+ return mRecords.get(i).tile;
+ }
+ }
+ return mHost.createTile(subPanel);
+ }
+
+
+ QSTileView getTileView(QSTile tile) {
+ for (QSPanelControllerBase.TileRecord r : mRecords) {
+ if (r.tile == tile) {
+ return r.tileView;
+ }
+ }
+ return null;
+ }
+
+ private String getTilesSpecs() {
+ return mRecords.stream()
+ .map(tileRecord -> tileRecord.tile.getTileSpec())
+ .collect(Collectors.joining(","));
+ }
+
+
+ /** */
+ public void setExpanded(boolean expanded) {
+ mView.setExpanded(expanded);
+ mMetricsLogger.visibility(MetricsEvent.QS_PANEL, expanded);
+ if (!expanded) {
+ mUiEventLogger.log(mView.closePanelEvent());
+ closeDetail();
+ } else {
+ mUiEventLogger.log(mView.openPanelEvent());
+ logTiles();
+ }
+ }
+
+ /** */
+ public void closeDetail() {
+ mView.closeDetail();
+ }
+
+ /** */
+ public void openDetails(String subPanel) {
+ QSTile tile = getTile(subPanel);
+ // If there's no tile with that name (as defined in QSFactoryImpl or other QSFactory),
+ // QSFactory will not be able to create a tile and getTile will return null
+ if (tile != null) {
+ mView.showDetailAdapter(
+ true, tile.getDetailAdapter(), new int[]{mView.getWidth() / 2, 0});
+ }
+ }
+
+
+ void setListening(boolean listening) {
+ mView.setListening(listening, mCachedSpecs);
+ }
+
+ boolean switchTileLayout(boolean force) {
+ if (mView.switchTileLayout(force, mRecords)) {
+ setTiles();
+ return true;
+ }
+ return false;
+ }
+
+ private void logTiles() {
+ for (int i = 0; i < mRecords.size(); i++) {
+ QSTile tile = mRecords.get(i).tile;
+ mMetricsLogger.write(tile.populate(new LogMaker(tile.getMetricsCategory())
+ .setType(MetricsEvent.TYPE_OPEN)));
+ }
+ }
+
+
+ @Override
+ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ pw.println(getClass().getSimpleName() + ":");
+ pw.println(" Tile records:");
+ for (QSPanelControllerBase.TileRecord record : mRecords) {
+ if (record.tile instanceof Dumpable) {
+ pw.print(" "); ((Dumpable) record.tile).dump(fd, pw, args);
+ pw.print(" "); pw.println(record.tileView.toString());
+ }
+ }
+ }
+
+ /** */
+ public static final class TileRecord extends QSPanel.Record {
+ public QSTile tile;
+ public com.android.systemui.plugins.qs.QSTileView tileView;
+ public boolean scanState;
+ public QSTile.Callback callback;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
index 0891972c11d2..c90182b15da6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
@@ -44,11 +44,15 @@ import com.android.systemui.Dependency;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.SecurityController;
-public class QSSecurityFooter implements OnClickListener, DialogInterface.OnClickListener {
+import javax.inject.Inject;
+
+@QSScope
+class QSSecurityFooter implements OnClickListener, DialogInterface.OnClickListener {
protected static final String TAG = "QSSecurityFooter";
protected static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private static final boolean DEBUG_FORCE_VISIBLE = false;
@@ -72,12 +76,13 @@ public class QSSecurityFooter implements OnClickListener, DialogInterface.OnClic
private int mFooterTextId;
private int mFooterIconId;
+ @Inject
public QSSecurityFooter(QSPanel qsPanel, Context context, UserTracker userTracker) {
mRootView = LayoutInflater.from(context)
.inflate(R.layout.quick_settings_footer, qsPanel, false);
mRootView.setOnClickListener(this);
- mFooterText = (TextView) mRootView.findViewById(R.id.footer_text);
- mFooterIcon = (ImageView) mRootView.findViewById(R.id.footer_icon);
+ mFooterText = mRootView.findViewById(R.id.footer_text);
+ mFooterIcon = mRootView.findViewById(R.id.footer_icon);
mFooterIconId = R.drawable.ic_info_outline;
mContext = context;
mMainHandler = new Handler(Looper.myLooper());
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileRevealController.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileRevealController.java
index 2f012e6e608e..3d4a417abf2e 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileRevealController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileRevealController.java
@@ -8,11 +8,16 @@ import android.util.ArraySet;
import com.android.systemui.Prefs;
import com.android.systemui.plugins.qs.QSTile;
+import com.android.systemui.qs.dagger.QSScope;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
+import javax.inject.Inject;
+
+/** */
+@QSScope
public class QSTileRevealController {
private static final long QS_REVEAL_TILES_DELAY = 500L;
@@ -34,6 +39,7 @@ public class QSTileRevealController {
}
};
+ @Inject
QSTileRevealController(Context context, QSPanel qsPanel, PagedTileLayout pagedTileLayout) {
mContext = context;
mQSPanel = qsPanel;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
index 82cb8639e9ee..84a5b6f0538d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
@@ -28,23 +28,13 @@ import android.view.View;
import android.widget.LinearLayout;
import com.android.internal.logging.UiEventLogger;
-import com.android.systemui.Dependency;
import com.android.systemui.R;
-import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaHierarchyManager;
import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTile.SignalState;
import com.android.systemui.plugins.qs.QSTile.State;
-import com.android.systemui.qs.customize.QSCustomizer;
import com.android.systemui.qs.logging.QSLogger;
-import com.android.systemui.settings.UserTracker;
-import com.android.systemui.tuner.TunerService;
-import com.android.systemui.tuner.TunerService.Tunable;
-
-import java.util.ArrayList;
-import java.util.Collection;
import javax.inject.Inject;
import javax.inject.Named;
@@ -68,15 +58,10 @@ public class QuickQSPanel extends QSPanel {
public QuickQSPanel(
@Named(VIEW_CONTEXT) Context context,
AttributeSet attrs,
- DumpManager dumpManager,
- BroadcastDispatcher broadcastDispatcher,
QSLogger qsLogger,
@Named(QUICK_QS_PANEL) MediaHost mediaHost,
- UiEventLogger uiEventLogger,
- UserTracker userTracker
- ) {
- super(context, attrs, dumpManager, broadcastDispatcher, qsLogger, mediaHost, uiEventLogger,
- userTracker);
+ UiEventLogger uiEventLogger) {
+ super(context, attrs, qsLogger, mediaHost, uiEventLogger);
sDefaultMaxTiles = getResources().getInteger(R.integer.quick_qs_panel_max_columns);
applyBottomMargin((View) mRegularTileLayout);
}
@@ -89,17 +74,12 @@ public class QuickQSPanel extends QSPanel {
}
@Override
- protected void addSecurityFooter() {
- // No footer needed
- }
-
- @Override
protected void addViewsAboveTiles() {
// Nothing to add above the tiles
}
@Override
- protected TileLayout createRegularTileLayout() {
+ public TileLayout createRegularTileLayout() {
return new QuickQSPanel.HeaderTileLayout(mContext, mUiEventLogger);
}
@@ -133,18 +113,6 @@ public class QuickQSPanel extends QSPanel {
}
@Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- Dependency.get(TunerService.class).addTunable(mNumTiles, NUM_QUICK_TILES);
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- Dependency.get(TunerService.class).removeTunable(mNumTiles);
- }
-
- @Override
protected String getDumpableTag() {
return TAG;
}
@@ -159,7 +127,7 @@ public class QuickQSPanel extends QSPanel {
}
@Override
- protected void drawTile(TileRecord r, State state) {
+ protected void drawTile(QSPanelControllerBase.TileRecord r, State state) {
if (state instanceof SignalState) {
SignalState copy = new SignalState();
state.copyTo(copy);
@@ -171,17 +139,8 @@ public class QuickQSPanel extends QSPanel {
super.drawTile(r, state);
}
- @Override
- public void setHost(QSTileHost host, QSCustomizer customizer) {
- super.setHost(host, customizer);
- setTiles(mHost.getTiles());
- }
-
public void setMaxTiles(int maxTiles) {
mMaxTiles = maxTiles;
- if (mHost != null) {
- setTiles(mHost.getTiles());
- }
}
@Override
@@ -192,25 +151,6 @@ public class QuickQSPanel extends QSPanel {
}
}
- @Override
- public void setTiles(Collection<QSTile> tiles) {
- ArrayList<QSTile> quickTiles = new ArrayList<>();
- for (QSTile tile : tiles) {
- quickTiles.add(tile);
- if (quickTiles.size() == mMaxTiles) {
- break;
- }
- }
- super.setTiles(quickTiles, true);
- }
-
- private final Tunable mNumTiles = new Tunable() {
- @Override
- public void onTuningChanged(String key, String newValue) {
- setMaxTiles(parseNumTiles(newValue));
- }
- };
-
public int getNumQuickTiles() {
return mMaxTiles;
}
@@ -308,7 +248,7 @@ public class QuickQSPanel extends QSPanel {
}
@Override
- protected void addTileView(TileRecord tile) {
+ protected void addTileView(QSPanelControllerBase.TileRecord tile) {
addView(tile.tileView, getChildCount(), generateTileLayoutParams());
}
@@ -371,7 +311,7 @@ public class QuickQSPanel extends QSPanel {
private void setAccessibilityOrder() {
if (mRecords != null && mRecords.size() > 0) {
View previousView = this;
- for (TileRecord record : mRecords) {
+ for (QSPanelControllerBase.TileRecord record : mRecords) {
if (record.tileView.getVisibility() == GONE) continue;
previousView = record.tileView.updateAccessibilityOrder(previousView);
}
@@ -383,7 +323,7 @@ public class QuickQSPanel extends QSPanel {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// Measure each QS tile.
- for (TileRecord record : mRecords) {
+ for (QSPanelControllerBase.TileRecord record : mRecords) {
if (record.tileView.getVisibility() == GONE) continue;
record.tileView.measure(exactly(mCellWidth), exactly(mCellHeight));
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java
new file mode 100644
index 000000000000..97b6e99a0390
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs;
+
+import static com.android.systemui.qs.QuickQSPanel.NUM_QUICK_TILES;
+import static com.android.systemui.qs.QuickQSPanel.parseNumTiles;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.UiEventLogger;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.plugins.qs.QSTile;
+import com.android.systemui.qs.dagger.QSScope;
+import com.android.systemui.tuner.TunerService;
+import com.android.systemui.tuner.TunerService.Tunable;
+
+import java.util.ArrayList;
+
+import javax.inject.Inject;
+
+/** Controller for {@link QuickQSPanel}. */
+@QSScope
+public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel> {
+ private final Tunable mNumTiles =
+ (key, newValue) -> setMaxTiles(parseNumTiles(newValue));
+
+ private final TunerService mTunerService;
+
+ @Inject
+ QuickQSPanelController(QuickQSPanel view, TunerService tunerService, QSTileHost qsTileHost,
+ MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
+ DumpManager dumpManager) {
+ super(view, qsTileHost, metricsLogger, uiEventLogger, dumpManager);
+ mTunerService = tunerService;
+ }
+
+ @Override
+ protected void onViewAttached() {
+ super.onViewAttached();
+ mTunerService.addTunable(mNumTiles, NUM_QUICK_TILES);
+
+ }
+
+ @Override
+ protected void onViewDetached() {
+ super.onViewDetached();
+ mTunerService.removeTunable(mNumTiles);
+ }
+
+ public boolean isListening() {
+ return mView.isListening();
+ }
+
+ private void setMaxTiles(int parseNumTiles) {
+ mView.setMaxTiles(parseNumTiles);
+ setTiles();
+ }
+
+ @Override
+ public void setTiles() {
+ ArrayList<QSTile> quickTiles = new ArrayList<>();
+ for (QSTile tile : mHost.getTiles()) {
+ quickTiles.add(tile);
+ if (quickTiles.size() == mView.getNumQuickTiles()) {
+ break;
+ }
+ }
+ super.setTiles(quickTiles, true);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index a9fbc744b38e..5757602b9d0f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -353,11 +353,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
mPrivacyChip.setExpanded(expansionFraction > 0.5);
mPrivacyChipAlphaAnimator.setPosition(keyguardExpansionFraction);
}
- if (expansionFraction < 1 && expansionFraction > 0.99) {
- if (mHeaderQsPanel.switchTileLayout()) {
- updateResources();
- }
- }
+
mKeyguardExpansionFraction = keyguardExpansionFraction;
}
@@ -446,7 +442,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
public void setQSPanel(final QSPanel qsPanel) {
//host.setHeaderView(mExpandIndicator);
mHeaderQsPanel.setQSPanelAndHeader(qsPanel, this);
- mHeaderQsPanel.setHost(qsPanel.getHost(), null /* No customization in header */);
Rect tintArea = new Rect(0, 0, 0, 0);
int colorForeground = Utils.getColorAttrDefaultColor(getContext(),
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
index 398edd7002ee..febb71c3223b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
@@ -44,6 +44,7 @@ import com.android.systemui.privacy.PrivacyChipEvent;
import com.android.systemui.privacy.PrivacyItem;
import com.android.systemui.privacy.PrivacyItemController;
import com.android.systemui.qs.carrier.QSCarrierGroupController;
+import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.StatusBarIconController;
@@ -64,6 +65,7 @@ import javax.inject.Inject;
/**
* Controller for {@link QuickStatusBarHeader}.
*/
+@QSScope
class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader> {
private static final String TAG = "QuickStatusBarHeader";
@@ -74,7 +76,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
private final ActivityStarter mActivityStarter;
private final UiEventLogger mUiEventLogger;
private final QSCarrierGroupController mQSCarrierGroupController;
- private final QuickQSPanel mHeaderQsPanel;
+ private final QuickQSPanelController mHeaderQsPanelController;
private final LifecycleRegistry mLifecycle;
private final OngoingPrivacyChip mPrivacyChip;
private final Clock mClockView;
@@ -203,13 +205,14 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
}
};
- private QuickStatusBarHeaderController(QuickStatusBarHeader view,
+ @Inject
+ QuickStatusBarHeaderController(QuickStatusBarHeader view,
ZenModeController zenModeController, NextAlarmController nextAlarmController,
PrivacyItemController privacyItemController, RingerModeTracker ringerModeTracker,
ActivityStarter activityStarter, UiEventLogger uiEventLogger,
QSTileHost qsTileHost, StatusBarIconController statusBarIconController,
CommandQueue commandQueue, DemoModeController demoModeController,
- UserTracker userTracker,
+ UserTracker userTracker, QuickQSPanelController quickQSPanelController,
QSCarrierGroupController.Builder qsCarrierGroupControllerBuilder) {
super(view);
mZenModeController = zenModeController;
@@ -224,6 +227,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
mDemoModeController = demoModeController;
mUserTracker = userTracker;
mLifecycle = new LifecycleRegistry(mLifecycleOwner);
+ mHeaderQsPanelController = quickQSPanelController;
mQSCarrierGroupController = qsCarrierGroupControllerBuilder
.setQSCarrierGroup(mView.findViewById(R.id.carrier_group))
@@ -231,7 +235,6 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
mPrivacyChip = mView.findViewById(R.id.privacy_chip);
- mHeaderQsPanel = mView.findViewById(R.id.quick_qs_panel);
mNextAlarmContainer = mView.findViewById(R.id.alarm_container);
mClockView = mView.findViewById(R.id.clock);
mRingerContainer = mView.findViewById(R.id.ringer_container);
@@ -290,8 +293,12 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
}
mListening = listening;
- mHeaderQsPanel.setListening(listening);
- if (mHeaderQsPanel.switchTileLayout()) {
+ mHeaderQsPanelController.setListening(listening);
+ if (mHeaderQsPanelController.isListening()) {
+ mHeaderQsPanelController.refreshAllTiles();
+ }
+
+ if (mHeaderQsPanelController.switchTileLayout(false)) {
mView.updateResources();
}
@@ -380,55 +387,4 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
mClockView.onDemoModeFinished();
}
}
-
- static class Builder {
- private final ZenModeController mZenModeController;
- private final NextAlarmController mNextAlarmController;
- private final PrivacyItemController mPrivacyItemController;
- private final RingerModeTracker mRingerModeTracker;
- private final ActivityStarter mActivityStarter;
- private final UiEventLogger mUiEventLogger;
- private final QSTileHost mQsTileHost;
- private final StatusBarIconController mStatusBarIconController;
- private final CommandQueue mCommandQueue;
- private final DemoModeController mDemoModeController;
- private final UserTracker mUserTracker;
- private final QSCarrierGroupController.Builder mQSCarrierGroupControllerBuilder;
- private QuickStatusBarHeader mView;
-
- @Inject
- Builder(ZenModeController zenModeController, NextAlarmController nextAlarmController,
- PrivacyItemController privacyItemController, RingerModeTracker ringerModeTracker,
- ActivityStarter activityStarter, UiEventLogger uiEventLogger, QSTileHost qsTileHost,
- StatusBarIconController statusBarIconController, CommandQueue commandQueue,
- DemoModeController demoModeController, UserTracker userTracker,
- QSCarrierGroupController.Builder qsCarrierGroupControllerBuilder) {
- mZenModeController = zenModeController;
- mNextAlarmController = nextAlarmController;
- mPrivacyItemController = privacyItemController;
- mRingerModeTracker = ringerModeTracker;
- mActivityStarter = activityStarter;
- mUiEventLogger = uiEventLogger;
- mQsTileHost = qsTileHost;
- mStatusBarIconController = statusBarIconController;
- mCommandQueue = commandQueue;
- mDemoModeController = demoModeController;
- mUserTracker = userTracker;
- mQSCarrierGroupControllerBuilder = qsCarrierGroupControllerBuilder;
- }
-
- public Builder setQuickStatusBarHeader(QuickStatusBarHeader view) {
- mView = view;
- return this;
- }
-
-
- QuickStatusBarHeaderController build() {
- return new QuickStatusBarHeaderController(mView, mZenModeController,
- mNextAlarmController, mPrivacyItemController, mRingerModeTracker,
- mActivityStarter, mUiEventLogger, mQsTileHost, mStatusBarIconController,
- mCommandQueue, mDemoModeController, mUserTracker,
- mQSCarrierGroupControllerBuilder);
- }
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
index 694492a33524..4ab7afd46602 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
@@ -11,7 +11,7 @@ import android.view.ViewGroup;
import com.android.systemui.R;
import com.android.systemui.qs.QSPanel.QSTileLayout;
-import com.android.systemui.qs.QSPanel.TileRecord;
+import com.android.systemui.qs.QSPanelControllerBase.TileRecord;
import java.util.ArrayList;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
index 55b67e061c13..8097958fac39 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
@@ -74,9 +74,9 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
private final ScreenLifecycle mScreenLifecycle;
private final TileQueryHelper mTileQueryHelper;
private final View mTransparentView;
+ private final QSTileHost mHost;
private boolean isShown;
- private QSTileHost mHost;
private RecyclerView mRecyclerView;
private TileAdapter mTileAdapter;
private Toolbar mToolbar;
@@ -95,6 +95,7 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
KeyguardStateController keyguardStateController,
ScreenLifecycle screenLifecycle,
TileQueryHelper tileQueryHelper,
+ QSTileHost qsTileHost,
UiEventLogger uiEventLogger) {
super(new ContextThemeWrapper(context, R.style.edit_theme), attrs);
@@ -139,6 +140,8 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
mLightBarController = lightBarController;
mKeyguardStateController = keyguardStateController;
mScreenLifecycle = screenLifecycle;
+ mHost = qsTileHost;
+ mTileAdapter.setHost(mHost);
updateNavBackDrop(getResources().getConfiguration());
}
@@ -170,11 +173,6 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene
mLightBarController.setQsCustomizing(mIsShowingNavBackdrop && isShown);
}
- public void setHost(QSTileHost host) {
- mHost = host;
- mTileAdapter.setHost(host);
- }
-
public void setContainer(NotificationsQuickSettingsContainer notificationsQsContainer) {
mNotifQsContainer = notificationsQsContainer;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentComponent.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentComponent.java
new file mode 100644
index 000000000000..51b2c8dfffbd
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentComponent.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs.dagger;
+
+import com.android.systemui.qs.QSAnimator;
+import com.android.systemui.qs.QSContainerImplController;
+import com.android.systemui.qs.QSFooter;
+import com.android.systemui.qs.QSFragment;
+import com.android.systemui.qs.QSPanelController;
+import com.android.systemui.qs.QuickQSPanelController;
+
+import dagger.BindsInstance;
+import dagger.Subcomponent;
+
+/**
+ * Dagger Subcomponent for {@link QSFragment}.
+ */
+@Subcomponent(modules = {QSFragmentModule.class})
+@QSScope
+public interface QSFragmentComponent {
+ /** Factory for building a {@link QSFragmentComponent}. */
+ @Subcomponent.Factory
+ interface Factory {
+ QSFragmentComponent create(@BindsInstance QSFragment qsFragment);
+ }
+
+ /** Construct a {@link QSPanelController}. */
+ QSPanelController getQSPanelController();
+
+ /** Construct a {@link QuickQSPanelController}. */
+ QuickQSPanelController getQuickQSPanelController();
+
+ /** Construct a {@link QSAnimator}. */
+ QSAnimator getQSAnimator();
+
+ /** Construct a {@link QSContainerImplController}. */
+ QSContainerImplController getQSContainerImplController();
+
+ /** Construct a {@link QSFooter} */
+ QSFooter getQSFooter();
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java
new file mode 100644
index 000000000000..4bf4eff4c27e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs.dagger;
+
+import android.view.View;
+
+import com.android.systemui.R;
+import com.android.systemui.dagger.qualifiers.RootView;
+import com.android.systemui.plugins.qs.QS;
+import com.android.systemui.qs.QSContainerImpl;
+import com.android.systemui.qs.QSFooter;
+import com.android.systemui.qs.QSFooterView;
+import com.android.systemui.qs.QSFooterViewController;
+import com.android.systemui.qs.QSFragment;
+import com.android.systemui.qs.QSPanel;
+import com.android.systemui.qs.QuickQSPanel;
+import com.android.systemui.qs.QuickStatusBarHeader;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * Dagger Module for {@link QSFragmentComponent}.
+ */
+@Module
+public interface QSFragmentModule {
+ /** */
+ @Provides
+ @RootView
+ static View provideRootView(QSFragment qsFragment) {
+ return qsFragment.getView();
+ }
+
+ /** */
+ @Provides
+ static QSPanel provideQSPanel(@RootView View view) {
+ return view.findViewById(R.id.quick_settings_panel);
+ }
+
+ /** */
+ @Provides
+ static QSContainerImpl providesQSContainerImpl(@RootView View view) {
+ return view.findViewById(R.id.quick_settings_container);
+ }
+
+ /** */
+ @Binds
+ QS bindQS(QSFragment qsFragment);
+
+ /** */
+ @Provides
+ static QuickStatusBarHeader providesQuickStatusBarHeader(@RootView View view) {
+ return view.findViewById(R.id.header);
+ }
+
+ /** */
+ @Provides
+ static QuickQSPanel providesQuickQSPanel(QuickStatusBarHeader quickStatusBarHeader) {
+ return quickStatusBarHeader.findViewById(R.id.quick_qs_panel);
+ }
+
+ /** */
+ @Provides
+ static QSFooterView providesQSFooterView(@RootView View view) {
+ return view.findViewById(R.id.qs_footer);
+ }
+
+ /** */
+ @Provides
+ @QSScope
+ static QSFooter providesQSFooter(QSFooterViewController qsFooterViewController) {
+ qsFooterViewController.init();
+ return qsFooterViewController;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java
index 953de6086ac7..7c799aefe90d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSModule.java
@@ -38,8 +38,8 @@ import dagger.Provides;
/**
* Module for QS dependencies
*/
-// TODO: Add other QS classes
-@Module(includes = {MediaModule.class})
+@Module(subcomponents = {QSFragmentComponent.class},
+ includes = {MediaModule.class})
public interface QSModule {
@Provides
@@ -60,7 +60,6 @@ public interface QSModule {
return manager;
}
-
/** */
@Binds
QSHost provideQsHost(QSTileHost controllerImpl);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSScope.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSScope.java
new file mode 100644
index 000000000000..f615eabb67dc
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSScope.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Scope;
+
+/**
+ * Scope annotation for singleton items within the {@link QSFragmentComponent}.
+ */
+@Documented
+@Retention(RUNTIME)
+@Scope
+public @interface QSScope {}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 7d697539bf90..818bb9d8d78f 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -18,8 +18,7 @@ package com.android.systemui.screenshot;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+import static android.view.Display.DEFAULT_DISPLAY;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -30,6 +29,7 @@ import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.Notification;
import android.app.PendingIntent;
+import android.app.WindowContext;
import android.content.ComponentName;
import android.content.Context;
import android.content.res.Configuration;
@@ -48,6 +48,7 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.graphics.drawable.InsetDrawable;
import android.graphics.drawable.LayerDrawable;
+import android.hardware.display.DisplayManager;
import android.media.MediaActionSound;
import android.net.Uri;
import android.os.Handler;
@@ -84,7 +85,6 @@ import android.widget.Toast;
import com.android.internal.logging.UiEventLogger;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.shared.system.QuickStepContract;
import java.util.ArrayList;
@@ -245,12 +245,20 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
};
@Inject
- public GlobalScreenshot(
- Context context, @Main Resources resources,
+ public GlobalScreenshot(Context context,
ScreenshotSmartActions screenshotSmartActions,
ScreenshotNotificationsController screenshotNotificationsController,
UiEventLogger uiEventLogger) {
- mContext = context;
+
+ // Create a visual (Window) context
+ // After this, our windowToken is available from mContext.getActivityToken()
+ final DisplayManager dm = context.getSystemService(DisplayManager.class);
+ mDisplay = dm.getDisplay(DEFAULT_DISPLAY);
+ Context displayContext = context.createDisplayContext(mDisplay);
+ mContext = new WindowContext(
+ displayContext, WindowManager.LayoutParams.TYPE_SCREENSHOT, null);
+ mWindowManager = mContext.getSystemService(WindowManager.class);
+
mScreenshotSmartActions = screenshotSmartActions;
mNotificationsController = screenshotNotificationsController;
mUiEventLogger = uiEventLogger;
@@ -274,13 +282,13 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
PixelFormat.TRANSLUCENT);
mWindowLayoutParams.setTitle("ScreenshotAnimation");
- mWindowLayoutParams.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+ mWindowLayoutParams.layoutInDisplayCutoutMode =
+ WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
mWindowLayoutParams.setFitInsetsTypes(0 /* types */);
- mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
- mDisplay = mWindowManager.getDefaultDisplay();
mDisplayMetrics = new DisplayMetrics();
mDisplay.getRealMetrics(mDisplayMetrics);
+ final Resources resources = mContext.getResources();
mCornerSizeX = resources.getDimensionPixelSize(R.dimen.global_screenshot_x_scale);
mDismissDeltaY = resources.getDimensionPixelSize(R.dimen.screenshot_dismissal_height_delta);
@@ -1117,9 +1125,9 @@ public class GlobalScreenshot implements ViewTreeObserver.OnComputeInternalInset
*/
private void setWindowFocusable(boolean focusable) {
if (focusable) {
- mWindowLayoutParams.flags &= ~FLAG_NOT_FOCUSABLE;
+ mWindowLayoutParams.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
} else {
- mWindowLayoutParams.flags |= FLAG_NOT_FOCUSABLE;
+ mWindowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
}
if (mScreenshotLayout.isAttachedToWindow()) {
mWindowManager.updateViewLayout(mScreenshotLayout, mWindowLayoutParams);
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
index 1bea72aea2ba..72034f84fd30 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
@@ -50,6 +50,8 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import java.util.ArrayList;
+import javax.inject.Inject;
+
public class BrightnessController implements ToggleSlider.Listener {
private static final String TAG = "StatusBar.BrightnessController";
private static final int SLIDER_ANIMATION_DURATION = 3000;
@@ -475,4 +477,20 @@ public class BrightnessController implements ToggleSlider.Listener {
mSliderAnimator.start();
}
+ /** Factory for creating a {@link BrightnessController}. */
+ public static class Factory {
+ private final Context mContext;
+ private final BroadcastDispatcher mBroadcastDispatcher;
+
+ @Inject
+ public Factory(Context context, BroadcastDispatcher broadcastDispatcher) {
+ mContext = context;
+ mBroadcastDispatcher = broadcastDispatcher;
+ }
+
+ /** Create a {@link BrightnessController} */
+ public BrightnessController create(ToggleSlider toggleSlider) {
+ return new BrightnessController(mContext, toggleSlider, mBroadcastDispatcher);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java
index 670a65f55844..b7f4e67e48d1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java
@@ -68,10 +68,8 @@ public class NotificationHeaderUtil {
@Override
public void apply(View parent, View view, boolean apply, boolean reset) {
NotificationHeaderView header = (NotificationHeaderView) view;
- ImageView icon = (ImageView) view.findViewById(
- com.android.internal.R.id.icon);
- ImageView expand = (ImageView) view.findViewById(
- com.android.internal.R.id.expand_button);
+ ImageView icon = view.findViewById(com.android.internal.R.id.icon);
+ ImageView expand = view.findViewById(com.android.internal.R.id.expand_button);
applyToChild(icon, apply, header.getOriginalIconColor());
applyToChild(expand, apply, header.getOriginalNotificationColor());
}
@@ -178,7 +176,7 @@ public class NotificationHeaderUtil {
private void sanitizeHeaderViews(ExpandableNotificationRow row) {
if (row.isSummaryWithChildren()) {
- sanitizeHeader(row.getNotificationHeader());
+ sanitizeHeader(row.getNotificationViewWrapper().getNotificationHeader());
return;
}
final NotificationContentView layout = row.getPrivateLayout();
@@ -275,7 +273,8 @@ public class NotificationHeaderUtil {
}
public void init() {
- mParentView = mParentRow.getNotificationHeader().findViewById(mId);
+ mParentView = mParentRow.getNotificationViewWrapper().getNotificationHeader()
+ .findViewById(mId);
mParentData = mExtractor == null ? null : mExtractor.extractData(mParentRow);
mApply = !mComparator.isEmpty(mParentView);
}
@@ -305,7 +304,7 @@ public class NotificationHeaderUtil {
public void apply(ExpandableNotificationRow row, boolean reset) {
boolean apply = mApply && !reset;
if (row.isSummaryWithChildren()) {
- applyToView(apply, reset, row.getNotificationHeader());
+ applyToView(apply, reset, row.getNotificationViewWrapper().getNotificationHeader());
return;
}
applyToView(apply, reset, row.getPrivateLayout().getContractedChild());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java
index 83e51cd43ed2..7ecdc812cbd3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ViewTransformationHelper.java
@@ -106,12 +106,8 @@ public class ViewTransformationHelper implements TransformableView,
mViewTransformationAnimation.cancel();
}
mViewTransformationAnimation = ValueAnimator.ofFloat(0.0f, 1.0f);
- mViewTransformationAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- transformTo(notification, animation.getAnimatedFraction());
- }
- });
+ mViewTransformationAnimation.addUpdateListener(
+ animation -> transformTo(notification, animation.getAnimatedFraction()));
mViewTransformationAnimation.setInterpolator(Interpolators.LINEAR);
mViewTransformationAnimation.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
mViewTransformationAnimation.addListener(new AnimatorListenerAdapter() {
@@ -167,12 +163,8 @@ public class ViewTransformationHelper implements TransformableView,
mViewTransformationAnimation.cancel();
}
mViewTransformationAnimation = ValueAnimator.ofFloat(0.0f, 1.0f);
- mViewTransformationAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- transformFrom(notification, animation.getAnimatedFraction());
- }
- });
+ mViewTransformationAnimation.addUpdateListener(
+ animation -> transformFrom(notification, animation.getAnimatedFraction()));
mViewTransformationAnimation.addListener(new AnimatorListenerAdapter() {
public boolean mCancelled;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index ba88f628d632..f788dfe47a61 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -304,7 +304,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
}
}
};
- private boolean mForceUnlocked;
private boolean mKeepInParent;
private boolean mRemoved;
private static final Property<ExpandableNotificationRow, Float> TRANSLATE_CONTENT =
@@ -410,8 +409,14 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
setIconAnimationRunning(running, l);
}
if (mIsSummaryWithChildren) {
- setIconAnimationRunningForChild(running, mChildrenContainer.getHeaderView());
- setIconAnimationRunningForChild(running, mChildrenContainer.getLowPriorityHeaderView());
+ NotificationViewWrapper viewWrapper = mChildrenContainer.getNotificationViewWrapper();
+ if (viewWrapper != null) {
+ setIconAnimationRunningForChild(running, viewWrapper.getIcon());
+ }
+ NotificationViewWrapper lowPriWrapper = mChildrenContainer.getLowPriorityViewWrapper();
+ if (lowPriWrapper != null) {
+ setIconAnimationRunningForChild(running, lowPriWrapper.getIcon());
+ }
List<ExpandableNotificationRow> notificationChildren =
mChildrenContainer.getAttachedChildren();
for (int i = 0; i < notificationChildren.size(); i++) {
@@ -435,10 +440,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
private void setIconAnimationRunningForChild(boolean running, View child) {
if (child != null) {
- ImageView icon = (ImageView) child.findViewById(com.android.internal.R.id.icon);
+ ImageView icon = child.findViewById(com.android.internal.R.id.icon);
setIconRunning(icon, running);
- ImageView rightIcon = (ImageView) child.findViewById(
- com.android.internal.R.id.right_icon);
+ ImageView rightIcon = child.findViewById(com.android.internal.R.id.right_icon);
setIconRunning(rightIcon, running);
}
}
@@ -594,7 +598,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
public int getOriginalIconColor() {
if (mIsSummaryWithChildren && !shouldShowPublic()) {
- return mChildrenContainer.getVisibleHeader().getOriginalIconColor();
+ return mChildrenContainer.getVisibleWrapper().getOriginalIconColor();
}
int color = getShowingLayout().getOriginalIconColor();
if (color != Notification.COLOR_INVALID) {
@@ -1040,22 +1044,25 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
}
}
- public NotificationHeaderView getNotificationHeader() {
+ /**
+ * @return the main notification view wrapper.
+ */
+ public NotificationViewWrapper getNotificationViewWrapper() {
if (mIsSummaryWithChildren) {
- return mChildrenContainer.getHeaderView();
+ return mChildrenContainer.getNotificationViewWrapper();
}
- return mPrivateLayout.getNotificationHeader();
+ return mPrivateLayout.getNotificationViewWrapper();
}
/**
- * @return the currently visible notification header. This can be different from
- * {@link #getNotificationHeader()} in case it is a low-priority group.
+ * @return the currently visible notification view wrapper. This can be different from
+ * {@link #getNotificationViewWrapper()} in case it is a low-priority group.
*/
- public NotificationHeaderView getVisibleNotificationHeader() {
+ public NotificationViewWrapper getVisibleNotificationViewWrapper() {
if (mIsSummaryWithChildren && !shouldShowPublic()) {
- return mChildrenContainer.getVisibleHeader();
+ return mChildrenContainer.getVisibleWrapper();
}
- return getShowingLayout().getVisibleNotificationHeader();
+ return getShowingLayout().getVisibleWrapper();
}
public void setLongPressListener(LongPressListener longPressListener) {
@@ -1294,16 +1301,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
onAttachedChildrenCountChanged();
}
- public void setForceUnlocked(boolean forceUnlocked) {
- mForceUnlocked = forceUnlocked;
- if (mIsSummaryWithChildren) {
- List<ExpandableNotificationRow> notificationChildren = getAttachedChildren();
- for (ExpandableNotificationRow child : notificationChildren) {
- child.setForceUnlocked(forceUnlocked);
- }
- }
- }
-
@Override
public void dismiss(boolean refocusOnDismiss) {
super.dismiss(refocusOnDismiss);
@@ -1422,7 +1419,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
@Override
public View getShelfTransformationTarget() {
if (mIsSummaryWithChildren && !shouldShowPublic()) {
- return mChildrenContainer.getVisibleHeader().getIcon();
+ return mChildrenContainer.getVisibleWrapper().getShelfTransformationTarget();
}
return getShowingLayout().getShelfTransformationTarget();
}
@@ -1693,37 +1690,30 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mPublicLayout = (NotificationContentView) findViewById(R.id.expandedPublic);
- mPrivateLayout = (NotificationContentView) findViewById(R.id.expanded);
+ mPublicLayout = findViewById(R.id.expandedPublic);
+ mPrivateLayout = findViewById(R.id.expanded);
mLayouts = new NotificationContentView[] {mPrivateLayout, mPublicLayout};
for (NotificationContentView l : mLayouts) {
l.setExpandClickListener(mExpandClickListener);
l.setContainingNotification(this);
}
- mGutsStub = (ViewStub) findViewById(R.id.notification_guts_stub);
- mGutsStub.setOnInflateListener(new ViewStub.OnInflateListener() {
- @Override
- public void onInflate(ViewStub stub, View inflated) {
- mGuts = (NotificationGuts) inflated;
- mGuts.setClipTopAmount(getClipTopAmount());
- mGuts.setActualHeight(getActualHeight());
- mGutsStub = null;
- }
+ mGutsStub = findViewById(R.id.notification_guts_stub);
+ mGutsStub.setOnInflateListener((stub, inflated) -> {
+ mGuts = (NotificationGuts) inflated;
+ mGuts.setClipTopAmount(getClipTopAmount());
+ mGuts.setActualHeight(getActualHeight());
+ mGutsStub = null;
});
- mChildrenContainerStub = (ViewStub) findViewById(R.id.child_container_stub);
- mChildrenContainerStub.setOnInflateListener(new ViewStub.OnInflateListener() {
+ mChildrenContainerStub = findViewById(R.id.child_container_stub);
+ mChildrenContainerStub.setOnInflateListener((stub, inflated) -> {
+ mChildrenContainer = (NotificationChildrenContainer) inflated;
+ mChildrenContainer.setIsLowPriority(mIsLowPriority);
+ mChildrenContainer.setContainingNotification(ExpandableNotificationRow.this);
+ mChildrenContainer.onNotificationUpdated();
- @Override
- public void onInflate(ViewStub stub, View inflated) {
- mChildrenContainer = (NotificationChildrenContainer) inflated;
- mChildrenContainer.setIsLowPriority(mIsLowPriority);
- mChildrenContainer.setContainingNotification(ExpandableNotificationRow.this);
- mChildrenContainer.onNotificationUpdated();
-
- if (mShouldTranslateContents) {
- mTranslateableViews.add(mChildrenContainer);
- }
+ if (mShouldTranslateContents) {
+ mTranslateableViews.add(mChildrenContainer);
}
});
@@ -2183,7 +2173,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
}
public boolean isUserLocked() {
- return mUserLocked && !mForceUnlocked;
+ return mUserLocked;
}
public void setUserLocked(boolean userLocked) {
@@ -2303,8 +2293,12 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
private void onAttachedChildrenCountChanged() {
mIsSummaryWithChildren = mChildrenContainer != null
&& mChildrenContainer.getNotificationChildCount() > 0;
- if (mIsSummaryWithChildren && mChildrenContainer.getHeaderView() == null) {
- mChildrenContainer.recreateNotificationHeader(mExpandClickListener, isConversation());
+ if (mIsSummaryWithChildren) {
+ NotificationViewWrapper wrapper = mChildrenContainer.getNotificationViewWrapper();
+ if (wrapper == null || wrapper.getNotificationHeader() == null) {
+ mChildrenContainer.recreateNotificationHeader(mExpandClickListener,
+ isConversation());
+ }
}
getShowingLayout().updateBackgroundColor(false /* animate */);
mPrivateLayout.updateExpandButtons(isExpandable());
@@ -2414,9 +2408,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
* the top.
*/
private void updateContentShiftHeight() {
- NotificationHeaderView notificationHeader = getVisibleNotificationHeader();
- if (notificationHeader != null) {
- CachingIconView icon = notificationHeader.getIcon();
+ NotificationViewWrapper wrapper = getVisibleNotificationViewWrapper();
+ CachingIconView icon = wrapper == null ? null : wrapper.getIcon();
+ if (icon != null) {
mIconTransformContentShift = getRelativeTopPadding(icon) + icon.getHeight();
} else {
mIconTransformContentShift = mContentShift;
@@ -2504,12 +2498,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
.alpha(0f)
.setStartDelay(delay)
.setDuration(duration)
- .withEndAction(new Runnable() {
- @Override
- public void run() {
- hiddenView.setVisibility(View.INVISIBLE);
- }
- });
+ .withEndAction(() -> hiddenView.setVisibility(View.INVISIBLE));
}
for (View showView : shownChildren) {
showView.setVisibility(View.VISIBLE);
@@ -2867,7 +2856,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
}
float x = event.getX();
float y = event.getY();
- NotificationHeaderView header = getVisibleNotificationHeader();
+ NotificationHeaderView header = getVisibleNotificationViewWrapper().getNotificationHeader();
if (header != null && header.isInTouchRect(x - getTranslation(), y)) {
return true;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index 3b55f7c1e6e8..160b6f78d9a3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -1018,6 +1018,10 @@ public class NotificationContentView extends FrameLayout {
mSingleLineView };
}
+ public NotificationViewWrapper getVisibleWrapper() {
+ return getVisibleWrapper(mVisibleType);
+ }
+
public NotificationViewWrapper getVisibleWrapper(int visibleType) {
switch (visibleType) {
case VISIBLE_TYPE_EXPANDED:
@@ -1541,18 +1545,20 @@ public class NotificationContentView extends FrameLayout {
mIsContentExpandable = expandable;
}
- public NotificationHeaderView getNotificationHeader() {
- NotificationHeaderView header = null;
- if (mContractedChild != null) {
- header = mContractedWrapper.getNotificationHeader();
+ /**
+ * @return a view wrapper for one of the inflated states of the notification.
+ */
+ public NotificationViewWrapper getNotificationViewWrapper() {
+ if (mContractedChild != null && mContractedWrapper != null) {
+ return mContractedWrapper;
}
- if (header == null && mExpandedChild != null) {
- header = mExpandedWrapper.getNotificationHeader();
+ if (mExpandedChild != null && mExpandedWrapper != null) {
+ return mExpandedWrapper;
}
- if (header == null && mHeadsUpChild != null) {
- header = mHeadsUpWrapper.getNotificationHeader();
+ if (mHeadsUpChild != null && mHeadsUpWrapper != null) {
+ return mHeadsUpWrapper;
}
- return header;
+ return null;
}
public void showFeedbackIcon(boolean show) {
@@ -1580,11 +1586,6 @@ public class NotificationContentView extends FrameLayout {
}
}
- public NotificationHeaderView getVisibleNotificationHeader() {
- NotificationViewWrapper wrapper = getVisibleWrapper(mVisibleType);
- return wrapper == null ? null : wrapper.getNotificationHeader();
- }
-
public void setContainingNotification(ExpandableNotificationRow containingNotification) {
mContainingNotification = containingNotification;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigTextTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigTextTemplateViewWrapper.java
index 41f93cceacc7..d58c183f27e3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigTextTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationBigTextTemplateViewWrapper.java
@@ -37,7 +37,7 @@ public class NotificationBigTextTemplateViewWrapper extends NotificationTemplate
}
private void resolveViews(StatusBarNotification notification) {
- mBigtext = (ImageFloatingTextView) mView.findViewById(com.android.internal.R.id.big_text);
+ mBigtext = mView.findViewById(com.android.internal.R.id.big_text);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
index 3f5867477f16..8314aff99c65 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
@@ -55,8 +55,6 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper {
protected final ViewTransformationHelper mTransformationHelper;
- protected int mColor;
-
private CachingIconView mIcon;
private NotificationExpandButton mExpandButton;
protected NotificationHeaderView mNotificationHeader;
@@ -119,7 +117,6 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper {
mFeedbackIcon = mView.findViewById(com.android.internal.R.id.feedback);
if (mNotificationHeader != null) {
mNotificationHeader.setShowExpandButtonAtEnd(mShowExpandButtonAtEnd);
- mColor = mNotificationHeader.getOriginalIconColor();
}
}
@@ -296,6 +293,11 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper {
}
@Override
+ public CachingIconView getIcon() {
+ return mIcon;
+ }
+
+ @Override
public int getOriginalIconColor() {
return mIcon.getOriginalIconColor();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java
index 33c939054be5..2535e5ddc3d1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationMediaTemplateViewWrapper.java
@@ -370,7 +370,7 @@ public class NotificationMediaTemplateViewWrapper extends NotificationTemplateVi
return;
}
- int tintColor = getNotificationHeader().getOriginalIconColor();
+ int tintColor = getOriginalIconColor();
mSeekBarElapsedTime.setTextColor(tintColor);
mSeekBarTotalTime.setTextColor(tintColor);
mSeekBarTotalTime.setShadowLayer(1.5f, 1.5f, 1.5f, mBackgroundColor);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
index 14aab9d62dfd..76ec59e0ec28 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
@@ -140,13 +140,13 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp
}
private void resolveTemplateViews(StatusBarNotification notification) {
- mPicture = (ImageView) mView.findViewById(com.android.internal.R.id.right_icon);
+ mPicture = mView.findViewById(com.android.internal.R.id.right_icon);
if (mPicture != null) {
mPicture.setTag(ImageTransformState.ICON_TAG,
notification.getNotification().getLargeIcon());
}
- mTitle = (TextView) mView.findViewById(com.android.internal.R.id.title);
- mText = (TextView) mView.findViewById(com.android.internal.R.id.text);
+ mTitle = mView.findViewById(com.android.internal.R.id.title);
+ mText = mView.findViewById(com.android.internal.R.id.text);
final View progress = mView.findViewById(com.android.internal.R.id.progress);
if (progress instanceof ProgressBar) {
mProgressBar = (ProgressBar) progress;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java
index 42f5e389d5a8..e2f0799a5c35 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationViewWrapper.java
@@ -29,7 +29,6 @@ import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
-import android.util.ArraySet;
import android.view.NotificationHeaderView;
import android.view.View;
import android.view.ViewGroup;
@@ -38,7 +37,7 @@ import android.widget.TextView;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.graphics.ColorUtils;
import com.android.internal.util.ContrastColorUtil;
-import com.android.internal.widget.ConversationLayout;
+import com.android.internal.widget.CachingIconView;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.TransformableView;
import com.android.systemui.statusbar.notification.TransformState;
@@ -67,8 +66,7 @@ public abstract class NotificationViewWrapper implements TransformableView {
} else if ("messaging".equals(v.getTag())) {
return new NotificationMessagingTemplateViewWrapper(ctx, v, row);
} else if ("conversation".equals(v.getTag())) {
- return new NotificationConversationTemplateViewWrapper(ctx, (ConversationLayout) v,
- row);
+ return new NotificationConversationTemplateViewWrapper(ctx, v, row);
}
Class<? extends Notification.Style> style =
row.getEntry().getSbn().getNotification().getNotificationStyle();
@@ -241,7 +239,16 @@ public abstract class NotificationViewWrapper implements TransformableView {
/**
* @return the expand button if it exists
*/
- public @Nullable View getExpandButton() {
+ @Nullable
+ public View getExpandButton() {
+ return null;
+ }
+
+ /**
+ * @return the icon if it exists
+ */
+ @Nullable
+ public CachingIconView getIcon() {
return null;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
index a396305a49b6..a5d51c64d4ee 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
@@ -31,6 +31,7 @@ import android.widget.RemoteViews;
import android.widget.TextView;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.widget.CachingIconView;
import com.android.systemui.R;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.NotificationHeaderUtil;
@@ -318,9 +319,8 @@ public class NotificationChildrenContainer extends ViewGroup {
RemoteViews header = builder.makeNotificationHeader();
if (mNotificationHeader == null) {
mNotificationHeader = (NotificationHeaderView) header.apply(getContext(), this);
- final View expandButton = mNotificationHeader.findViewById(
- com.android.internal.R.id.expand_button);
- expandButton.setVisibility(VISIBLE);
+ mNotificationHeader.findViewById(com.android.internal.R.id.expand_button)
+ .setVisibility(VISIBLE);
mNotificationHeader.setOnClickListener(mHeaderClickListener);
mNotificationHeaderWrapper = NotificationViewWrapper.wrap(getContext(),
mNotificationHeader, mContainingNotification);
@@ -361,9 +361,8 @@ public class NotificationChildrenContainer extends ViewGroup {
if (mNotificationHeaderLowPriority == null) {
mNotificationHeaderLowPriority = (NotificationHeaderView) header.apply(getContext(),
this);
- final View expandButton = mNotificationHeaderLowPriority.findViewById(
- com.android.internal.R.id.expand_button);
- expandButton.setVisibility(VISIBLE);
+ mNotificationHeaderLowPriority.findViewById(com.android.internal.R.id.expand_button)
+ .setVisibility(VISIBLE);
mNotificationHeaderLowPriority.setOnClickListener(mHeaderClickListener);
mNotificationHeaderWrapperLowPriority = NotificationViewWrapper.wrap(getContext(),
mNotificationHeaderLowPriority, mContainingNotification);
@@ -869,12 +868,12 @@ public class NotificationChildrenContainer extends ViewGroup {
return mContainingNotification;
}
- public NotificationHeaderView getHeaderView() {
- return mNotificationHeader;
+ public NotificationViewWrapper getNotificationViewWrapper() {
+ return mNotificationHeaderWrapper;
}
- public NotificationHeaderView getLowPriorityHeaderView() {
- return mNotificationHeaderLowPriority;
+ public NotificationViewWrapper getLowPriorityViewWrapper() {
+ return mNotificationHeaderWrapperLowPriority;
}
@VisibleForTesting
@@ -1224,16 +1223,15 @@ public class NotificationChildrenContainer extends ViewGroup {
public void setShelfIconVisible(boolean iconVisible) {
if (mNotificationHeaderWrapper != null) {
- NotificationHeaderView header = mNotificationHeaderWrapper.getNotificationHeader();
- if (header != null) {
- header.getIcon().setForceHidden(iconVisible);
+ CachingIconView icon = mNotificationHeaderWrapper.getIcon();
+ if (icon != null) {
+ icon.setForceHidden(iconVisible);
}
}
if (mNotificationHeaderWrapperLowPriority != null) {
- NotificationHeaderView header
- = mNotificationHeaderWrapperLowPriority.getNotificationHeader();
- if (header != null) {
- header.getIcon().setForceHidden(iconVisible);
+ CachingIconView icon = mNotificationHeaderWrapperLowPriority.getIcon();
+ if (icon != null) {
+ icon.setForceHidden(iconVisible);
}
}
}
@@ -1254,12 +1252,14 @@ public class NotificationChildrenContainer extends ViewGroup {
}
}
- public NotificationHeaderView getVisibleHeader() {
- NotificationHeaderView header = mNotificationHeader;
+ /**
+ * @return the view wrapper for the currently showing priority.
+ */
+ public NotificationViewWrapper getVisibleWrapper() {
if (showingAsLowPriority()) {
- header = mNotificationHeaderLowPriority;
+ return mNotificationHeaderWrapperLowPriority;
}
- return header;
+ return mNotificationHeaderWrapper;
}
public void onExpansionChanged() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
index af6ac223ada1..2767b7e1627d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -38,9 +38,9 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.ViewMediatorCallback;
import com.android.keyguard.dagger.KeyguardBouncerComponent;
-import com.android.keyguard.dagger.RootView;
import com.android.systemui.DejankUtils;
import com.android.systemui.biometrics.AuthController;
+import com.android.systemui.dagger.qualifiers.RootView;
import com.android.systemui.keyguard.DismissCallbackRegistry;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.shared.system.SysUiStatsLog;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index f55c93580210..c7932bb44cf4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -172,7 +172,7 @@ import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.QSFragment;
-import com.android.systemui.qs.QSPanel;
+import com.android.systemui.qs.QSPanelController;
import com.android.systemui.recents.ScreenPinningRequest;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.shared.system.WindowManagerWrapper;
@@ -408,7 +408,7 @@ public class StatusBar extends SystemUI implements DemoMode,
protected NotificationPanelViewController mNotificationPanelViewController;
// settings
- private QSPanel mQSPanel;
+ private QSPanelController mQSPanelController;
KeyguardIndicationController mKeyguardIndicationController;
@@ -1200,8 +1200,8 @@ public class StatusBar extends SystemUI implements DemoMode,
fragmentHostManager.addTagListener(QS.TAG, (tag, f) -> {
QS qs = (QS) f;
if (qs instanceof QSFragment) {
- mQSPanel = ((QSFragment) qs).getQsPanel();
- mQSPanel.setBrightnessMirror(mBrightnessMirrorController);
+ mQSPanelController = ((QSFragment) qs).getQSPanelController();
+ mQSPanelController.setBrightnessMirror(mBrightnessMirrorController);
}
});
}
@@ -1593,19 +1593,19 @@ public class StatusBar extends SystemUI implements DemoMode,
}
public void addQsTile(ComponentName tile) {
- if (mQSPanel != null && mQSPanel.getHost() != null) {
- mQSPanel.getHost().addTile(tile);
+ if (mQSPanelController != null && mQSPanelController.getHost() != null) {
+ mQSPanelController.getHost().addTile(tile);
}
}
public void remQsTile(ComponentName tile) {
- if (mQSPanel != null && mQSPanel.getHost() != null) {
- mQSPanel.getHost().removeTile(tile);
+ if (mQSPanelController != null && mQSPanelController.getHost() != null) {
+ mQSPanelController.getHost().removeTile(tile);
}
}
public void clickTile(ComponentName tile) {
- mQSPanel.clickTile(tile);
+ mQSPanelController.clickTile(tile);
}
/**
@@ -2197,7 +2197,7 @@ public class StatusBar extends SystemUI implements DemoMode,
if (!mUserSetup) return;
if (subPanel != null) {
- mQSPanel.openDetails(subPanel);
+ mQSPanelController.openDetails(subPanel);
}
mNotificationPanelViewController.expandWithQs();
@@ -2845,7 +2845,7 @@ public class StatusBar extends SystemUI implements DemoMode,
resetUserExpandedStates();
}
else if (DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG.equals(action)) {
- mQSPanel.showDeviceMonitoringDialog();
+ mQSPanelController.showDeviceMonitoringDialog();
}
Trace.endSection();
}
@@ -2936,8 +2936,8 @@ public class StatusBar extends SystemUI implements DemoMode,
*/
void updateResources() {
// Update the quick setting tiles
- if (mQSPanel != null) {
- mQSPanel.updateResources();
+ if (mQSPanelController != null) {
+ mQSPanelController.updateResources();
}
if (mStatusBarWindowController != null) {
@@ -3402,8 +3402,8 @@ public class StatusBar extends SystemUI implements DemoMode,
// Keyguard state has changed, but QS is not listening anymore. Make sure to update the tile
// visibilities so next time we open the panel we know the correct height already.
- if (mQSPanel != null) {
- mQSPanel.refreshAllTiles();
+ if (mQSPanelController != null) {
+ mQSPanelController.refreshAllTiles();
}
mHandler.removeMessages(MSG_LAUNCH_TRANSITION_TIMEOUT);
releaseGestureWakeLock();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
index 9c3395f9332d..c84589a9e142 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
@@ -18,11 +18,13 @@ package com.android.systemui.statusbar.policy;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.RemoteInput;
+import android.content.ClipData;
import android.content.ClipDescription;
import android.content.Context;
import android.content.Intent;
@@ -43,6 +45,7 @@ import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
+import android.view.OnReceiveContentCallback;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
@@ -57,9 +60,6 @@ import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
-import androidx.core.view.inputmethod.InputConnectionCompat;
-import androidx.core.view.inputmethod.InputContentInfoCompat;
-
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.statusbar.IStatusBarService;
@@ -73,7 +73,9 @@ import com.android.systemui.statusbar.notification.row.wrapper.NotificationViewW
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.LightBarController;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.Set;
import java.util.function.Consumer;
/**
@@ -313,6 +315,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mRemoteInputs = remoteInputs;
mRemoteInput = remoteInput;
mEditText.setHint(mRemoteInput.getLabel());
+ mEditText.mSupportedMimeTypes = remoteInput.getAllowedDataTypes();
mEntry.editedSuggestionInfo = editedSuggestionInfo;
if (editedSuggestionInfo != null) {
@@ -571,6 +574,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
boolean mShowImeOnInputConnection;
private LightBarController mLightBarController;
UserHandle mUser;
+ private Set<String> mSupportedMimeTypes;
public RemoteEditText(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -578,6 +582,40 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
mLightBarController = Dependency.get(LightBarController.class);
}
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ setOnReceiveContentCallback(new OnReceiveContentCallback<View>() {
+ @Override
+ public boolean onReceiveContent(@NonNull View view, @NonNull Payload payload) {
+ ClipData clip = payload.getClip();
+ if (clip.getItemCount() == 0) {
+ return false;
+ }
+ Uri contentUri = clip.getItemAt(0).getUri();
+ ClipDescription description = clip.getDescription();
+ String mimeType = null;
+ if (description.getMimeTypeCount() > 0) {
+ mimeType = description.getMimeType(0);
+ }
+ if (mimeType != null) {
+ Intent dataIntent = mRemoteInputView
+ .prepareRemoteInputFromData(mimeType, contentUri);
+ mRemoteInputView.sendRemoteInput(dataIntent);
+ }
+ return true;
+ }
+
+ @NonNull
+ @Override
+ public Set<String> getSupportedMimeTypes(@NonNull View view) {
+ return mSupportedMimeTypes != null
+ ? mSupportedMimeTypes
+ : Collections.emptySet();
+ }
+ });
+ }
+
private void defocusIfNeeded(boolean animate) {
if (mRemoteInputView != null && mRemoteInputView.mEntry.getRow().isChangingPosition()
|| isTemporarilyDetached()) {
@@ -670,36 +708,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
- // TODO: Pass RemoteInput data types to allow image insertion.
- // String[] allowedDataTypes = mRemoteInputView.mRemoteInput.getAllowedDataTypes()
- // .toArray(new String[0]);
- // EditorInfoCompat.setContentMimeTypes(outAttrs, allowedDataTypes);
- final InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
-
- final InputConnectionCompat.OnCommitContentListener callback =
- new InputConnectionCompat.OnCommitContentListener() {
- @Override
- public boolean onCommitContent(
- InputContentInfoCompat inputContentInfoCompat, int i,
- Bundle bundle) {
- Uri contentUri = inputContentInfoCompat.getContentUri();
- ClipDescription description = inputContentInfoCompat.getDescription();
- String mimeType = null;
- if (description != null && description.getMimeTypeCount() > 0) {
- mimeType = description.getMimeType(0);
- }
- if (mimeType != null) {
- Intent dataIntent = mRemoteInputView.prepareRemoteInputFromData(
- mimeType, contentUri);
- mRemoteInputView.sendRemoteInput(dataIntent);
- }
- return true;
- }
- };
-
- InputConnection ic = inputConnection == null ? null :
- InputConnectionCompat.createWrapper(inputConnection, outAttrs, callback);
-
+ final InputConnection ic = super.onCreateInputConnection(outAttrs);
Context userContext = null;
try {
userContext = mContext.createPackageContextAsUser(
@@ -747,7 +756,6 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
} else {
setBackground(null);
}
-
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java
index 70bba263ab90..b67574d1c4de 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerService.java
@@ -32,6 +32,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialog;
public abstract class TunerService {
public static final String ACTION_CLEAR = "com.android.systemui.action.CLEAR_TUNER";
+ private final Context mContext;
public abstract void clearAll();
public abstract void destroy();
@@ -50,6 +51,10 @@ public abstract class TunerService {
void onTuningChanged(String key, String newValue);
}
+ public TunerService(Context context) {
+ mContext = context;
+ }
+
private static Context userContext(Context context, UserHandle user) {
try {
return context.createPackageContextAsUser(context.getPackageName(), 0, user);
@@ -58,6 +63,11 @@ public abstract class TunerService {
}
}
+ /** Enables or disables the tuner for the supplied user. */
+ public void setTunerEnabled(UserHandle user, boolean enabled) {
+ setTunerEnabled(mContext, user, enabled);
+ }
+
public static final void setTunerEnabled(Context context, UserHandle user, boolean enabled) {
userContext(context, user).getPackageManager().setComponentEnabledSetting(
new ComponentName(context, TunerActivity.class),
@@ -66,6 +76,11 @@ public abstract class TunerService {
PackageManager.DONT_KILL_APP);
}
+ /** Returns true if the tuner is enabled for the supplied user. */
+ public boolean isTunerEnabled(UserHandle user) {
+ return isTunerEnabled(mContext, user);
+ }
+
public static final boolean isTunerEnabled(Context context, UserHandle user) {
return userContext(context, user).getPackageManager().getComponentEnabledSetting(
new ComponentName(context, TunerActivity.class))
@@ -81,6 +96,11 @@ public abstract class TunerService {
}
}
+ /** */
+ public void showResetRequest(UserHandle user, final Runnable onDisabled) {
+ showResetRequest(mContext, user, onDisabled);
+ }
+
public static final void showResetRequest(final Context context, UserHandle user,
final Runnable onDisabled) {
SystemUIDialog dialog = new SystemUIDialog(context);
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java
index 22f03e074b06..027c282ba352 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java
@@ -94,6 +94,7 @@ public class TunerServiceImpl extends TunerService {
DemoModeController demoModeController,
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker) {
+ super(context);
mContext = context;
mContentResolver = mContext.getContentResolver();
mLeakDetector = leakDetector;
diff --git a/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java b/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java
index 344f0d2f5506..e79d432b3b15 100644
--- a/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java
+++ b/packages/SystemUI/src/com/android/systemui/util/InjectionInflationController.java
@@ -24,7 +24,6 @@ import android.view.LayoutInflater;
import android.view.View;
import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.qs.QSFooterImpl;
import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QuickQSPanel;
import com.android.systemui.qs.customize.QSCustomizer;
@@ -92,11 +91,6 @@ public class InjectionInflationController {
}
/**
- * Creates the QSFooterImpl.
- */
- QSFooterImpl createQsFooter();
-
- /**
* Creates the NotificationStackScrollLayout.
*/
NotificationStackScrollLayout createNotificationStackScrollLayout();
diff --git a/packages/SystemUI/src/com/android/systemui/util/ViewController.java b/packages/SystemUI/src/com/android/systemui/util/ViewController.java
index c7aa780fcacb..3dbc6f101a90 100644
--- a/packages/SystemUI/src/com/android/systemui/util/ViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/util/ViewController.java
@@ -16,6 +16,8 @@
package com.android.systemui.util;
+import android.content.Context;
+import android.content.res.Resources;
import android.view.View;
import android.view.View.OnAttachStateChangeListener;
@@ -75,6 +77,14 @@ public abstract class ViewController<T extends View> {
}
}
+ protected Context getContext() {
+ return mView.getContext();
+ }
+
+ protected Resources getResources() {
+ return mView.getResources();
+ }
+
/**
* Called when the view is attached and a call to {@link #init()} has been made in either order.
*/
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
index 9a77218cc86f..4f3266d0db44 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
@@ -30,6 +30,7 @@ import android.testing.TestableLooper;
import android.util.Log;
import androidx.test.InstrumentationRegistry;
+import androidx.test.uiautomator.UiDevice;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
@@ -149,6 +150,10 @@ public abstract class SysuiTestCase {
return mContext;
}
+ protected UiDevice getUiDevice() {
+ return UiDevice.getInstance(mRealInstrumentation);
+ }
+
protected void runShellCommand(String command) throws IOException {
ParcelFileDescriptor pfd = mRealInstrumentation.getUiAutomation()
.executeShellCommand(command);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java
index b4af786c5579..78ee5936fe0b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java
@@ -53,6 +53,9 @@ import android.view.WindowManagerPolicyConstants;
import android.widget.FrameLayout;
import androidx.test.filters.SmallTest;
+import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.UiObject2;
+import androidx.test.uiautomator.Until;
import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.logging.MetricsLogger;
@@ -86,11 +89,16 @@ import org.mockito.MockitoAnnotations;
import java.util.List;
import java.util.concurrent.Executor;
+import java.util.regex.Pattern;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper(setAsMainLooper = true)
public class GlobalActionsDialogTest extends SysuiTestCase {
+ private static final long UI_TIMEOUT_MILLIS = 5000; // 5 sec
+ private static final Pattern CANCEL_BUTTON =
+ Pattern.compile("cancel", Pattern.CASE_INSENSITIVE);
+
private GlobalActionsDialog mGlobalActionsDialog;
@Mock private GlobalActions.GlobalActionsManager mWindowManagerFuncs;
@@ -240,6 +248,13 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
mGlobalActionsDialog.makeScreenshotActionForTesting();
screenshotAction.onLongPress();
verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_SCREENSHOT_LONG_PRESS);
+
+ // Dismiss ScreenRecordDialog opened by the long press above.
+ final UiObject2 cancelButton = getUiDevice().wait(
+ Until.findObject(By.text(CANCEL_BUTTON)), UI_TIMEOUT_MILLIS);
+ if (cancelButton != null) {
+ cancelButton.click();
+ }
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java
index 353efeeb21f6..803919200150 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSDetailTest.java
@@ -70,7 +70,7 @@ public class QSDetailTest extends SysuiTestCase {
mQsDetail = (QSDetail) LayoutInflater.from(mContext).inflate(R.layout.qs_detail, null);
mQsPanel = mock(QSPanel.class);
mQuickHeader = mock(QuickStatusBarHeader.class);
- mQsDetail.setQsPanel(mQsPanel, mQuickHeader, mock(View.class));
+ mQsDetail.setQsPanel(mQsPanel, mQuickHeader, mock(QSFooter.class));
mMockDetailAdapter = mock(DetailAdapter.class);
when(mMockDetailAdapter.createDetailView(any(), any(), any()))
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java
deleted file mode 100644
index 99f2d8042547..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterImplTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.systemui.qs;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.ClipData;
-import android.content.ClipboardManager;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.testing.TestableLooper.RunWithLooper;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.R;
-import com.android.systemui.R.id;
-import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.settings.UserTracker;
-import com.android.systemui.statusbar.policy.DeviceProvisionedController;
-import com.android.systemui.statusbar.policy.UserInfoController;
-import com.android.systemui.utils.leaks.LeakCheckedTest;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidTestingRunner.class)
-@RunWithLooper
-@SmallTest
-public class QSFooterImplTest extends LeakCheckedTest {
-
- private QSFooterImpl mFooter;
- private ActivityStarter mActivityStarter;
- private DeviceProvisionedController mDeviceProvisionedController;
- private UserInfoController mUserInfoController;
- private UserTracker mUserTracker;
- @Mock
- private ClipboardManager mClipboardManager;
-
- @Before
- public void setup() throws Exception {
- MockitoAnnotations.initMocks(this);
-
- injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
- mActivityStarter = mDependency.injectMockDependency(ActivityStarter.class);
- mDeviceProvisionedController = mDependency.injectMockDependency(
- DeviceProvisionedController.class);
- mUserInfoController = mDependency.injectMockDependency(UserInfoController.class);
- mUserTracker = mDependency.injectMockDependency(UserTracker.class);
-
- mContext.addMockSystemService(ClipboardManager.class, mClipboardManager);
-
- when(mUserTracker.getUserContext()).thenReturn(mContext);
-
- TestableLooper.get(this).runWithLooper(
- () -> mFooter = (QSFooterImpl) LayoutInflater.from(mContext).inflate(
- R.layout.qs_footer_impl, null));
- }
-
- @Test
- public void testBuildTextCopy() {
- TextView buildTextView = mFooter.requireViewById(R.id.build);
- CharSequence buildText = "TEST";
- buildTextView.setText(buildText);
- buildTextView.setLongClickable(true);
-
- buildTextView.performLongClick();
-
- ArgumentCaptor<ClipData> captor = ArgumentCaptor.forClass(ClipData.class);
- verify(mClipboardManager).setPrimaryClip(captor.capture());
- assertThat(captor.getValue().getItemAt(0).getText()).isEqualTo(buildText);
- }
-
- @Test
- @Ignore("failing")
- public void testSettings_UserNotSetup() {
- View settingsButton = mFooter.findViewById(id.settings_button);
- when(mDeviceProvisionedController.isCurrentUserSetup()).thenReturn(false);
-
- mFooter.onClick(settingsButton);
- // Verify Settings wasn't launched.
- verify(mActivityStarter, never()).startActivity(any(), anyBoolean());
- }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java
new file mode 100644
index 000000000000..065f236d19b3
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.os.UserManager;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.testing.FakeMetricsLogger;
+import com.android.systemui.Dependency;
+import com.android.systemui.R;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.settings.UserTracker;
+import com.android.systemui.statusbar.phone.SettingsButton;
+import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.statusbar.policy.UserInfoController;
+import com.android.systemui.tuner.TunerService;
+import com.android.systemui.utils.leaks.FakeTunerService;
+import com.android.systemui.utils.leaks.LeakCheckedTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+@SmallTest
+public class QSFooterViewControllerTest extends LeakCheckedTest {
+
+ @Mock
+ private QSFooterView mView;
+ @Mock
+ private UserManager mUserManager;
+ @Mock
+ private ActivityStarter mActivityStarter;
+ @Mock
+ private DeviceProvisionedController mDeviceProvisionedController;
+ @Mock
+ private UserInfoController mUserInfoController;
+ @Mock
+ private UserTracker mUserTracker;
+ @Mock
+ private QSPanelController mQSPanelController;
+ @Mock
+ private ClipboardManager mClipboardManager;
+ private FakeTunerService mFakeTunerService;
+ private MetricsLogger mMetricsLogger = new FakeMetricsLogger();
+
+ @Mock
+ private SettingsButton mSettingsButton;
+ @Mock
+ private TextView mBuildText;
+ @Mock
+ private View mEdit;
+
+ private QSFooterViewController mController;
+
+ @Before
+ public void setup() throws Exception {
+ MockitoAnnotations.initMocks(this);
+
+ injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
+
+ mFakeTunerService = (FakeTunerService) Dependency.get(TunerService.class);
+
+ mContext.addMockSystemService(ClipboardManager.class, mClipboardManager);
+
+ when(mView.getContext()).thenReturn(mContext);
+ when(mView.getResources()).thenReturn(mContext.getResources());
+ when(mUserTracker.getUserContext()).thenReturn(mContext);
+
+ when(mView.isAttachedToWindow()).thenReturn(true);
+ when(mView.findViewById(R.id.settings_button)).thenReturn(mSettingsButton);
+ when(mView.findViewById(R.id.build)).thenReturn(mBuildText);
+ when(mView.findViewById(android.R.id.edit)).thenReturn(mEdit);
+
+ mController = new QSFooterViewController(mView, mUserManager, mUserInfoController,
+ mActivityStarter, mDeviceProvisionedController, mUserTracker, mQSPanelController,
+ mFakeTunerService, mMetricsLogger);
+
+ mController.init();
+ }
+
+ @Test
+ public void testBuildTextCopy() {
+ String text = "TEST";
+ ArgumentCaptor<View.OnLongClickListener> onLongClickCaptor =
+ ArgumentCaptor.forClass(View.OnLongClickListener.class);
+
+ verify(mBuildText).setOnLongClickListener(onLongClickCaptor.capture());
+
+ when(mBuildText.getText()).thenReturn(text);
+ onLongClickCaptor.getValue().onLongClick(mBuildText);
+
+ ArgumentCaptor<ClipData> captor = ArgumentCaptor.forClass(ClipData.class);
+ verify(mClipboardManager).setPrimaryClip(captor.capture());
+ assertThat(captor.getValue().getItemAt(0).getText()).isEqualTo(text);
+ }
+
+ @Test
+ public void testSettings_UserNotSetup() {
+ ArgumentCaptor<View.OnClickListener> onClickCaptor =
+ ArgumentCaptor.forClass(View.OnClickListener.class);
+ verify(mSettingsButton).setOnClickListener(onClickCaptor.capture());
+
+ when(mDeviceProvisionedController.isCurrentUserSetup()).thenReturn(false);
+
+ onClickCaptor.getValue().onClick(mSettingsButton);
+ // Verify Settings wasn't launched.
+ verify(mActivityStarter, never()).startActivity(any(), anyBoolean());
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
index e472cb22ed6b..90609ccb48d6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
@@ -16,7 +16,9 @@ package com.android.systemui.qs;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import android.app.Fragment;
import android.content.Context;
@@ -42,6 +44,7 @@ import com.android.systemui.SysuiBaseFragmentTest;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.qs.dagger.QSFragmentComponent;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tileimpl.QSFactoryImpl;
import com.android.systemui.settings.UserTracker;
@@ -61,6 +64,8 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
import java.util.Optional;
@@ -71,6 +76,12 @@ import java.util.Optional;
public class QSFragmentTest extends SysuiBaseFragmentTest {
private MetricsLogger mMockMetricsLogger;
+ @Mock
+ private QSFragmentComponent.Factory mQsComponentFactory;
+ @Mock
+ private QSFragmentComponent mQsFragmentComponent;
+ @Mock
+ private QSPanelController mQSPanelController;
public QSFragmentTest() {
super(QSFragment.class);
@@ -80,6 +91,10 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
@Before
@Ignore("failing")
public void addLeakCheckDependencies() {
+ MockitoAnnotations.initMocks(this);
+ when(mQsComponentFactory.create(any(QSFragment.class))).thenReturn(mQsFragmentComponent);
+ when(mQsFragmentComponent.getQSPanelController()).thenReturn(mQSPanelController);
+
mMockMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE,
new LayoutInflaterBuilder(mContext)
@@ -152,6 +167,6 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
mock(QSTileHost.class),
mock(StatusBarStateController.class),
commandQueue,
- mock(QSContainerImplController.Builder.class));
+ mQsComponentFactory);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java
new file mode 100644
index 000000000000..bf0e0841de9a
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper.RunWithLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.UiEventLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.logging.testing.UiEventLoggerFake;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.media.MediaHost;
+import com.android.systemui.plugins.qs.QSTileView;
+import com.android.systemui.qs.tileimpl.QSTileImpl;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Collections;
+
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper
+@SmallTest
+public class QSPanelControllerBaseTest extends SysuiTestCase {
+
+ @Mock
+ private QSPanel mQSPanel;
+ @Mock
+ private QSTileHost mQSTileHost;
+ @Mock
+ private MediaHost mMediaHost;
+ @Mock
+ private MetricsLogger mMetricsLogger;
+ private UiEventLoggerFake mUiEventLogger = new UiEventLoggerFake();
+ private DumpManager mDumpManager = new DumpManager();
+ @Mock
+ QSTileImpl mQSTile;
+ @Mock
+ QSTileView mQSTileView;
+
+ private QSPanelControllerBase<QSPanel> mController;
+
+ /** Implementation needed to ensure we have a reflectively-available class name. */
+ private static class TestableQSPanelControllerBase extends QSPanelControllerBase<QSPanel> {
+ protected TestableQSPanelControllerBase(QSPanel view, QSTileHost host,
+ MetricsLogger metricsLogger,
+ UiEventLogger uiEventLogger, DumpManager dumpManager) {
+ super(view, host, metricsLogger, uiEventLogger, dumpManager);
+ }
+ }
+
+ @Before
+ public void setup() throws Exception {
+ MockitoAnnotations.initMocks(this);
+
+ when(mQSPanel.getMediaHost()).thenReturn(mMediaHost);
+ when(mQSPanel.isAttachedToWindow()).thenReturn(true);
+ when(mQSPanel.getDumpableTag()).thenReturn("QSPanel");
+ when(mQSPanel.openPanelEvent()).thenReturn(QSEvent.QS_PANEL_EXPANDED);
+ when(mQSPanel.closePanelEvent()).thenReturn(QSEvent.QS_PANEL_COLLAPSED);
+ when(mQSTileHost.getTiles()).thenReturn(Collections.singleton(mQSTile));
+ when(mQSTileHost.createTileView(eq(mQSTile), anyBoolean())).thenReturn(mQSTileView);
+
+ mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost,
+ mMetricsLogger, mUiEventLogger, mDumpManager);
+
+ mController.init();
+ }
+
+ @Test
+ public void testSetExpanded_Metrics() {
+ mController.setExpanded(true);
+ verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(true));
+ assertEquals(1, mUiEventLogger.numLogs());
+ assertEquals(QSEvent.QS_PANEL_EXPANDED.getId(), mUiEventLogger.eventId(0));
+ mUiEventLogger.getLogs().clear();
+
+ mController.setExpanded(false);
+ verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(false));
+ assertEquals(1, mUiEventLogger.numLogs());
+ assertEquals(QSEvent.QS_PANEL_COLLAPSED.getId(), mUiEventLogger.eventId(0));
+ mUiEventLogger.getLogs().clear();
+
+ }
+
+ @Test
+ public void testDump() {
+ String mockTileViewString = "Mock Tile View";
+ String mockTileString = "Mock Tile";
+ doAnswer(invocation -> {
+ PrintWriter pw = invocation.getArgument(1);
+ pw.println(mockTileString);
+ return null;
+ }).when(mQSTile).dump(any(FileDescriptor.class), any(PrintWriter.class),
+ any(String[].class));
+ when(mQSTileView.toString()).thenReturn(mockTileViewString);
+
+ StringWriter w = new StringWriter();
+ PrintWriter pw = new PrintWriter(w);
+ mController.dump(mock(FileDescriptor.class), pw, new String[]{});
+ String expected = "TestableQSPanelControllerBase:\n"
+ + " Tile records:\n"
+ + " " + mockTileString + "\n"
+ + " " + mockTileViewString + "\n";
+ assertEquals(expected, w.getBuffer().toString());
+ }
+
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java
new file mode 100644
index 000000000000..0ba0214d2173
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2020 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.systemui.qs;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper.RunWithLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.UiEventLogger;
+import com.android.internal.logging.testing.UiEventLoggerFake;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.media.MediaHost;
+import com.android.systemui.plugins.qs.QSTileView;
+import com.android.systemui.qs.tileimpl.QSTileImpl;
+import com.android.systemui.settings.BrightnessController;
+import com.android.systemui.settings.ToggleSlider;
+import com.android.systemui.tuner.TunerService;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Collections;
+
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper
+@SmallTest
+public class QSPanelControllerTest extends SysuiTestCase {
+
+ @Mock
+ private QSPanel mQSPanel;
+ @Mock
+ private QSTileHost mQSTileHost;
+ @Mock
+ private MediaHost mMediaHost;
+ @Mock
+ private MetricsLogger mMetricsLogger;
+ private UiEventLogger mUiEventLogger = new UiEventLoggerFake();
+ private DumpManager mDumpManager = new DumpManager();
+ @Mock
+ private TunerService mTunerService;
+ @Mock
+ private QSSecurityFooter mQSSecurityFooter;
+ @Mock
+ private BrightnessController.Factory mBrightnessControllerFactory;
+ @Mock
+ private BrightnessController mBrightnessController;
+ @Mock
+ QSTileImpl mQSTile;
+ @Mock
+ QSTileView mQSTileView;
+
+ private QSPanelController mController;
+
+ @Before
+ public void setup() throws Exception {
+ MockitoAnnotations.initMocks(this);
+
+ when(mQSPanel.getMediaHost()).thenReturn(mMediaHost);
+ when(mQSPanel.isAttachedToWindow()).thenReturn(true);
+ when(mQSPanel.getDumpableTag()).thenReturn("QSPanel");
+ when(mQSTileHost.getTiles()).thenReturn(Collections.singleton(mQSTile));
+ when(mQSTileHost.createTileView(eq(mQSTile), anyBoolean())).thenReturn(mQSTileView);
+ when(mBrightnessControllerFactory.create(any(ToggleSlider.class)))
+ .thenReturn(mBrightnessController);
+
+ mController = new QSPanelController(mQSPanel, mQSSecurityFooter, mTunerService,
+ mQSTileHost, mDumpManager, mMetricsLogger, mUiEventLogger,
+ mBrightnessControllerFactory);
+
+ mController.init();
+ }
+
+ @Test
+ public void testOpenDetailsWithNonExistingTile_NoException() {
+ mController.openDetails("none");
+
+ verify(mQSPanel, never()).openDetails(any());
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
index 4b7a26870308..e38d54b90f69 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
@@ -14,12 +14,9 @@
package com.android.systemui.qs;
-import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -36,19 +33,15 @@ import android.widget.FrameLayout;
import androidx.test.filters.SmallTest;
import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.logging.testing.UiEventLoggerFake;
import com.android.systemui.Dependency;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.QSTileView;
import com.android.systemui.qs.customize.QSCustomizer;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tileimpl.QSTileImpl;
-import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.policy.SecurityController;
import com.android.systemui.util.animation.DisappearParameters;
import com.android.systemui.util.animation.UniqueObjectHostView;
@@ -59,9 +52,6 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.Collections;
@RunWith(AndroidTestingRunner.class)
@@ -79,9 +69,9 @@ public class QSPanelTest extends SysuiTestCase {
@Mock
private QSTileImpl dndTile;
@Mock
- private BroadcastDispatcher mBroadcastDispatcher;
+ private QSTileImpl mNonTile;
@Mock
- private DumpManager mDumpManager;
+ private QSPanelControllerBase.TileRecord mDndTileRecord;
@Mock
private QSLogger mQSLogger;
private ViewGroup mParentView;
@@ -93,9 +83,8 @@ public class QSPanelTest extends SysuiTestCase {
private MediaHost mMediaHost;
@Mock
private ActivityStarter mActivityStarter;
- @Mock(stubOnly = true)
- private UserTracker mUserTracker;
private UiEventLoggerFake mUiEventLogger;
+ private String mCachedSpecs = "";
@Before
public void setup() throws Exception {
@@ -109,12 +98,13 @@ public class QSPanelTest extends SysuiTestCase {
mContext.addMockSystemService(Context.USER_SERVICE, mock(UserManager.class));
when(mMediaHost.getHostView()).thenReturn(new UniqueObjectHostView(getContext()));
when(mMediaHost.getDisappearParameters()).thenReturn(new DisappearParameters());
+ mDndTileRecord.tile = dndTile;
+ mDndTileRecord.tileView = mQSTileView;
mUiEventLogger = new UiEventLoggerFake();
mTestableLooper.runWithLooper(() -> {
mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class);
- mQsPanel = new QSPanel(mContext, null, mDumpManager, mBroadcastDispatcher,
- mQSLogger, mMediaHost, mUiEventLogger, mUserTracker);
+ mQsPanel = new QSPanel(mContext, null, mQSLogger, mMediaHost, mUiEventLogger);
mQsPanel.onFinishInflate();
// Provides a parent with non-zero size for QSPanel
mParentView = new FrameLayout(mContext);
@@ -124,8 +114,8 @@ public class QSPanelTest extends SysuiTestCase {
when(mHost.getTiles()).thenReturn(Collections.emptyList());
when(mHost.createTileView(any(), anyBoolean())).thenReturn(mQSTileView);
- mQsPanel.setHost(mHost, mCustomizer);
- mQsPanel.addTile(dndTile, true);
+ mQsPanel.setCustomizer(mCustomizer);
+ mQsPanel.addTile(mDndTileRecord);
mQsPanel.setCallback(mCallback);
});
}
@@ -133,25 +123,16 @@ public class QSPanelTest extends SysuiTestCase {
@Test
public void testSetExpanded_Metrics() {
mQsPanel.setExpanded(true);
- verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(true));
verify(mQSLogger).logPanelExpanded(true, mQsPanel.getDumpableTag());
- assertEquals(1, mUiEventLogger.numLogs());
- assertEquals(QSEvent.QS_PANEL_EXPANDED.getId(), mUiEventLogger.eventId(0));
- mUiEventLogger.getLogs().clear();
mQsPanel.setExpanded(false);
- verify(mMetricsLogger).visibility(eq(MetricsEvent.QS_PANEL), eq(false));
verify(mQSLogger).logPanelExpanded(false, mQsPanel.getDumpableTag());
- assertEquals(1, mUiEventLogger.numLogs());
- assertEquals(QSEvent.QS_PANEL_COLLAPSED.getId(), mUiEventLogger.eventId(0));
- mUiEventLogger.getLogs().clear();
-
}
@Test
public void testOpenDetailsWithExistingTile_NoException() {
mTestableLooper.processAllMessages();
- mQsPanel.openDetails("dnd");
+ mQsPanel.openDetails(dndTile);
mTestableLooper.processAllMessages();
verify(mCallback).onShowingDetail(any(), anyInt(), anyInt());
@@ -159,53 +140,19 @@ public class QSPanelTest extends SysuiTestCase {
@Test
public void setListening() {
- when(dndTile.getTileSpec()).thenReturn("dnd");
-
- mQsPanel.setListening(true);
+ mQsPanel.setListening(true, "dnd");
verify(mQSLogger).logAllTilesChangeListening(true, mQsPanel.getDumpableTag(), "dnd");
- mQsPanel.setListening(false);
+ mQsPanel.setListening(false, "dnd");
verify(mQSLogger).logAllTilesChangeListening(false, mQsPanel.getDumpableTag(), "dnd");
}
-/* @Test
+ @Test
public void testOpenDetailsWithNullParameter_NoException() {
mTestableLooper.processAllMessages();
mQsPanel.openDetails(null);
mTestableLooper.processAllMessages();
verify(mCallback, never()).onShowingDetail(any(), anyInt(), anyInt());
- }*/
-
- @Test
- public void testOpenDetailsWithNonExistingTile_NoException() {
- mTestableLooper.processAllMessages();
- mQsPanel.openDetails("invalid-name");
- mTestableLooper.processAllMessages();
-
- verify(mCallback, never()).onShowingDetail(any(), anyInt(), anyInt());
- }
-
- @Test
- public void testDump() {
- String mockTileViewString = "Mock Tile View";
- String mockTileString = "Mock Tile";
- doAnswer(invocation -> {
- PrintWriter pw = invocation.getArgument(1);
- pw.println(mockTileString);
- return null;
- }).when(dndTile).dump(any(FileDescriptor.class), any(PrintWriter.class),
- any(String[].class));
- when(mQSTileView.toString()).thenReturn(mockTileViewString);
-
- StringWriter w = new StringWriter();
- PrintWriter pw = new PrintWriter(w);
- mQsPanel.dump(mock(FileDescriptor.class), pw, new String[]{});
- String expected = "QSPanel:\n"
- + " Tile records:\n"
- + " " + mockTileString + "\n"
- + " " + mockTileViewString + "\n";
- assertEquals(expected, w.getBuffer().toString());
}
-
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java
index fef47bd6a392..6c7c20a15140 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/TileLayoutTest.java
@@ -57,8 +57,8 @@ public class TileLayoutTest extends SysuiTestCase {
mContext.getResources().getDimensionPixelSize(R.dimen.qs_tile_margin_horizontal) * 3;
}
- private QSPanel.TileRecord createTileRecord() {
- QSPanel.TileRecord tileRecord = new QSPanel.TileRecord();
+ private QSPanelControllerBase.TileRecord createTileRecord() {
+ QSPanelControllerBase.TileRecord tileRecord = new QSPanelControllerBase.TileRecord();
tileRecord.tile = mock(QSTile.class);
tileRecord.tileView = spy(new QSTileView(mContext, new QSIconViewImpl(mContext)));
return tileRecord;
@@ -66,14 +66,14 @@ public class TileLayoutTest extends SysuiTestCase {
@Test
public void testAddTile_CallsSetListeningOnTile() {
- QSPanel.TileRecord tileRecord = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord = createTileRecord();
mTileLayout.addTile(tileRecord);
verify(tileRecord.tile, times(1)).setListening(mTileLayout, false);
}
@Test
public void testSetListening_CallsSetListeningOnTile() {
- QSPanel.TileRecord tileRecord = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord = createTileRecord();
mTileLayout.addTile(tileRecord);
mTileLayout.setListening(true);
verify(tileRecord.tile, times(1)).setListening(mTileLayout, true);
@@ -81,7 +81,7 @@ public class TileLayoutTest extends SysuiTestCase {
@Test
public void testSetListening_SameValueIsNoOp() {
- QSPanel.TileRecord tileRecord = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord = createTileRecord();
mTileLayout.addTile(tileRecord);
mTileLayout.setListening(false);
verify(tileRecord.tile, times(1)).setListening(any(), anyBoolean());
@@ -89,7 +89,7 @@ public class TileLayoutTest extends SysuiTestCase {
@Test
public void testSetListening_ChangesValueForAddingFutureTiles() {
- QSPanel.TileRecord tileRecord = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord = createTileRecord();
mTileLayout.setListening(true);
mTileLayout.addTile(tileRecord);
verify(tileRecord.tile, times(1)).setListening(mTileLayout, true);
@@ -97,7 +97,7 @@ public class TileLayoutTest extends SysuiTestCase {
@Test
public void testRemoveTile_CallsSetListeningFalseOnTile() {
- QSPanel.TileRecord tileRecord = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord = createTileRecord();
mTileLayout.setListening(true);
mTileLayout.addTile(tileRecord);
mTileLayout.removeTile(tileRecord);
@@ -106,8 +106,8 @@ public class TileLayoutTest extends SysuiTestCase {
@Test
public void testRemoveAllViews_CallsSetListeningFalseOnAllTiles() {
- QSPanel.TileRecord tileRecord1 = createTileRecord();
- QSPanel.TileRecord tileRecord2 = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord1 = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord2 = createTileRecord();
mTileLayout.setListening(true);
mTileLayout.addTile(tileRecord1);
mTileLayout.addTile(tileRecord2);
@@ -118,7 +118,7 @@ public class TileLayoutTest extends SysuiTestCase {
@Test
public void testMeasureLayout_CallsLayoutOnTile() {
- QSPanel.TileRecord tileRecord = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord = createTileRecord();
mTileLayout.addTile(tileRecord);
mTileLayout.measure(mLayoutSizeForOneTile, mLayoutSizeForOneTile);
mTileLayout.layout(0, 0, mLayoutSizeForOneTile, mLayoutSizeForOneTile);
@@ -127,8 +127,8 @@ public class TileLayoutTest extends SysuiTestCase {
@Test
public void testMeasureLayout_CallsLayoutOnTilesWithNeighboredBounds() {
- QSPanel.TileRecord tileRecord1 = createTileRecord();
- QSPanel.TileRecord tileRecord2 = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord1 = createTileRecord();
+ QSPanelControllerBase.TileRecord tileRecord2 = createTileRecord();
mTileLayout.addTile(tileRecord1);
mTileLayout.addTile(tileRecord2);
mTileLayout.measure(mLayoutSizeForOneTile * 2, mLayoutSizeForOneTile * 2);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureTest.java
index e7ef64e6adad..2b3ca7c00a49 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureTest.java
@@ -25,8 +25,8 @@ import android.os.RemoteException;
import android.testing.AndroidTestingRunner;
import android.util.Log;
import android.view.Display;
-import android.view.IScrollCaptureClient;
-import android.view.IScrollCaptureController;
+import android.view.IScrollCaptureCallbacks;
+import android.view.IScrollCaptureConnection;
import android.view.IWindowManager;
import android.view.WindowManagerGlobal;
@@ -65,19 +65,20 @@ public class ScrollCaptureTest extends SysuiTestCase {
final CountDownLatch latch = new CountDownLatch(1);
try {
wms.requestScrollCapture(Display.DEFAULT_DISPLAY, null, -1,
- new IScrollCaptureController.Stub() {
+ new IScrollCaptureCallbacks.Stub() {
@Override
- public void onClientConnected(
- IScrollCaptureClient client, Rect scrollBounds,
+ public void onConnected(
+ IScrollCaptureConnection connection, Rect scrollBounds,
Point positionInWindow) {
Log.d(TAG,
- "client connected: " + client + "[scrollBounds= " + scrollBounds
- + ", positionInWindow=" + positionInWindow + "]");
+ "client connected: " + connection + "[scrollBounds= "
+ + scrollBounds + ", "
+ + "positionInWindow=" + positionInWindow + "]");
latch.countDown();
}
@Override
- public void onClientUnavailable() {
+ public void onUnavailable() {
}
@Override
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
index 8f1d71c80e2d..891179c32315 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
@@ -96,8 +96,8 @@ public class ExpandableNotificationRowTest extends SysuiTestCase {
mGroupRow.setSensitive(true, true);
mGroupRow.setHideSensitive(true, false, 0, 0);
mGroupRow.setHideSensitive(false, true, 0, 0);
- assertTrue(mGroupRow.getChildrenContainer().getVisibleHeader().getVisibility()
- == View.VISIBLE);
+ assertEquals(View.VISIBLE, mGroupRow.getChildrenContainer().getVisibleWrapper()
+ .getNotificationHeader().getVisibility());
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java
index b9055ec0bb7b..7c41abba6176 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainerTest.java
@@ -57,7 +57,7 @@ public class NotificationChildrenContainerTest extends SysuiTestCase {
public void testGetMaxAllowedVisibleChildren_lowPriority() {
mChildrenContainer.setIsLowPriority(true);
Assert.assertEquals(mChildrenContainer.getMaxAllowedVisibleChildren(),
- NotificationChildrenContainer.NUMBER_OF_CHILDREN_WHEN_SYSTEM_EXPANDED);
+ NotificationChildrenContainer.NUMBER_OF_CHILDREN_WHEN_SYSTEM_EXPANDED);
}
@Test
@@ -72,7 +72,7 @@ public class NotificationChildrenContainerTest extends SysuiTestCase {
mChildrenContainer.setIsLowPriority(true);
mChildrenContainer.setChildrenExpanded(true);
Assert.assertEquals(mChildrenContainer.getMaxAllowedVisibleChildren(),
- NotificationChildrenContainer.NUMBER_OF_CHILDREN_WHEN_SYSTEM_EXPANDED);
+ NotificationChildrenContainer.NUMBER_OF_CHILDREN_WHEN_SYSTEM_EXPANDED);
}
@Test
@@ -80,13 +80,13 @@ public class NotificationChildrenContainerTest extends SysuiTestCase {
mChildrenContainer.setIsLowPriority(true);
mChildrenContainer.setUserLocked(true);
Assert.assertEquals(mChildrenContainer.getMaxAllowedVisibleChildren(),
- NotificationChildrenContainer.NUMBER_OF_CHILDREN_WHEN_SYSTEM_EXPANDED);
+ NotificationChildrenContainer.NUMBER_OF_CHILDREN_WHEN_SYSTEM_EXPANDED);
}
@Test
public void testGetMaxAllowedVisibleChildren_likeCollapsed() {
Assert.assertEquals(mChildrenContainer.getMaxAllowedVisibleChildren(true),
- NotificationChildrenContainer.NUMBER_OF_CHILDREN_WHEN_COLLAPSED);
+ NotificationChildrenContainer.NUMBER_OF_CHILDREN_WHEN_COLLAPSED);
}
@@ -136,12 +136,13 @@ public class NotificationChildrenContainerTest extends SysuiTestCase {
@Test
public void testLowPriorityHeaderCleared() {
mGroup.setIsLowPriority(true);
- NotificationHeaderView lowPriorityHeaderView = mChildrenContainer.getLowPriorityHeaderView();
- Assert.assertTrue(lowPriorityHeaderView.getVisibility() == View.VISIBLE);
- Assert.assertTrue(lowPriorityHeaderView.getParent() == mChildrenContainer);
+ NotificationHeaderView lowPriorityHeaderView =
+ mChildrenContainer.getLowPriorityViewWrapper().getNotificationHeader();
+ Assert.assertEquals(View.VISIBLE, lowPriorityHeaderView.getVisibility());
+ Assert.assertSame(mChildrenContainer, lowPriorityHeaderView.getParent());
mGroup.setIsLowPriority(false);
- Assert.assertTrue(lowPriorityHeaderView.getParent() == null);
- Assert.assertTrue(mChildrenContainer.getLowPriorityHeaderView() == null);
+ Assert.assertNull(lowPriorityHeaderView.getParent());
+ Assert.assertNull(mChildrenContainer.getLowPriorityViewWrapper());
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java
index 8db82e2a52fc..97d4aa7e4d19 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java
@@ -14,7 +14,7 @@
package com.android.systemui.utils.leaks;
-import android.content.Context;
+import android.os.UserHandle;
import android.testing.LeakCheck;
import com.android.systemui.tuner.TunerService;
@@ -22,8 +22,10 @@ import com.android.systemui.tuner.TunerService;
public class FakeTunerService extends TunerService {
private final BaseLeakChecker<Tunable> mBaseLeakChecker;
+ private boolean mEnabled;
public FakeTunerService(LeakCheck test) {
+ super(null);
mBaseLeakChecker = new BaseLeakChecker<>(test, "tunable");
}
@@ -74,4 +76,14 @@ public class FakeTunerService extends TunerService {
public void setValue(String setting, int value) {
}
+
+ @Override
+ public void setTunerEnabled(UserHandle user, boolean enabled) {
+ mEnabled = enabled;
+ }
+
+ @Override
+ public boolean isTunerEnabled(UserHandle user) {
+ return mEnabled;
+ }
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
index a167ab16f944..d6d4e4f6c746 100644
--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
@@ -150,6 +150,8 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
private boolean mRequestTwoFingerPassthrough;
+ private boolean mSendMotionEvents;
+
boolean mRequestFilterKeyEvents;
boolean mRetrieveInteractiveWindows;
@@ -329,6 +331,8 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
& AccessibilityServiceInfo.FLAG_REQUEST_MULTI_FINGER_GESTURES) != 0;
mRequestTwoFingerPassthrough =
(info.flags & AccessibilityServiceInfo.FLAG_REQUEST_2_FINGER_PASSTHROUGH) != 0;
+ mSendMotionEvents =
+ (info.flags & AccessibilityServiceInfo.FLAG_SEND_MOTION_EVENTS) != 0;
mRequestFilterKeyEvents =
(info.flags & AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS) != 0;
mRetrieveInteractiveWindows = (info.flags
@@ -1780,6 +1784,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
return mRequestTwoFingerPassthrough;
}
+ public boolean isSendMotionEventsEnabled() {
+ return mSendMotionEvents;
+ }
+
@Override
public void setGestureDetectionPassthroughRegion(int displayId, Region region) {
mSystemSupport.setGestureDetectionPassthroughRegion(displayId, region);
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
index cd9ab8db0854..857ac6ae62a9 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
@@ -119,12 +119,19 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
static final int FLAG_REQUEST_MULTI_FINGER_GESTURES = 0x00000100;
/**
- * Flag for enabling multi-finger gestures.
+ * Flag for enabling two-finger passthrough when multi-finger gestures are enabled.
*
* @see #setUserAndEnabledFeatures(int, int)
*/
static final int FLAG_REQUEST_2_FINGER_PASSTHROUGH = 0x00000200;
+ /**
+ * Flag for including motion events when dispatching a gesture.
+ *
+ * @see #setUserAndEnabledFeatures(int, int)
+ */
+ static final int FLAG_SEND_MOTION_EVENTS = 0x00000400;
+
static final int FEATURES_AFFECTING_MOTION_EVENTS =
FLAG_FEATURE_INJECT_MOTION_EVENTS
| FLAG_FEATURE_AUTOCLICK
@@ -432,6 +439,9 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
if ((mEnabledFeatures & FLAG_REQUEST_2_FINGER_PASSTHROUGH) != 0) {
explorer.setTwoFingerPassthroughEnabled(true);
}
+ if ((mEnabledFeatures & FLAG_SEND_MOTION_EVENTS) != 0) {
+ explorer.setSendMotionEventsEnabled(true);
+ }
addFirstEventHandler(displayId, explorer);
mTouchExplorer.put(displayId, explorer);
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index e1c499389ec5..35481a282701 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -1867,6 +1867,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
if (userState.isFilterKeyEventsEnabledLocked()) {
flags |= AccessibilityInputFilter.FLAG_FEATURE_FILTER_KEY_EVENTS;
}
+ if (userState.isSendMotionEventsEnabled()) {
+ flags |= AccessibilityInputFilter.FLAG_SEND_MOTION_EVENTS;
+ }
+
if (userState.isAutoclickEnabledLocked()) {
flags |= AccessibilityInputFilter.FLAG_FEATURE_AUTOCLICK;
}
@@ -2147,6 +2151,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
boolean serviceHandlesDoubleTapEnabled = false;
boolean requestMultiFingerGestures = false;
boolean requestTwoFingerPassthrough = false;
+ boolean sendMotionEvents = false;
final int serviceCount = userState.mBoundServices.size();
for (int i = 0; i < serviceCount; i++) {
AccessibilityServiceConnection service = userState.mBoundServices.get(i);
@@ -2155,6 +2160,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
serviceHandlesDoubleTapEnabled = service.isServiceHandlesDoubleTapEnabled();
requestMultiFingerGestures = service.isMultiFingerGesturesEnabled();
requestTwoFingerPassthrough = service.isTwoFingerPassthroughEnabled();
+ sendMotionEvents = service.isSendMotionEventsEnabled();
break;
}
}
@@ -2172,6 +2178,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
userState.setServiceHandlesDoubleTapLocked(serviceHandlesDoubleTapEnabled);
userState.setMultiFingerGesturesLocked(requestMultiFingerGestures);
userState.setTwoFingerPassthroughLocked(requestTwoFingerPassthrough);
+ userState.setSendMotionEventsEnabled(sendMotionEvents);
}
private boolean readAccessibilityShortcutKeySettingLocked(AccessibilityUserState userState) {
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
index 4c9e44403026..240c7ff061c8 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
@@ -111,6 +111,7 @@ class AccessibilityUserState {
private boolean mServiceHandlesDoubleTap;
private boolean mRequestMultiFingerGestures;
private boolean mRequestTwoFingerPassthrough;
+ private boolean mSendMotionEventsEnabled;
private int mUserInteractiveUiTimeout;
private int mUserNonInteractiveUiTimeout;
private int mNonInteractiveUiTimeout = 0;
@@ -171,6 +172,7 @@ class AccessibilityUserState {
mServiceHandlesDoubleTap = false;
mRequestMultiFingerGestures = false;
mRequestTwoFingerPassthrough = false;
+ mSendMotionEventsEnabled = false;
mIsDisplayMagnificationEnabled = false;
mIsAutoclickEnabled = false;
mUserNonInteractiveUiTimeout = 0;
@@ -460,6 +462,7 @@ class AccessibilityUserState {
.append(String.valueOf(mRequestMultiFingerGestures));
pw.append(", requestTwoFingerPassthrough=")
.append(String.valueOf(mRequestTwoFingerPassthrough));
+ pw.append(", sendMotionEventsEnabled").append(String.valueOf(mSendMotionEventsEnabled));
pw.append(", displayMagnificationEnabled=").append(String.valueOf(
mIsDisplayMagnificationEnabled));
pw.append(", autoclickEnabled=").append(String.valueOf(mIsAutoclickEnabled));
@@ -802,6 +805,13 @@ class AccessibilityUserState {
mRequestTwoFingerPassthrough = enabled;
}
+ public boolean isSendMotionEventsEnabled() {
+ return mSendMotionEventsEnabled;
+ }
+
+ public void setSendMotionEventsEnabled(boolean mode) {
+ mSendMotionEventsEnabled = mode;
+ }
public int getUserInteractiveUiTimeoutLocked() {
return mUserInteractiveUiTimeout;
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/GestureManifold.java b/services/accessibility/java/com/android/server/accessibility/gestures/GestureManifold.java
index 14af8c63073e..2c38dc330a62 100644
--- a/services/accessibility/java/com/android/server/accessibility/gestures/GestureManifold.java
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/GestureManifold.java
@@ -99,11 +99,15 @@ class GestureManifold implements GestureMatcher.StateChangeListener {
boolean mMultiFingerGesturesEnabled;
// Whether the two-finger passthrough is enabled when multi-finger gestures are enabled.
private boolean mTwoFingerPassthroughEnabled;
+ // Whether to send the motion events during gesture dispatch.
+ private boolean mSendMotionEventsEnabled = false;
// A list of all the multi-finger gestures, for easy adding and removal.
private final List<GestureMatcher> mMultiFingerGestures = new ArrayList<>();
// A list of two-finger swipes, for easy adding and removal when turning on or off two-finger
// passthrough.
private final List<GestureMatcher> mTwoFingerSwipes = new ArrayList<>();
+ // The list of motion events for the current gesture.
+ private List<MotionEvent> mEvents = new ArrayList<>();
// Shared state information.
private TouchState mState;
@@ -230,6 +234,9 @@ class GestureManifold implements GestureMatcher.StateChangeListener {
return false;
}
}
+ if (mSendMotionEventsEnabled) {
+ mEvents.add(MotionEvent.obtainNoHistory(rawEvent));
+ }
for (GestureMatcher matcher : mGestures) {
if (matcher.getState() != GestureMatcher.STATE_GESTURE_CANCELED) {
if (DEBUG) {
@@ -240,9 +247,8 @@ class GestureManifold implements GestureMatcher.StateChangeListener {
Slog.d(LOG_TAG, matcher.toString());
}
if (matcher.getState() == GestureMatcher.STATE_GESTURE_COMPLETED) {
- // Here we just clear and return. The actual gesture dispatch is done in
+ // Here we just return. The actual gesture dispatch is done in
// onStateChanged().
- clear();
// No need to process this event any further.
return true;
}
@@ -255,6 +261,11 @@ class GestureManifold implements GestureMatcher.StateChangeListener {
for (GestureMatcher matcher : mGestures) {
matcher.clear();
}
+ if (mEvents != null) {
+ while (mEvents.size() > 0) {
+ mEvents.remove(0).recycle();
+ }
+ }
}
/**
@@ -340,29 +351,28 @@ class GestureManifold implements GestureMatcher.StateChangeListener {
case GESTURE_DOUBLE_TAP:
if (mServiceHandlesDoubleTap) {
AccessibilityGestureEvent gestureEvent =
- new AccessibilityGestureEvent(gestureId, event.getDisplayId());
+ new AccessibilityGestureEvent(gestureId, event.getDisplayId(), mEvents);
mListener.onGestureCompleted(gestureEvent);
} else {
mListener.onDoubleTap(event, rawEvent, policyFlags);
}
- clear();
break;
case GESTURE_DOUBLE_TAP_AND_HOLD:
if (mServiceHandlesDoubleTap) {
AccessibilityGestureEvent gestureEvent =
- new AccessibilityGestureEvent(gestureId, event.getDisplayId());
+ new AccessibilityGestureEvent(gestureId, event.getDisplayId(), mEvents);
mListener.onGestureCompleted(gestureEvent);
} else {
mListener.onDoubleTapAndHold(event, rawEvent, policyFlags);
}
- clear();
break;
default:
AccessibilityGestureEvent gestureEvent =
- new AccessibilityGestureEvent(gestureId, event.getDisplayId());
+ new AccessibilityGestureEvent(gestureId, event.getDisplayId(), mEvents);
mListener.onGestureCompleted(gestureEvent);
break;
}
+ clear();
}
public boolean isMultiFingerGesturesEnabled() {
@@ -406,4 +416,25 @@ class GestureManifold implements GestureMatcher.StateChangeListener {
public boolean isServiceHandlesDoubleTapEnabled() {
return mServiceHandlesDoubleTap;
}
+
+ public void setSendMotionEventsEnabled(boolean mode) {
+ mSendMotionEventsEnabled = mode;
+ if (!mode) {
+ while (mEvents.size() > 0) {
+ mEvents.remove(0).recycle();
+ }
+ }
+ }
+
+ public boolean isSendMotionEventsEnabled() {
+ return mSendMotionEventsEnabled;
+ }
+
+ /**
+ * Returns the current list of motion events. It is the caller's responsibility to copy the list
+ * if they want it to persist after a call to clear().
+ */
+ public List<MotionEvent> getMotionEvents() {
+ return mEvents;
+ }
}
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
index d8c692b88a0f..5460e80a2802 100644
--- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
@@ -37,6 +37,7 @@ import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_EXIT
import static com.android.server.accessibility.gestures.TouchState.ALL_POINTER_ID_BITS;
import android.accessibilityservice.AccessibilityGestureEvent;
+import android.accessibilityservice.AccessibilityService;
import android.annotation.NonNull;
import android.content.Context;
import android.graphics.Region;
@@ -340,6 +341,14 @@ public class TouchExplorer extends BaseEventStreamTransformation
public void onDoubleTapAndHold(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
if (mDispatcher.longPressWithTouchEvents(event, policyFlags)) {
sendHoverExitAndTouchExplorationGestureEndIfNeeded(policyFlags);
+ if (isSendMotionEventsEnabled()) {
+ AccessibilityGestureEvent gestureEvent =
+ new AccessibilityGestureEvent(
+ AccessibilityService.GESTURE_DOUBLE_TAP_AND_HOLD,
+ event.getDisplayId(),
+ mGestureDetector.getMotionEvents());
+ mAms.onGesture(gestureEvent);
+ }
mState.startDelegating();
}
}
@@ -350,7 +359,14 @@ public class TouchExplorer extends BaseEventStreamTransformation
// Remove pending event deliveries.
mSendHoverEnterAndMoveDelayed.cancel();
mSendHoverExitDelayed.cancel();
-
+ if (isSendMotionEventsEnabled()) {
+ AccessibilityGestureEvent gestureEvent =
+ new AccessibilityGestureEvent(
+ AccessibilityService.GESTURE_DOUBLE_TAP,
+ event.getDisplayId(),
+ mGestureDetector.getMotionEvents());
+ mAms.onGesture(gestureEvent);
+ }
if (mSendTouchExplorationEndDelayed.isPending()) {
mSendTouchExplorationEndDelayed.forceSendAndRemove();
}
@@ -385,6 +401,9 @@ public class TouchExplorer extends BaseEventStreamTransformation
@Override
public boolean onGestureCompleted(AccessibilityGestureEvent gestureEvent) {
+ if (DEBUG) {
+ Slog.d(LOG_TAG, "Dispatching gesture event:" + gestureEvent.toString());
+ }
endGestureDetection(true);
mSendTouchInteractionEndDelayed.cancel();
mAms.onGesture(gestureEvent);
@@ -411,12 +430,24 @@ public class TouchExplorer extends BaseEventStreamTransformation
mDispatcher.sendMotionEvent(
event,
ACTION_HOVER_MOVE,
- mState.getLastReceivedEvent(),
+ event,
pointerIdBits,
policyFlags);
return true;
}
}
+ if (isSendMotionEventsEnabled()) {
+ // Send a gesture with motion events to represent the cancelled gesture.
+ AccessibilityGestureEvent gestureEvent =
+ new AccessibilityGestureEvent(
+ AccessibilityService.GESTURE_UNKNOWN,
+ event.getDisplayId(),
+ mGestureDetector.getMotionEvents());
+ if (DEBUG) {
+ Slog.d(LOG_TAG, "Dispatching gesture event:" + gestureEvent.toString());
+ }
+ mAms.onGesture(gestureEvent);
+ }
return false;
}
@@ -620,6 +651,14 @@ public class TouchExplorer extends BaseEventStreamTransformation
if (isDraggingGesture(event)) {
// Two pointers moving in the same direction within
// a given distance perform a drag.
+ if (isSendMotionEventsEnabled()) {
+ AccessibilityGestureEvent gestureEvent =
+ new AccessibilityGestureEvent(
+ AccessibilityService.GESTURE_PASSTHROUGH,
+ event.getDisplayId(),
+ mGestureDetector.getMotionEvents());
+ mAms.onGesture(gestureEvent);
+ }
computeDraggingPointerIdIfNeeded(event);
pointerIdBits = 1 << mDraggingPointerId;
event.setEdgeFlags(mReceivedPointerTracker.getLastReceivedDownEdgeFlags());
@@ -636,6 +675,14 @@ public class TouchExplorer extends BaseEventStreamTransformation
mState.startDragging();
} else {
// Two pointers moving arbitrary are delegated to the view hierarchy.
+ if (isSendMotionEventsEnabled()) {
+ AccessibilityGestureEvent gestureEvent =
+ new AccessibilityGestureEvent(
+ AccessibilityService.GESTURE_PASSTHROUGH,
+ event.getDisplayId(),
+ mGestureDetector.getMotionEvents());
+ mAms.onGesture(gestureEvent);
+ }
mState.startDelegating();
mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
}
@@ -650,6 +697,14 @@ public class TouchExplorer extends BaseEventStreamTransformation
if (DEBUG) {
Slog.d(LOG_TAG, "Three-finger edge swipe detected.");
}
+ if (isSendMotionEventsEnabled()) {
+ AccessibilityGestureEvent gestureEvent =
+ new AccessibilityGestureEvent(
+ AccessibilityService.GESTURE_PASSTHROUGH,
+ event.getDisplayId(),
+ mGestureDetector.getMotionEvents());
+ mAms.onGesture(gestureEvent);
+ }
mState.startDelegating();
if (mState.isTouchExploring()) {
mDispatcher.sendDownForAllNotInjectedPointers(event,
@@ -663,6 +718,14 @@ public class TouchExplorer extends BaseEventStreamTransformation
}
} else {
// More than two pointers are delegated to the view hierarchy.
+ if (isSendMotionEventsEnabled()) {
+ AccessibilityGestureEvent gestureEvent =
+ new AccessibilityGestureEvent(
+ AccessibilityService.GESTURE_PASSTHROUGH,
+ event.getDisplayId(),
+ mGestureDetector.getMotionEvents());
+ mAms.onGesture(gestureEvent);
+ }
mState.startDelegating();
event = MotionEvent.obtainNoHistory(event);
mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
@@ -1109,6 +1172,7 @@ public class TouchExplorer extends BaseEventStreamTransformation
public void setTwoFingerPassthroughEnabled(boolean enabled) {
mGestureDetector.setTwoFingerPassthroughEnabled(enabled);
}
+
public void setGestureDetectionPassthroughRegion(Region region) {
mGestureDetectionPassthroughRegion = region;
}
@@ -1117,6 +1181,17 @@ public class TouchExplorer extends BaseEventStreamTransformation
mTouchExplorationPassthroughRegion = region;
}
+ /**
+ * Whether to send the motion events that make up each gesture to the accessibility service.
+ */
+ public void setSendMotionEventsEnabled(boolean mode) {
+ mGestureDetector.setSendMotionEventsEnabled(mode);
+ }
+
+ public boolean isSendMotionEventsEnabled() {
+ return mGestureDetector.isSendMotionEventsEnabled();
+ }
+
private boolean shouldPerformGestureDetection(MotionEvent event) {
if (mState.isDelegating()) {
return false;
@@ -1213,7 +1288,14 @@ public class TouchExplorer extends BaseEventStreamTransformation
public void run() {
// Send an accessibility event to announce the touch exploration start.
mDispatcher.sendAccessibilityEvent(TYPE_TOUCH_EXPLORATION_GESTURE_START);
-
+ if (isSendMotionEventsEnabled()) {
+ AccessibilityGestureEvent gestureEvent =
+ new AccessibilityGestureEvent(
+ AccessibilityService.GESTURE_TOUCH_EXPLORATION,
+ mState.getLastReceivedEvent().getDisplayId(),
+ mGestureDetector.getMotionEvents());
+ mAms.onGesture(gestureEvent);
+ }
if (!mEvents.isEmpty() && !mRawEvents.isEmpty()) {
// Deliver a down event.
mDispatcher.sendMotionEvent(mEvents.get(0), ACTION_HOVER_ENTER,
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 35312a3a2fac..1c4d752c9775 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -664,8 +664,12 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
if (targetWidget != null && targetWidget != widget) continue;
PendingIntent intent = null;
if (onClickIntent != null) {
+ // Rare informational activity click is okay being
+ // immutable; the tradeoff is more security in exchange for
+ // losing bounds-based window animations
intent = PendingIntent.getActivity(mContext, widget.appWidgetId,
- onClickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ onClickIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
}
RemoteViews views = createMaskedWidgetRemoteViews(iconBitmap, showBadge, intent);
if (widget.replaceWithMaskedViewsLocked(views)) {
@@ -2409,8 +2413,10 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
intent.setComponent(provider.info.provider);
final long token = Binder.clearCallingIdentity();
try {
+ // Broadcast alarms sent by system are immutable
provider.broadcast = PendingIntent.getBroadcastAsUser(mContext, 1, intent,
- PendingIntent.FLAG_UPDATE_CURRENT, provider.info.getProfile());
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE,
+ provider.info.getProfile());
} finally {
Binder.restoreCallingIdentity(token);
}
diff --git a/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java b/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java
index c25dd37bc7d9..dd5e58a94d15 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillInlineSessionController.java
@@ -35,8 +35,8 @@ import java.util.function.Consumer;
* Controls the interaction with the IME for the {@link AutofillInlineSuggestionsRequestSession}s.
*
* <p>The class maintains the inline suggestion session with the autofill service. There is at most
- * one active inline suggestion session at any given corresponding to one focused view.
- * New sessions are created only when {@link #onCreateInlineSuggestionsRequestLocked} is called.</p>
+ * one active inline suggestion session at any given corresponding to one focused view. New
+ * sessions are created only when {@link #onCreateInlineSuggestionsRequestLocked} is called.</p>
*
* <p>The class manages the interaction between the {@link com.android.server.autofill.Session} and
* the inline suggestion session whenever inline suggestions can be provided. All calls to the
@@ -83,7 +83,6 @@ final class AutofillInlineSessionController {
@GuardedBy("mLock")
void onCreateInlineSuggestionsRequestLocked(@NonNull AutofillId autofillId,
@NonNull Consumer<InlineSuggestionsRequest> requestConsumer, @NonNull Bundle uiExtras) {
- // TODO(b/151123764): rename the method to better reflect what it does.
if (mSession != null) {
// Destroy the existing session.
mSession.destroySessionLocked();
diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
index c563b6c11d86..864ead1485b5 100644
--- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
+++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
@@ -1055,7 +1055,7 @@ final class AutofillManagerServiceImpl
pw.println(compatPkgs);
}
pw.print(prefix); pw.print("Inline Suggestions Enabled: ");
- pw.println(isInlineSuggestionsEnabled());
+ pw.println(isInlineSuggestionsEnabledLocked());
pw.print(prefix); pw.print("Last prune: "); pw.println(mLastPrune);
mDisabledInfoCache.dump(mUserId, prefix, pw);
@@ -1168,7 +1168,7 @@ final class AutofillManagerServiceImpl
}
@GuardedBy("mLock")
- boolean isInlineSuggestionsEnabled() {
+ boolean isInlineSuggestionsEnabledLocked() {
if (mInfo != null) {
return mInfo.isInlineSuggestionsEnabled();
}
diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java
index 80b0375a229d..e35c0ee4e59b 100644
--- a/services/autofill/java/com/android/server/autofill/Helper.java
+++ b/services/autofill/java/com/android/server/autofill/Helper.java
@@ -24,6 +24,9 @@ import android.app.assist.AssistStructure.WindowNode;
import android.content.ComponentName;
import android.metrics.LogMaker;
import android.service.autofill.Dataset;
+import android.service.autofill.InternalSanitizer;
+import android.service.autofill.SaveInfo;
+import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Slog;
@@ -38,6 +41,7 @@ import com.android.internal.util.ArrayUtils;
import java.io.PrintWriter;
import java.util.ArrayDeque;
import java.util.ArrayList;
+import java.util.Arrays;
public final class Helper {
@@ -234,6 +238,46 @@ public final class Helper {
}
}
+ @Nullable
+ static ArrayMap<AutofillId, InternalSanitizer> createSanitizers(@Nullable SaveInfo saveInfo) {
+ if (saveInfo == null) return null;
+
+ final InternalSanitizer[] sanitizerKeys = saveInfo.getSanitizerKeys();
+ if (sanitizerKeys == null) return null;
+
+ final int size = sanitizerKeys.length;
+ final ArrayMap<AutofillId, InternalSanitizer> sanitizers = new ArrayMap<>(size);
+ if (sDebug) Slog.d(TAG, "Service provided " + size + " sanitizers");
+ final AutofillId[][] sanitizerValues = saveInfo.getSanitizerValues();
+ for (int i = 0; i < size; i++) {
+ final InternalSanitizer sanitizer = sanitizerKeys[i];
+ final AutofillId[] ids = sanitizerValues[i];
+ if (sDebug) {
+ Slog.d(TAG, "sanitizer #" + i + " (" + sanitizer + ") for ids "
+ + Arrays.toString(ids));
+ }
+ for (AutofillId id : ids) {
+ sanitizers.put(id, sanitizer);
+ }
+ }
+ return sanitizers;
+ }
+
+ /**
+ * Returns true if {@code s1} contains all characters of {@code s2}, in order.
+ */
+ static boolean containsCharsInOrder(String s1, String s2) {
+ int prevIndex = -1;
+ for (char ch : s2.toCharArray()) {
+ int index = TextUtils.indexOf(s1, ch, prevIndex + 1);
+ if (index == -1) {
+ return false;
+ }
+ prevIndex = index;
+ }
+ return true;
+ }
+
private interface ViewNodeFilter {
boolean matches(ViewNode node);
}
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 6c9d35cb2fef..f596b072d713 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -30,6 +30,8 @@ import static android.view.autofill.AutofillManager.FLAG_SMART_SUGGESTION_SYSTEM
import static android.view.autofill.AutofillManager.getSmartSuggestionModeToString;
import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
+import static com.android.server.autofill.Helper.containsCharsInOrder;
+import static com.android.server.autofill.Helper.createSanitizers;
import static com.android.server.autofill.Helper.getNumericValue;
import static com.android.server.autofill.Helper.sDebug;
import static com.android.server.autofill.Helper.sVerbose;
@@ -117,7 +119,6 @@ import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
-import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -372,26 +373,24 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
* CountDownLatch.
*/
private final class AssistDataReceiverImpl extends IAssistDataReceiver.Stub {
-
+ @GuardedBy("mLock")
+ private boolean mWaitForInlineRequest;
@GuardedBy("mLock")
private InlineSuggestionsRequest mPendingInlineSuggestionsRequest;
@GuardedBy("mLock")
private FillRequest mPendingFillRequest;
- @GuardedBy("mLock")
- private CountDownLatch mCountDownLatch = new CountDownLatch(0);
@Nullable Consumer<InlineSuggestionsRequest> newAutofillRequestLocked(ViewState viewState,
boolean isInlineRequest) {
- mCountDownLatch = new CountDownLatch(isInlineRequest ? 2 : 1);
mPendingFillRequest = null;
+ mWaitForInlineRequest = isInlineRequest;
mPendingInlineSuggestionsRequest = null;
return isInlineRequest ? (inlineSuggestionsRequest) -> {
synchronized (mLock) {
- if (mCountDownLatch.getCount() == 0) {
+ if (!mWaitForInlineRequest || mPendingInlineSuggestionsRequest != null) {
return;
}
mPendingInlineSuggestionsRequest = inlineSuggestionsRequest;
- mCountDownLatch.countDown();
maybeRequestFillLocked();
viewState.resetState(ViewState.STATE_PENDING_CREATE_INLINE_REQUEST);
}
@@ -399,16 +398,23 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
void maybeRequestFillLocked() {
- if (mCountDownLatch.getCount() > 0 || mPendingFillRequest == null) {
+ if (mPendingFillRequest == null) {
return;
}
- if (mPendingInlineSuggestionsRequest != null) {
+
+ if (mWaitForInlineRequest) {
+ if (mPendingInlineSuggestionsRequest == null) {
+ return;
+ }
+
mPendingFillRequest = new FillRequest(mPendingFillRequest.getId(),
mPendingFillRequest.getFillContexts(), mPendingFillRequest.getClientState(),
mPendingFillRequest.getFlags(), mPendingInlineSuggestionsRequest);
}
+
mRemoteFillService.onFillRequest(mPendingFillRequest);
mPendingInlineSuggestionsRequest = null;
+ mWaitForInlineRequest = false;
mPendingFillRequest = null;
}
@@ -509,15 +515,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
request = new FillRequest(requestId, contexts, mClientState, flags,
/*inlineSuggestionsRequest=*/null);
- if (mCountDownLatch.getCount() > 0) {
- mPendingFillRequest = request;
- mCountDownLatch.countDown();
- maybeRequestFillLocked();
- } else {
- // TODO(b/151867668): ideally this case should not happen, but it was
- // observed, we should figure out why and fix.
- mRemoteFillService.onFillRequest(request);
- }
+ mPendingFillRequest = request;
+ maybeRequestFillLocked();
}
if (mActivityToken != null) {
@@ -545,6 +544,10 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
return ids;
}
+ /**
+ * Returns the String value of an {@link AutofillValue} by {@link AutofillId id} if it is of
+ * type {@code AUTOFILL_TYPE_TEXT} or {@code AUTOFILL_TYPE_LIST}.
+ */
@Override
@Nullable
public String findByAutofillId(@NonNull AutofillId id) {
@@ -706,7 +709,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
* Autofill provider).
*/
private boolean isInlineSuggestionsEnabledByAutofillProviderLocked() {
- return mService.isInlineSuggestionsEnabled();
+ return mService.isInlineSuggestionsEnabledLocked();
}
private boolean isViewFocusedLocked(int flags) {
@@ -767,7 +770,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
// triggers a new partition and we end up with many duplicate partitions. This is
// enhanced as the focus change can be much faster than the taking of the assist structure.
// Hence remove the currently queued request and replace it with the one queued after the
- // structure is taken. This causes only one fill request per bust of focus changes.
+ // structure is taken. This causes only one fill request per burst of focus changes.
cancelCurrentRequestLocked();
// Only ask IME to create inline suggestions request if Autofill provider supports it and
@@ -780,7 +783,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
&& isViewFocusedLocked(flags)) {
Consumer<InlineSuggestionsRequest> inlineSuggestionsRequestConsumer =
mAssistReceiver.newAutofillRequestLocked(viewState,
- /*isInlineRequest=*/ true);
+ /* isInlineRequest= */ true);
if (inlineSuggestionsRequestConsumer != null) {
final AutofillId focusedId = mCurrentViewId;
remoteRenderService.getInlineSuggestionsRendererInfo(
@@ -794,8 +797,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
viewState.setState(ViewState.STATE_PENDING_CREATE_INLINE_REQUEST);
}
} else {
- mAssistReceiver.newAutofillRequestLocked(viewState,
- /*isInlineRequest=*/ false);
+ mAssistReceiver.newAutofillRequestLocked(viewState, /* isInlineRequest= */ false);
}
// Now request the assist structure data.
@@ -1172,7 +1174,14 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
return null;
}
- // FillServiceCallbacks
+ // VultureCallback
+ @Override
+ public void onServiceDied(@NonNull RemoteFillService service) {
+ Slog.w(TAG, "removing session because service died");
+ forceRemoveSelfLocked();
+ }
+
+ // AutoFillUiCallback
@Override
public void authenticate(int requestId, int datasetIndex, IntentSender intent, Bundle extras,
boolean authenticateInline) {
@@ -1202,13 +1211,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
this, authenticationId, intent, fillInIntent, authenticateInline));
}
- // VultureCallback
- @Override
- public void onServiceDied(@NonNull RemoteFillService service) {
- Slog.w(TAG, "removing session because service died");
- forceRemoveSelfLocked();
- }
-
// AutoFillUiCallback
@Override
public void fill(int requestId, int datasetIndex, Dataset dataset) {
@@ -1282,6 +1284,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
}
+ // AutoFillUiCallback
@Override
public void dispatchUnhandledKey(AutofillId id, KeyEvent keyEvent) {
synchronized (mLock) {
@@ -2281,31 +2284,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
@Nullable
- private ArrayMap<AutofillId, InternalSanitizer> createSanitizers(@Nullable SaveInfo saveInfo) {
- if (saveInfo == null) return null;
-
- final InternalSanitizer[] sanitizerKeys = saveInfo.getSanitizerKeys();
- if (sanitizerKeys == null) return null;
-
- final int size = sanitizerKeys.length ;
- final ArrayMap<AutofillId, InternalSanitizer> sanitizers = new ArrayMap<>(size);
- if (sDebug) Slog.d(TAG, "Service provided " + size + " sanitizers");
- final AutofillId[][] sanitizerValues = saveInfo.getSanitizerValues();
- for (int i = 0; i < size; i++) {
- final InternalSanitizer sanitizer = sanitizerKeys[i];
- final AutofillId[] ids = sanitizerValues[i];
- if (sDebug) {
- Slog.d(TAG, "sanitizer #" + i + " (" + sanitizer + ") for ids "
- + Arrays.toString(ids));
- }
- for (AutofillId id : ids) {
- sanitizers.put(id, sanitizer);
- }
- }
- return sanitizers;
- }
-
- @Nullable
private AutofillValue getSanitizedValue(
@Nullable ArrayMap<AutofillId, InternalSanitizer> sanitizers,
@NonNull AutofillId id,
@@ -2369,12 +2347,12 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
*/
@GuardedBy("mLock")
@Nullable
- private CharSequence[] getAutofillOptionsFromContextsLocked(AutofillId id) {
+ private CharSequence[] getAutofillOptionsFromContextsLocked(@NonNull AutofillId autofillId) {
final int numContexts = mContexts.size();
-
for (int i = numContexts - 1; i >= 0; i--) {
final FillContext context = mContexts.get(i);
- final ViewNode node = Helper.findViewNodeByAutofillId(context.getStructure(), id);
+ final ViewNode node = Helper.findViewNodeByAutofillId(context.getStructure(),
+ autofillId);
if (node != null && node.getAutofillOptions() != null) {
return node.getAutofillOptions();
}
@@ -2480,7 +2458,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
// TODO(b/113281366): rather than merge it here, it might be better to simply reuse the old
// session instead of creating a new one. But we need to consider what would happen on corner
// cases such as "Main Activity M -> activity A with username -> activity B with password"
- // If user follows the normal workflow, than session A would be merged with session B as
+ // If user follows the normal workflow, then session A would be merged with session B as
// expected. But if when on Activity A the user taps back or somehow launches another activity,
// session A could be merged with the wrong session.
/**
@@ -2573,11 +2551,11 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
requestNewFillResponseLocked(viewState, ViewState.STATE_STARTED_PARTITION, flags);
return true;
- } else {
- if (sVerbose) {
- Slog.v(TAG, "Not starting new partition for view " + id + ": "
- + viewState.getStateAsString());
- }
+ }
+
+ if (sVerbose) {
+ Slog.v(TAG, "Not starting new partition for view " + id + ": "
+ + viewState.getStateAsString());
}
return false;
}
@@ -2938,21 +2916,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
}
- /**
- * Returns true if {@code s1} contains all characters of {@code s2}, in order.
- */
- private static boolean containsCharsInOrder(String s1, String s2) {
- int prevIndex = -1;
- for (char ch : s2.toCharArray()) {
- int index = TextUtils.indexOf(s1, ch, prevIndex + 1);
- if (index == -1) {
- return false;
- }
- prevIndex = index;
- }
- return true;
- }
-
@Override
public void onFillReady(@NonNull FillResponse response, @NonNull AutofillId filledId,
@Nullable AutofillValue value) {
@@ -3421,7 +3384,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mInlineSessionController.getInlineSuggestionsRequestLocked().orElse(null));
}
if (mAugmentedAutofillDestroyer == null) {
- mAugmentedAutofillDestroyer = () -> remoteService.onDestroyAutofillWindowsRequest();
+ mAugmentedAutofillDestroyer = remoteService::onDestroyAutofillWindowsRequest;
}
return mAugmentedAutofillDestroyer;
}
diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
index aa8532b67c43..2ff66b564ec9 100644
--- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
@@ -650,7 +650,7 @@ public class UserBackupManagerService {
context,
/* requestCode */ 0,
initIntent,
- /* flags */ 0,
+ /* flags */ PendingIntent.FLAG_IMMUTABLE,
UserHandle.of(userId));
// Set up the backup-request journaling
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 35f119428dc7..cdc06aec0744 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -1169,7 +1169,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
mMultipathPolicyTracker = new MultipathPolicyTracker(mContext, mHandler);
- mDnsManager = new DnsManager(mContext, mDnsResolver, mSystemProperties);
+ mDnsManager = new DnsManager(mContext, mDnsResolver);
registerPrivateDnsSettingsCallbacks();
}
diff --git a/services/core/java/com/android/server/NetworkTimeUpdateService.java b/services/core/java/com/android/server/NetworkTimeUpdateService.java
index c34dd984f865..ff2308c35b9f 100644
--- a/services/core/java/com/android/server/NetworkTimeUpdateService.java
+++ b/services/core/java/com/android/server/NetworkTimeUpdateService.java
@@ -103,7 +103,9 @@ public class NetworkTimeUpdateService extends Binder {
mCM = mContext.getSystemService(ConnectivityManager.class);
Intent pollIntent = new Intent(ACTION_POLL, null);
- mPendingPollIntent = PendingIntent.getBroadcast(mContext, POLL_REQUEST, pollIntent, 0);
+ // Broadcast alarms sent by system are immutable
+ mPendingPollIntent = PendingIntent.getBroadcast(mContext, POLL_REQUEST, pollIntent,
+ PendingIntent.FLAG_IMMUTABLE);
mPollingIntervalMs = mContext.getResources().getInteger(
com.android.internal.R.integer.config_ntpPollingInterval);
diff --git a/services/core/java/com/android/server/SystemServiceManager.java b/services/core/java/com/android/server/SystemServiceManager.java
index b87468419430..ff2661b19b48 100644
--- a/services/core/java/com/android/server/SystemServiceManager.java
+++ b/services/core/java/com/android/server/SystemServiceManager.java
@@ -26,12 +26,14 @@ import android.os.SystemClock;
import android.os.Trace;
import android.os.UserManagerInternal;
import android.util.ArrayMap;
+import android.util.EventLog;
import android.util.Slog;
import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.Preconditions;
import com.android.server.SystemService.TargetUser;
+import com.android.server.am.EventLogTags;
import com.android.server.utils.TimingsTraceAndSlog;
import dalvik.system.PathClassLoader;
@@ -53,12 +55,14 @@ public final class SystemServiceManager {
private static final int SERVICE_CALL_WARN_TIME_MS = 50;
// Constants used on onUser(...)
- private static final String START = "Start";
- private static final String UNLOCKING = "Unlocking";
- private static final String UNLOCKED = "Unlocked";
- private static final String SWITCH = "Switch";
- private static final String STOP = "Stop";
- private static final String CLEANUP = "Cleanup";
+ // NOTE: do not change their values, as they're used on Trace calls and changes might break
+ // performance tests that rely on them.
+ private static final String USER_STARTING = "Start";
+ private static final String USER_UNLOCKING = "Unlocking";
+ private static final String USER_UNLOCKED = "Unlocked";
+ private static final String USER_SWITCHING = "Switch";
+ private static final String USER_STOPPING = "Stop";
+ private static final String USER_STOPPED = "Cleanup";
private static File sSystemDir;
private final Context mContext;
@@ -86,7 +90,7 @@ public final class SystemServiceManager {
/**
* Reference to the current user, it's used to set the {@link TargetUser} on
- * {@link #switchUser(int, int)} as the previous user might have been removed already.
+ * {@link #onUserSwitching(int, int)} as the previous user might have been removed already.
*/
@GuardedBy("mTargetUsers")
private @Nullable TargetUser mCurrentUser;
@@ -275,33 +279,38 @@ public final class SystemServiceManager {
/**
* Starts the given user.
*/
- public void startUser(@NonNull TimingsTraceAndSlog t, @UserIdInt int userId) {
+ public void onUserStarting(@NonNull TimingsTraceAndSlog t, @UserIdInt int userId) {
+ EventLog.writeEvent(EventLogTags.SSM_USER_STARTING, userId);
+
final TargetUser targetUser = newTargetUser(userId);
synchronized (mTargetUsers) {
mTargetUsers.put(userId, targetUser);
}
- onUser(t, START, /* prevUser= */ null, targetUser);
+ onUser(t, USER_STARTING, /* prevUser= */ null, targetUser);
}
/**
* Unlocks the given user.
*/
- public void unlockUser(@UserIdInt int userId) {
- onUser(UNLOCKING, userId);
+ public void onUserUnlocking(@UserIdInt int userId) {
+ EventLog.writeEvent(EventLogTags.SSM_USER_UNLOCKING, userId);
+ onUser(USER_UNLOCKING, userId);
}
/**
* Called after the user was unlocked.
*/
public void onUserUnlocked(@UserIdInt int userId) {
- onUser(UNLOCKED, userId);
+ EventLog.writeEvent(EventLogTags.SSM_USER_UNLOCKED, userId);
+ onUser(USER_UNLOCKED, userId);
}
/**
* Switches to the given user.
*/
- public void switchUser(@UserIdInt int from, @UserIdInt int to) {
+ public void onUserSwitching(@UserIdInt int from, @UserIdInt int to) {
+ EventLog.writeEvent(EventLogTags.SSM_USER_SWITCHING, from, to);
final TargetUser curUser, prevUser;
synchronized (mTargetUsers) {
if (mCurrentUser == null) {
@@ -321,21 +330,23 @@ public final class SystemServiceManager {
Slog.d(TAG, "Set mCurrentUser to " + mCurrentUser);
}
}
- onUser(TimingsTraceAndSlog.newAsyncLog(), SWITCH, prevUser, curUser);
+ onUser(TimingsTraceAndSlog.newAsyncLog(), USER_SWITCHING, prevUser, curUser);
}
/**
* Stops the given user.
*/
- public void stopUser(@UserIdInt int userId) {
- onUser(STOP, userId);
+ public void onUserStopping(@UserIdInt int userId) {
+ EventLog.writeEvent(EventLogTags.SSM_USER_STOPPING, userId);
+ onUser(USER_STOPPING, userId);
}
/**
* Cleans up the given user.
*/
- public void cleanupUser(@UserIdInt int userId) {
- onUser(CLEANUP, userId);
+ public void onUserStopped(@UserIdInt int userId) {
+ EventLog.writeEvent(EventLogTags.SSM_USER_STOPPED, userId);
+ onUser(USER_STOPPED, userId);
// Remove cached TargetUser
synchronized (mTargetUsers) {
@@ -351,6 +362,7 @@ public final class SystemServiceManager {
private void onUser(@NonNull TimingsTraceAndSlog t, @NonNull String onWhat,
@Nullable TargetUser prevUser, @NonNull TargetUser curUser) {
final int curUserId = curUser.getUserIdentifier();
+ // NOTE: do not change label below, or it might break performance tests that rely on it.
t.traceBegin("ssm." + onWhat + "User-" + curUserId);
Slog.i(TAG, "Calling on" + onWhat + "User " + curUserId
+ (prevUser != null ? " (from " + prevUser + ")" : ""));
@@ -381,22 +393,22 @@ public final class SystemServiceManager {
long time = SystemClock.elapsedRealtime();
try {
switch (onWhat) {
- case SWITCH:
+ case USER_SWITCHING:
service.onUserSwitching(prevUser, curUser);
break;
- case START:
+ case USER_STARTING:
service.onUserStarting(curUser);
break;
- case UNLOCKING:
+ case USER_UNLOCKING:
service.onUserUnlocking(curUser);
break;
- case UNLOCKED:
+ case USER_UNLOCKED:
service.onUserUnlocked(curUser);
break;
- case STOP:
+ case USER_STOPPING:
service.onUserStopping(curUser);
break;
- case CLEANUP:
+ case USER_STOPPED:
service.onUserStopped(curUser);
break;
default:
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 79a660a48540..63f7d44da1de 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -7361,7 +7361,7 @@ public class ActivityManagerService extends IActivityManager.Stub
final boolean bootingSystemUser = currentUserId == UserHandle.USER_SYSTEM;
if (bootingSystemUser) {
- mSystemServiceManager.startUser(t, currentUserId);
+ mSystemServiceManager.onUserStarting(t, currentUserId);
}
synchronized (this) {
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 3eb4ddebaf06..6f706acf1706 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -651,12 +651,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteWakupAlarm(final String name, final int uid, final WorkSource workSource,
final String tag) {
enforceCallingPermission();
+ final WorkSource localWs = workSource != null ? new WorkSource(workSource) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteWakupAlarmLocked(name, uid, workSource, tag,
+ mStats.noteWakupAlarmLocked(name, uid, localWs, tag,
elapsedRealtime, uptime);
}
});
@@ -665,12 +666,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteAlarmStart(final String name, final WorkSource workSource, final int uid) {
enforceCallingPermission();
+ final WorkSource localWs = workSource != null ? new WorkSource(workSource) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteAlarmStartLocked(name, workSource, uid, elapsedRealtime, uptime);
+ mStats.noteAlarmStartLocked(name, localWs, uid, elapsedRealtime, uptime);
}
});
}
@@ -678,12 +680,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteAlarmFinish(final String name, final WorkSource workSource, final int uid) {
enforceCallingPermission();
+ final WorkSource localWs = workSource != null ? new WorkSource(workSource) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteAlarmFinishLocked(name, workSource, uid, elapsedRealtime, uptime);
+ mStats.noteAlarmFinishLocked(name, localWs, uid, elapsedRealtime, uptime);
}
});
}
@@ -722,12 +725,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteStartWakelockFromSource(final WorkSource ws, final int pid, final String name,
final String historyName, final int type, final boolean unimportantForLogging) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteStartWakeFromSourceLocked(ws, pid, name, historyName,
+ mStats.noteStartWakeFromSourceLocked(localWs, pid, name, historyName,
type, unimportantForLogging, elapsedRealtime, uptime);
}
});
@@ -739,13 +743,15 @@ public final class BatteryStatsService extends IBatteryStats.Stub
final String newName, final String newHistoryName, final int newType,
final boolean newUnimportantForLogging) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
+ final WorkSource localNewWs = newWs != null ? new WorkSource(newWs) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteChangeWakelockFromSourceLocked(ws, pid, name, historyName, type,
- newWs, newPid, newName, newHistoryName, newType,
+ mStats.noteChangeWakelockFromSourceLocked(localWs, pid, name, historyName, type,
+ localNewWs, newPid, newName, newHistoryName, newType,
newUnimportantForLogging, elapsedRealtime, uptime);
}
});
@@ -755,12 +761,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteStopWakelockFromSource(final WorkSource ws, final int pid, final String name,
final String historyName, final int type) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteStopWakeFromSourceLocked(ws, pid, name, historyName, type,
+ mStats.noteStopWakeFromSourceLocked(localWs, pid, name, historyName, type,
elapsedRealtime, uptime);
}
});
@@ -787,12 +794,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteLongPartialWakelockStartFromSource(final String name, final String historyName,
final WorkSource workSource) {
enforceCallingPermission();
+ final WorkSource localWs = workSource != null ? new WorkSource(workSource) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteLongPartialWakelockStartFromSource(name, historyName, workSource,
+ mStats.noteLongPartialWakelockStartFromSource(name, historyName, localWs,
elapsedRealtime, uptime);
}
});
@@ -819,12 +827,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteLongPartialWakelockFinishFromSource(final String name, final String historyName,
final WorkSource workSource) {
enforceCallingPermission();
+ final WorkSource localWs = workSource != null ? new WorkSource(workSource) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteLongPartialWakelockFinishFromSource(name, historyName, workSource,
+ mStats.noteLongPartialWakelockFinishFromSource(name, historyName, localWs,
elapsedRealtime, uptime);
}
});
@@ -890,12 +899,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub
@Override
public void noteGpsChanged(final WorkSource oldWs, final WorkSource newWs) {
enforceCallingPermission();
+ final WorkSource localOldWs = oldWs != null ? new WorkSource(oldWs) : null;
+ final WorkSource localNewWs = newWs != null ? new WorkSource(newWs) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteGpsChangedLocked(oldWs, newWs, elapsedRealtime, uptime);
+ mStats.noteGpsChangedLocked(localOldWs, localNewWs, elapsedRealtime, uptime);
}
});
}
@@ -1322,12 +1333,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteWifiRunning(final WorkSource ws) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteWifiRunningLocked(ws, elapsedRealtime, uptime);
+ mStats.noteWifiRunningLocked(localWs, elapsedRealtime, uptime);
}
// TODO: Log WIFI_RUNNING_STATE_CHANGED in a better spot to include Hotspot too.
FrameworkStatsLog.write(FrameworkStatsLog.WIFI_RUNNING_STATE_CHANGED,
@@ -1338,12 +1350,15 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteWifiRunningChanged(final WorkSource oldWs, final WorkSource newWs) {
enforceCallingPermission();
+ final WorkSource localOldWs = oldWs != null ? new WorkSource(oldWs) : null;
+ final WorkSource localNewWs = newWs != null ? new WorkSource(newWs) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteWifiRunningChangedLocked(oldWs, newWs, elapsedRealtime, uptime);
+ mStats.noteWifiRunningChangedLocked(
+ localOldWs, localNewWs, elapsedRealtime, uptime);
}
FrameworkStatsLog.write(FrameworkStatsLog.WIFI_RUNNING_STATE_CHANGED,
newWs, FrameworkStatsLog.WIFI_RUNNING_STATE_CHANGED__STATE__ON);
@@ -1355,12 +1370,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteWifiStopped(final WorkSource ws) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : ws;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteWifiStoppedLocked(ws, elapsedRealtime, uptime);
+ mStats.noteWifiStoppedLocked(localWs, elapsedRealtime, uptime);
}
FrameworkStatsLog.write(FrameworkStatsLog.WIFI_RUNNING_STATE_CHANGED,
ws, FrameworkStatsLog.WIFI_RUNNING_STATE_CHANGED__STATE__OFF);
@@ -1487,12 +1503,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteFullWifiLockAcquiredFromSource(final WorkSource ws) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteFullWifiLockAcquiredFromSourceLocked(ws, elapsedRealtime, uptime);
+ mStats.noteFullWifiLockAcquiredFromSourceLocked(
+ localWs, elapsedRealtime, uptime);
}
});
}
@@ -1500,12 +1518,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteFullWifiLockReleasedFromSource(final WorkSource ws) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteFullWifiLockReleasedFromSourceLocked(ws, elapsedRealtime, uptime);
+ mStats.noteFullWifiLockReleasedFromSourceLocked(
+ localWs, elapsedRealtime, uptime);
}
});
}
@@ -1513,12 +1533,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteWifiScanStartedFromSource(final WorkSource ws) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteWifiScanStartedFromSourceLocked(ws, elapsedRealtime, uptime);
+ mStats.noteWifiScanStartedFromSourceLocked(localWs, elapsedRealtime, uptime);
}
});
}
@@ -1526,12 +1547,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteWifiScanStoppedFromSource(final WorkSource ws) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteWifiScanStoppedFromSourceLocked(ws, elapsedRealtime, uptime);
+ mStats.noteWifiScanStoppedFromSourceLocked(localWs, elapsedRealtime, uptime);
}
});
}
@@ -1539,12 +1561,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteWifiBatchedScanStartedFromSource(final WorkSource ws, final int csph) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteWifiBatchedScanStartedFromSourceLocked(ws, csph,
+ mStats.noteWifiBatchedScanStartedFromSourceLocked(localWs, csph,
elapsedRealtime, uptime);
}
});
@@ -1553,12 +1576,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public void noteWifiBatchedScanStoppedFromSource(final WorkSource ws) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteWifiBatchedScanStoppedFromSourceLocked(ws, elapsedRealtime, uptime);
+ mStats.noteWifiBatchedScanStoppedFromSourceLocked(
+ localWs, elapsedRealtime, uptime);
}
});
}
@@ -1635,12 +1660,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
@Override
public void noteBleScanStarted(final WorkSource ws, final boolean isUnoptimized) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteBluetoothScanStartedFromSourceLocked(ws, isUnoptimized,
+ mStats.noteBluetoothScanStartedFromSourceLocked(localWs, isUnoptimized,
elapsedRealtime, uptime);
}
});
@@ -1650,12 +1676,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
@Override
public void noteBleScanStopped(final WorkSource ws, final boolean isUnoptimized) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteBluetoothScanStoppedFromSourceLocked(ws, isUnoptimized,
+ mStats.noteBluetoothScanStoppedFromSourceLocked(localWs, isUnoptimized,
uptime, elapsedRealtime);
}
});
@@ -1679,12 +1706,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
@Override
public void noteBleScanResults(final WorkSource ws, final int numNewResults) {
enforceCallingPermission();
+ final WorkSource localWs = ws != null ? new WorkSource(ws) : null;
synchronized (mLock) {
final long elapsedRealtime = SystemClock.elapsedRealtime();
final long uptime = SystemClock.uptimeMillis();
mHandler.post(() -> {
synchronized (mStats) {
- mStats.noteBluetoothScanResultsFromSourceLocked(ws, numNewResults,
+ mStats.noteBluetoothScanResultsFromSourceLocked(localWs, numNewResults,
elapsedRealtime, uptime);
}
});
diff --git a/services/core/java/com/android/server/am/EventLogTags.logtags b/services/core/java/com/android/server/am/EventLogTags.logtags
index b818ccf275c4..68f2e35094fc 100644
--- a/services/core/java/com/android/server/am/EventLogTags.logtags
+++ b/services/core/java/com/android/server/am/EventLogTags.logtags
@@ -104,6 +104,14 @@ option java_package com.android.server.am
30076 uc_start_user_internal (userId|1|5)
30077 uc_unlock_user (userId|1|5)
30078 uc_finish_user_boot (userId|1|5)
-30079 uc_dispatch_user_switch (oldUserId|1|5) (newUserId|1|5)
-30080 uc_continue_user_switch (oldUserId|1|5) (newUserId|1|5)
-30081 uc_send_user_broadcast (userId|1|5),(IntentAction|3) \ No newline at end of file
+30079 uc_dispatch_user_switch (oldUserId|1|5),(newUserId|1|5)
+30080 uc_continue_user_switch (oldUserId|1|5),(newUserId|1|5)
+30081 uc_send_user_broadcast (userId|1|5),(IntentAction|3)
+# Tags below are used by SystemServiceManager - although it's technically part of am, these are
+# also user switch events and useful to be analyzed together with events above.
+30082 ssm_user_starting (userId|1|5)
+30083 ssm_user_switching (oldUserId|1|5),(newUserId|1|5)
+30084 ssm_user_unlocking (userId|1|5)
+30085 ssm_user_unlocked (userId|1|5)
+30086 ssm_user_stopping (userId|1|5)
+30087 ssm_user_stopped (userId|1|5)
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index d1126ee1bf1c..c29df6c44d5c 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -952,7 +952,7 @@ class UserController implements Handler.Callback {
mInjector.batteryStatsServiceNoteEvent(
BatteryStats.HistoryItem.EVENT_USER_RUNNING_FINISH,
Integer.toString(userId), userId);
- mInjector.getSystemServiceManager().stopUser(userId);
+ mInjector.getSystemServiceManager().onUserStopping(userId);
Runnable finishUserStoppedAsync = () ->
mHandler.post(() -> finishUserStopped(uss, allowDelayedLocking));
@@ -1028,7 +1028,7 @@ class UserController implements Handler.Callback {
}
if (stopped) {
- mInjector.systemServiceManagerCleanupUser(userId);
+ mInjector.systemServiceManagerOnUserStopped(userId);
mInjector.stackSupervisorRemoveUser(userId);
// Remove the user if it is ephemeral.
@@ -2494,8 +2494,8 @@ class UserController implements Handler.Callback {
logUserLifecycleEvent(msg.arg1, USER_LIFECYCLE_EVENT_START_USER,
USER_LIFECYCLE_EVENT_STATE_BEGIN);
- mInjector.getSystemServiceManager().startUser(TimingsTraceAndSlog.newAsyncLog(),
- msg.arg1);
+ mInjector.getSystemServiceManager().onUserStarting(
+ TimingsTraceAndSlog.newAsyncLog(), msg.arg1);
logUserLifecycleEvent(msg.arg1, USER_LIFECYCLE_EVENT_START_USER,
USER_LIFECYCLE_EVENT_STATE_FINISH);
@@ -2503,7 +2503,7 @@ class UserController implements Handler.Callback {
break;
case USER_UNLOCK_MSG:
final int userId = msg.arg1;
- mInjector.getSystemServiceManager().unlockUser(userId);
+ mInjector.getSystemServiceManager().onUserUnlocking(userId);
// Loads recents on a worker thread that allows disk I/O
FgThread.getHandler().post(() -> {
mInjector.loadUserRecents(userId);
@@ -2528,7 +2528,7 @@ class UserController implements Handler.Callback {
BatteryStats.HistoryItem.EVENT_USER_FOREGROUND_START,
Integer.toString(msg.arg1), msg.arg1);
- mInjector.getSystemServiceManager().switchUser(msg.arg2, msg.arg1);
+ mInjector.getSystemServiceManager().onUserSwitching(msg.arg2, msg.arg1);
break;
case FOREGROUND_PROFILE_CHANGED_MSG:
dispatchForegroundProfileChanged(msg.arg1);
@@ -2781,8 +2781,8 @@ class UserController implements Handler.Callback {
LocalServices.getService(ActivityTaskManagerInternal.class).onUserStopped(userId);
}
- void systemServiceManagerCleanupUser(@UserIdInt int userId) {
- mService.mSystemServiceManager.cleanupUser(userId);
+ void systemServiceManagerOnUserStopped(@UserIdInt int userId) {
+ mService.mSystemServiceManager.onUserStopped(userId);
}
protected UserManagerService getUserManager() {
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java
index 1f71d7809133..5dcadee20e13 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java
@@ -127,12 +127,12 @@ public class FingerprintService extends SystemService {
}
@Override
- public void notifyAcquired(int userId) {
+ public void notifyAcquired(int userId, int acquireInfo) {
Utils.checkPermission(getContext(), TEST_BIOMETRIC);
}
@Override
- public void notifyError(int userId) {
+ public void notifyError(int userId, int errorCode) {
Utils.checkPermission(getContext(), TEST_BIOMETRIC);
}
diff --git a/services/core/java/com/android/server/connectivity/DnsManager.java b/services/core/java/com/android/server/connectivity/DnsManager.java
index 271ec4eac9e8..c7891865644a 100644
--- a/services/core/java/com/android/server/connectivity/DnsManager.java
+++ b/services/core/java/com/android/server/connectivity/DnsManager.java
@@ -237,7 +237,6 @@ public class DnsManager {
private final Context mContext;
private final ContentResolver mContentResolver;
private final IDnsResolver mDnsResolver;
- private final MockableSystemProperties mSystemProperties;
private final ConcurrentHashMap<Integer, PrivateDnsConfig> mPrivateDnsMap;
// TODO: Replace the Map with SparseArrays.
private final Map<Integer, PrivateDnsValidationStatuses> mPrivateDnsValidationMap;
@@ -249,11 +248,10 @@ public class DnsManager {
private int mMinSamples;
private int mMaxSamples;
- public DnsManager(Context ctx, IDnsResolver dnsResolver, MockableSystemProperties sp) {
+ public DnsManager(Context ctx, IDnsResolver dnsResolver) {
mContext = ctx;
mContentResolver = mContext.getContentResolver();
mDnsResolver = dnsResolver;
- mSystemProperties = sp;
mPrivateDnsMap = new ConcurrentHashMap<>();
mPrivateDnsValidationMap = new HashMap<>();
mLinkPropertiesMap = new HashMap<>();
diff --git a/services/core/java/com/android/server/display/DisplayModeDirector.java b/services/core/java/com/android/server/display/DisplayModeDirector.java
index 4f5a0faee8dd..71b377cc2f11 100644
--- a/services/core/java/com/android/server/display/DisplayModeDirector.java
+++ b/services/core/java/com/android/server/display/DisplayModeDirector.java
@@ -123,7 +123,6 @@ public class DisplayModeDirector {
public void start(SensorManager sensorManager) {
mSettingsObserver.observe();
mDisplayObserver.observe();
- mSettingsObserver.observe();
mBrightnessObserver.observe(sensorManager);
synchronized (mLock) {
// We may have a listener already registered before the call to start, so go ahead and
diff --git a/services/core/java/com/android/server/pm/IncrementalStates.java b/services/core/java/com/android/server/pm/IncrementalStates.java
index ababb8365c4f..43f4a3477a98 100644
--- a/services/core/java/com/android/server/pm/IncrementalStates.java
+++ b/services/core/java/com/android/server/pm/IncrementalStates.java
@@ -16,18 +16,21 @@
package com.android.server.pm;
-import android.content.pm.IDataLoaderStatusListener;
+import static android.os.incremental.IStorageHealthListener.HEALTH_STATUS_OK;
+import static android.os.incremental.IStorageHealthListener.HEALTH_STATUS_UNHEALTHY;
+import static android.os.incremental.IStorageHealthListener.HEALTH_STATUS_UNHEALTHY_STORAGE;
+import static android.os.incremental.IStorageHealthListener.HEALTH_STATUS_UNHEALTHY_TRANSPORT;
+
import android.content.pm.IncrementalStatesInfo;
import android.content.pm.PackageManager;
import android.os.Handler;
-import android.os.incremental.IStorageHealthListener;
import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.function.pooled.PooledLambda;
-import java.util.function.BiConsumer;
+import java.util.function.Consumer;
/**
* Manages state transitions of a package installed on Incremental File System. Currently manages:
@@ -36,8 +39,7 @@ import java.util.function.BiConsumer;
*
* The following events might change the states of a package:
* 1. Installation commit
- * 2. Incremental storage health
- * 3. Data loader stream health
+ * 2. Incremental storage health changes
* 4. Loading progress changes
*
* @hide
@@ -48,16 +50,14 @@ public final class IncrementalStates {
private final Handler mHandler = BackgroundThread.getHandler();
private final Object mLock = new Object();
@GuardedBy("mLock")
- private int mStreamStatus = IDataLoaderStatusListener.STREAM_HEALTHY;
- @GuardedBy("mLock")
- private int mStorageHealthStatus = IStorageHealthListener.HEALTH_STATUS_OK;
+ private int mStorageHealthStatus = HEALTH_STATUS_OK;
@GuardedBy("mLock")
private final LoadingState mLoadingState;
@GuardedBy("mLock")
private StartableState mStartableState;
@GuardedBy("mLock")
private Callback mCallback = null;
- private final BiConsumer<Integer, Integer> mStatusConsumer;
+ private final Consumer<Integer> mStatusConsumer;
public IncrementalStates() {
// By default the package is not startable and not fully loaded (i.e., is loading)
@@ -148,12 +148,9 @@ public final class IncrementalStates {
}
}
- private class StatusConsumer implements BiConsumer<Integer, Integer> {
+ private class StatusConsumer implements Consumer<Integer> {
@Override
- public void accept(Integer streamStatus, Integer storageStatus) {
- if (streamStatus == null && storageStatus == null) {
- return;
- }
+ public void accept(Integer storageStatus) {
final boolean oldState, newState;
synchronized (mLock) {
if (!mLoadingState.isLoading()) {
@@ -161,12 +158,7 @@ public final class IncrementalStates {
return;
}
oldState = mStartableState.isStartable();
- if (streamStatus != null) {
- mStreamStatus = (Integer) streamStatus;
- }
- if (storageStatus != null) {
- mStorageHealthStatus = (Integer) storageStatus;
- }
+ mStorageHealthStatus = storageStatus;
updateStartableStateLocked();
newState = mStartableState.isStartable();
}
@@ -188,21 +180,7 @@ public final class IncrementalStates {
Slog.i(TAG, "received storage health status changed event : storageHealthStatus="
+ storageHealthStatus);
}
- mStatusConsumer.accept(null, storageHealthStatus);
- }
-
- /**
- * By calling this method, the caller indicates that the stream status of the package has
- * been
- * changed. This could indicate a streaming error. The state will change according to the
- * status
- * code defined in {@code IDataLoaderStatusListener}.
- */
- public void onStreamStatusChanged(int streamState) {
- if (DEBUG) {
- Slog.i(TAG, "received stream status changed event : streamState=" + streamState);
- }
- mStatusConsumer.accept(streamState, null);
+ mStatusConsumer.accept(storageHealthStatus);
}
/**
@@ -284,35 +262,16 @@ public final class IncrementalStates {
final boolean currentState = mStartableState.isStartable();
boolean nextState = currentState;
if (!currentState) {
- if (mStorageHealthStatus == IStorageHealthListener.HEALTH_STATUS_OK
- && mStreamStatus == IDataLoaderStatusListener.STREAM_HEALTHY) {
- // change from unstartable -> startable when both stream and storage are healthy
+ if (mStorageHealthStatus == HEALTH_STATUS_OK) {
+ // change from unstartable -> startable
nextState = true;
}
} else {
- if (mStorageHealthStatus == IStorageHealthListener.HEALTH_STATUS_UNHEALTHY) {
- // unrecoverable if storage is unhealthy
+ if (mStorageHealthStatus == HEALTH_STATUS_UNHEALTHY
+ || mStorageHealthStatus == HEALTH_STATUS_UNHEALTHY_STORAGE
+ || mStorageHealthStatus == HEALTH_STATUS_UNHEALTHY_TRANSPORT) {
+ // change from startable -> unstartable
nextState = false;
- } else {
- switch (mStreamStatus) {
- case IDataLoaderStatusListener.STREAM_INTEGRITY_ERROR:
- // unrecoverable, fall through
- case IDataLoaderStatusListener.STREAM_SOURCE_ERROR: {
- // unrecoverable
- nextState = false;
- break;
- }
- case IDataLoaderStatusListener.STREAM_STORAGE_ERROR: {
- if (mStorageHealthStatus != IStorageHealthListener.HEALTH_STATUS_OK) {
- // unrecoverable if there is a pending read AND storage is limited
- nextState = false;
- }
- break;
- }
- default:
- // anything else, remain startable
- break;
- }
}
}
if (nextState == currentState) {
@@ -370,17 +329,11 @@ public final class IncrementalStates {
return PackageManager.UNSTARTABLE_REASON_UNKNOWN;
}
// Translate stream status to reason for unstartable state
- switch (mStreamStatus) {
- case IDataLoaderStatusListener.STREAM_TRANSPORT_ERROR:
- // fall through
- case IDataLoaderStatusListener.STREAM_INTEGRITY_ERROR:
- // fall through
- case IDataLoaderStatusListener.STREAM_SOURCE_ERROR: {
- return PackageManager.UNSTARTABLE_REASON_CONNECTION_ERROR;
- }
- case IDataLoaderStatusListener.STREAM_STORAGE_ERROR: {
+ switch (mStorageHealthStatus) {
+ case HEALTH_STATUS_UNHEALTHY_STORAGE:
return PackageManager.UNSTARTABLE_REASON_INSUFFICIENT_STORAGE;
- }
+ case HEALTH_STATUS_UNHEALTHY_TRANSPORT:
+ return PackageManager.UNSTARTABLE_REASON_CONNECTION_ERROR;
default:
return PackageManager.UNSTARTABLE_REASON_UNKNOWN;
}
@@ -464,7 +417,6 @@ public final class IncrementalStates {
}
IncrementalStates l = (IncrementalStates) o;
return l.mStorageHealthStatus == mStorageHealthStatus
- && l.mStreamStatus == mStreamStatus
&& l.mStartableState.equals(mStartableState)
&& l.mLoadingState.equals(mLoadingState);
}
@@ -474,7 +426,6 @@ public final class IncrementalStates {
int hashCode = mStartableState.hashCode();
hashCode = 31 * hashCode + mLoadingState.hashCode();
hashCode = 31 * hashCode + mStorageHealthStatus;
- hashCode = 31 * hashCode + mStreamStatus;
return hashCode;
}
}
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 649cafb1cb06..5d2928e1a854 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -143,7 +143,6 @@ import com.android.internal.util.ArrayUtils;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Preconditions;
-import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.LocalServices;
import com.android.server.pm.Installer.InstallerException;
import com.android.server.pm.dex.DexManager;
@@ -1702,28 +1701,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
dispatchSessionFinished(error, detailedMessage, null);
}
- private void onStorageHealthStatusChanged(int status) {
- final String packageName = getPackageName();
- if (TextUtils.isEmpty(packageName)) {
- // The package has not been installed.
- return;
- }
- mHandler.post(PooledLambda.obtainRunnable(
- PackageManagerService::onStorageHealthStatusChanged,
- mPm, packageName, status, userId).recycleOnUse());
- }
-
- private void onStreamHealthStatusChanged(int status) {
- final String packageName = getPackageName();
- if (TextUtils.isEmpty(packageName)) {
- // The package has not been installed.
- return;
- }
- mHandler.post(PooledLambda.obtainRunnable(
- PackageManagerService::onStreamStatusChanged,
- mPm, packageName, status, userId).recycleOnUse());
- }
-
/**
* If session should be sealed, then it's sealed to prevent further modification.
* If the session can't be sealed then it's destroyed.
@@ -3315,19 +3292,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
return;
}
- final boolean isDestroyedOrDataLoaderFinished;
synchronized (mLock) {
- isDestroyedOrDataLoaderFinished = mDestroyed || mDataLoaderFinished;
- }
- if (isDestroyedOrDataLoaderFinished) {
- switch (status) {
- case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE:
- // treat as unhealthy storage
- onStorageHealthStatusChanged(
- IStorageHealthListener.HEALTH_STATUS_UNHEALTHY);
- return;
+ if (mDestroyed || mDataLoaderFinished) {
+ // No need to worry about post installation
+ return;
}
- return;
}
try {
@@ -3423,13 +3392,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
}
@Override
public void reportStreamHealth(int dataLoaderId, int streamStatus) {
- synchronized (mLock) {
- if (!mDestroyed && !mDataLoaderFinished) {
- // ignore streaming status if package isn't installed
- return;
- }
- }
- onStreamHealthStatusChanged(streamStatus);
+ // Currently the stream status is not used during package installation. It is
+ // technically possible for the data loader to report stream status via this
+ // callback, but if something is wrong with the streaming, it is more likely that
+ // prepareDataLoaderLocked will return false and the installation will be aborted.
}
};
@@ -3438,20 +3404,16 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
healthCheckParams.blockedTimeoutMs = INCREMENTAL_STORAGE_BLOCKED_TIMEOUT_MS;
healthCheckParams.unhealthyTimeoutMs = INCREMENTAL_STORAGE_UNHEALTHY_TIMEOUT_MS;
healthCheckParams.unhealthyMonitoringMs = INCREMENTAL_STORAGE_UNHEALTHY_MONITORING_MS;
-
final boolean systemDataLoader =
params.getComponentName().getPackageName() == SYSTEM_DATA_LOADER_PACKAGE;
final IStorageHealthListener healthListener = new IStorageHealthListener.Stub() {
@Override
public void onHealthStatus(int storageId, int status) {
- final boolean isDestroyedOrDataLoaderFinished;
synchronized (mLock) {
- isDestroyedOrDataLoaderFinished = mDestroyed || mDataLoaderFinished;
- }
- if (isDestroyedOrDataLoaderFinished) {
- // App's installed.
- onStorageHealthStatusChanged(status);
- return;
+ if (mDestroyed || mDataLoaderFinished) {
+ // No need to worry about post installation
+ return;
+ }
}
switch (status) {
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index ff84e2ebfa51..3f16abfa04b7 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -271,8 +271,10 @@ import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManagerInternal;
+import android.os.incremental.IStorageHealthListener;
import android.os.incremental.IncrementalManager;
import android.os.incremental.IncrementalStorage;
+import android.os.incremental.StorageHealthCheckParams;
import android.os.storage.DiskInfo;
import android.os.storage.IStorageManager;
import android.os.storage.StorageEventListener;
@@ -506,9 +508,6 @@ public class PackageManagerService extends IPackageManager.Stub
private static final boolean HIDE_EPHEMERAL_APIS = false;
- private static final boolean ENABLE_FREE_CACHE_V2 =
- SystemProperties.getBoolean("fw.free_cache_v2", true);
-
private static final String PRECOMPILE_LAYOUTS = "pm.precompile_layouts";
private static final int RADIO_UID = Process.PHONE_UID;
@@ -732,14 +731,23 @@ public class PackageManagerService extends IPackageManager.Stub
private static final String RANDOM_DIR_PREFIX = "~~";
+ /**
+ * Timeout configurations for incremental storage health monitor.
+ * See {@link IStorageHealthListener}
+ */
+ private static final int INCREMENTAL_STORAGE_BLOCKED_TIMEOUT_MS = 2000;
+ private static final int INCREMENTAL_STORAGE_UNHEALTHY_TIMEOUT_MS = 7000;
+ private static final int INCREMENTAL_STORAGE_UNHEALTHY_MONITORING_MS = 60000;
+
final ServiceThread mHandlerThread;
final Handler mHandler;
private final ProcessLoggingHandler mProcessLoggingHandler;
- final int mSdkVersion = Build.VERSION.SDK_INT;
+ private final boolean mEnableFreeCacheV2;
+ final int mSdkVersion;
final Context mContext;
final boolean mFactoryTest;
final boolean mOnlyCore;
@@ -894,24 +902,8 @@ public class PackageManagerService extends IPackageManager.Stub
T produce(Injector injector, PackageManagerService packageManager);
}
- static class LocalServicesProducer<T> implements Producer<T> {
- private final Class<T> mProducingClass;
- LocalServicesProducer(Class<T> clazz) {
- this.mProducingClass = clazz;
- }
- public T produce(Injector injector, PackageManagerService packageManager) {
- return LocalServices.getService(mProducingClass);
- }
- }
-
- static class SystemServiceProducer<T> implements Producer<T> {
- private final Class<T> mProducingClass;
- SystemServiceProducer(Class<T> clazz) {
- this.mProducingClass = clazz;
- }
- public T produce(Injector injector, PackageManagerService packageManager) {
- return packageManager.mContext.getSystemService(mProducingClass);
- }
+ interface ServiceProducer {
+ <T> T produce(Class<T> c);
}
@VisibleForTesting(visibility = Visibility.PRIVATE)
@@ -941,41 +933,43 @@ public class PackageManagerService extends IPackageManager.Stub
// ----- producers -----
private final Singleton<ComponentResolver> mComponentResolverProducer;
- private final Singleton<PermissionManagerServiceInternal> mPermissionManagerProducer;
+ private final Singleton<PermissionManagerServiceInternal> mPermissionManagerServiceProducer;
private final Singleton<UserManagerService> mUserManagerProducer;
private final Singleton<Settings> mSettingsProducer;
- private final Singleton<ActivityTaskManagerInternal> mActivityTaskManagerProducer;
- private final Singleton<ActivityManagerInternal> mActivityManagerInternalProducer;
- private final Singleton<DeviceIdleInternal> mLocalDeviceIdleController;
- private final Singleton<StorageManagerInternal> mStorageManagerInternalProducer;
- private final Singleton<NetworkPolicyManagerInternal> mNetworkPolicyManagerProducer;
- private final Singleton<PermissionPolicyInternal> mPermissionPolicyProducer;
- private final Singleton<DeviceStorageMonitorInternal> mDeviceStorageMonitorProducer;
- private final Singleton<DisplayManager> mDisplayManagerProducer;
- private final Singleton<StorageManager> mStorageManagerProducer;
- private final Singleton<AppOpsManager> mAppOpsManagerProducer;
private final Singleton<AppsFilter> mAppsFilterProducer;
private final Singleton<PlatformCompat> mPlatformCompatProducer;
+ private final Singleton<SystemConfig> mSystemConfigProducer;
+ private final Singleton<PackageDexOptimizer> mPackageDexOptimizerProducer;
+ private final Singleton<DexManager> mDexManagerProducer;
+ private final Singleton<ArtManagerService> mArtManagerServiceProducer;
+ private final Singleton<ApexManager> mApexManagerProducer;
+ private final Singleton<ViewCompiler> mViewCompilerProducer;
+ private final Singleton<IPermissionManager> mPermissionManagerProducer;
+ private final Singleton<IncrementalManager> mIncrementalManagerProducer;
+ private final SystemWrapper mSystemWrapper;
+ private final ServiceProducer mGetLocalServiceProducer;
+ private final ServiceProducer mGetSystemServiceProducer;
Injector(Context context, Object lock, Installer installer,
Object installLock, PackageAbiHelper abiHelper,
Handler backgroundHandler,
Producer<ComponentResolver> componentResolverProducer,
- Producer<PermissionManagerServiceInternal> permissionManagerProducer,
+ Producer<PermissionManagerServiceInternal> permissionManagerServiceProducer,
Producer<UserManagerService> userManagerProducer,
Producer<Settings> settingsProducer,
- Producer<ActivityTaskManagerInternal> activityTaskManagerProducer,
- Producer<ActivityManagerInternal> activityManagerInternalProducer,
- Producer<DeviceIdleInternal> deviceIdleControllerProducer,
- Producer<StorageManagerInternal> storageManagerInternalProducer,
- Producer<NetworkPolicyManagerInternal> networkPolicyManagerProducer,
- Producer<PermissionPolicyInternal> permissionPolicyProvider,
- Producer<DeviceStorageMonitorInternal> deviceStorageMonitorProducer,
- Producer<DisplayManager> displayManagerProducer,
- Producer<StorageManager> storageManagerProducer,
- Producer<AppOpsManager> appOpsManagerProducer,
Producer<AppsFilter> appsFilterProducer,
- Producer<PlatformCompat> platformCompatProducer) {
+ Producer<PlatformCompat> platformCompatProducer,
+ Producer<SystemConfig> systemConfigProducer,
+ Producer<PackageDexOptimizer> packageDexOptimizerProducer,
+ Producer<DexManager> dexManagerProducer,
+ Producer<ArtManagerService> artManagerServiceProducer,
+ Producer<ApexManager> apexManagerProducer,
+ Producer<IPermissionManager> permissionManagerProducer,
+ Producer<ViewCompiler> viewCompilerProducer,
+ Producer<IncrementalManager> incrementalManagerProducer,
+ SystemWrapper systemWrapper,
+ ServiceProducer getLocalServiceProducer,
+ ServiceProducer getSystemServiceProducer) {
mContext = context;
mLock = lock;
mInstaller = installer;
@@ -984,21 +978,22 @@ public class PackageManagerService extends IPackageManager.Stub
mBackgroundHandler = backgroundHandler;
mBackgroundExecutor = new HandlerExecutor(backgroundHandler);
mComponentResolverProducer = new Singleton<>(componentResolverProducer);
- mPermissionManagerProducer = new Singleton<>(permissionManagerProducer);
+ mPermissionManagerServiceProducer = new Singleton<>(permissionManagerServiceProducer);
mUserManagerProducer = new Singleton<>(userManagerProducer);
mSettingsProducer = new Singleton<>(settingsProducer);
- mActivityTaskManagerProducer = new Singleton<>(activityTaskManagerProducer);
- mActivityManagerInternalProducer = new Singleton<>(activityManagerInternalProducer);
- mLocalDeviceIdleController = new Singleton<>(deviceIdleControllerProducer);
- mStorageManagerInternalProducer = new Singleton<>(storageManagerInternalProducer);
- mNetworkPolicyManagerProducer = new Singleton<>(networkPolicyManagerProducer);
- mPermissionPolicyProducer = new Singleton<>(permissionPolicyProvider);
- mDeviceStorageMonitorProducer = new Singleton<>(deviceStorageMonitorProducer);
- mDisplayManagerProducer = new Singleton<>(displayManagerProducer);
- mStorageManagerProducer = new Singleton<>(storageManagerProducer);
- mAppOpsManagerProducer = new Singleton<>(appOpsManagerProducer);
mAppsFilterProducer = new Singleton<>(appsFilterProducer);
mPlatformCompatProducer = new Singleton<>(platformCompatProducer);
+ mSystemConfigProducer = new Singleton<>(systemConfigProducer);
+ mPackageDexOptimizerProducer = new Singleton<>(packageDexOptimizerProducer);
+ mDexManagerProducer = new Singleton<>(dexManagerProducer);
+ mArtManagerServiceProducer = new Singleton<>(artManagerServiceProducer);
+ mApexManagerProducer = new Singleton<>(apexManagerProducer);
+ mPermissionManagerProducer = new Singleton<>(permissionManagerProducer);
+ mViewCompilerProducer = new Singleton<>(viewCompilerProducer);
+ mIncrementalManagerProducer = new Singleton<>(incrementalManagerProducer);
+ mSystemWrapper = systemWrapper;
+ mGetLocalServiceProducer = getLocalServiceProducer;
+ mGetSystemServiceProducer = getSystemServiceProducer;
}
/**
@@ -1038,7 +1033,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
public PermissionManagerServiceInternal getPermissionManagerServiceInternal() {
- return mPermissionManagerProducer.get(this, mPackageManager);
+ return mPermissionManagerServiceProducer.get(this, mPackageManager);
}
public Context getContext() {
@@ -1049,60 +1044,112 @@ public class PackageManagerService extends IPackageManager.Stub
return mSettingsProducer.get(this, mPackageManager);
}
- public ActivityTaskManagerInternal getActivityTaskManagerInternal() {
- return mActivityTaskManagerProducer.get(this, mPackageManager);
+ public AppsFilter getAppsFilter() {
+ return mAppsFilterProducer.get(this, mPackageManager);
}
- public ActivityManagerInternal getActivityManagerInternal() {
- return mActivityManagerInternalProducer.get(this, mPackageManager);
+ public PlatformCompat getCompatibility() {
+ return mPlatformCompatProducer.get(this, mPackageManager);
}
- public DeviceIdleInternal getLocalDeviceIdleController() {
- return mLocalDeviceIdleController.get(this, mPackageManager);
+ public SystemConfig getSystemConfig() {
+ return mSystemConfigProducer.get(this, mPackageManager);
}
- public StorageManagerInternal getStorageManagerInternal() {
- return mStorageManagerInternalProducer.get(this, mPackageManager);
+ public PackageDexOptimizer getPackageDexOptimizer() {
+ return mPackageDexOptimizerProducer.get(this, mPackageManager);
}
- public NetworkPolicyManagerInternal getNetworkPolicyManagerInternal() {
- return mNetworkPolicyManagerProducer.get(this, mPackageManager);
+ public DexManager getDexManager() {
+ return mDexManagerProducer.get(this, mPackageManager);
}
- public PermissionPolicyInternal getPermissionPolicyInternal() {
- return mPermissionPolicyProducer.get(this, mPackageManager);
+ public ArtManagerService getArtManagerService() {
+ return mArtManagerServiceProducer.get(this, mPackageManager);
}
- public DeviceStorageMonitorInternal getDeviceStorageMonitorInternal() {
- return mDeviceStorageMonitorProducer.get(this, mPackageManager);
+ public ApexManager getApexManager() {
+ return mApexManagerProducer.get(this, mPackageManager);
}
- public DisplayManager getDisplayManager() {
- return mDisplayManagerProducer.get(this, mPackageManager);
+ public ViewCompiler getViewCompiler() {
+ return mViewCompilerProducer.get(this, mPackageManager);
}
- public StorageManager getStorageManager() {
- return mStorageManagerProducer.get(this, mPackageManager);
+ public IPermissionManager getPermissionManagerService() {
+ return mPermissionManagerProducer.get(this, mPackageManager);
}
- public AppOpsManager getAppOpsManager() {
- return mAppOpsManagerProducer.get(this, mPackageManager);
+ public Handler getBackgroundHandler() {
+ return mBackgroundHandler;
}
- public AppsFilter getAppsFilter() {
- return mAppsFilterProducer.get(this, mPackageManager);
+ public Executor getBackgroundExecutor() {
+ return mBackgroundExecutor;
}
- public PlatformCompat getCompatibility() {
- return mPlatformCompatProducer.get(this, mPackageManager);
+ public <T> T getLocalService(Class<T> c) {
+ return mGetLocalServiceProducer.produce(c);
}
- public Handler getBackgroundHandler() {
- return mBackgroundHandler;
+ public <T> T getSystemService(Class<T> c) {
+ return mGetSystemServiceProducer.produce(c);
}
- public Executor getBackgroundExecutor() {
- return mBackgroundExecutor;
+ public SystemWrapper getSystemWrapper() {
+ return mSystemWrapper;
+ }
+
+ public IncrementalManager getIncrementalManager() {
+ return mIncrementalManagerProducer.get(this, mPackageManager);
+ }
+ }
+
+ /** Provides an abstraction to static access to system state. */
+ public interface SystemWrapper {
+ /** @see SystemProperties#get(String) */
+ String getProperty(String key);
+ /** @see SystemProperties#getInt(String, int) */
+ int getPropertyInt(String key, int defValue);
+ /** @see SystemProperties#getBoolean(String, boolean) */
+ boolean getPropertyBoolean(String key, boolean defValue);
+ /** @see SystemProperties#digestOf(String...) */
+ String digestOfProperties(@NonNull String... keys);
+ /** @see SystemProperties#set(String, String) */
+ void setProperty(String key, String value);
+ /** @see Build.VERSION#SDK_INT */
+ int getSdkInt();
+ }
+
+ private static class DefaultSystemWrapper implements SystemWrapper {
+ @Override
+ public String getProperty(String key) {
+ return SystemProperties.get(key);
+ }
+
+ @Override
+ public int getPropertyInt(String key, int defValue) {
+ return SystemProperties.getInt(key, defValue);
+ }
+
+ @Override
+ public boolean getPropertyBoolean(String key, boolean defValue) {
+ return SystemProperties.getBoolean(key, defValue);
+ }
+
+ @Override
+ public String digestOfProperties(String... keys) {
+ return SystemProperties.digestOf(keys);
+ }
+
+ @Override
+ public void setProperty(String key, String value) {
+ SystemProperties.set(key, value);
+ }
+
+ @Override
+ public int getSdkInt() {
+ return Build.VERSION.SDK_INT;
}
}
@@ -1161,6 +1208,8 @@ public class PackageManagerService extends IPackageManager.Stub
public @Nullable String retailDemoPackage;
public ComponentName resolveComponentName;
public ArrayMap<String, AndroidPackage> packages;
+ public boolean enableFreeCacheV2;
+ public int sdkVersion;
}
private final AppsFilter mAppsFilter;
@@ -1354,7 +1403,7 @@ public class PackageManagerService extends IPackageManager.Stub
options.setTemporaryAppWhitelistDuration(whitelistTimeout);
DeviceIdleInternal idleController =
- mInjector.getLocalDeviceIdleController();
+ mInjector.getLocalService(DeviceIdleInternal.class);
idleController.addPowerSaveTempWhitelistApp(Process.myUid(),
mIntentFilterVerifierComponent.getPackageName(), whitelistTimeout,
UserHandle.USER_SYSTEM, true, "intent filter verifier");
@@ -1427,7 +1476,7 @@ public class PackageManagerService extends IPackageManager.Stub
case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS:
if (!verified) {
// Don't demote if sysconfig says 'always'
- SystemConfig systemConfig = SystemConfig.getInstance();
+ SystemConfig systemConfig = mInjector.getSystemConfig();
ArraySet<String> packages = systemConfig.getLinkedApps();
if (!packages.contains(packageName)) {
// updatedStatus is already UNDEFINED
@@ -2324,7 +2373,8 @@ public class PackageManagerService extends IPackageManager.Stub
// Send broadcast package appeared if external for all users
if (res.pkg.isExternalStorage()) {
if (!update) {
- final StorageManager storage = mInjector.getStorageManager();
+ final StorageManager storage = mInjector.getSystemService(
+ StorageManager.class);
VolumeInfo volume =
storage.findVolumeByUuid(
res.pkg.getStorageUuid().toString());
@@ -2503,7 +2553,7 @@ public class PackageManagerService extends IPackageManager.Stub
ApkChecksums.Injector injector = new ApkChecksums.Injector(
() -> mContext,
() -> mInjector.getBackgroundHandler(),
- () -> mContext.getSystemService(IncrementalManager.class));
+ () -> mInjector.getIncrementalManager());
ApkChecksums.getChecksums(filesToChecksum, optional, required, trustedCerts,
statusReceiver, injector);
});
@@ -2679,31 +2729,32 @@ public class PackageManagerService extends IPackageManager.Stub
Injector injector = new Injector(
context, lock, installer, installLock, new PackageAbiHelperImpl(),
backgroundHandler,
- (i, pm) ->
- new ComponentResolver(i.getUserManagerService(), pm.mPmInternal, lock),
- (i, pm) ->
- PermissionManagerService.create(context, lock),
- (i, pm) ->
- new UserManagerService(context, pm,
+ (i, pm) -> new ComponentResolver(i.getUserManagerService(), pm.mPmInternal, lock),
+ (i, pm) -> PermissionManagerService.create(context, lock),
+ (i, pm) -> new UserManagerService(context, pm,
new UserDataPreparer(installer, installLock, context, onlyCore),
lock),
- (i, pm) ->
- new Settings(Environment.getDataDirectory(),
- i.getPermissionManagerServiceInternal().getPermissionSettings(),
- RuntimePermissionsPersistence.createInstance(),
- i.getPermissionManagerServiceInternal(), lock),
- new Injector.LocalServicesProducer<>(ActivityTaskManagerInternal.class),
- new Injector.LocalServicesProducer<>(ActivityManagerInternal.class),
- new Injector.LocalServicesProducer<>(DeviceIdleInternal.class),
- new Injector.LocalServicesProducer<>(StorageManagerInternal.class),
- new Injector.LocalServicesProducer<>(NetworkPolicyManagerInternal.class),
- new Injector.LocalServicesProducer<>(PermissionPolicyInternal.class),
- new Injector.LocalServicesProducer<>(DeviceStorageMonitorInternal.class),
- new Injector.SystemServiceProducer<>(DisplayManager.class),
- new Injector.SystemServiceProducer<>(StorageManager.class),
- new Injector.SystemServiceProducer<>(AppOpsManager.class),
+ (i, pm) -> new Settings(Environment.getDataDirectory(),
+ i.getPermissionManagerServiceInternal().getPermissionSettings(),
+ RuntimePermissionsPersistence.createInstance(),
+ i.getPermissionManagerServiceInternal(), lock),
(i, pm) -> AppsFilter.create(pm.mPmInternal, i),
- (i, pm) -> (PlatformCompat) ServiceManager.getService("platform_compat"));
+ (i, pm) -> (PlatformCompat) ServiceManager.getService("platform_compat"),
+ (i, pm) -> SystemConfig.getInstance(),
+ (i, pm) -> new PackageDexOptimizer(i.getInstaller(), i.getInstallLock(),
+ i.getContext(), "*dexopt*"),
+ (i, pm) -> new DexManager(i.getContext(), pm, i.getPackageDexOptimizer(),
+ i.getInstaller(), i.getInstallLock()),
+ (i, pm) -> new ArtManagerService(i.getContext(), pm, i.getInstaller(),
+ i.getInstallLock()),
+ (i, pm) -> ApexManager.getInstance(),
+ (i, pm) -> (IPermissionManager) ServiceManager.getService("permissionmgr"),
+ (i, pm) -> new ViewCompiler(i.getInstallLock(), i.getInstaller()),
+ (i, pm) -> (IncrementalManager)
+ pm.mContext.getSystemService(Context.INCREMENTAL_SERVICE),
+ new DefaultSystemWrapper(),
+ LocalServices::getService,
+ context::getSystemService);
PackageManagerService m = new PackageManagerService(injector, onlyCore, factoryTest);
t.traceEnd(); // "create package manager"
@@ -2776,16 +2827,17 @@ public class PackageManagerService extends IPackageManager.Stub
* reasons. This simply requests that the copy takes place and awaits confirmation of its
* completion. See platform/system/extras/cppreopt/ for the implementation of the actual copy.
*/
- private static void requestCopyPreoptedFiles() {
+ private static void requestCopyPreoptedFiles(Injector injector) {
final int WAIT_TIME_MS = 100;
final String CP_PREOPT_PROPERTY = "sys.cppreopt";
- if (SystemProperties.getInt("ro.cp_system_other_odex", 0) == 1) {
- SystemProperties.set(CP_PREOPT_PROPERTY, "requested");
+ if (injector.getSystemWrapper().getPropertyInt("ro.cp_system_other_odex", 0) == 1) {
+ injector.getSystemWrapper().setProperty(CP_PREOPT_PROPERTY, "requested");
// We will wait for up to 100 seconds.
final long timeStart = SystemClock.uptimeMillis();
final long timeEnd = timeStart + 100 * 1000;
long timeNow = timeStart;
- while (!SystemProperties.get(CP_PREOPT_PROPERTY).equals("finished")) {
+ while (!injector.getSystemWrapper()
+ .getProperty(CP_PREOPT_PROPERTY).equals("finished")) {
try {
Thread.sleep(WAIT_TIME_MS);
} catch (InterruptedException e) {
@@ -2793,7 +2845,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
timeNow = SystemClock.uptimeMillis();
if (timeNow > timeEnd) {
- SystemProperties.set(CP_PREOPT_PROPERTY, "timed-out");
+ injector.getSystemWrapper().setProperty(CP_PREOPT_PROPERTY, "timed-out");
Slog.wtf(TAG, "cppreopt did not finish!");
break;
}
@@ -2925,6 +2977,8 @@ public class PackageManagerService extends IPackageManager.Stub
mResolveComponentName = testParams.resolveComponentName;
mPackages.putAll(testParams.packages);
+ mEnableFreeCacheV2 = testParams.enableFreeCacheV2;
+ mSdkVersion = testParams.sdkVersion;
}
public PackageManagerService(Injector injector, boolean onlyCore, boolean factoryTest) {
@@ -2950,6 +3004,7 @@ public class PackageManagerService extends IPackageManager.Stub
LockGuard.installLock(mLock, LockGuard.INDEX_PACKAGES);
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_START,
SystemClock.uptimeMillis());
+ mSdkVersion = injector.getSystemWrapper().getSdkInt();
if (mSdkVersion <= 0) {
Slog.w(TAG, "**** ro.build.version.sdk not set!");
@@ -2960,6 +3015,8 @@ public class PackageManagerService extends IPackageManager.Stub
mOnlyCore = onlyCore;
mMetrics = new DisplayMetrics();
mInstaller = injector.getInstaller();
+ mEnableFreeCacheV2 =
+ injector.getSystemWrapper().getPropertyBoolean("fw.free_cache_v2", true);
// Create sub-components that provide services / data. Order here is important.
t.traceBegin("createSubComponents");
@@ -2971,9 +3028,8 @@ public class PackageManagerService extends IPackageManager.Stub
mComponentResolver = injector.getComponentResolver();
mPermissionManager = injector.getPermissionManagerServiceInternal();
mSettings = injector.getSettings();
- mPermissionManagerService = (IPermissionManager) ServiceManager.getService("permissionmgr");
- mIncrementalManager =
- (IncrementalManager) mContext.getSystemService(Context.INCREMENTAL_SERVICE);
+ mPermissionManagerService = injector.getPermissionManagerService();
+ mIncrementalManager = mInjector.getIncrementalManager();
PlatformCompat platformCompat = mInjector.getCompatibility();
mPackageParserCallback = new PackageParser2.Callback() {
@Override
@@ -3009,7 +3065,8 @@ public class PackageManagerService extends IPackageManager.Stub
ApplicationInfo.FLAG_SYSTEM, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED);
t.traceEnd();
- String separateProcesses = SystemProperties.get("debug.separate_processes");
+ String separateProcesses =
+ injector.getSystemWrapper().getProperty("debug.separate_processes");
if (separateProcesses != null && separateProcesses.length() > 0) {
if ("*".equals(separateProcesses)) {
mDefParseFlags = PackageParser.PARSE_IGNORE_PROCESSES;
@@ -3026,25 +3083,22 @@ public class PackageManagerService extends IPackageManager.Stub
mSeparateProcesses = null;
}
- mPackageDexOptimizer = new PackageDexOptimizer(mInstaller, mInstallLock, mContext,
- "*dexopt*");
- mDexManager =
- new DexManager(mContext, this, mPackageDexOptimizer, mInstaller, mInstallLock);
- mArtManagerService = new ArtManagerService(mContext, this, mInstaller, mInstallLock);
+ mPackageDexOptimizer = injector.getPackageDexOptimizer();
+ mDexManager = injector.getDexManager();
+ mArtManagerService = injector.getArtManagerService();
mMoveCallbacks = new MoveCallbacks(FgThread.get().getLooper());
+ mViewCompiler = injector.getViewCompiler();
- mViewCompiler = new ViewCompiler(mInstallLock, mInstaller);
-
- getDefaultDisplayMetrics(mInjector.getDisplayManager(), mMetrics);
+ getDefaultDisplayMetrics(mInjector.getSystemService(DisplayManager.class), mMetrics);
t.traceBegin("get system config");
- SystemConfig systemConfig = SystemConfig.getInstance();
+ SystemConfig systemConfig = injector.getSystemConfig();
mAvailableFeatures = systemConfig.getAvailableFeatures();
t.traceEnd();
mProtectedPackages = new ProtectedPackages(mContext);
- mApexManager = ApexManager.getInstance();
+ mApexManager = injector.getApexManager();
mAppsFilter = mInjector.getAppsFilter();
final List<ScanPartition> scanPartitions = new ArrayList<>();
@@ -3122,7 +3176,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
if (!mOnlyCore && mFirstBoot) {
- requestCopyPreoptedFiles();
+ requestCopyPreoptedFiles(mInjector);
}
String customResolverActivityName = Resources.getSystem().getString(
@@ -3177,7 +3231,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
}
- mCacheDir = preparePackageParserCache();
+ mCacheDir = preparePackageParserCache(injector);
// Set flag to monitor and not change apk file paths when
// scanning install directories.
@@ -4000,7 +4054,7 @@ public class PackageManagerService extends IPackageManager.Stub
setUpInstantAppInstallerActivityLP(getInstantAppInstallerLPr());
}
- private static @Nullable File preparePackageParserCache() {
+ private static @Nullable File preparePackageParserCache(Injector injector) {
if (!FORCE_PACKAGE_PARSED_CACHE_ENABLED) {
if (!DEFAULT_PACKAGE_PARSER_CACHE_ENABLED) {
return null;
@@ -4011,7 +4065,8 @@ public class PackageManagerService extends IPackageManager.Stub
return null;
}
- if (SystemProperties.getBoolean("pm.boot.disable_package_cache", false)) {
+ if (injector.getSystemWrapper()
+ .getPropertyBoolean("pm.boot.disable_package_cache", false)) {
Slog.i(TAG, "Disabling package parser cache due to system property.");
return null;
}
@@ -4027,7 +4082,7 @@ public class PackageManagerService extends IPackageManager.Stub
// identify cached items. In particular, changing the value of certain
// feature flags should cause us to invalidate any caches.
final String cacheName = FORCE_PACKAGE_PARSED_CACHE_ENABLED ? "debug"
- : SystemProperties.digestOf(
+ : injector.getSystemWrapper().digestOfProperties(
"ro.build.fingerprint",
StorageManager.PROP_ISOLATED_STORAGE,
StorageManager.PROP_ISOLATED_STORAGE_SNAPSHOT
@@ -4093,7 +4148,7 @@ public class PackageManagerService extends IPackageManager.Stub
public boolean isDeviceUpgrading() {
// allow instant applications
// The system property allows testing ota flow when upgraded to the same image.
- return mIsUpgrade || SystemProperties.getBoolean(
+ return mIsUpgrade || mInjector.getSystemWrapper().getPropertyBoolean(
"persist.pm.mock-upgrade", false /* default */);
}
@@ -4360,7 +4415,7 @@ public class PackageManagerService extends IPackageManager.Stub
Slog.d(TAG, "Priming domain verifications in user " + userId);
}
- SystemConfig systemConfig = SystemConfig.getInstance();
+ SystemConfig systemConfig = mInjector.getSystemConfig();
ArraySet<String> packages = systemConfig.getLinkedApps();
for (String packageName : packages) {
@@ -5169,11 +5224,11 @@ public class PackageManagerService extends IPackageManager.Stub
* until the requested bytes are available.
*/
public void freeStorage(String volumeUuid, long bytes, int storageFlags) throws IOException {
- final StorageManager storage = mInjector.getStorageManager();
+ final StorageManager storage = mInjector.getSystemService(StorageManager.class);
final File file = storage.findPathForUuid(volumeUuid);
if (file.getUsableSpace() >= bytes) return;
- if (ENABLE_FREE_CACHE_V2) {
+ if (mEnableFreeCacheV2) {
final boolean internalVolume = Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL,
volumeUuid);
final boolean aggressive = (storageFlags
@@ -5252,7 +5307,7 @@ public class PackageManagerService extends IPackageManager.Stub
private boolean pruneUnusedStaticSharedLibraries(long neededSpace, long maxCachePeriod)
throws IOException {
- final StorageManager storage = mInjector.getStorageManager();
+ final StorageManager storage = mInjector.getSystemService(StorageManager.class);
final File volume = storage.findPathForUuid(StorageManager.UUID_PRIVATE_INTERNAL);
List<VersionedPackage> packagesToDelete = null;
@@ -5500,7 +5555,8 @@ public class PackageManagerService extends IPackageManager.Stub
}
private boolean isRecentsAccessingChildProfiles(int callingUid, int targetUserId) {
- if (!mInjector.getActivityTaskManagerInternal().isCallerRecents(callingUid)) {
+ if (!mInjector.getLocalService(ActivityTaskManagerInternal.class)
+ .isCallerRecents(callingUid)) {
return false;
}
final long token = Binder.clearCallingIdentity();
@@ -5983,7 +6039,7 @@ public class PackageManagerService extends IPackageManager.Stub
res.addAll(mAvailableFeatures.values());
}
final FeatureInfo fi = new FeatureInfo();
- fi.reqGlEsVersion = SystemProperties.getInt("ro.opengles.version",
+ fi.reqGlEsVersion = mInjector.getSystemWrapper().getPropertyInt("ro.opengles.version",
FeatureInfo.GL_ES_VERSION_UNDEFINED);
res.add(fi);
@@ -9065,10 +9121,10 @@ public class PackageManagerService extends IPackageManager.Stub
if (providerInfo != null) {
// Looking for cross-user grants before enforcing the typical cross-users permissions
if (userId != UserHandle.getUserId(callingUid)) {
- final UriGrantsManagerInternal mUgmInternal =
- LocalServices.getService(UriGrantsManagerInternal.class);
+ final UriGrantsManagerInternal ugmInternal =
+ mInjector.getLocalService(UriGrantsManagerInternal.class);
checkedGrants =
- mUgmInternal.checkAuthorityGrants(callingUid, providerInfo, userId, true);
+ ugmInternal.checkAuthorityGrants(callingUid, providerInfo, userId, true);
}
}
if (!checkedGrants) {
@@ -9678,7 +9734,7 @@ public class PackageManagerService extends IPackageManager.Stub
pkgName, getSettingsVersionForPackage(parsedPackage)),
Collections.singletonMap(pkgName,
getSharedLibLatestVersionSetting(scanResult))),
- mSettings.mKeySetManagerService);
+ mSettings.mKeySetManagerService, mInjector);
appIdCreated = optimisticallyRegisterAppId(scanResult);
commitReconciledScanResultLocked(
reconcileResult.get(pkgName), mUserManager.getUserIds());
@@ -9696,6 +9752,18 @@ public class PackageManagerService extends IPackageManager.Stub
mSettings.disableSystemPackageLPw(parsedPackage.getPackageName(), true);
}
}
+ if (mIncrementalManager != null && isIncrementalPath(parsedPackage.getPath())) {
+ if (pkgSetting != null && pkgSetting.isPackageLoading()) {
+ final StorageHealthCheckParams healthCheckParams = new StorageHealthCheckParams();
+ healthCheckParams.blockedTimeoutMs = INCREMENTAL_STORAGE_BLOCKED_TIMEOUT_MS;
+ healthCheckParams.unhealthyTimeoutMs = INCREMENTAL_STORAGE_UNHEALTHY_TIMEOUT_MS;
+ healthCheckParams.unhealthyMonitoringMs =
+ INCREMENTAL_STORAGE_UNHEALTHY_MONITORING_MS;
+ mIncrementalManager.registerHealthListener(parsedPackage.getPath(),
+ healthCheckParams,
+ new IncrementalHealthListener(parsedPackage.getPackageName()));
+ }
+ }
return scanResult.pkgSetting.pkg;
}
@@ -9957,7 +10025,7 @@ public class PackageManagerService extends IPackageManager.Stub
pkgCompilationReason = PackageManagerService.REASON_BACKGROUND_DEXOPT;
}
- if (SystemProperties.getBoolean(PRECOMPILE_LAYOUTS, false)) {
+ if (mInjector.getSystemWrapper().getPropertyBoolean(PRECOMPILE_LAYOUTS, false)) {
mArtManagerService.compileLayouts(pkg);
}
@@ -10933,7 +11001,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
private int getVendorPartitionVersion() {
- final String version = SystemProperties.get("ro.vndk.version");
+ final String version = mInjector.getSystemWrapper().getProperty("ro.vndk.version");
if (!version.isEmpty()) {
try {
return Integer.parseInt(version);
@@ -12958,7 +13026,7 @@ public class PackageManagerService extends IPackageManager.Stub
+ intent.toShortString(false, true, false, false)
+ " " + intent.getExtras(), here);
}
- mInjector.getActivityManagerInternal().broadcastIntent(
+ mInjector.getLocalService(ActivityManagerInternal.class).broadcastIntent(
intent, finishedReceiver, requiredPermissions,
finishedReceiver != null, id,
broadcastAllowList == null ? null : broadcastAllowList.get(id));
@@ -14263,7 +14331,7 @@ public class PackageManagerService extends IPackageManager.Stub
&& mInstantAppInstallerActivity.packageName.equals(
mRequiredVerifierPackage)) {
try {
- mInjector.getAppOpsManager()
+ mInjector.getSystemService(AppOpsManager.class)
.checkPackage(installerUid, mRequiredVerifierPackage);
if (DEBUG_VERIFY) {
Slog.i(TAG, "disable verification for instant app");
@@ -14513,7 +14581,7 @@ public class PackageManagerService extends IPackageManager.Stub
if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
throw new SecurityException("Instant applications don't have access to this method");
}
- mInjector.getAppOpsManager().checkPackage(Binder.getCallingUid(),
+ mInjector.getSystemService(AppOpsManager.class).checkPackage(Binder.getCallingUid(),
callerPackageName);
synchronized (mLock) {
PackageSetting ps = mSettings.mPackages.get(packageName);
@@ -14673,7 +14741,7 @@ public class PackageManagerService extends IPackageManager.Stub
*/
private boolean performRollbackManagerRestore(int userId, int token, PackageInstalledInfo res,
PostInstallData data) {
- RollbackManagerInternal rm = LocalServices.getService(RollbackManagerInternal.class);
+ RollbackManagerInternal rm = mInjector.getLocalService(RollbackManagerInternal.class);
final String packageName = res.pkg.getPackageName();
final int[] allUsers = mUserManager.getUserIds();
@@ -15436,7 +15504,7 @@ public class PackageManagerService extends IPackageManager.Stub
integrityVerification.setPackage("android");
DeviceIdleInternal idleController =
- mInjector.getLocalDeviceIdleController();
+ mInjector.getLocalService(DeviceIdleInternal.class);
final long idleDuration = getVerificationTimeout();
idleController.addPowerSaveTempWhitelistAppDirect(Process.myUid(),
@@ -15546,7 +15614,7 @@ public class PackageManagerService extends IPackageManager.Stub
receivers, verificationState);
DeviceIdleInternal idleController =
- mInjector.getLocalDeviceIdleController();
+ mInjector.getLocalService(DeviceIdleInternal.class);
final long idleDuration = getVerificationTimeout();
final BroadcastOptions options = BroadcastOptions.makeBasic();
options.setTemporaryAppWhitelistDuration(idleDuration);
@@ -16356,12 +16424,25 @@ public class PackageManagerService extends IPackageManager.Stub
// TODO(b/169721400): generalize Incremental States and create a Callback object
// that can be used for all the packages.
- final IncrementalStatesCallback incrementalStatesCallback =
- new IncrementalStatesCallback(ps, userId);
final String codePath = ps.getPathString();
if (IncrementalManager.isIncrementalPath(codePath) && mIncrementalManager != null) {
- mIncrementalManager.registerCallback(codePath, incrementalStatesCallback);
+ final IncrementalStatesCallback incrementalStatesCallback =
+ new IncrementalStatesCallback(ps.name,
+ UserHandle.getUid(userId, ps.appId),
+ getInstalledUsers(ps, userId));
ps.setIncrementalStatesCallback(incrementalStatesCallback);
+ mIncrementalManager.registerLoadingProgressCallback(codePath,
+ new IncrementalProgressListener(ps.name));
+ final IncrementalHealthListener incrementalHealthListener =
+ new IncrementalHealthListener(ps.name);
+ final StorageHealthCheckParams healthCheckParams =
+ new StorageHealthCheckParams();
+ healthCheckParams.blockedTimeoutMs = INCREMENTAL_STORAGE_BLOCKED_TIMEOUT_MS;
+ healthCheckParams.unhealthyTimeoutMs = INCREMENTAL_STORAGE_UNHEALTHY_TIMEOUT_MS;
+ healthCheckParams.unhealthyMonitoringMs =
+ INCREMENTAL_STORAGE_UNHEALTHY_MONITORING_MS;
+ mIncrementalManager.registerHealthListener(codePath,
+ new StorageHealthCheckParams(), incrementalHealthListener);
}
// Ensure that the uninstall reason is UNKNOWN for users with the package installed.
@@ -16545,7 +16626,7 @@ public class PackageManagerService extends IPackageManager.Stub
@GuardedBy("mLock")
private static Map<String, ReconciledPackage> reconcilePackagesLocked(
- final ReconcileRequest request, KeySetManagerService ksms)
+ final ReconcileRequest request, KeySetManagerService ksms, Injector injector)
throws ReconcileFailure {
final Map<String, ScanResult> scannedPackages = request.scannedPackages;
@@ -16696,7 +16777,8 @@ public class PackageManagerService extends IPackageManager.Stub
&& compareSignatures(sharedUserSignatures,
parsedPackage.getSigningDetails().signatures)
!= PackageManager.SIGNATURE_MATCH) {
- if (SystemProperties.getInt("ro.product.first_api_level", 0) <= 29) {
+ if (injector.getSystemWrapper()
+ .getPropertyInt("ro.product.first_api_level", 0) <= 29) {
// Mismatched signatures is an error and silently skipping system
// packages will likely break the device in unforeseen ways.
// However, we allow the device to boot anyway because, prior to Q,
@@ -17070,7 +17152,7 @@ public class PackageManagerService extends IPackageManager.Stub
try {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "reconcilePackages");
reconciledPackages = reconcilePackagesLocked(
- reconcileRequest, mSettings.mKeySetManagerService);
+ reconcileRequest, mSettings.mKeySetManagerService, mInjector);
} catch (ReconcileFailure e) {
for (InstallRequest request : requests) {
request.installResult.setError("Reconciliation failed...", e);
@@ -17205,7 +17287,7 @@ public class PackageManagerService extends IPackageManager.Stub
if (performDexopt) {
// Compile the layout resources.
- if (SystemProperties.getBoolean(PRECOMPILE_LAYOUTS, false)) {
+ if (mInjector.getSystemWrapper().getPropertyBoolean(PRECOMPILE_LAYOUTS, false)) {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "compileLayouts");
mViewCompiler.compileLayouts(pkg);
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
@@ -17264,45 +17346,39 @@ public class PackageManagerService extends IPackageManager.Stub
NativeLibraryHelper.waitForNativeBinariesExtraction(incrementalStorages);
}
- private class IncrementalStatesCallback extends IPackageLoadingProgressCallback.Stub
- implements IncrementalStates.Callback {
- @GuardedBy("mPackageSetting")
- private final PackageSetting mPackageSetting;
- private final String mPackageName;
- private final String mPathString;
- private final int mUid;
- private final int[] mInstalledUserIds;
-
- IncrementalStatesCallback(PackageSetting packageSetting, int userId) {
- mPackageSetting = packageSetting;
- mPackageName = packageSetting.name;
- mUid = UserHandle.getUid(userId, packageSetting.appId);
- mPathString = packageSetting.getPathString();
- final int[] allUserIds = resolveUserIds(userId);
- final ArrayList<Integer> installedUserIds = new ArrayList<>();
- for (int i = 0; i < allUserIds.length; i++) {
- if (packageSetting.getInstalled(allUserIds[i])) {
- installedUserIds.add(allUserIds[i]);
- }
- }
- final int numInstalledUserId = installedUserIds.size();
- mInstalledUserIds = new int[numInstalledUserId];
- for (int i = 0; i < numInstalledUserId; i++) {
- mInstalledUserIds[i] = installedUserIds.get(i);
+ private int[] getInstalledUsers(PackageSetting ps, int userId) {
+ final int[] allUserIds = resolveUserIds(userId);
+ final ArrayList<Integer> installedUserIdsList = new ArrayList<>();
+ for (int i = 0; i < allUserIds.length; i++) {
+ if (ps.getInstalled(allUserIds[i])) {
+ installedUserIdsList.add(allUserIds[i]);
}
}
+ final int numInstalledUserId = installedUserIdsList.size();
+ final int[] installedUserIds = new int[numInstalledUserId];
+ for (int i = 0; i < numInstalledUserId; i++) {
+ installedUserIds[i] = installedUserIdsList.get(i);
+ }
+ return installedUserIds;
+ }
- @Override
- public void onPackageLoadingProgressChanged(float progress) {
- synchronized (mPackageSetting) {
- mPackageSetting.setLoadingProgress(progress);
- }
+ /**
+ * Package states callback, used to listen for package state changes and send broadcasts
+ */
+ private final class IncrementalStatesCallback implements IncrementalStates.Callback {
+ private final String mPackageName;
+ private final int mUid;
+ private final int[] mInstalledUserIds;
+ IncrementalStatesCallback(String packageName, int uid, int[] installedUserIds) {
+ mPackageName = packageName;
+ mUid = uid;
+ mInstalledUserIds = installedUserIds;
}
@Override
public void onPackageFullyLoaded() {
- mIncrementalManager.unregisterCallback(mPathString, this);
final SparseArray<int[]> newBroadcastAllowList;
+ final String codePath;
synchronized (mLock) {
final PackageSetting ps = mSettings.mPackages.get(mPackageName);
if (ps == null) {
@@ -17310,6 +17386,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
newBroadcastAllowList = mAppsFilter.getVisibilityAllowList(
ps, mInstalledUserIds, mSettings.mPackages);
+ codePath = ps.getPathString();
}
Bundle extras = new Bundle();
extras.putInt(Intent.EXTRA_UID, mUid);
@@ -17318,6 +17395,8 @@ public class PackageManagerService extends IPackageManager.Stub
extras, 0 /*flags*/,
null /*targetPackage*/, null /*finishedReceiver*/,
mInstalledUserIds, null /* instantUserIds */, newBroadcastAllowList);
+ // Unregister health listener as it will always be healthy from now
+ mIncrementalManager.unregisterHealthListener(codePath);
}
@Override
@@ -17365,37 +17444,48 @@ public class PackageManagerService extends IPackageManager.Stub
}
/**
- * This is an internal method that is used to indicate changes on the health status of the
- * Incremental Storage used by an installed package with an associated user id. This might
- * result in a change in the loading state of the package.
+ * Loading progress callback, used to listen for progress changes and update package setting
*/
- public void onStorageHealthStatusChanged(String packageName, int status, int userId) {
- final int callingUid = Binder.getCallingUid();
- mPermissionManager.enforceCrossUserPermission(
- callingUid, userId, true, false,
- "onStorageHealthStatusChanged");
- final PackageSetting ps = getPackageSettingForUser(packageName, callingUid, userId);
- if (ps == null) {
- return;
+ private class IncrementalProgressListener extends IPackageLoadingProgressCallback.Stub {
+ private final String mPackageName;
+ IncrementalProgressListener(String packageName) {
+ mPackageName = packageName;
+ }
+
+ @Override
+ public void onPackageLoadingProgressChanged(float progress) {
+ final PackageSetting ps;
+ synchronized (mLock) {
+ ps = mSettings.mPackages.get(mPackageName);
+ }
+ if (ps == null) {
+ return;
+ }
+ ps.setLoadingProgress(progress);
}
- ps.setStorageHealthStatus(status);
}
/**
- * This is an internal method that is used to indicate changes on the stream status of the
- * data loader used by an installed package with an associated user id. This might
- * result in a change in the loading state of the package.
+ * Incremental storage health status callback, used to listen for monitoring changes and update
+ * package setting.
*/
- public void onStreamStatusChanged(String packageName, int status, int userId) {
- final int callingUid = Binder.getCallingUid();
- mPermissionManager.enforceCrossUserPermission(
- callingUid, userId, true, false,
- "onStreamStatusChanged");
- final PackageSetting ps = getPackageSettingForUser(packageName, callingUid, userId);
- if (ps == null) {
- return;
+ private class IncrementalHealthListener extends IStorageHealthListener.Stub {
+ private final String mPackageName;
+ IncrementalHealthListener(String packageName) {
+ mPackageName = packageName;
+ }
+
+ @Override
+ public void onHealthStatus(int storageId, int status) throws RemoteException {
+ final PackageSetting ps;
+ synchronized (mLock) {
+ ps = mSettings.mPackages.get(mPackageName);
+ }
+ if (ps == null) {
+ return;
+ }
+ ps.setStorageHealthStatus(status);
}
- ps.setStreamStatus(status);
}
@Nullable PackageSetting getPackageSettingForUser(String packageName, int callingUid,
@@ -19840,7 +19930,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
private void resetNetworkPolicies(int userId) {
- mInjector.getNetworkPolicyManagerInternal().resetUserState(userId);
+ mInjector.getLocalService(NetworkPolicyManagerInternal.class).resetUserState(userId);
}
/**
@@ -21106,7 +21196,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
public String getOverlayConfigSignaturePackageName() {
- return ensureSystemPackageName(SystemConfig.getInstance()
+ return ensureSystemPackageName(mInjector.getSystemConfig()
.getOverlayConfigSignaturePackage());
}
@@ -21876,7 +21966,7 @@ public class PackageManagerService extends IPackageManager.Stub
mPermissionManager.updateAllPermissions(StorageManager.UUID_PRIVATE_INTERNAL, false);
final PermissionPolicyInternal permissionPolicyInternal =
- mInjector.getPermissionPolicyInternal();
+ mInjector.getLocalService(PermissionPolicyInternal.class);
permissionPolicyInternal.setOnInitializedCallback(userId -> {
// The SDK updated case is already handled when we run during the ctor.
synchronized (mLock) {
@@ -21887,13 +21977,13 @@ public class PackageManagerService extends IPackageManager.Stub
}
// Watch for external volumes that come and go over time
- final StorageManager storage = mInjector.getStorageManager();
+ final StorageManager storage = mInjector.getSystemService(StorageManager.class);
storage.registerListener(mStorageListener);
mInstallerService.systemReady();
mPackageDexOptimizer.systemReady();
- mInjector.getStorageManagerInternal().addExternalStoragePolicy(
+ mInjector.getLocalService(StorageManagerInternal.class).addExternalStoragePolicy(
new StorageManagerInternal.ExternalStorageMountPolicy() {
@Override
public int getMountMode(int uid, String packageName) {
@@ -22626,7 +22716,7 @@ public class PackageManagerService extends IPackageManager.Stub
if (ArrayUtils.isEmpty(apkList)) {
return;
}
- String sku = SystemProperties.get("ro.boot.hardware.sku");
+ String sku = mInjector.getSystemWrapper().getProperty("ro.boot.hardware.sku");
if (!TextUtils.isEmpty(sku) && ArrayUtils.contains(skuArray, sku)) {
return;
}
@@ -22922,7 +23012,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
// Reconcile app data for all started/unlocked users
- final StorageManager sm = mInjector.getStorageManager();
+ final StorageManager sm = mInjector.getSystemService(StorageManager.class);
UserManagerInternal umInternal = mInjector.getUserManagerInternal();
for (UserInfo user : mUserManager.getUsers(false /* includeDying */)) {
final int flags;
@@ -23123,7 +23213,7 @@ public class PackageManagerService extends IPackageManager.Stub
* correct for all installed apps on all mounted volumes.
*/
void reconcileAppsData(int userId, int flags, boolean migrateAppsData) {
- final StorageManager storage = mInjector.getStorageManager();
+ final StorageManager storage = mInjector.getSystemService(StorageManager.class);
for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
final String volumeUuid = vol.getFsUuid();
synchronized (mInstallLock) {
@@ -23258,7 +23348,7 @@ public class PackageManagerService extends IPackageManager.Stub
Installer.Batch batch = new Installer.Batch();
UserManagerInternal umInternal = mInjector.getUserManagerInternal();
- StorageManagerInternal smInternal = mInjector.getStorageManagerInternal();
+ StorageManagerInternal smInternal = mInjector.getLocalService(StorageManagerInternal.class);
for (UserInfo user : mUserManager.getUsers(false /*excludeDying*/)) {
final int flags;
if (umInternal.isUserUnlockingOrUnlocked(user.id)) {
@@ -23587,7 +23677,7 @@ public class PackageManagerService extends IPackageManager.Stub
private void movePackageInternal(final String packageName, final String volumeUuid,
final int moveId, final int callingUid, UserHandle user)
throws PackageManagerException {
- final StorageManager storage = mInjector.getStorageManager();
+ final StorageManager storage = mInjector.getSystemService(StorageManager.class);
final PackageManager pm = mContext.getPackageManager();
final String currentVolumeUuid;
@@ -23825,7 +23915,7 @@ public class PackageManagerService extends IPackageManager.Stub
return;
}
- final StorageManager storage = mInjector.getStorageManager();;
+ final StorageManager storage = mInjector.getSystemService(StorageManager.class);;
VolumeInfo volume = storage.findVolumeByUuid(pkg.getStorageUuid().toString());
int packageExternalStorageType = getPackageExternalStorageType(volume, pkg.isExternalStorage());
@@ -23865,7 +23955,7 @@ public class PackageManagerService extends IPackageManager.Stub
}
};
- final StorageManager storage = mInjector.getStorageManager();
+ final StorageManager storage = mInjector.getSystemService(StorageManager.class);
storage.setPrimaryStorageUuid(volumeUuid, callback);
return realMoveId;
}
@@ -24045,7 +24135,7 @@ public class PackageManagerService extends IPackageManager.Stub
final long token = Binder.clearCallingIdentity();
try {
final DeviceStorageMonitorInternal
- dsm = mInjector.getDeviceStorageMonitorInternal();
+ dsm = mInjector.getLocalService(DeviceStorageMonitorInternal.class);
if (dsm != null) {
return dsm.isMemoryLow();
} else {
@@ -25637,7 +25727,7 @@ public class PackageManagerService extends IPackageManager.Stub
"Failed registering loading progress callback. Incremental is not enabled");
return false;
}
- return mIncrementalManager.registerCallback(ps.getPathString(),
+ return mIncrementalManager.registerLoadingProgressCallback(ps.getPathString(),
(IPackageLoadingProgressCallback) callback.getBinder());
}
@@ -25656,7 +25746,7 @@ public class PackageManagerService extends IPackageManager.Stub
if (mIncrementalManager == null) {
return false;
}
- return mIncrementalManager.unregisterCallback(ps.getPathString(),
+ return mIncrementalManager.unregisterLoadingProgressCallback(ps.getPathString(),
(IPackageLoadingProgressCallback) callback.getBinder());
}
}
@@ -25829,7 +25919,7 @@ public class PackageManagerService extends IPackageManager.Stub
@Override
public boolean isAutoRevokeWhitelisted(String packageName) {
- int mode = mInjector.getAppOpsManager().checkOpNoThrow(
+ int mode = mInjector.getSystemService(AppOpsManager.class).checkOpNoThrow(
AppOpsManager.OP_AUTO_REVOKE_PERMISSIONS_IF_UNUSED,
Binder.getCallingUid(), packageName);
return mode == MODE_IGNORED;
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index c46a7efaa704..9aa1a621a760 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -2729,13 +2729,13 @@ class PackageManagerShellCommand extends ShellCommand {
Slog.i(TAG, "Removing " + userId + " or set as ephemeral if in use.");
int result = um.removeUserOrSetEphemeral(userId);
switch (result) {
- case UserManagerService.REMOVE_RESULT_REMOVED:
+ case UserManager.REMOVE_RESULT_REMOVED:
getOutPrintWriter().printf("Success: user %d removed\n", userId);
return 0;
- case UserManagerService.REMOVE_RESULT_SET_EPHEMERAL:
+ case UserManager.REMOVE_RESULT_SET_EPHEMERAL:
getOutPrintWriter().printf("Success: user %d set as ephemeral\n", userId);
return 0;
- case UserManagerService.REMOVE_RESULT_ALREADY_BEING_REMOVED:
+ case UserManager.REMOVE_RESULT_ALREADY_BEING_REMOVED:
getOutPrintWriter().printf("Success: user %d is already being removed\n", userId);
return 0;
default:
diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java
index d52ad46d4b7e..be7c7c6ff1d6 100644
--- a/services/core/java/com/android/server/pm/PackageSettingBase.java
+++ b/services/core/java/com/android/server/pm/PackageSettingBase.java
@@ -793,13 +793,6 @@ public abstract class PackageSettingBase extends SettingBase {
incrementalStates.onStorageHealthStatusChanged(status);
}
- /**
- * @see IncrementalStates#onStreamStatusChanged(int)
- */
- public void setStreamStatus(int status) {
- incrementalStates.onStreamStatusChanged(status);
- }
-
protected PackageSettingBase updateFrom(PackageSettingBase other) {
super.copyFrom(other);
setPath(other.getPath());
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 66e84b180588..a0344e27f96c 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -22,7 +22,6 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import android.Manifest;
import android.annotation.ColorRes;
import android.annotation.DrawableRes;
-import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringRes;
@@ -132,8 +131,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
@@ -248,43 +245,6 @@ public class UserManagerService extends IUserManager.Stub {
static final int WRITE_USER_MSG = 1;
static final int WRITE_USER_DELAY = 2*1000; // 2 seconds
- /**
- * A response code from {@link #removeUserOrSetEphemeral(int)} indicating that the specified
- * user has been successfully removed.
- */
- public static final int REMOVE_RESULT_REMOVED = 0;
-
- /**
- * A response code from {@link #removeUserOrSetEphemeral(int)} indicating that the specified
- * user has had its {@link UserInfo#FLAG_EPHEMERAL} flag set to {@code true}, so that it will be
- * removed when the user is stopped or on boot.
- */
- public static final int REMOVE_RESULT_SET_EPHEMERAL = 1;
-
- /**
- * A response code from {@link #removeUserOrSetEphemeral(int)} indicating that the specified
- * user is already in the process of being removed.
- */
- public static final int REMOVE_RESULT_ALREADY_BEING_REMOVED = 2;
-
- /**
- * A response code from {@link #removeUserOrSetEphemeral(int)} indicating that an error occurred
- * that prevented the user from being removed or set as ephemeral.
- */
- public static final int REMOVE_RESULT_ERROR = 3;
-
- /**
- * Possible response codes from {@link #removeUserOrSetEphemeral(int)}.
- */
- @IntDef(prefix = { "REMOVE_RESULT_" }, value = {
- REMOVE_RESULT_REMOVED,
- REMOVE_RESULT_SET_EPHEMERAL,
- REMOVE_RESULT_ALREADY_BEING_REMOVED,
- REMOVE_RESULT_ERROR,
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface RemoveResult {}
-
// Tron counters
private static final String TRON_GUEST_CREATED = "users_guest_created";
private static final String TRON_USER_CREATED = "users_user_created";
@@ -4031,17 +3991,17 @@ public class UserManagerService extends IUserManager.Stub {
}
@Override
- public @RemoveResult int removeUserOrSetEphemeral(@UserIdInt int userId) {
+ public @UserManager.RemoveResult int removeUserOrSetEphemeral(@UserIdInt int userId) {
Slog.i(LOG_TAG, "removeUserOrSetEphemeral u" + userId);
checkManageUsersPermission("Only the system can remove users");
final String restriction = getUserRemovalRestriction(userId);
if (getUserRestrictions(UserHandle.getCallingUserId()).getBoolean(restriction, false)) {
Slog.w(LOG_TAG, "Cannot remove user. " + restriction + " is enabled.");
- return REMOVE_RESULT_ERROR;
+ return UserManager.REMOVE_RESULT_ERROR;
}
if (userId == UserHandle.USER_SYSTEM) {
Slog.e(LOG_TAG, "System user cannot be removed.");
- return REMOVE_RESULT_ERROR;
+ return UserManager.REMOVE_RESULT_ERROR;
}
final long ident = Binder.clearCallingIdentity();
@@ -4053,12 +4013,12 @@ public class UserManagerService extends IUserManager.Stub {
if (userData == null) {
Slog.e(LOG_TAG,
"Cannot remove user " + userId + ", invalid user id provided.");
- return REMOVE_RESULT_ERROR;
+ return UserManager.REMOVE_RESULT_ERROR;
}
if (mRemovingUserIds.get(userId)) {
Slog.e(LOG_TAG, "User " + userId + " is already scheduled for removal.");
- return REMOVE_RESULT_ALREADY_BEING_REMOVED;
+ return UserManager.REMOVE_RESULT_ALREADY_BEING_REMOVED;
}
}
@@ -4067,7 +4027,7 @@ public class UserManagerService extends IUserManager.Stub {
if (currentUser != userId) {
// Attempt to remove the user. This will fail if the user is the current user
if (removeUser(userId)) {
- return REMOVE_RESULT_REMOVED;
+ return UserManager.REMOVE_RESULT_REMOVED;
}
Slog.w(LOG_TAG, "Unable to immediately remove non-current user: " + userId
@@ -4081,7 +4041,7 @@ public class UserManagerService extends IUserManager.Stub {
userData.info.flags |= UserInfo.FLAG_EPHEMERAL;
writeUserLP(userData);
- return REMOVE_RESULT_SET_EPHEMERAL;
+ return UserManager.REMOVE_RESULT_SET_EPHEMERAL;
}
} finally {
Binder.restoreCallingIdentity(ident);
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 0e47ea8058f1..6caf9162b7a8 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -21,7 +21,6 @@ import static android.view.WindowManager.TRANSIT_ACTIVITY_CLOSE;
import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;
import static android.view.WindowManager.TRANSIT_ACTIVITY_RELAUNCH;
import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE;
-import static android.view.WindowManager.TRANSIT_DOCK_TASK_FROM_RECENTS;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_SUBTLE_ANIMATION;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE;
@@ -92,7 +91,6 @@ import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.Path;
import android.graphics.Picture;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
@@ -134,7 +132,6 @@ import com.android.internal.util.function.pooled.PooledPredicate;
import com.android.server.AttributeCache;
import com.android.server.wm.animation.ClipRectLRAnimation;
import com.android.server.wm.animation.ClipRectTBAnimation;
-import com.android.server.wm.animation.CurvedTranslateAnimation;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -161,9 +158,6 @@ public class AppTransition implements Dump {
static final Interpolator TOUCH_RESPONSE_INTERPOLATOR =
new PathInterpolator(0.3f, 0f, 0.1f, 1f);
- private static final Interpolator THUMBNAIL_DOCK_INTERPOLATOR =
- new PathInterpolator(0.85f, 0f, 1f, 1f);
-
/**
* Maximum duration for the clip reveal animation. This is used when there is a lot of movement
* involved, to make it more understandable.
@@ -1127,11 +1121,8 @@ public class AppTransition implements Dump {
scale.setInterpolator(interpolator);
scale.setDuration(duration);
Animation alpha = new AlphaAnimation(1f, 0f);
- alpha.setInterpolator(mNextAppTransition == TRANSIT_DOCK_TASK_FROM_RECENTS
- ? THUMBNAIL_DOCK_INTERPOLATOR : mThumbnailFadeOutInterpolator);
- alpha.setDuration(mNextAppTransition == TRANSIT_DOCK_TASK_FROM_RECENTS
- ? duration / 2
- : duration);
+ alpha.setInterpolator(mThumbnailFadeOutInterpolator);
+ alpha.setDuration(duration);
Animation translate = createCurvedMotion(fromX, toX, fromY, toY);
translate.setInterpolator(interpolator);
translate.setDuration(duration);
@@ -1194,44 +1185,15 @@ public class AppTransition implements Dump {
}
private Animation createCurvedMotion(float fromX, float toX, float fromY, float toY) {
-
- // Almost no x-change - use linear animation
- if (Math.abs(toX - fromX) < 1f || mNextAppTransition != TRANSIT_DOCK_TASK_FROM_RECENTS) {
- return new TranslateAnimation(fromX, toX, fromY, toY);
- } else {
- final Path path = createCurvedPath(fromX, toX, fromY, toY);
- return new CurvedTranslateAnimation(path);
- }
- }
-
- private Path createCurvedPath(float fromX, float toX, float fromY, float toY) {
- final Path path = new Path();
- path.moveTo(fromX, fromY);
-
- if (fromY > toY) {
- // If the object needs to go up, move it in horizontal direction first, then vertical.
- path.cubicTo(fromX, fromY, toX, 0.9f * fromY + 0.1f * toY, toX, toY);
- } else {
- // If the object needs to go down, move it in vertical direction first, then horizontal.
- path.cubicTo(fromX, fromY, fromX, 0.1f * fromY + 0.9f * toY, toX, toY);
- }
- return path;
+ return new TranslateAnimation(fromX, toX, fromY, toY);
}
private long getAspectScaleDuration() {
- if (mNextAppTransition == TRANSIT_DOCK_TASK_FROM_RECENTS) {
- return (long) (THUMBNAIL_APP_TRANSITION_DURATION * 1.35f);
- } else {
- return THUMBNAIL_APP_TRANSITION_DURATION;
- }
+ return THUMBNAIL_APP_TRANSITION_DURATION;
}
private Interpolator getAspectScaleInterpolator() {
- if (mNextAppTransition == TRANSIT_DOCK_TASK_FROM_RECENTS) {
- return mFastOutSlowInInterpolator;
- } else {
- return TOUCH_RESPONSE_INTERPOLATOR;
- }
+ return TOUCH_RESPONSE_INTERPOLATOR;
}
/**
@@ -1734,7 +1696,6 @@ public class AppTransition implements Dump {
? WindowAnimation_activityCloseEnterAnimation
: WindowAnimation_activityCloseExitAnimation;
break;
- case TRANSIT_DOCK_TASK_FROM_RECENTS:
case TRANSIT_TASK_OPEN:
animAttr = enter
? WindowAnimation_taskOpenEnterAnimation
@@ -1805,7 +1766,6 @@ public class AppTransition implements Dump {
int getAppStackClipMode() {
return mNextAppTransition == TRANSIT_ACTIVITY_RELAUNCH
- || mNextAppTransition == TRANSIT_DOCK_TASK_FROM_RECENTS
|| mNextAppTransitionType == NEXT_TRANSIT_TYPE_CLIP_REVEAL
|| mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY
|| mNextAppTransition == TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER
@@ -2059,9 +2019,6 @@ public class AppTransition implements Dump {
case TRANSIT_ACTIVITY_RELAUNCH: {
return "TRANSIT_ACTIVITY_RELAUNCH";
}
- case TRANSIT_DOCK_TASK_FROM_RECENTS: {
- return "TRANSIT_DOCK_TASK_FROM_RECENTS";
- }
case TRANSIT_KEYGUARD_GOING_AWAY: {
return "TRANSIT_KEYGUARD_GOING_AWAY";
}
diff --git a/services/core/java/com/android/server/wm/AppTransitionController.java b/services/core/java/com/android/server/wm/AppTransitionController.java
index 57d51c51c12b..6b8a3e22795e 100644
--- a/services/core/java/com/android/server/wm/AppTransitionController.java
+++ b/services/core/java/com/android/server/wm/AppTransitionController.java
@@ -21,7 +21,6 @@ import static android.view.WindowManager.TRANSIT_ACTIVITY_CLOSE;
import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;
import static android.view.WindowManager.TRANSIT_ACTIVITY_RELAUNCH;
import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE;
-import static android.view.WindowManager.TRANSIT_DOCK_TASK_FROM_RECENTS;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_NO_ANIMATION;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_SUBTLE_ANIMATION;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_TO_SHADE;
@@ -701,11 +700,9 @@ public class AppTransitionController {
boolean openingAppHasWallpaper, boolean closingAppHasWallpaper) {
// Given no app transition pass it through instead of a wallpaper transition.
// Never convert the crashing transition.
- // Never update the transition for the wallpaper if we are just docking from recents
// Never convert a change transition since the top activity isn't changing and will likely
// still be above an opening wallpaper.
if (transit == TRANSIT_NONE || transit == TRANSIT_CRASHING_ACTIVITY_CLOSE
- || transit == TRANSIT_DOCK_TASK_FROM_RECENTS
|| AppTransition.isChangeTransit(transit)) {
return transit;
}
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 48550ed016c3..6486b78eb601 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -161,17 +161,18 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
return;
}
ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Task info changed taskId=%d", task.mTaskId);
- mDeferTaskOrgCallbacksConsumer.accept(() -> {
- if (!task.isOrganized()) {
- // This is safe to ignore if the task is no longer organized
- return;
- }
- try {
- mTaskOrganizer.onTaskInfoChanged(taskInfo);
- } catch (RemoteException e) {
- Slog.e(TAG, "Exception sending onTaskInfoChanged callback", e);
- }
- });
+ if (!task.isOrganized()) {
+ // This is safe to ignore if the task is no longer organized
+ return;
+ }
+ try {
+ // Purposely notify of task info change immediately instead of deferring (like
+ // appear and vanish) to allow info changes (such as new PIP params) to flow
+ // without waiting.
+ mTaskOrganizer.onTaskInfoChanged(taskInfo);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Exception sending onTaskInfoChanged callback", e);
+ }
}
void onBackPressedOnTaskRoot(Task task) {
@@ -182,17 +183,15 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
// by the organizer that don't receive that signal
return;
}
- mDeferTaskOrgCallbacksConsumer.accept(() -> {
- if (!task.isOrganized()) {
- // This is safe to ignore if the task is no longer organized
- return;
- }
- try {
- mTaskOrganizer.onBackPressedOnTaskRoot(task.getTaskInfo());
- } catch (Exception e) {
- Slog.e(TAG, "Exception sending onBackPressedOnTaskRoot callback", e);
- }
- });
+ if (!task.isOrganized()) {
+ // This is safe to ignore if the task is no longer organized
+ return;
+ }
+ try {
+ mTaskOrganizer.onBackPressedOnTaskRoot(task.getTaskInfo());
+ } catch (Exception e) {
+ Slog.e(TAG, "Exception sending onBackPressedOnTaskRoot callback", e);
+ }
}
}
@@ -390,6 +389,10 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
}
void onTaskAppeared(ITaskOrganizer organizer, Task task) {
+ // Don't send onTaskAppeared signal for task created by organizer since we will return it in
+ // the creation call.
+ if (task.mCreatedByOrganizer) return;
+
final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder());
state.addTask(task);
}
@@ -402,7 +405,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
}
@Override
- public RunningTaskInfo createRootTask(int displayId, int windowingMode) {
+ public TaskAppearedInfo createRootTask(int displayId, int windowingMode) {
enforceStackPermission("createRootTask()");
final long origId = Binder.clearCallingIdentity();
try {
@@ -419,7 +422,11 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
true /* createdByOrganizer */);
RunningTaskInfo out = task.getTaskInfo();
mLastSentTaskInfos.put(task, out);
- return out;
+ final TaskOrganizerState state =
+ mTaskOrganizerStates.get(task.mTaskOrganizer.asBinder());
+ final SurfaceControl outSurfaceControl = state.addTaskWithoutCallback(task,
+ "TaskOrganizerController.createRootTask");
+ return new TaskAppearedInfo(task.getTaskInfo(), outSurfaceControl);
}
} finally {
Binder.restoreCallingIdentity(origId);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 40b770fc67ec..ad624d50f7fd 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -225,7 +225,7 @@ import android.view.IOnKeyguardExitResult;
import android.view.IPinnedStackListener;
import android.view.IRecentsAnimationRunner;
import android.view.IRotationWatcher;
-import android.view.IScrollCaptureController;
+import android.view.IScrollCaptureCallbacks;
import android.view.ISystemGestureExclusionListener;
import android.view.IWallpaperVisibilityListener;
import android.view.IWindow;
@@ -6902,16 +6902,17 @@ public class WindowManagerService extends IWindowManager.Stub
*
* @param displayId the display for the request
* @param behindClient token for a window, used to filter the search to windows behind it
- * @param taskId specifies the id of a task the result must belong to or -1 to ignore task ids
- * @param controller the controller to receive results; a call to either
- * {@link IScrollCaptureController#onClientConnected} or
- * {@link IScrollCaptureController#onClientUnavailable}.
+ * @param taskId specifies the id of a task the result must belong to or -1 to match any task
+ * @param callbacks to receive responses
*/
public void requestScrollCapture(int displayId, @Nullable IBinder behindClient, int taskId,
- IScrollCaptureController controller) {
+ IScrollCaptureCallbacks callbacks) {
if (!checkCallingPermission(READ_FRAME_BUFFER, "requestScrollCapture()")) {
throw new SecurityException("Requires READ_FRAME_BUFFER permission");
}
+ if (behindClient != null && !isWindowToken(behindClient)) {
+ throw new IllegalArgumentException("behindClient must be a window token");
+ }
final long token = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
@@ -6919,26 +6920,26 @@ public class WindowManagerService extends IWindowManager.Stub
if (dc == null) {
ProtoLog.e(WM_ERROR,
"Invalid displayId for requestScrollCapture: %d", displayId);
- controller.onClientUnavailable();
+ callbacks.onUnavailable();
return;
}
WindowState topWindow = null;
if (behindClient != null) {
- topWindow = windowForClientLocked(null, behindClient, /* throwOnError*/ true);
+ topWindow = windowForClientLocked(null, behindClient, /* throwOnError*/ false);
}
WindowState targetWindow = dc.findScrollCaptureTargetWindow(topWindow, taskId);
if (targetWindow == null) {
- controller.onClientUnavailable();
+ callbacks.onUnavailable();
return;
}
// Forward to the window for handling.
try {
- targetWindow.mClient.requestScrollCapture(controller);
+ targetWindow.mClient.requestScrollCapture(callbacks);
} catch (RemoteException e) {
ProtoLog.w(WM_ERROR,
"requestScrollCapture: caught exception dispatching to window."
+ "token=%s", targetWindow.mClient.asBinder());
- controller.onClientUnavailable();
+ callbacks.onUnavailable();
}
}
} catch (RemoteException e) {
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java b/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
index aa38880d6d7d..fdde4ea36583 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
@@ -205,9 +205,10 @@ public class CertificateMonitor {
dialogIntent.setComponent(targetInfo.getComponentName());
}
+ // Simple notification clicks are immutable
PendingIntent notifyIntent = mInjector.pendingIntentGetActivityAsUser(userContext, 0,
- dialogIntent, PendingIntent.FLAG_UPDATE_CURRENT, null,
- UserHandle.of(parentUserId));
+ dialogIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE,
+ null, UserHandle.of(parentUserId));
return new Notification.Builder(userContext, SystemNotificationChannels.SECURITY)
.setSmallIcon(smallIconId)
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 5dbb34817188..cd3d50d91afd 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -2153,9 +2153,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
mInjector.binderWithCleanCallingIdentity(() -> {
int affectedUserHandle = parent ? getProfileParentId(userHandle) : userHandle;
AlarmManager am = mInjector.getAlarmManager();
+ // Broadcast alarms sent by system are immutable
PendingIntent pi = PendingIntent.getBroadcastAsUser(context, REQUEST_EXPIRE_PASSWORD,
new Intent(ACTION_EXPIRED_PASSWORD_NOTIFICATION),
- PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT,
+ PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT
+ | PendingIntent.FLAG_IMMUTABLE,
UserHandle.of(affectedUserHandle));
am.cancel(pi);
if (alarmTime != 0) {
@@ -10693,8 +10695,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
Slog.wtf(LOG_TAG, "Failed to resolve intent for location settings");
}
+ // Simple notification clicks are immutable
PendingIntent locationSettingsIntent = mInjector.pendingIntentGetActivityAsUser(mContext, 0,
- intent, PendingIntent.FLAG_UPDATE_CURRENT, null, user);
+ intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE, null,
+ user);
Notification notification = new Notification.Builder(mContext,
SystemNotificationChannels.DEVICE_ADMIN)
.setSmallIcon(R.drawable.ic_info_outline)
@@ -13545,8 +13549,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
final PackageManagerInternal pm = mInjector.getPackageManagerInternal();
final Intent intent = new Intent(DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG);
intent.setPackage(pm.getSystemUiServiceComponent().getPackageName());
- final PendingIntent pendingIntent = PendingIntent.getBroadcastAsUser(mContext, 0, intent, 0,
- UserHandle.CURRENT);
+ // Simple notification clicks are immutable
+ final PendingIntent pendingIntent = PendingIntent.getBroadcastAsUser(mContext, 0, intent,
+ PendingIntent.FLAG_IMMUTABLE, UserHandle.CURRENT);
Notification notification =
new Notification.Builder(mContext, SystemNotificationChannels.DEVICE_ADMIN)
.setSmallIcon(R.drawable.ic_info_outline)
@@ -14937,9 +14942,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
final AlarmManager am = mInjector.getAlarmManager();
final Intent intent = new Intent(ACTION_PROFILE_OFF_DEADLINE);
intent.setPackage(mContext.getPackageName());
+ // Broadcast alarms sent by system are immutable
final PendingIntent pi = mInjector.pendingIntentGetBroadcast(
mContext, REQUEST_PROFILE_OFF_DEADLINE, intent,
- PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
+ PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT
+ | PendingIntent.FLAG_IMMUTABLE);
if (alarmTime == 0) {
Slog.i(LOG_TAG, "Profile off deadline alarm is removed.");
@@ -15000,8 +15007,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
intent.setPackage(mContext.getPackageName());
intent.putExtra(Intent.EXTRA_USER_HANDLE, profileUserId);
+ // Simple notification action button clicks are immutable
final PendingIntent pendingIntent = mInjector.pendingIntentGetBroadcast(mContext,
- 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ 0 /* requestCode */, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
final String buttonText =
mContext.getString(R.string.personal_apps_suspended_turn_profile_on);
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportManager.java b/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportManager.java
index 46c9aab5bb97..543f3815454e 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportManager.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/RemoteBugreportManager.java
@@ -137,8 +137,9 @@ public class RemoteBugreportManager {
Slog.wtf(LOG_TAG, "Failed to resolve intent for remote bugreport dialog");
}
+ // Simple notification clicks are immutable
final PendingIntent pendingDialogIntent = PendingIntent.getActivityAsUser(mContext, type,
- dialogIntent, 0, null, UserHandle.CURRENT);
+ dialogIntent, PendingIntent.FLAG_IMMUTABLE, null, UserHandle.CURRENT);
final Notification.Builder builder =
new Notification.Builder(mContext, SystemNotificationChannels.DEVICE_ADMIN)
@@ -158,12 +159,14 @@ public class RemoteBugreportManager {
R.string.taking_remote_bugreport_notification_title))
.setProgress(0, 0, true);
} else if (type == NOTIFICATION_BUGREPORT_FINISHED_NOT_ACCEPTED) {
+ // Simple notification action button clicks are immutable
final PendingIntent pendingIntentAccept = PendingIntent.getBroadcast(mContext,
NOTIFICATION_ID, new Intent(ACTION_BUGREPORT_SHARING_ACCEPTED),
- PendingIntent.FLAG_CANCEL_CURRENT);
+ PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
+ // Simple notification action button clicks are immutable
final PendingIntent pendingIntentDecline = PendingIntent.getBroadcast(mContext,
NOTIFICATION_ID, new Intent(ACTION_BUGREPORT_SHARING_DECLINED),
- PendingIntent.FLAG_CANCEL_CURRENT);
+ PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
builder.addAction(new Notification.Action.Builder(null /* icon */, mContext.getString(
R.string.decline_remote_bugreport_action), pendingIntentDecline).build())
.addAction(new Notification.Action.Builder(null /* icon */, mContext.getString(
diff --git a/services/incremental/BinderIncrementalService.cpp b/services/incremental/BinderIncrementalService.cpp
index 2f8825b064ce..a31aac96eb48 100644
--- a/services/incremental/BinderIncrementalService.cpp
+++ b/services/incremental/BinderIncrementalService.cpp
@@ -323,6 +323,22 @@ binder::Status BinderIncrementalService::unregisterLoadingProgressListener(int32
return ok();
}
+binder::Status BinderIncrementalService::registerStorageHealthListener(
+ int32_t storageId,
+ const ::android::os::incremental::StorageHealthCheckParams& healthCheckParams,
+ const ::android::sp<IStorageHealthListener>& healthListener, bool* _aidl_return) {
+ *_aidl_return = mImpl.registerStorageHealthListener(storageId,
+ const_cast<StorageHealthCheckParams&&>(
+ healthCheckParams),
+ healthListener);
+ return ok();
+}
+
+binder::Status BinderIncrementalService::unregisterStorageHealthListener(int32_t storageId) {
+ mImpl.unregisterStorageHealthListener(storageId);
+ return ok();
+}
+
} // namespace android::os::incremental
jlong Incremental_IncrementalService_Start(JNIEnv* env) {
diff --git a/services/incremental/BinderIncrementalService.h b/services/incremental/BinderIncrementalService.h
index 0a89166f4868..8afa0f7bb117 100644
--- a/services/incremental/BinderIncrementalService.h
+++ b/services/incremental/BinderIncrementalService.h
@@ -89,6 +89,11 @@ public:
progressListener,
bool* _aidl_return) final;
binder::Status unregisterLoadingProgressListener(int32_t storageId, bool* _aidl_return) final;
+ binder::Status registerStorageHealthListener(
+ int32_t storageId,
+ const ::android::os::incremental::StorageHealthCheckParams& healthCheckParams,
+ const ::android::sp<IStorageHealthListener>& healthListener, bool* _aidl_return) final;
+ binder::Status unregisterStorageHealthListener(int32_t storageId) final;
private:
android::incremental::IncrementalService mImpl;
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp
index 5f145f33f628..599ac9344e73 100644
--- a/services/incremental/IncrementalService.cpp
+++ b/services/incremental/IncrementalService.cpp
@@ -1801,6 +1801,31 @@ bool IncrementalService::unregisterLoadingProgressListener(StorageId storage) {
return removeTimedJobs(*mProgressUpdateJobQueue, storage);
}
+bool IncrementalService::registerStorageHealthListener(
+ StorageId storage, StorageHealthCheckParams&& healthCheckParams,
+ const StorageHealthListener& healthListener) {
+ DataLoaderStubPtr dataLoaderStub;
+ {
+ std::unique_lock l(mLock);
+ const auto& ifs = getIfsLocked(storage);
+ if (!ifs) {
+ return false;
+ }
+ dataLoaderStub = ifs->dataLoaderStub;
+ if (!dataLoaderStub) {
+ return false;
+ }
+ }
+ dataLoaderStub->setHealthListener(std::move(healthCheckParams), &healthListener);
+ return true;
+}
+
+void IncrementalService::unregisterStorageHealthListener(StorageId storage) {
+ StorageHealthCheckParams invalidCheckParams;
+ invalidCheckParams.blockedTimeoutMs = -1;
+ registerStorageHealthListener(storage, std::move(invalidCheckParams), {});
+}
+
bool IncrementalService::perfLoggingEnabled() {
static const bool enabled = base::GetBoolProperty("incremental.perflogging", false);
return enabled;
@@ -2137,6 +2162,19 @@ binder::Status IncrementalService::DataLoaderStub::onStatusChanged(MountId mount
binder::Status IncrementalService::DataLoaderStub::reportStreamHealth(MountId mountId,
int newStatus) {
+ if (!isValid()) {
+ return binder::Status::
+ fromServiceSpecificError(-EINVAL,
+ "reportStreamHealth came to invalid DataLoaderStub");
+ }
+ if (id() != mountId) {
+ LOG(ERROR) << "Mount ID mismatch: expected " << id() << ", but got: " << mountId;
+ return binder::Status::fromServiceSpecificError(-EPERM, "Mount ID mismatch.");
+ }
+ {
+ std::lock_guard lock(mMutex);
+ mStreamStatus = newStatus;
+ }
return binder::Status::ok();
}
@@ -2153,6 +2191,33 @@ void IncrementalService::DataLoaderStub::onHealthStatus(StorageHealthListener he
}
}
+static int adjustHealthStatus(int healthStatus, int streamStatus) {
+ if (healthStatus == IStorageHealthListener::HEALTH_STATUS_OK) {
+ // everything is good; no need to change status
+ return healthStatus;
+ }
+ int newHeathStatus = healthStatus;
+ switch (streamStatus) {
+ case IDataLoaderStatusListener::STREAM_STORAGE_ERROR:
+ // storage is limited and storage not healthy
+ newHeathStatus = IStorageHealthListener::HEALTH_STATUS_UNHEALTHY_STORAGE;
+ break;
+ case IDataLoaderStatusListener::STREAM_INTEGRITY_ERROR:
+ // fall through
+ case IDataLoaderStatusListener::STREAM_SOURCE_ERROR:
+ // fall through
+ case IDataLoaderStatusListener::STREAM_TRANSPORT_ERROR:
+ if (healthStatus == IStorageHealthListener::HEALTH_STATUS_UNHEALTHY) {
+ newHeathStatus = IStorageHealthListener::HEALTH_STATUS_UNHEALTHY_TRANSPORT;
+ }
+ // pending/blocked status due to transportation issues is not regarded as unhealthy
+ break;
+ default:
+ break;
+ }
+ return newHeathStatus;
+}
+
void IncrementalService::DataLoaderStub::updateHealthStatus(bool baseline) {
LOG(DEBUG) << id() << ": updateHealthStatus" << (baseline ? " (baseline)" : "");
@@ -2232,6 +2297,8 @@ void IncrementalService::DataLoaderStub::updateHealthStatus(bool baseline) {
checkBackAfter = unhealthyMonitoring;
healthStatusToReport = IStorageHealthListener::HEALTH_STATUS_UNHEALTHY;
}
+ // Adjust health status based on stream status
+ healthStatusToReport = adjustHealthStatus(healthStatusToReport, mStreamStatus);
LOG(DEBUG) << id() << ": updateHealthStatus in " << double(checkBackAfter.count()) / 1000.0
<< "secs";
mService.addTimedJob(*mService.mTimedQueue, id(), checkBackAfter,
@@ -2321,6 +2388,18 @@ void IncrementalService::DataLoaderStub::unregisterFromPendingReads() {
mService.mLooper->wake();
}
+void IncrementalService::DataLoaderStub::setHealthListener(
+ StorageHealthCheckParams&& healthCheckParams, const StorageHealthListener* healthListener) {
+ std::lock_guard lock(mMutex);
+ mHealthCheckParams = std::move(healthCheckParams);
+ if (healthListener == nullptr) {
+ // reset listener and params
+ mHealthListener = {};
+ } else {
+ mHealthListener = *healthListener;
+ }
+}
+
void IncrementalService::DataLoaderStub::onDump(int fd) {
dprintf(fd, " dataLoader: {\n");
dprintf(fd, " currentStatus: %d\n", mCurrentStatus);
diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h
index 504c02a57b86..4c4b8bd1ba50 100644
--- a/services/incremental/IncrementalService.h
+++ b/services/incremental/IncrementalService.h
@@ -140,7 +140,10 @@ public:
bool registerLoadingProgressListener(StorageId storage,
const StorageLoadingProgressListener& progressListener);
bool unregisterLoadingProgressListener(StorageId storage);
-
+ bool registerStorageHealthListener(StorageId storage,
+ StorageHealthCheckParams&& healthCheckParams,
+ const StorageHealthListener& healthListener);
+ void unregisterStorageHealthListener(StorageId storage);
RawMetadata getMetadata(StorageId storage, std::string_view path) const;
RawMetadata getMetadata(StorageId storage, FileId node) const;
@@ -197,6 +200,8 @@ private:
MountId id() const { return mId.load(std::memory_order_relaxed); }
const content::pm::DataLoaderParamsParcel& params() const { return mParams; }
+ void setHealthListener(StorageHealthCheckParams&& healthCheckParams,
+ const StorageHealthListener* healthListener);
private:
binder::Status onStatusChanged(MountId mount, int newStatus) final;
@@ -251,6 +256,7 @@ private:
BootClockTsUs kernelTsUs;
} mHealthBase = {TimePoint::max(), kMaxBootClockTsUs};
StorageHealthCheckParams mHealthCheckParams;
+ int mStreamStatus = content::pm::IDataLoaderStatusListener::STREAM_HEALTHY;
};
using DataLoaderStubPtr = sp<DataLoaderStub>;
diff --git a/services/incremental/test/IncrementalServiceTest.cpp b/services/incremental/test/IncrementalServiceTest.cpp
index aec9fa1c3277..867312e0eb2f 100644
--- a/services/incremental/test/IncrementalServiceTest.cpp
+++ b/services/incremental/test/IncrementalServiceTest.cpp
@@ -177,6 +177,18 @@ public:
}
return binder::Status::ok();
}
+ binder::Status storageError(int32_t id) {
+ if (mListener) {
+ mListener->reportStreamHealth(id, IDataLoaderStatusListener::STREAM_STORAGE_ERROR);
+ }
+ return binder::Status::ok();
+ }
+ binder::Status transportError(int32_t id) {
+ if (mListener) {
+ mListener->reportStreamHealth(id, IDataLoaderStatusListener::STREAM_INTEGRITY_ERROR);
+ }
+ return binder::Status::ok();
+ }
int32_t setStorageParams(bool enableReadLogs) {
int32_t result = -1;
EXPECT_NE(mServiceConnector.get(), nullptr);
@@ -1221,4 +1233,83 @@ TEST_F(IncrementalServiceTest, testRegisterLoadingProgressListenerFailsToGetProg
EXPECT_CALL(*listenerMock, onStorageLoadingProgressChanged(_, _)).Times(0);
mIncrementalService->registerLoadingProgressListener(storageId, listener);
}
+
+TEST_F(IncrementalServiceTest, testRegisterStorageHealthListenerSuccess) {
+ mIncFs->openMountSuccess();
+ sp<NiceMock<MockStorageHealthListener>> listener{new NiceMock<MockStorageHealthListener>};
+ sp<NiceMock<MockStorageHealthListener>> newListener{new NiceMock<MockStorageHealthListener>};
+ NiceMock<MockStorageHealthListener>* newListenerMock = newListener.get();
+
+ TemporaryDir tempDir;
+ int storageId = mIncrementalService->createStorage(tempDir.path, std::move(mDataLoaderParcel),
+ IncrementalService::CreateOptions::CreateNew,
+ {}, StorageHealthCheckParams{}, listener);
+ ASSERT_GE(storageId, 0);
+ StorageHealthCheckParams newParams;
+ newParams.blockedTimeoutMs = 10000;
+ newParams.unhealthyTimeoutMs = 20000;
+ newParams.unhealthyMonitoringMs = 30000;
+ ASSERT_TRUE(mIncrementalService->registerStorageHealthListener(storageId, std::move(newParams),
+ newListener));
+
+ using MS = std::chrono::milliseconds;
+ using MCS = std::chrono::microseconds;
+
+ const auto blockedTimeout = MS(newParams.blockedTimeoutMs);
+ const auto unhealthyTimeout = MS(newParams.unhealthyTimeoutMs);
+
+ const uint64_t kFirstTimestampUs = 1000000000ll;
+ const uint64_t kBlockedTimestampUs =
+ kFirstTimestampUs - std::chrono::duration_cast<MCS>(blockedTimeout).count();
+ const uint64_t kUnhealthyTimestampUs =
+ kFirstTimestampUs - std::chrono::duration_cast<MCS>(unhealthyTimeout).count();
+
+ // test that old listener was not called
+ EXPECT_CALL(*listener.get(),
+ onHealthStatus(_, IStorageHealthListener::HEALTH_STATUS_READS_PENDING))
+ .Times(0);
+ EXPECT_CALL(*newListenerMock,
+ onHealthStatus(_, IStorageHealthListener::HEALTH_STATUS_READS_PENDING))
+ .Times(1);
+ EXPECT_CALL(*newListenerMock, onHealthStatus(_, IStorageHealthListener::HEALTH_STATUS_BLOCKED))
+ .Times(1);
+ EXPECT_CALL(*newListenerMock,
+ onHealthStatus(_, IStorageHealthListener::HEALTH_STATUS_UNHEALTHY_STORAGE))
+ .Times(1);
+ EXPECT_CALL(*newListenerMock,
+ onHealthStatus(_, IStorageHealthListener::HEALTH_STATUS_UNHEALTHY_TRANSPORT))
+ .Times(1);
+ mIncFs->waitForPendingReadsSuccess(kFirstTimestampUs);
+ mLooper->mCallback(-1, -1, mLooper->mCallbackData);
+
+ ASSERT_EQ(IStorageHealthListener::HEALTH_STATUS_READS_PENDING, newListener->mStatus);
+ ASSERT_EQ(storageId, newListener->mStorageId);
+
+ auto timedCallback = mTimedQueue->mWhat;
+ mTimedQueue->clearJob(storageId);
+
+ // test when health status is blocked with transport error
+ mDataLoader->transportError(storageId);
+ mIncFs->waitForPendingReadsSuccess(kBlockedTimestampUs);
+ timedCallback();
+ ASSERT_EQ(IStorageHealthListener::HEALTH_STATUS_BLOCKED, newListener->mStatus);
+ timedCallback = mTimedQueue->mWhat;
+ mTimedQueue->clearJob(storageId);
+
+ // test when health status is blocked with storage error
+ mDataLoader->storageError(storageId);
+ mIncFs->waitForPendingReadsSuccess(kBlockedTimestampUs);
+ timedCallback();
+ ASSERT_EQ(IStorageHealthListener::HEALTH_STATUS_UNHEALTHY_STORAGE, newListener->mStatus);
+ timedCallback = mTimedQueue->mWhat;
+ mTimedQueue->clearJob(storageId);
+
+ // test when health status is unhealthy with transport error
+ mDataLoader->transportError(storageId);
+ mIncFs->waitForPendingReadsSuccess(kUnhealthyTimestampUs);
+ timedCallback();
+ ASSERT_EQ(IStorageHealthListener::HEALTH_STATUS_UNHEALTHY_TRANSPORT, newListener->mStatus);
+ mTimedQueue->clearJob(storageId);
+}
+
} // namespace android::os::incremental
diff --git a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java
index ddd1f7568224..d14ed5a15cf9 100644
--- a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java
+++ b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java
@@ -29,6 +29,8 @@ import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
+import android.os.UpdateEngine;
+import android.os.UpdateEngineCallback;
import android.util.Log;
import com.android.server.IoThread;
@@ -198,6 +200,7 @@ public final class ProfcollectForwardingService extends SystemService {
// Event observers
private void registerObservers() {
registerAppLaunchObserver();
+ registerOTAObserver();
}
private final AppLaunchObserver mAppLaunchObserver = new AppLaunchObserver();
@@ -261,4 +264,33 @@ public final class ProfcollectForwardingService extends SystemService {
// Ignored
}
}
+
+ private void registerOTAObserver() {
+ UpdateEngine updateEngine = new UpdateEngine();
+ updateEngine.bind(new UpdateEngineCallback() {
+ @Override
+ public void onStatusUpdate(int status, float percent) {
+ if (status == UpdateEngine.UpdateStatusConstants.UPDATED_NEED_REBOOT) {
+ packProfileReport();
+ }
+ }
+
+ @Override
+ public void onPayloadApplicationComplete(int errorCode) {
+ // Ignored
+ }
+ });
+ }
+
+ private void packProfileReport() {
+ if (mIProfcollect == null) {
+ return;
+ }
+
+ try {
+ mIProfcollect.CreateProfileReport();
+ } catch (RemoteException e) {
+ Log.e(LOG_TAG, e.getMessage());
+ }
+ }
}
diff --git a/services/tests/PackageManagerComponentOverrideTests/src/com/android/server/pm/test/override/PackageManagerComponentLabelIconOverrideTest.kt b/services/tests/PackageManagerComponentOverrideTests/src/com/android/server/pm/test/override/PackageManagerComponentLabelIconOverrideTest.kt
index 09552082e4af..27b07c76fb0d 100644
--- a/services/tests/PackageManagerComponentOverrideTests/src/com/android/server/pm/test/override/PackageManagerComponentLabelIconOverrideTest.kt
+++ b/services/tests/PackageManagerComponentOverrideTests/src/com/android/server/pm/test/override/PackageManagerComponentLabelIconOverrideTest.kt
@@ -45,6 +45,7 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
+import org.mockito.Mockito
import org.mockito.Mockito.any
import org.mockito.Mockito.anyBoolean
import org.mockito.Mockito.anyInt
@@ -341,7 +342,8 @@ class PackageManagerComponentLabelIconOverrideTest {
whenever(this.userManagerService) { mockUserManagerService }
whenever(this.permissionManagerServiceInternal) { mockPermissionManagerService }
whenever(this.settings) { mockSettings }
- whenever(this.activityTaskManagerInternal) { mockActivityTaskManager }
+ whenever(this.getLocalService(ActivityTaskManagerInternal::class.java)) {
+ mockActivityTaskManager}
whenever(this.appsFilter) { mockAppsFilter }
whenever(this.context) { mockContext }
}
diff --git a/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java b/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
index 6f4ff35ba0df..04de6ca192ef 100644
--- a/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
@@ -153,7 +153,7 @@ public class UserControllerTest {
doNothing().when(mInjector).startHomeActivity(anyInt(), anyString());
doReturn(false).when(mInjector).stackSupervisorSwitchUser(anyInt(), any());
doNothing().when(mInjector).stackSupervisorResumeFocusedStackTopActivity();
- doNothing().when(mInjector).systemServiceManagerCleanupUser(anyInt());
+ doNothing().when(mInjector).systemServiceManagerOnUserStopped(anyInt());
doNothing().when(mInjector).activityManagerForceStopPackage(anyInt(), anyString());
doNothing().when(mInjector).activityManagerOnUserStopped(anyInt());
doNothing().when(mInjector).clearBroadcastQueueForUser(anyInt());
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java
new file mode 100644
index 000000000000..c7331e19e698
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2020 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.hdmi;
+
+import static com.android.server.hdmi.HdmiCecMessageValidator.ERROR_DESTINATION;
+import static com.android.server.hdmi.HdmiCecMessageValidator.ERROR_PARAMETER_SHORT;
+import static com.android.server.hdmi.HdmiCecMessageValidator.ERROR_SOURCE;
+import static com.android.server.hdmi.HdmiCecMessageValidator.OK;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+
+import com.google.common.truth.IntegerSubject;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Tests for {@link com.android.server.hdmi.HdmiCecMessageValidator} class. */
+@SmallTest
+@Presubmit
+@RunWith(JUnit4.class)
+public class HdmiCecMessageValidatorTest {
+
+ private HdmiCecMessageValidator mHdmiCecMessageValidator;
+
+ @Before
+ public void setUp() throws Exception {
+ HdmiControlService mHdmiControlService = new HdmiControlService(
+ InstrumentationRegistry.getTargetContext());
+
+ mHdmiCecMessageValidator = new HdmiCecMessageValidator(mHdmiControlService);
+ }
+
+ @Test
+ public void isValid_giveDevicePowerStatus() {
+ assertMessageValidity("04:8F").isEqualTo(OK);
+
+ assertMessageValidity("0F:8F").isEqualTo(ERROR_DESTINATION);
+ assertMessageValidity("F4:8F").isEqualTo(ERROR_SOURCE);
+ }
+
+ @Test
+ public void isValid_reportPowerStatus() {
+ assertMessageValidity("04:90:00").isEqualTo(OK);
+
+ assertMessageValidity("0F:90:00").isEqualTo(ERROR_DESTINATION);
+ assertMessageValidity("F0:90").isEqualTo(ERROR_SOURCE);
+ assertMessageValidity("04:90").isEqualTo(ERROR_PARAMETER_SHORT);
+ }
+
+ private IntegerSubject assertMessageValidity(String message) {
+ return assertThat(mHdmiCecMessageValidator.isValid(buildMessage(message)));
+ }
+
+ /**
+ * Build a CEC message from a hex byte string with bytes separated by {@code :}.
+ *
+ * <p>This format is used by both cec-client and www.cec-o-matic.com
+ */
+ private static HdmiCecMessage buildMessage(String message) {
+ String[] parts = message.split(":");
+ int src = Integer.parseInt(parts[0].substring(0, 1), 16);
+ int dest = Integer.parseInt(parts[0].substring(1, 2), 16);
+ int opcode = Integer.parseInt(parts[1], 16);
+ byte[] params = new byte[parts.length - 2];
+ for (int i = 0; i < params.length; i++) {
+ params[i] = (byte) Integer.parseInt(parts[i + 2], 16);
+ }
+ return new HdmiCecMessage(src, dest, opcode, params);
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java b/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java
index c4c2f68e8219..86758f18a407 100644
--- a/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/IncrementalStatesTest.java
@@ -20,7 +20,6 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import android.content.pm.IDataLoaderStatusListener;
import android.content.pm.PackageManager;
import android.os.ConditionVariable;
import android.os.incremental.IStorageHealthListener;
@@ -113,71 +112,12 @@ public class IncrementalStatesTest {
}
/**
- * Test that the package is still startable when Incremental Storage is at blocked status.
+ * Test that the package becomes unstartable when health status indicate storage issues.
*/
@Test
public void testStartableTransition_IncrementalStorageBlocked() {
mIncrementalStates.onStorageHealthStatusChanged(
- IStorageHealthListener.HEALTH_STATUS_BLOCKED);
- // Test that package is still startable
- assertFalse(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
- assertTrue(mIncrementalStates.isStartable());
- }
-
- /**
- * Test that the package is still startable when Data Loader has unknown transportation issues.
- */
- @Test
- public void testStartableTransition_DataLoaderTransportError() {
- mIncrementalStates.onStreamStatusChanged(
- IDataLoaderStatusListener.STREAM_TRANSPORT_ERROR);
- // Test that package is still startable
- assertFalse(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
- assertTrue(mIncrementalStates.isStartable());
- }
-
- /**
- * Test that the package becomes unstartable when Data Loader has data integrity issues.
- */
- @Test
- public void testStartableTransition_DataLoaderIntegrityError() {
- mIncrementalStates.onStreamStatusChanged(
- IDataLoaderStatusListener.STREAM_INTEGRITY_ERROR);
- // Test that package is now unstartable
- assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
- assertFalse(mIncrementalStates.isStartable());
- assertEquals(PackageManager.UNSTARTABLE_REASON_CONNECTION_ERROR,
- mUnstartableReason.get());
- }
-
- /**
- * Test that the package becomes unstartable when Data Loader has data source issues.
- */
- @Test
- public void testStartableTransition_DataLoaderSourceError() {
- mIncrementalStates.onStreamStatusChanged(
- IDataLoaderStatusListener.STREAM_SOURCE_ERROR);
- // Test that package is now unstartable
- assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
- assertFalse(mIncrementalStates.isStartable());
- assertEquals(PackageManager.UNSTARTABLE_REASON_CONNECTION_ERROR,
- mUnstartableReason.get());
- }
-
- /**
- * Test that the package becomes unstartable when Data Loader hits limited storage while
- * Incremental storage has a pending reads.
- */
- @Test
- public void testStartableTransition_DataLoaderStorageErrorWhenIncrementalStoragePending()
- throws InterruptedException {
- mIncrementalStates.onStreamStatusChanged(
- IDataLoaderStatusListener.STREAM_STORAGE_ERROR);
- // Test that package is still startable
- assertFalse(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
- assertTrue(mIncrementalStates.isStartable());
- mIncrementalStates.onStorageHealthStatusChanged(
- IStorageHealthListener.HEALTH_STATUS_READS_PENDING);
+ IStorageHealthListener.HEALTH_STATUS_UNHEALTHY_STORAGE);
// Test that package is now unstartable
assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
assertFalse(mIncrementalStates.isStartable());
@@ -186,23 +126,16 @@ public class IncrementalStatesTest {
}
/**
- * Test that the package becomes unstartable when Data Loader hits limited storage while
- * Incremental storage is at blocked status.
+ * Test that the package becomes unstartable when health status indicates transport issues.
*/
@Test
- public void testStartableTransition_DataLoaderStorageErrorWhenIncrementalStorageBlocked()
- throws InterruptedException {
- mIncrementalStates.onStreamStatusChanged(
- IDataLoaderStatusListener.STREAM_STORAGE_ERROR);
- // Test that package is still startable
- assertFalse(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
- assertTrue(mIncrementalStates.isStartable());
+ public void testStartableTransition_DataLoaderIntegrityError() {
mIncrementalStates.onStorageHealthStatusChanged(
- IStorageHealthListener.HEALTH_STATUS_BLOCKED);
+ IStorageHealthListener.HEALTH_STATUS_UNHEALTHY_TRANSPORT);
// Test that package is now unstartable
assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
assertFalse(mIncrementalStates.isStartable());
- assertEquals(PackageManager.UNSTARTABLE_REASON_INSUFFICIENT_STORAGE,
+ assertEquals(PackageManager.UNSTARTABLE_REASON_CONNECTION_ERROR,
mUnstartableReason.get());
}
@@ -227,42 +160,18 @@ public class IncrementalStatesTest {
}
/**
- * Test that the package becomes unstartable when Data Loader has data integrity issue, and it
- * becomes startable again when Data Loader is healthy again.
+ * Test that the package becomes unstartable when health status indicates transportation issue,
+ * and it becomes startable again when health status is ok again.
*/
@Test
public void testStartableTransition_DataLoaderUnhealthyBackToHealthy()
throws InterruptedException {
- mIncrementalStates.onStreamStatusChanged(IDataLoaderStatusListener.STREAM_INTEGRITY_ERROR);
- // Test that package is unstartable
- assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
- assertFalse(mIncrementalStates.isStartable());
-
- mIncrementalStates.onStreamStatusChanged(IDataLoaderStatusListener.STREAM_HEALTHY);
- // Test that package is now startable
- assertTrue(mStartableCalled.block(WAIT_TIMEOUT_MILLIS));
- assertTrue(mIncrementalStates.isStartable());
- }
-
- /**
- * Test that the package becomes unstartable when both Incremental Storage and Data Loader
- * are unhealthy, and it becomes startable again when both Incremental Storage and Data Loader
- * are healthy again.
- */
- @Test
- public void testStartableTransition_DataLoaderAndIncrementalStorageUnhealthyBackToHealthy()
- throws InterruptedException {
mIncrementalStates.onStorageHealthStatusChanged(
- IStorageHealthListener.HEALTH_STATUS_UNHEALTHY);
- mIncrementalStates.onStreamStatusChanged(IDataLoaderStatusListener.STREAM_INTEGRITY_ERROR);
+ IStorageHealthListener.HEALTH_STATUS_UNHEALTHY_TRANSPORT);
// Test that package is unstartable
assertTrue(mUnstartableCalled.block(WAIT_TIMEOUT_MILLIS));
assertFalse(mIncrementalStates.isStartable());
- mIncrementalStates.onStreamStatusChanged(IDataLoaderStatusListener.STREAM_HEALTHY);
- // Test that package is still unstartable
- assertFalse(mStartableCalled.block(WAIT_TIMEOUT_MILLIS));
- assertFalse(mIncrementalStates.isStartable());
mIncrementalStates.onStorageHealthStatusChanged(IStorageHealthListener.HEALTH_STATUS_OK);
// Test that package is now startable
assertTrue(mStartableCalled.block(WAIT_TIMEOUT_MILLIS));
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
index 75799562abfa..b190339b129b 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
@@ -220,7 +220,7 @@ public final class UserManagerTest {
asHandle(currentUser));
try {
assertThat(mUserManager.removeUserOrSetEphemeral(user1.id)).isEqualTo(
- UserManagerService.REMOVE_RESULT_ERROR);
+ UserManager.REMOVE_RESULT_ERROR);
} finally {
mUserManager.setUserRestriction(UserManager.DISALLOW_REMOVE_USER, /* value= */ false,
asHandle(currentUser));
@@ -234,7 +234,7 @@ public final class UserManagerTest {
@Test
public void testRemoveUserOrSetEphemeral_systemUserReturnsError() throws Exception {
assertThat(mUserManager.removeUserOrSetEphemeral(UserHandle.USER_SYSTEM)).isEqualTo(
- UserManagerService.REMOVE_RESULT_ERROR);
+ UserManager.REMOVE_RESULT_ERROR);
assertThat(hasUser(UserHandle.USER_SYSTEM)).isTrue();
}
@@ -244,7 +244,7 @@ public final class UserManagerTest {
public void testRemoveUserOrSetEphemeral_invalidUserReturnsError() throws Exception {
assertThat(hasUser(Integer.MAX_VALUE)).isFalse();
assertThat(mUserManager.removeUserOrSetEphemeral(Integer.MAX_VALUE)).isEqualTo(
- UserManagerService.REMOVE_RESULT_ERROR);
+ UserManager.REMOVE_RESULT_ERROR);
}
@MediumTest
@@ -256,7 +256,7 @@ public final class UserManagerTest {
switchUser(user1.id, null, /* ignoreHandle= */ true);
assertThat(mUserManager.removeUserOrSetEphemeral(user1.id)).isEqualTo(
- UserManagerService.REMOVE_RESULT_SET_EPHEMERAL);
+ UserManager.REMOVE_RESULT_SET_EPHEMERAL);
assertThat(hasUser(user1.id)).isTrue();
assertThat(getUser(user1.id).isEphemeral()).isTrue();
@@ -277,7 +277,7 @@ public final class UserManagerTest {
final UserInfo user1 = createUser("User 1", /* flags= */ 0);
synchronized (mUserRemoveLock) {
assertThat(mUserManager.removeUserOrSetEphemeral(user1.id)).isEqualTo(
- UserManagerService.REMOVE_RESULT_REMOVED);
+ UserManager.REMOVE_RESULT_REMOVED);
waitForUserRemovalLocked(user1.id);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
index caf8a720e26c..3dc258c51954 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
@@ -70,6 +70,8 @@ import android.content.pm.ActivityInfo;
import android.os.Binder;
import android.os.UserHandle;
import android.platform.test.annotations.Presubmit;
+import android.view.SurfaceControl;
+import android.window.ITaskOrganizer;
import androidx.test.filters.SmallTest;
@@ -240,6 +242,24 @@ public class ActivityStackTests extends WindowTestsBase {
@Test
public void testRemoveOrganizedTask_UpdateStackReference() {
+ ITaskOrganizer listener = new ITaskOrganizer.Stub() {
+ @Override
+ public void onTaskAppeared(
+ ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) { }
+
+ @Override
+ public void onTaskVanished(ActivityManager.RunningTaskInfo container) { }
+
+ @Override
+ public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
+ }
+
+ @Override
+ public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo taskInfo) {
+ }
+ };
+ mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener);
+
final Task rootHomeTask = mDefaultTaskDisplayArea.getRootHomeTask();
final ActivityRecord homeActivity = new ActivityBuilder(mAtm)
.setStack(rootHomeTask)
@@ -247,7 +267,7 @@ public class ActivityStackTests extends WindowTestsBase {
.build();
final Task secondaryStack = (Task) WindowContainer.fromBinder(
mAtm.mTaskOrganizerController.createRootTask(rootHomeTask.getDisplayId(),
- WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token.asBinder());
+ WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo().token.asBinder());
rootHomeTask.reparent(secondaryStack, POSITION_TOP);
assertEquals(secondaryStack, rootHomeTask.getParent());
diff --git a/services/tests/wmtests/src/com/android/server/wm/TestIWindow.java b/services/tests/wmtests/src/com/android/server/wm/TestIWindow.java
index ea1223312cb2..db1c12f525f3 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TestIWindow.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TestIWindow.java
@@ -22,7 +22,7 @@ import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.util.MergedConfiguration;
import android.view.DragEvent;
-import android.view.IScrollCaptureController;
+import android.view.IScrollCaptureCallbacks;
import android.view.IWindow;
import android.view.InsetsSourceControl;
import android.view.InsetsState;
@@ -107,7 +107,7 @@ public class TestIWindow extends IWindow.Stub {
}
@Override
- public void requestScrollCapture(IScrollCaptureController controller) throws RemoteException {
+ public void requestScrollCapture(IScrollCaptureCallbacks callbacks) throws RemoteException {
}
@Override
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java
index aac83974eb51..bd586a5f6c76 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java
@@ -479,16 +479,33 @@ public class WindowOrganizerTests extends WindowTestsBase {
@Test
public void testCreateDeleteRootTasks() {
+ ITaskOrganizer listener = new ITaskOrganizer.Stub() {
+ @Override
+ public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) { }
+
+ @Override
+ public void onTaskVanished(RunningTaskInfo container) { }
+
+ @Override
+ public void onTaskInfoChanged(RunningTaskInfo info) {
+ }
+
+ @Override
+ public void onBackPressedOnTaskRoot(RunningTaskInfo taskInfo) {
+ }
+ };
+ mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener);
+
RunningTaskInfo info1 = mWm.mAtmService.mTaskOrganizerController.createRootTask(
Display.DEFAULT_DISPLAY,
- WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+ WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).getTaskInfo();
assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY,
info1.configuration.windowConfiguration.getWindowingMode());
assertEquals(ACTIVITY_TYPE_UNDEFINED, info1.topActivityType);
RunningTaskInfo info2 = mWm.mAtmService.mTaskOrganizerController.createRootTask(
Display.DEFAULT_DISPLAY,
- WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+ WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo();
assertEquals(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY,
info2.configuration.windowConfiguration.getWindowingMode());
assertEquals(ACTIVITY_TYPE_UNDEFINED, info2.topActivityType);
@@ -522,7 +539,7 @@ public class WindowOrganizerTests extends WindowTestsBase {
};
mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener);
RunningTaskInfo info1 = mWm.mAtmService.mTaskOrganizerController.createRootTask(
- mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+ mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo();
final Task stack = createTaskStackOnDisplay(
WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, mDisplayContent);
@@ -580,7 +597,7 @@ public class WindowOrganizerTests extends WindowTestsBase {
};
mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener);
RunningTaskInfo info1 = mWm.mAtmService.mTaskOrganizerController.createRootTask(
- mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+ mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo();
lastReportedTiles.clear();
called[0] = false;
@@ -641,9 +658,9 @@ public class WindowOrganizerTests extends WindowTestsBase {
};
mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener);
RunningTaskInfo info1 = mWm.mAtmService.mTaskOrganizerController.createRootTask(
- mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+ mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).getTaskInfo();
RunningTaskInfo info2 = mWm.mAtmService.mTaskOrganizerController.createRootTask(
- mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+ mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo();
final int initialRootTaskCount = mWm.mAtmService.mTaskOrganizerController.getRootTasks(
mDisplayContent.mDisplayId, null /* activityTypes */).size();
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
index 6237be0f4b26..924b286a4f8e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
@@ -1006,10 +1006,10 @@ class WindowTestsBase extends SystemServiceTestsBase {
mDisplayId = displayId;
mService.mTaskOrganizerController.registerTaskOrganizer(this);
WindowContainerToken primary = mService.mTaskOrganizerController.createRootTask(
- displayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).token;
+ displayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).getTaskInfo().token;
mPrimary = WindowContainer.fromBinder(primary.asBinder()).asTask();
WindowContainerToken secondary = mService.mTaskOrganizerController.createRootTask(
- displayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token;
+ displayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo().token;
mSecondary = WindowContainer.fromBinder(secondary.asBinder()).asTask();
}
TestSplitOrganizer(ActivityTaskManagerService service) {
diff --git a/services/usb/java/com/android/server/usb/MtpNotificationManager.java b/services/usb/java/com/android/server/usb/MtpNotificationManager.java
index 39f2f296a305..8845f118f3a8 100644
--- a/services/usb/java/com/android/server/usb/MtpNotificationManager.java
+++ b/services/usb/java/com/android/server/usb/MtpNotificationManager.java
@@ -91,11 +91,12 @@ class MtpNotificationManager {
intent.putExtra(UsbManager.EXTRA_DEVICE, device);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND);
+ // Simple notification clicks are immutable
final PendingIntent openIntent = PendingIntent.getBroadcastAsUser(
mContext,
device.getDeviceId(),
intent,
- PendingIntent.FLAG_UPDATE_CURRENT,
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE,
UserHandle.SYSTEM);
builder.setContentIntent(openIntent);
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 2269e1d070b1..58859e095554 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -1206,8 +1206,9 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
Intent intent = Intent.makeRestartActivityTask(
new ComponentName("com.android.settings",
"com.android.settings.Settings$UsbDetailsActivity"));
+ // Simple notification clicks are immutable
pi = PendingIntent.getActivityAsUser(mContext, 0,
- intent, 0, null, UserHandle.CURRENT);
+ intent, PendingIntent.FLAG_IMMUTABLE, null, UserHandle.CURRENT);
channel = SystemNotificationChannels.USB;
} else {
final Intent intent = new Intent();
@@ -1217,7 +1218,9 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
"help_url_audio_accessory_not_supported");
if (mContext.getPackageManager().resolveActivity(intent, 0) != null) {
- pi = PendingIntent.getActivity(mContext, 0, intent, 0);
+ // Simple notification clicks are immutable
+ pi = PendingIntent.getActivity(mContext, 0, intent,
+ PendingIntent.FLAG_IMMUTABLE);
} else {
pi = null;
}
diff --git a/services/usb/java/com/android/server/usb/UsbPortManager.java b/services/usb/java/com/android/server/usb/UsbPortManager.java
index ec7d4bd0d8c0..ca18c57d6f4b 100644
--- a/services/usb/java/com/android/server/usb/UsbPortManager.java
+++ b/services/usb/java/com/android/server/usb/UsbPortManager.java
@@ -230,8 +230,9 @@ public class UsbPortManager {
com.android.internal.R.string.config_usbContaminantActivity)));
intent.putExtra(UsbManager.EXTRA_PORT, ParcelableUsbPort.of(currentPortInfo.mUsbPort));
+ // Simple notification clicks are immutable
PendingIntent pi = PendingIntent.getActivityAsUser(mContext, 0,
- intent, 0, null, UserHandle.CURRENT);
+ intent, PendingIntent.FLAG_IMMUTABLE, null, UserHandle.CURRENT);
Notification.Builder builder = new Notification.Builder(mContext, channel)
.setOngoing(true)
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index 9f16543c410e..a85eb53605d6 100755
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -1683,7 +1683,6 @@ public final class Call {
* @hide
*/
@SystemApi
- @TestApi
public void enterBackgroundAudioProcessing() {
if (mState != STATE_ACTIVE && mState != STATE_RINGING) {
throw new IllegalStateException("Call must be active or ringing");
@@ -1704,7 +1703,6 @@ public final class Call {
* @hide
*/
@SystemApi
- @TestApi
public void exitBackgroundAudioProcessing(boolean shouldRing) {
if (mState != STATE_AUDIO_PROCESSING) {
throw new IllegalStateException("Call must in the audio processing state");
diff --git a/telecomm/java/android/telecom/CallScreeningService.java b/telecomm/java/android/telecom/CallScreeningService.java
index 49f183151e27..7988b036ccd3 100644
--- a/telecomm/java/android/telecom/CallScreeningService.java
+++ b/telecomm/java/android/telecom/CallScreeningService.java
@@ -21,7 +21,6 @@ import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
@@ -323,7 +322,6 @@ public abstract class CallScreeningService extends Service {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.CAPTURE_AUDIO_OUTPUT)
public @NonNull Builder setShouldScreenCallViaAudioProcessing(
boolean shouldScreenCallViaAudioProcessing) {
diff --git a/telecomm/java/android/telecom/Conference.java b/telecomm/java/android/telecom/Conference.java
index 39c3ff9e8839..dc2fb948fdbe 100644
--- a/telecomm/java/android/telecom/Conference.java
+++ b/telecomm/java/android/telecom/Conference.java
@@ -24,7 +24,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
@@ -137,7 +136,6 @@ public abstract class Conference extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public final @NonNull String getTelecomCallId() {
return mTelecomCallId;
}
@@ -609,7 +607,6 @@ public abstract class Conference extends Conferenceable {
* @return The primary connection.
* @hide
*/
- @TestApi
@SystemApi
public Connection getPrimaryConnection() {
if (mUnmodifiableChildConnections == null || mUnmodifiableChildConnections.isEmpty()) {
@@ -1012,7 +1009,6 @@ public abstract class Conference extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(MODIFY_PHONE_STATE)
public void setConferenceState(boolean isConference) {
mIsMultiparty = isConference;
@@ -1067,7 +1063,6 @@ public abstract class Conference extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(MODIFY_PHONE_STATE)
public final void setAddress(@NonNull Uri address,
@TelecomManager.Presentation int presentation) {
@@ -1155,7 +1150,6 @@ public abstract class Conference extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public final void setCallerDisplayName(@NonNull String callerDisplayName,
@TelecomManager.Presentation int presentation) {
Log.d(this, "setCallerDisplayName %s", callerDisplayName);
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index 00b711643fe6..bbf34df8fe84 100755..100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -25,7 +25,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Notification;
import android.bluetooth.BluetoothDevice;
import android.compat.annotation.UnsupportedAppUsage;
@@ -307,7 +306,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public static final int CAPABILITY_SPEED_UP_MT_AUDIO = 0x00040000;
/**
@@ -345,7 +343,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 0x00200000;
/**
@@ -417,7 +414,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 1<<0;
/**
@@ -428,7 +424,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROPERTY_GENERIC_CONFERENCE = 1<<1;
/**
@@ -480,7 +475,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROPERTY_IS_DOWNGRADED_CONFERENCE = 1<<6;
/**
@@ -524,7 +518,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public static final int PROPERTY_REMOTELY_HOSTED = 1 << 11;
/**
@@ -702,7 +695,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public static final String EXTRA_DISABLE_ADD_CALL =
"android.telecom.extra.DISABLE_ADD_CALL";
@@ -2054,7 +2046,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public final @Nullable String getTelecomCallId() {
return mTelecomCallId;
}
@@ -2171,7 +2162,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public final @IntRange(from = 0) long getConnectTimeMillis() {
return mConnectTimeMillis;
}
@@ -2196,7 +2186,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public final @ElapsedRealtimeLong long getConnectionStartElapsedRealtimeMillis() {
return mConnectElapsedTimeMillis;
}
@@ -2279,7 +2268,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public void setTelecomCallId(@NonNull String callId) {
mTelecomCallId = callId;
}
@@ -2628,7 +2616,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(MODIFY_PHONE_STATE)
public final void setConnectTimeMillis(@IntRange(from = 0) long connectTimeMillis) {
mConnectTimeMillis = connectTimeMillis;
@@ -2651,7 +2638,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(MODIFY_PHONE_STATE)
public final void setConnectionStartElapsedRealtimeMillis(
@ElapsedRealtimeLong long connectElapsedTimeMillis) {
@@ -2722,7 +2708,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public final void resetConnectionTime() {
for (Listener l : mListeners) {
l.onConnectionTimeReset(this);
@@ -3505,7 +3490,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public void setPhoneAccountHandle(@NonNull PhoneAccountHandle phoneAccountHandle) {
if (mPhoneAccountHandle != phoneAccountHandle) {
mPhoneAccountHandle = phoneAccountHandle;
@@ -3524,7 +3508,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public @Nullable PhoneAccountHandle getPhoneAccountHandle() {
return mPhoneAccountHandle;
}
@@ -3590,7 +3573,6 @@ public abstract class Connection extends Conferenceable {
* @hide
*/
@SystemApi
- @TestApi
public void setCallDirection(@Call.Details.CallDirection int callDirection) {
mCallDirection = callDirection;
}
diff --git a/telecomm/java/android/telecom/ConnectionRequest.java b/telecomm/java/android/telecom/ConnectionRequest.java
index 6d7ceca0a2cd..b73ef9b794e4 100644
--- a/telecomm/java/android/telecom/ConnectionRequest.java
+++ b/telecomm/java/android/telecom/ConnectionRequest.java
@@ -327,7 +327,6 @@ public final class ConnectionRequest implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public @Nullable String getTelecomCallId() {
return mTelecomCallId;
}
diff --git a/telecomm/java/android/telecom/PhoneAccount.java b/telecomm/java/android/telecom/PhoneAccount.java
index 866e17148a1a..5024ae27ee49 100644
--- a/telecomm/java/android/telecom/PhoneAccount.java
+++ b/telecomm/java/android/telecom/PhoneAccount.java
@@ -21,7 +21,6 @@ import static android.Manifest.permission.MODIFY_PHONE_STATE;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.Intent;
import android.graphics.drawable.Icon;
import android.net.Uri;
@@ -635,7 +634,6 @@ public final class PhoneAccount implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(MODIFY_PHONE_STATE)
public @NonNull Builder setGroupId(@NonNull String groupId) {
if (groupId != null) {
diff --git a/telecomm/java/android/telecom/PhoneAccountSuggestionService.java b/telecomm/java/android/telecom/PhoneAccountSuggestionService.java
index ba3822cb9951..8a91b9e9ee81 100644
--- a/telecomm/java/android/telecom/PhoneAccountSuggestionService.java
+++ b/telecomm/java/android/telecom/PhoneAccountSuggestionService.java
@@ -19,7 +19,6 @@ package android.telecom;
import android.annotation.NonNull;
import android.annotation.SdkConstant;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
@@ -57,7 +56,6 @@ import java.util.Map;
* @hide
*/
@SystemApi
-@TestApi
public class PhoneAccountSuggestionService extends Service {
/**
* The {@link Intent} that must be declared in the {@code intent-filter} element of the
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index f1deec60aca7..82da4475c1b9 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -25,7 +25,6 @@ import android.annotation.SuppressAutoDoc;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
@@ -693,7 +692,6 @@ public class TelecomManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int TTY_MODE_OFF = 0;
@@ -703,7 +701,6 @@ public class TelecomManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int TTY_MODE_FULL = 1;
@@ -714,7 +711,6 @@ public class TelecomManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int TTY_MODE_HCO = 2;
@@ -725,7 +721,6 @@ public class TelecomManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int TTY_MODE_VCO = 3;
@@ -736,7 +731,6 @@ public class TelecomManager {
* TTY mode.
* @hide
*/
- @TestApi
@SystemApi
public static final String ACTION_CURRENT_TTY_MODE_CHANGED =
"android.telecom.action.CURRENT_TTY_MODE_CHANGED";
@@ -759,7 +753,6 @@ public class TelecomManager {
* plugged into the device.
* @hide
*/
- @TestApi
@SystemApi
public static final String EXTRA_CURRENT_TTY_MODE =
"android.telecom.extra.CURRENT_TTY_MODE";
@@ -771,7 +764,6 @@ public class TelecomManager {
* preferred TTY mode.
* @hide
*/
- @TestApi
@SystemApi
public static final String ACTION_TTY_PREFERRED_MODE_CHANGED =
"android.telecom.action.TTY_PREFERRED_MODE_CHANGED";
@@ -790,7 +782,6 @@ public class TelecomManager {
* </ul>
* @hide
*/
- @TestApi
@SystemApi
public static final String EXTRA_TTY_PREFERRED_MODE =
"android.telecom.extra.TTY_PREFERRED_MODE";
@@ -1045,7 +1036,6 @@ public class TelecomManager {
* @hide
*/
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
- @TestApi
@SystemApi
public void setUserSelectedOutgoingPhoneAccount(@Nullable PhoneAccountHandle accountHandle) {
try {
@@ -1219,7 +1209,6 @@ public class TelecomManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_PRIVILEGED_PHONE_STATE)
public @NonNull List<PhoneAccountHandle> getCallCapablePhoneAccounts(
boolean includeDisabledAccounts) {
@@ -1453,7 +1442,6 @@ public class TelecomManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_PRIVILEGED_PHONE_STATE)
public @Nullable String getDefaultDialerPackage(@NonNull UserHandle userHandle) {
try {
@@ -1677,7 +1665,6 @@ public class TelecomManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(anyOf = {
READ_PRIVILEGED_PHONE_STATE,
android.Manifest.permission.READ_PHONE_STATE
@@ -1835,7 +1822,6 @@ public class TelecomManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(READ_PRIVILEGED_PHONE_STATE)
public @TtyMode int getCurrentTtyMode() {
try {
@@ -2249,7 +2235,6 @@ public class TelecomManager {
* @hide
*/
@SystemApi
- @TestApi
@NonNull
public Intent createLaunchEmergencyDialerIntent(@Nullable String number) {
ITelecomService service = getTelecomService();
@@ -2402,7 +2387,6 @@ public class TelecomManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
public boolean isInEmergencyCall() {
try {
diff --git a/telephony/java/android/telephony/AccessNetworkConstants.java b/telephony/java/android/telephony/AccessNetworkConstants.java
index 39a754389254..d01297147fdb 100644
--- a/telephony/java/android/telephony/AccessNetworkConstants.java
+++ b/telephony/java/android/telephony/AccessNetworkConstants.java
@@ -18,7 +18,6 @@ package android.telephony;
import android.annotation.IntDef;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.hardware.radio.V1_1.GeranBands;
import android.hardware.radio.V1_5.AccessNetwork;
import android.hardware.radio.V1_5.EutranBands;
@@ -49,7 +48,6 @@ public final class AccessNetworkConstants {
* @hide
*/
@SystemApi
- @TestApi
public static final int TRANSPORT_TYPE_INVALID = -1;
/**
@@ -438,7 +436,6 @@ public final class AccessNetworkConstants {
* @hide
*/
@SystemApi
- @TestApi
public static final int FREQUENCY_RANGE_GROUP_UNKNOWN = 0;
/**
@@ -447,7 +444,6 @@ public final class AccessNetworkConstants {
* @hide
*/
@SystemApi
- @TestApi
public static final int FREQUENCY_RANGE_GROUP_1 = 1;
/**
@@ -456,7 +452,6 @@ public final class AccessNetworkConstants {
* @hide
*/
@SystemApi
- @TestApi
public static final int FREQUENCY_RANGE_GROUP_2 = 2;
/**
@@ -481,7 +476,6 @@ public final class AccessNetworkConstants {
* @hide
*/
@SystemApi
- @TestApi
public static @FrequencyRangeGroup int getFrequencyRangeGroup(@NgranBand int band) {
switch (band) {
case BAND_1:
diff --git a/telephony/java/android/telephony/BarringInfo.java b/telephony/java/android/telephony/BarringInfo.java
index 92423a2f2218..e9698adc0356 100644
--- a/telephony/java/android/telephony/BarringInfo.java
+++ b/telephony/java/android/telephony/BarringInfo.java
@@ -252,7 +252,6 @@ public final class BarringInfo implements Parcelable {
private SparseArray<BarringServiceInfo> mBarringServiceInfos;
/** @hide */
- @TestApi
@SystemApi
public BarringInfo() {
mBarringServiceInfos = new SparseArray<>();
diff --git a/telephony/java/android/telephony/CallQuality.java b/telephony/java/android/telephony/CallQuality.java
index 1effeb774484..fa70c33965ed 100644
--- a/telephony/java/android/telephony/CallQuality.java
+++ b/telephony/java/android/telephony/CallQuality.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -41,7 +40,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class CallQuality implements Parcelable {
// Constants representing the call quality level (see #CallQuality);
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 8261b53a2c9f..3d33b95d34d2 100755..100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -23,7 +23,6 @@ import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
@@ -4603,7 +4602,6 @@ public class CarrierConfigManager {
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
@SystemApi
- @TestApi
public void overrideConfig(int subscriptionId, @Nullable PersistableBundle overrideValues) {
overrideConfig(subscriptionId, overrideValues, false);
}
diff --git a/telephony/java/android/telephony/DataSpecificRegistrationInfo.java b/telephony/java/android/telephony/DataSpecificRegistrationInfo.java
index e91d6fc9d801..597fe8f85cfa 100644
--- a/telephony/java/android/telephony/DataSpecificRegistrationInfo.java
+++ b/telephony/java/android/telephony/DataSpecificRegistrationInfo.java
@@ -19,7 +19,6 @@ package android.telephony;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -31,7 +30,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class DataSpecificRegistrationInfo implements Parcelable {
/**
* @hide
diff --git a/telephony/java/android/telephony/LteVopsSupportInfo.java b/telephony/java/android/telephony/LteVopsSupportInfo.java
index 7994c1b05977..83e41bf3df3b 100644
--- a/telephony/java/android/telephony/LteVopsSupportInfo.java
+++ b/telephony/java/android/telephony/LteVopsSupportInfo.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -33,7 +32,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class LteVopsSupportInfo implements Parcelable {
/**@hide*/
diff --git a/telephony/java/android/telephony/ModemActivityInfo.java b/telephony/java/android/telephony/ModemActivityInfo.java
index 881d85c73b5d..e164c4bc2491 100644
--- a/telephony/java/android/telephony/ModemActivityInfo.java
+++ b/telephony/java/android/telephony/ModemActivityInfo.java
@@ -37,7 +37,6 @@ import java.util.Objects;
* @hide
*/
@SystemApi
-@TestApi
public final class ModemActivityInfo implements Parcelable {
private static final int TX_POWER_LEVELS = 5;
diff --git a/telephony/java/android/telephony/NetworkRegistrationInfo.java b/telephony/java/android/telephony/NetworkRegistrationInfo.java
index aee1e84ca356..92238420fd32 100644
--- a/telephony/java/android/telephony/NetworkRegistrationInfo.java
+++ b/telephony/java/android/telephony/NetworkRegistrationInfo.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.AccessNetworkConstants.TransportType;
@@ -71,37 +70,37 @@ public final class NetworkRegistrationInfo implements Parcelable {
* Not registered. The device is not currently searching a new operator to register.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING = 0;
/**
* Registered on home network.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int REGISTRATION_STATE_HOME = 1;
/**
* Not registered. The device is currently searching a new operator to register.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int REGISTRATION_STATE_NOT_REGISTERED_SEARCHING = 2;
/**
* Registration denied.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int REGISTRATION_STATE_DENIED = 3;
/**
* Registration state is unknown.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int REGISTRATION_STATE_UNKNOWN = 4;
/**
* Registered on roaming network.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int REGISTRATION_STATE_ROAMING = 5;
/** @hide */
@@ -386,7 +385,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
*
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @RegistrationState int getRegistrationState() {
return mRegistrationState;
}
@@ -451,7 +450,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* @return the current network roaming type.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @ServiceState.RoamingType int getRoamingType() {
return mRoamingType;
}
@@ -460,7 +459,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* @return Whether emergency is enabled.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public boolean isEmergencyEnabled() { return mEmergencyOnly; }
/**
@@ -498,7 +497,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* 10.5.3.6 for UMTS, 3GPP TS 24.301 9.9.3.9 for LTE, and 3GPP2 A.S0001 6.2.2.44 for CDMA
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public int getRejectCause() {
return mRejectCause;
}
@@ -545,7 +544,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* @hide
*/
@Nullable
- @SystemApi @TestApi
+ @SystemApi
public DataSpecificRegistrationInfo getDataSpecificInfo() {
return mDataSpecificInfo;
}
@@ -680,7 +679,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* @hide
*/
@Override
- @SystemApi @TestApi
+ @SystemApi
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mDomain);
dest.writeInt(mTransportType);
@@ -772,7 +771,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* </code></pre>
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final class Builder {
@Domain
private int mDomain;
@@ -877,7 +876,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* @return The same instance of the builder.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @NonNull Builder setEmergencyOnly(boolean emergencyOnly) {
mEmergencyOnly = emergencyOnly;
return this;
@@ -891,7 +890,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* @return The same instance of the builder.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @NonNull Builder setAvailableServices(
@NonNull @ServiceType List<Integer> availableServices) {
mAvailableServices = availableServices;
@@ -906,7 +905,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* @return The same instance of the builder.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @NonNull Builder setCellIdentity(@Nullable CellIdentity cellIdentity) {
mCellIdentity = cellIdentity;
return this;
@@ -929,7 +928,7 @@ public final class NetworkRegistrationInfo implements Parcelable {
* @return the NetworkRegistrationInfo object.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @NonNull NetworkRegistrationInfo build() {
return new NetworkRegistrationInfo(mDomain, mTransportType, mRegistrationState,
mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, mAvailableServices,
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index ec9940836afe..58e368bcc444 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -2239,7 +2239,6 @@ public class PhoneNumberUtils {
* @hide
*/
@SystemApi
- @TestApi
public static boolean isVoiceMailNumber(@NonNull Context context, int subId,
@Nullable String number) {
String vmNumber, mdn;
@@ -2728,7 +2727,6 @@ public class PhoneNumberUtils {
* @return true if number contains @
*/
@SystemApi
- @TestApi
public static boolean isUriNumber(@Nullable String number) {
// Note we allow either "@" or "%40" to indicate a URI, in case
// the passed-in string is URI-escaped. (Neither "@" nor "%40"
@@ -2747,7 +2745,6 @@ public class PhoneNumberUtils {
* @hide
*/
@SystemApi
- @TestApi
public static @NonNull String getUsernameFromUriNumber(@NonNull String number) {
// The delimiter between username and domain name can be
// either "@" or "%40" (the URI-escaped equivalent.)
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index a71a965b1bdb..2e51ef16baf1 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -32,7 +32,6 @@ import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SuppressAutoDoc;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.annotation.TestApi;
import android.app.PendingIntent;
import android.app.PropertyInvalidatedCache;
import android.compat.annotation.UnsupportedAppUsage;
@@ -279,7 +278,6 @@ public class SubscriptionManager {
*/
@NonNull
@SystemApi
- @TestApi
public static final Uri WFC_ENABLED_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "wfc");
/**
@@ -299,7 +297,6 @@ public class SubscriptionManager {
*/
@NonNull
@SystemApi
- @TestApi
public static final Uri ADVANCED_CALLING_ENABLED_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "advanced_calling");
@@ -318,7 +315,6 @@ public class SubscriptionManager {
*/
@NonNull
@SystemApi
- @TestApi
public static final Uri WFC_MODE_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "wfc_mode");
/**
@@ -336,7 +332,6 @@ public class SubscriptionManager {
*/
@NonNull
@SystemApi
- @TestApi
public static final Uri WFC_ROAMING_MODE_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "wfc_roaming_mode");
@@ -356,7 +351,6 @@ public class SubscriptionManager {
*/
@NonNull
@SystemApi
- @TestApi
public static final Uri VT_ENABLED_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "vt_enabled");
@@ -375,7 +369,6 @@ public class SubscriptionManager {
*/
@NonNull
@SystemApi
- @TestApi
public static final Uri WFC_ROAMING_ENABLED_CONTENT_URI = Uri.withAppendedPath(
CONTENT_URI, "wfc_roaming_enabled");
@@ -1966,7 +1959,6 @@ public class SubscriptionManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setDefaultVoiceSubscriptionId(int subscriptionId) {
if (VDBG) logd("setDefaultVoiceSubId sub id = " + subscriptionId);
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index a202644dfafe..9b4d31a51d53 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -8357,13 +8357,13 @@ public class TelephonyManager {
/**
* Values used to return status for hasCarrierPrivileges call.
*/
- /** @hide */ @SystemApi @TestApi
+ /** @hide */ @SystemApi
public static final int CARRIER_PRIVILEGE_STATUS_HAS_ACCESS = 1;
- /** @hide */ @SystemApi @TestApi
+ /** @hide */ @SystemApi
public static final int CARRIER_PRIVILEGE_STATUS_NO_ACCESS = 0;
- /** @hide */ @SystemApi @TestApi
+ /** @hide */ @SystemApi
public static final int CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED = -1;
- /** @hide */ @SystemApi @TestApi
+ /** @hide */ @SystemApi
public static final int CARRIER_PRIVILEGE_STATUS_ERROR_LOADING_RULES = -2;
/**
@@ -8565,7 +8565,6 @@ public class TelephonyManager {
/** @hide */
@SystemApi
- @TestApi
@SuppressLint("Doclava125")
public int checkCarrierPrivilegesForPackage(String pkgName) {
try {
@@ -8598,7 +8597,6 @@ public class TelephonyManager {
/** @hide */
@SystemApi
- @TestApi
public List<String> getCarrierPackageNamesForIntent(Intent intent) {
return getCarrierPackageNamesForIntentAndPhone(intent, getPhoneId());
}
@@ -10100,7 +10098,6 @@ public class TelephonyManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
public @Nullable ComponentName getAndUpdateDefaultRespondViaMessageApplication() {
return SmsApplication.getDefaultRespondViaMessageApplication(mContext, true);
@@ -10113,7 +10110,6 @@ public class TelephonyManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
public @Nullable ComponentName getDefaultRespondViaMessageApplication() {
return SmsApplication.getDefaultRespondViaMessageApplication(mContext, false);
@@ -11861,7 +11857,6 @@ public class TelephonyManager {
*
* @hide
*/
- @TestApi
@SystemApi
public static final int INVALID_EMERGENCY_NUMBER_DB_VERSION = -1;
@@ -11901,7 +11896,6 @@ public class TelephonyManager {
*/
@RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION)
@SystemApi
- @TestApi
public void updateOtaEmergencyNumberDbFilePath(
@NonNull ParcelFileDescriptor otaParcelFileDescriptor) {
try {
@@ -11927,7 +11921,6 @@ public class TelephonyManager {
*/
@RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION)
@SystemApi
- @TestApi
public void resetOtaEmergencyNumberDbFilePath() {
try {
ITelephony telephony = getITelephony();
@@ -12149,7 +12142,6 @@ public class TelephonyManager {
*
* @hide
*/
- @TestApi
@SystemApi
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public int getEmergencyNumberDbVersion() {
@@ -12877,7 +12869,6 @@ public class TelephonyManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
public void setSystemSelectionChannels(@NonNull List<RadioAccessSpecifier> specifiers,
@NonNull @CallbackExecutor Executor executor,
@@ -12895,7 +12886,6 @@ public class TelephonyManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
public void setSystemSelectionChannels(@NonNull List<RadioAccessSpecifier> specifiers) {
Objects.requireNonNull(specifiers, "Specifiers must not be null.");
@@ -13307,7 +13297,6 @@ public class TelephonyManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int MOBILE_DATA_POLICY_DATA_ON_NON_DEFAULT_DURING_VOICE_CALL = 1;
/**
@@ -13322,7 +13311,6 @@ public class TelephonyManager {
* @hide
*/
@SystemApi
- @TestApi
public static final int MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED = 2;
/**
@@ -13346,7 +13334,6 @@ public class TelephonyManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
public void setMobileDataPolicyEnabledStatus(@MobileDataPolicy int policy, boolean enabled) {
try {
@@ -13370,7 +13357,6 @@ public class TelephonyManager {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public boolean isMobileDataPolicyEnabled(@MobileDataPolicy int policy) {
try {
diff --git a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
index d53a2e6591a2..3f9c8d26ca91 100644
--- a/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
+++ b/telephony/java/android/telephony/ims/ImsCallForwardInfo.java
@@ -19,7 +19,6 @@ package android.telephony.ims;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -33,7 +32,6 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@SystemApi
-@TestApi
public final class ImsCallForwardInfo implements Parcelable {
/**
diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java
index f31fcf4050ea..47a0ab61f970 100644
--- a/telephony/java/android/telephony/ims/ImsCallProfile.java
+++ b/telephony/java/android/telephony/ims/ImsCallProfile.java
@@ -48,7 +48,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
public final class ImsCallProfile implements Parcelable {
private static final String TAG = "ImsCallProfile";
diff --git a/telephony/java/android/telephony/ims/ImsCallSessionListener.java b/telephony/java/android/telephony/ims/ImsCallSessionListener.java
index d21a05103241..2fdd195bbb26 100644
--- a/telephony/java/android/telephony/ims/ImsCallSessionListener.java
+++ b/telephony/java/android/telephony/ims/ImsCallSessionListener.java
@@ -19,7 +19,6 @@ package android.telephony.ims;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.RemoteException;
import android.telephony.Annotation;
import android.telephony.CallQuality;
@@ -40,7 +39,6 @@ import com.android.ims.internal.IImsCallSession;
// TODO: APIs in here do not conform to API guidelines yet. This can be changed if
// ImsCallSessionListenerConverter is also changed.
@SystemApi
-@TestApi
public class ImsCallSessionListener {
private final IImsCallSessionListener mListener;
diff --git a/telephony/java/android/telephony/ims/ImsConferenceState.java b/telephony/java/android/telephony/ims/ImsConferenceState.java
index 9bf2f44395c4..1fa5f52968e5 100644
--- a/telephony/java/android/telephony/ims/ImsConferenceState.java
+++ b/telephony/java/android/telephony/ims/ImsConferenceState.java
@@ -18,7 +18,6 @@ package android.telephony.ims;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -38,7 +37,6 @@ import java.util.Set;
* @hide
*/
@SystemApi
-@TestApi
public final class ImsConferenceState implements Parcelable {
private static final String TAG = "ImsConferenceState";
/**
diff --git a/telephony/java/android/telephony/ims/ImsException.java b/telephony/java/android/telephony/ims/ImsException.java
index 1c3d58d98b4a..50fb828ea217 100644
--- a/telephony/java/android/telephony/ims/ImsException.java
+++ b/telephony/java/android/telephony/ims/ImsException.java
@@ -19,7 +19,6 @@ package android.telephony.ims;
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.pm.PackageManager;
import android.telephony.SubscriptionManager;
import android.text.TextUtils;
@@ -83,7 +82,6 @@ public final class ImsException extends Exception {
* @hide
*/
@SystemApi
- @TestApi
public ImsException(@Nullable String message) {
super(getMessage(message, CODE_ERROR_UNSPECIFIED));
}
@@ -94,7 +92,6 @@ public final class ImsException extends Exception {
* @hide
*/
@SystemApi
- @TestApi
public ImsException(@Nullable String message, @ImsErrorCode int code) {
super(getMessage(message, code));
mCode = code;
@@ -108,7 +105,6 @@ public final class ImsException extends Exception {
* @hide
*/
@SystemApi
- @TestApi
public ImsException(@Nullable String message, @ImsErrorCode int code,
@Nullable Throwable cause) {
super(getMessage(message, code), cause);
diff --git a/telephony/java/android/telephony/ims/ImsExternalCallState.java b/telephony/java/android/telephony/ims/ImsExternalCallState.java
index 7d73165d4540..fdf636c323b6 100644
--- a/telephony/java/android/telephony/ims/ImsExternalCallState.java
+++ b/telephony/java/android/telephony/ims/ImsExternalCallState.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
@@ -35,7 +34,6 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@SystemApi
-@TestApi
public final class ImsExternalCallState implements Parcelable {
private static final String TAG = "ImsExternalCallState";
diff --git a/telephony/java/android/telephony/ims/ImsMmTelManager.java b/telephony/java/android/telephony/ims/ImsMmTelManager.java
index 3a0e49e204cb..76c1fafe05fb 100644
--- a/telephony/java/android/telephony/ims/ImsMmTelManager.java
+++ b/telephony/java/android/telephony/ims/ImsMmTelManager.java
@@ -25,7 +25,6 @@ import android.annotation.RequiresPermission;
import android.annotation.SuppressAutoDoc;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Binder;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
@@ -97,7 +96,7 @@ public class ImsMmTelManager implements RegistrationManager {
*/
// Do not add to this class, add to RegistrationManager.RegistrationCallback instead.
@Deprecated
- @SystemApi @TestApi
+ @SystemApi
public static class RegistrationCallback extends RegistrationManager.RegistrationCallback {
/**
@@ -231,7 +230,6 @@ public class ImsMmTelManager implements RegistrationManager {
* @hide
*/
@SystemApi
- @TestApi
@Deprecated
@SuppressAutoDoc // No support for device / profile owner or carrier privileges (b/72967236).
@RequiresPermission(anyOf = {
@@ -280,7 +278,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @hide
*/
@Deprecated
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public void registerImsRegistrationCallback(@NonNull @CallbackExecutor Executor executor,
@NonNull RegistrationCallback c) throws ImsException {
@@ -366,7 +364,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @hide
*/
@Deprecated
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public void unregisterImsRegistrationCallback(@NonNull RegistrationCallback c) {
if (c == null) {
@@ -422,7 +420,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @hide
*/
@Override
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public void getRegistrationState(@NonNull @CallbackExecutor Executor executor,
@NonNull @ImsRegistrationState Consumer<Integer> stateCallback) {
@@ -681,7 +679,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @hide
*/
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
- @SystemApi @TestApi
+ @SystemApi
public void setAdvancedCallingSettingEnabled(boolean isEnabled) {
ITelephony iTelephony = getITelephony();
if (iTelephony == null) {
@@ -725,7 +723,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @hide
*/
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
- @SystemApi @TestApi
+ @SystemApi
public boolean isCapable(@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
@ImsRegistrationImplBase.ImsRegistrationTech int imsRegTech) {
ITelephony iTelephony = getITelephony();
@@ -758,7 +756,7 @@ public class ImsMmTelManager implements RegistrationManager {
* otherwise.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public boolean isAvailable(@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
@ImsRegistrationImplBase.ImsRegistrationTech int imsRegTech) {
@@ -790,7 +788,7 @@ public class ImsMmTelManager implements RegistrationManager {
* available.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public void isSupported(@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
@AccessNetworkConstants.TransportType int transportType,
@@ -879,7 +877,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @see #isVtSettingEnabled()
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setVtSettingEnabled(boolean isEnabled) {
ITelephony iTelephony = getITelephony();
@@ -954,7 +952,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @see #isVoWiFiSettingEnabled()
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setVoWiFiSettingEnabled(boolean isEnabled) {
ITelephony iTelephony = getITelephony();
@@ -1032,7 +1030,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @see #isVoWiFiRoamingSettingEnabled()
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setVoWiFiRoamingSettingEnabled(boolean isEnabled) {
ITelephony iTelephony = getITelephony();
@@ -1069,7 +1067,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @see #setVoWiFiSettingEnabled(boolean)
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setVoWiFiNonPersistent(boolean isCapable, int mode) {
ITelephony iTelephony = getITelephony();
@@ -1152,7 +1150,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @see #getVoWiFiModeSetting()
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setVoWiFiModeSetting(@WiFiCallingMode int mode) {
ITelephony iTelephony = getITelephony();
@@ -1188,7 +1186,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @see #setVoWiFiRoamingSettingEnabled(boolean)
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public @WiFiCallingMode int getVoWiFiRoamingModeSetting() {
ITelephony iTelephony = getITelephony();
@@ -1224,7 +1222,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @see #getVoWiFiRoamingModeSetting()
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setVoWiFiRoamingModeSetting(@WiFiCallingMode int mode) {
ITelephony iTelephony = getITelephony();
@@ -1258,7 +1256,7 @@ public class ImsMmTelManager implements RegistrationManager {
* @param isEnabled if true RTT should be enabled during calls made on this subscription.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setRttCapabilitySetting(boolean isEnabled) {
ITelephony iTelephony = getITelephony();
@@ -1338,7 +1336,7 @@ public class ImsMmTelManager implements RegistrationManager {
* the IMS service is not available.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public void getFeatureState(@NonNull @CallbackExecutor Executor executor,
@NonNull @ImsFeature.ImsState Consumer<Integer> callback) throws ImsException {
diff --git a/telephony/java/android/telephony/ims/ImsService.java b/telephony/java/android/telephony/ims/ImsService.java
index 90a6de7b66a3..c806d5c8ed3a 100644
--- a/telephony/java/android/telephony/ims/ImsService.java
+++ b/telephony/java/android/telephony/ims/ImsService.java
@@ -19,7 +19,6 @@ package android.telephony.ims;
import android.annotation.LongDef;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
@@ -101,7 +100,6 @@ import java.util.Map;
* @hide
*/
@SystemApi
-@TestApi
public class ImsService extends Service {
private static final String LOG_TAG = "ImsService";
@@ -558,4 +556,4 @@ public class ImsService extends Service {
result.append("}");
return result.toString();
}
-} \ No newline at end of file
+}
diff --git a/telephony/java/android/telephony/ims/ImsSsData.java b/telephony/java/android/telephony/ims/ImsSsData.java
index 70bf0c57366d..fb8e5d37875b 100644
--- a/telephony/java/android/telephony/ims/ImsSsData.java
+++ b/telephony/java/android/telephony/ims/ImsSsData.java
@@ -19,7 +19,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -37,7 +36,6 @@ import java.util.List;
* {@hide}
*/
@SystemApi
-@TestApi
public final class ImsSsData implements Parcelable {
private static final String TAG = ImsSsData.class.getCanonicalName();
diff --git a/telephony/java/android/telephony/ims/ImsSsInfo.java b/telephony/java/android/telephony/ims/ImsSsInfo.java
index 9cce95fc67f8..27b56b8c5b47 100644
--- a/telephony/java/android/telephony/ims/ImsSsInfo.java
+++ b/telephony/java/android/telephony/ims/ImsSsInfo.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -38,7 +37,6 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@SystemApi
-@TestApi
public final class ImsSsInfo implements Parcelable {
/**@hide*/
diff --git a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
index b70fd649ab79..131cb1a505fb 100644
--- a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
+++ b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java
@@ -18,7 +18,6 @@ package android.telephony.ims;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Parcel;
import android.os.Parcelable;
@@ -30,7 +29,6 @@ import android.os.Parcelable;
* @hide
*/
@SystemApi
-@TestApi
public final class ImsStreamMediaProfile implements Parcelable {
private static final String TAG = "ImsStreamMediaProfile";
diff --git a/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java b/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java
index f67f68e2e425..16303685d0a3 100644
--- a/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java
+++ b/telephony/java/android/telephony/ims/ImsSuppServiceNotification.java
@@ -19,7 +19,6 @@ package android.telephony.ims;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -32,7 +31,6 @@ import java.util.Arrays;
* @hide
*/
@SystemApi
-@TestApi
public final class ImsSuppServiceNotification implements Parcelable {
private static final String TAG = "ImsSuppServiceNotification";
diff --git a/telephony/java/android/telephony/ims/ImsUtListener.java b/telephony/java/android/telephony/ims/ImsUtListener.java
index 460a032ce7e0..baa0576cdf13 100644
--- a/telephony/java/android/telephony/ims/ImsUtListener.java
+++ b/telephony/java/android/telephony/ims/ImsUtListener.java
@@ -18,7 +18,6 @@ package android.telephony.ims;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Bundle;
import android.os.RemoteException;
import android.telephony.ims.stub.ImsUtImplBase;
@@ -34,7 +33,6 @@ import com.android.ims.internal.IImsUtListener;
// DO NOT remove or change the existing APIs, only add new ones to this Base implementation or you
// will break other implementations of ImsUt maintained by other ImsServices.
@SystemApi
-@TestApi
public class ImsUtListener {
/**
diff --git a/telephony/java/android/telephony/ims/ImsVideoCallProvider.java b/telephony/java/android/telephony/ims/ImsVideoCallProvider.java
index 569c6d5a4e4d..2fca4096f447 100644
--- a/telephony/java/android/telephony/ims/ImsVideoCallProvider.java
+++ b/telephony/java/android/telephony/ims/ImsVideoCallProvider.java
@@ -17,14 +17,12 @@
package android.telephony.ims;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
-import android.telecom.Connection;
import android.telecom.VideoProfile;
import android.telecom.VideoProfile.CameraCapabilities;
import android.view.Surface;
@@ -37,7 +35,6 @@ import com.android.internal.os.SomeArgs;
* @hide
*/
@SystemApi
-@TestApi
public abstract class ImsVideoCallProvider {
private static final int MSG_SET_CALLBACK = 1;
private static final int MSG_SET_CAMERA = 2;
diff --git a/telephony/java/android/telephony/ims/ProvisioningManager.java b/telephony/java/android/telephony/ims/ProvisioningManager.java
index 3affdf64aae7..24ae979bb08d 100644
--- a/telephony/java/android/telephony/ims/ProvisioningManager.java
+++ b/telephony/java/android/telephony/ims/ProvisioningManager.java
@@ -23,7 +23,6 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.StringDef;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.annotation.WorkerThread;
import android.os.Binder;
import android.os.RemoteException;
@@ -59,7 +58,6 @@ import java.util.concurrent.Executor;
* @hide
*/
@SystemApi
-@TestApi
public class ProvisioningManager {
/**@hide*/
diff --git a/telephony/java/android/telephony/ims/RcsUceAdapter.java b/telephony/java/android/telephony/ims/RcsUceAdapter.java
index 4606f7d625aa..c2ddcea3dbd3 100644
--- a/telephony/java/android/telephony/ims/RcsUceAdapter.java
+++ b/telephony/java/android/telephony/ims/RcsUceAdapter.java
@@ -22,7 +22,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.Context;
import android.net.Uri;
import android.os.Binder;
@@ -519,7 +518,6 @@ public class RcsUceAdapter {
* @hide
*/
@SystemApi
- @TestApi
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
public void setUceSettingEnabled(boolean isEnabled) throws ImsException {
IImsRcsController imsRcsController = getIImsRcsController();
diff --git a/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java b/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java
index 1918bcb00733..87a5094a95f3 100644
--- a/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java
+++ b/telephony/java/android/telephony/ims/feature/CapabilityChangeRequest.java
@@ -18,7 +18,6 @@ package android.telephony.ims.feature;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.ims.stub.ImsRegistrationImplBase;
@@ -34,7 +33,6 @@ import java.util.Set;
* {@hide}
*/
@SystemApi
-@TestApi
public final class CapabilityChangeRequest implements Parcelable {
/**
diff --git a/telephony/java/android/telephony/ims/feature/ImsFeature.java b/telephony/java/android/telephony/ims/feature/ImsFeature.java
index e5779b315c93..b0a7b62c88ab 100644
--- a/telephony/java/android/telephony/ims/feature/ImsFeature.java
+++ b/telephony/java/android/telephony/ims/feature/ImsFeature.java
@@ -44,7 +44,6 @@ import java.util.Map;
* @hide
*/
@SystemApi
-@TestApi
public abstract class ImsFeature {
private static final String LOG_TAG = "ImsFeature";
@@ -62,19 +61,19 @@ public abstract class ImsFeature {
* CSFB for emergency calling.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int FEATURE_EMERGENCY_MMTEL = 0;
/**
* This feature supports the MMTEL feature.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int FEATURE_MMTEL = 1;
/**
* This feature supports the RCS feature.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int FEATURE_RCS = 2;
/**
* Total number of features defined
@@ -124,7 +123,7 @@ public abstract class ImsFeature {
* during this time will result in an {@link IllegalStateException}.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int STATE_UNAVAILABLE = 0;
/**
* This {@link ImsFeature} state is initializing and should not be communicated with. This will
@@ -132,14 +131,14 @@ public abstract class ImsFeature {
* during this time will result in an {@link IllegalStateException}.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int STATE_INITIALIZING = 1;
/**
* This {@link ImsFeature} is ready for communication. Do not attempt to call framework methods
* until {@see #onFeatureReady()} is called.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int STATE_READY = 2;
/**
@@ -169,13 +168,13 @@ public abstract class ImsFeature {
* The capability was unable to be changed.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int CAPABILITY_ERROR_GENERIC = -1;
/**
* The capability was able to be changed.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int CAPABILITY_SUCCESS = 0;
/**
@@ -349,7 +348,7 @@ public abstract class ImsFeature {
* subscription IDs associated with this slot.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public final int getSlotIndex() {
return mSlotId;
}
@@ -359,7 +358,7 @@ public abstract class ImsFeature {
* or {@link #STATE_UNAVAILABLE} if it has not been updated yet.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @ImsState int getFeatureState() {
synchronized (mLock) {
return mState;
@@ -373,7 +372,7 @@ public abstract class ImsFeature {
* {@link #STATE_INITIALIZING}, or {@link #STATE_READY}.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public final void setFeatureState(@ImsState int state) {
synchronized (mLock) {
if (mState != state) {
diff --git a/telephony/java/android/telephony/ims/feature/MmTelFeature.java b/telephony/java/android/telephony/ims/feature/MmTelFeature.java
index d8a10ebb7bde..508d1a79d27e 100644
--- a/telephony/java/android/telephony/ims/feature/MmTelFeature.java
+++ b/telephony/java/android/telephony/ims/feature/MmTelFeature.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Bundle;
import android.os.Message;
import android.os.RemoteException;
@@ -60,7 +59,7 @@ public class MmTelFeature extends ImsFeature {
/**
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public MmTelFeature() {
}
@@ -228,7 +227,7 @@ public class MmTelFeature extends ImsFeature {
* @see #removeCapabilities(int)
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public MmTelCapabilities() {
super();
}
@@ -237,7 +236,7 @@ public class MmTelFeature extends ImsFeature {
* @hide
*/
@Deprecated
- @SystemApi @TestApi
+ @SystemApi
public MmTelCapabilities(Capabilities c) {
mCapabilities = c.mCapabilities;
}
@@ -248,7 +247,7 @@ public class MmTelFeature extends ImsFeature {
* bitfield.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public MmTelCapabilities(@MmTelCapability int capabilities) {
super(capabilities);
}
@@ -288,7 +287,7 @@ public class MmTelFeature extends ImsFeature {
* @hide
*/
@Override
- @SystemApi @TestApi
+ @SystemApi
public final void addCapabilities(@MmTelCapability int capabilities) {
super.addCapabilities(capabilities);
}
@@ -297,7 +296,7 @@ public class MmTelFeature extends ImsFeature {
* @hide
*/
@Override
- @SystemApi @TestApi
+ @SystemApi
public final void removeCapabilities(@MmTelCapability int capability) {
super.removeCapabilities(capability);
}
@@ -375,14 +374,14 @@ public class MmTelFeature extends ImsFeature {
* outgoing call as IMS.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int PROCESS_CALL_IMS = 0;
/**
* To be returned by {@link #shouldProcessCall(String[])} when the telephony framework should
* not process the outgoing call as IMS and should instead use circuit switch.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final int PROCESS_CALL_CSFB = 1;
/** @hide */
@@ -400,7 +399,7 @@ public class MmTelFeature extends ImsFeature {
* This is an optional boolean flag.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final String EXTRA_IS_USSD = "android.telephony.ims.feature.extra.IS_USSD";
/**
@@ -413,7 +412,7 @@ public class MmTelFeature extends ImsFeature {
* This is an optional boolean flag.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public static final String EXTRA_IS_UNKNOWN_CALL =
"android.telephony.ims.feature.extra.IS_UNKNOWN_CALL";
@@ -453,7 +452,7 @@ public class MmTelFeature extends ImsFeature {
* @hide
*/
@Override
- @SystemApi @TestApi
+ @SystemApi
public @NonNull final MmTelCapabilities queryCapabilityStatus() {
return new MmTelCapabilities(super.queryCapabilityStatus());
}
@@ -468,7 +467,7 @@ public class MmTelFeature extends ImsFeature {
* {@link #changeEnabledCapabilities}) should also show the status as disabled.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public final void notifyCapabilitiesStatusChanged(@NonNull MmTelCapabilities c) {
if (c == null) {
throw new IllegalArgumentException("MmTelCapabilities must be non-null!");
@@ -483,7 +482,7 @@ public class MmTelFeature extends ImsFeature {
* {@link #EXTRA_IS_UNKNOWN_CALL} and {@link #EXTRA_IS_USSD} above.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public final void notifyIncomingCall(@NonNull ImsCallSessionImplBase c,
@NonNull Bundle extras) {
if (c == null || extras == null) {
@@ -509,7 +508,7 @@ public class MmTelFeature extends ImsFeature {
* @param reason The {@link ImsReasonInfo} call rejection reason.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public final void notifyRejectedCall(@NonNull ImsCallProfile callProfile,
@NonNull ImsReasonInfo reason) {
if (callProfile == null || reason == null) {
@@ -548,7 +547,7 @@ public class MmTelFeature extends ImsFeature {
* @link count the new Voice Message count.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public final void notifyVoiceMessageCountUpdate(int count) {
IImsMmTelListener listener = getListener();
if (listener == null) {
@@ -571,7 +570,7 @@ public class MmTelFeature extends ImsFeature {
* @hide
*/
@Override
- @SystemApi @TestApi
+ @SystemApi
public boolean queryCapabilityConfiguration(@MmTelCapabilities.MmTelCapability int capability,
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) {
// Base implementation - Override to provide functionality
@@ -592,7 +591,7 @@ public class MmTelFeature extends ImsFeature {
* * @hide
*/
@Override
- @SystemApi @TestApi
+ @SystemApi
public void changeEnabledCapabilities(@NonNull CapabilityChangeRequest request,
@NonNull CapabilityCallbackProxy c) {
// Base implementation, no-op
@@ -617,7 +616,7 @@ public class MmTelFeature extends ImsFeature {
* @return a {@link ImsCallProfile} object
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @Nullable ImsCallProfile createCallProfile(int callSessionType, int callType) {
// Base Implementation - Should be overridden
return null;
@@ -640,7 +639,7 @@ public class MmTelFeature extends ImsFeature {
* @param profile a call profile to make the call
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @Nullable ImsCallSessionImplBase createCallSession(@NonNull ImsCallProfile profile) {
// Base Implementation - Should be overridden
return null;
@@ -659,7 +658,7 @@ public class MmTelFeature extends ImsFeature {
* call will be placed over IMS or via CSFB.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @ProcessCallResult int shouldProcessCall(@NonNull String[] numbers) {
return PROCESS_CALL_IMS;
}
@@ -694,7 +693,7 @@ public class MmTelFeature extends ImsFeature {
* configuration.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @NonNull ImsUtImplBase getUt() {
// Base Implementation - Should be overridden
return new ImsUtImplBase();
@@ -705,7 +704,7 @@ public class MmTelFeature extends ImsFeature {
* calls that support it.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @NonNull ImsEcbmImplBase getEcbm() {
// Base Implementation - Should be overridden
return new ImsEcbmImplBase();
@@ -716,7 +715,7 @@ public class MmTelFeature extends ImsFeature {
* package processing for multi-endpoint.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @NonNull ImsMultiEndpointImplBase getMultiEndpoint() {
// Base Implementation - Should be overridden
return new ImsMultiEndpointImplBase();
@@ -744,7 +743,7 @@ public class MmTelFeature extends ImsFeature {
* }
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public void setUiTtyMode(int mode, @Nullable Message onCompleteMessage) {
// Base Implementation - Should be overridden
}
@@ -780,7 +779,7 @@ public class MmTelFeature extends ImsFeature {
* Provider.
* @hide
*/
- @SystemApi @TestApi
+ @SystemApi
public @NonNull ImsSmsImplBase getSmsImplementation() {
return new ImsSmsImplBase();
}
@@ -794,7 +793,7 @@ public class MmTelFeature extends ImsFeature {
* @hide
*/
@Override
- @SystemApi @TestApi
+ @SystemApi
public void onFeatureRemoved() {
// Base Implementation - Should be overridden
}
@@ -804,7 +803,7 @@ public class MmTelFeature extends ImsFeature {
* @hide
*/
@Override
- @SystemApi @TestApi
+ @SystemApi
public void onFeatureReady() {
// Base Implementation - Should be overridden
}
diff --git a/telephony/java/android/telephony/ims/feature/RcsFeature.java b/telephony/java/android/telephony/ims/feature/RcsFeature.java
index 98b0bcf6075b..b8ae146784d4 100644
--- a/telephony/java/android/telephony/ims/feature/RcsFeature.java
+++ b/telephony/java/android/telephony/ims/feature/RcsFeature.java
@@ -20,7 +20,6 @@ import android.annotation.CallbackExecutor;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.net.Uri;
import android.os.RemoteException;
import android.telephony.ims.RcsContactUceCapability;
@@ -50,7 +49,6 @@ import java.util.function.Supplier;
* @hide
*/
@SystemApi
-@TestApi
public class RcsFeature extends ImsFeature {
private static final String LOG_TAG = "RcsFeature";
diff --git a/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java b/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java
index 8f738d216cbe..1cebdd582b58 100644
--- a/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsCallSessionImplBase.java
@@ -18,7 +18,6 @@ package android.telephony.ims.stub;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Message;
import android.os.RemoteException;
import android.telephony.ims.ImsCallProfile;
@@ -39,7 +38,6 @@ import com.android.ims.internal.IImsVideoCallProvider;
* @hide
*/
@SystemApi
-@TestApi
// DO NOT remove or change the existing APIs, only add new ones to this Base implementation or you
// will break other implementations of ImsCallSession maintained by other ImsServices.
public class ImsCallSessionImplBase implements AutoCloseable {
diff --git a/telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java b/telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java
index 4ef44d3ec9ef..e0290a5dc2af 100644
--- a/telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java
@@ -19,7 +19,6 @@ package android.telephony.ims.stub;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.Context;
import android.os.PersistableBundle;
import android.os.RemoteException;
@@ -51,7 +50,6 @@ import java.util.HashMap;
* @hide
*/
@SystemApi
-@TestApi
public class ImsConfigImplBase {
private static final String TAG = "ImsConfigImplBase";
diff --git a/telephony/java/android/telephony/ims/stub/ImsEcbmImplBase.java b/telephony/java/android/telephony/ims/stub/ImsEcbmImplBase.java
index 4a3a2eaf4225..06c35eaec6dd 100644
--- a/telephony/java/android/telephony/ims/stub/ImsEcbmImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsEcbmImplBase.java
@@ -17,7 +17,6 @@
package android.telephony.ims.stub;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.RemoteException;
import android.util.Log;
@@ -34,7 +33,6 @@ import com.android.ims.internal.IImsEcbmListener;
* @hide
*/
@SystemApi
-@TestApi
public class ImsEcbmImplBase {
private static final String TAG = "ImsEcbmImplBase";
diff --git a/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java b/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java
index 4e7307e2fa0c..cd9ebbf38e35 100644
--- a/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java
+++ b/telephony/java/android/telephony/ims/stub/ImsFeatureConfiguration.java
@@ -19,7 +19,6 @@ package android.telephony.ims.stub;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.ims.feature.ImsFeature;
@@ -36,7 +35,6 @@ import java.util.Set;
* @hide
*/
@SystemApi
-@TestApi
public final class ImsFeatureConfiguration implements Parcelable {
public static final class FeatureSlotPair {
diff --git a/telephony/java/android/telephony/ims/stub/ImsMultiEndpointImplBase.java b/telephony/java/android/telephony/ims/stub/ImsMultiEndpointImplBase.java
index 0ae5bba5d722..d002903a11b6 100644
--- a/telephony/java/android/telephony/ims/stub/ImsMultiEndpointImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsMultiEndpointImplBase.java
@@ -17,7 +17,6 @@
package android.telephony.ims.stub;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.RemoteException;
import android.telephony.ims.ImsExternalCallState;
import android.util.Log;
@@ -38,7 +37,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
public class ImsMultiEndpointImplBase {
private static final String TAG = "MultiEndpointImplBase";
diff --git a/telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java b/telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java
index 2cdf70e6cf4c..12abdd1d7e11 100644
--- a/telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java
@@ -18,7 +18,6 @@ package android.telephony.ims.stub;
import android.annotation.IntDef;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.net.Uri;
import android.os.RemoteException;
import android.telephony.ims.ImsReasonInfo;
@@ -40,7 +39,6 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@SystemApi
-@TestApi
public class ImsRegistrationImplBase {
private static final String LOG_TAG = "ImsRegistrationImplBase";
diff --git a/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java b/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java
index a9a33c0e1507..2783e299236b 100644
--- a/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsSmsImplBase.java
@@ -19,7 +19,6 @@ package android.telephony.ims.stub;
import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.RemoteException;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
@@ -38,7 +37,6 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@SystemApi
-@TestApi
public class ImsSmsImplBase {
private static final String LOG_TAG = "SmsImplBase";
diff --git a/telephony/java/android/telephony/ims/stub/ImsUtImplBase.java b/telephony/java/android/telephony/ims/stub/ImsUtImplBase.java
index 8564f7affd6d..f5219d5b49e8 100644
--- a/telephony/java/android/telephony/ims/stub/ImsUtImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsUtImplBase.java
@@ -20,7 +20,6 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Bundle;
import android.os.RemoteException;
import android.telephony.ims.ImsUtListener;
@@ -40,7 +39,6 @@ import java.lang.annotation.RetentionPolicy;
// DO NOT remove or change the existing APIs, only add new ones to this Base implementation or you
// will break other implementations of ImsUt maintained by other ImsServices.
@SystemApi
-@TestApi
public class ImsUtImplBase {
/**
* Bar all incoming calls. (See 3GPP TS 24.611)
diff --git a/telephony/java/android/telephony/mbms/DownloadRequest.java b/telephony/java/android/telephony/mbms/DownloadRequest.java
index ac258cd40d65..eb59f87a6c02 100644
--- a/telephony/java/android/telephony/mbms/DownloadRequest.java
+++ b/telephony/java/android/telephony/mbms/DownloadRequest.java
@@ -19,7 +19,6 @@ package android.telephony.mbms;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.Intent;
import android.net.Uri;
import android.os.Parcel;
@@ -186,7 +185,6 @@ public final class DownloadRequest implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public Builder setServiceId(String serviceId) {
fileServiceId = serviceId;
return this;
diff --git a/telephony/java/android/telephony/mbms/FileInfo.java b/telephony/java/android/telephony/mbms/FileInfo.java
index ada2872874f5..e52b2ce0c505 100644
--- a/telephony/java/android/telephony/mbms/FileInfo.java
+++ b/telephony/java/android/telephony/mbms/FileInfo.java
@@ -17,7 +17,6 @@
package android.telephony.mbms;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
@@ -50,7 +49,6 @@ public final class FileInfo implements Parcelable {
* @hide
*/
@SystemApi
- @TestApi
public FileInfo(Uri uri, String mimeType) {
this.uri = uri;
this.mimeType = mimeType;
diff --git a/telephony/java/android/telephony/mbms/FileServiceInfo.java b/telephony/java/android/telephony/mbms/FileServiceInfo.java
index 8c79ab63b131..8777e7f59e3f 100644
--- a/telephony/java/android/telephony/mbms/FileServiceInfo.java
+++ b/telephony/java/android/telephony/mbms/FileServiceInfo.java
@@ -17,7 +17,6 @@
package android.telephony.mbms;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -36,7 +35,6 @@ public final class FileServiceInfo extends ServiceInfo implements Parcelable {
/** @hide */
@SystemApi
- @TestApi
public FileServiceInfo(Map<Locale, String> newNames, String newClassName,
List<Locale> newLocales, String newServiceId, Date start, Date end,
List<FileInfo> newFiles) {
diff --git a/telephony/java/android/telephony/mbms/StreamingServiceInfo.java b/telephony/java/android/telephony/mbms/StreamingServiceInfo.java
index 8ad1d8940ca7..316e86568213 100644
--- a/telephony/java/android/telephony/mbms/StreamingServiceInfo.java
+++ b/telephony/java/android/telephony/mbms/StreamingServiceInfo.java
@@ -17,7 +17,6 @@
package android.telephony.mbms;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -42,7 +41,6 @@ public final class StreamingServiceInfo extends ServiceInfo implements Parcelabl
* @hide
*/
@SystemApi
- @TestApi
public StreamingServiceInfo(Map<Locale, String> names, String className,
List<Locale> locales, String serviceId, Date start, Date end) {
super(names, className, locales, serviceId, start, end);
diff --git a/telephony/java/android/telephony/mbms/UriPathPair.java b/telephony/java/android/telephony/mbms/UriPathPair.java
index f53d7e0287f3..9258919919b7 100644
--- a/telephony/java/android/telephony/mbms/UriPathPair.java
+++ b/telephony/java/android/telephony/mbms/UriPathPair.java
@@ -17,7 +17,6 @@
package android.telephony.mbms;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.ContentResolver;
import android.net.Uri;
import android.os.Parcel;
@@ -30,7 +29,6 @@ import android.telephony.mbms.vendor.VendorUtils;
* @hide
*/
@SystemApi
-@TestApi
public final class UriPathPair implements Parcelable {
private final Uri mFilePathUri;
private final Uri mContentUri;
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
index 3053ea03bebe..ffc1d2efe2ae 100644
--- a/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
+++ b/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
@@ -18,7 +18,6 @@ package android.telephony.mbms.vendor;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
@@ -45,7 +44,6 @@ import java.util.Map;
* @hide
*/
@SystemApi
-@TestApi
public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub {
private final Map<IBinder, DownloadStatusListener> mDownloadStatusListenerBinderMap =
new HashMap<>();
@@ -576,7 +574,6 @@ public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub {
// Following two methods exist to workaround b/124210145
/** @hide */
@SystemApi
- @TestApi
@Override
public android.os.IBinder asBinder() {
return super.asBinder();
@@ -584,7 +581,6 @@ public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub {
/** @hide */
@SystemApi
- @TestApi
@Override
public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply,
int flags) throws RemoteException {
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java
index 1335b52673d2..e5b18bb5d644 100644
--- a/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java
+++ b/telephony/java/android/telephony/mbms/vendor/MbmsGroupCallServiceBase.java
@@ -18,7 +18,6 @@ package android.telephony.mbms.vendor;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
@@ -41,7 +40,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
public class MbmsGroupCallServiceBase extends Service {
private final IBinder mInterface = new Stub() {
@Override
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
index cced44759527..e169b16ca958 100644
--- a/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
+++ b/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
@@ -18,7 +18,6 @@ package android.telephony.mbms.vendor;
import android.annotation.Nullable;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.Intent;
import android.net.Uri;
import android.os.Binder;
@@ -39,7 +38,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
public class MbmsStreamingServiceBase extends IMbmsStreamingService.Stub {
/**
* Initialize streaming service for this app and subId, registering the listener.
@@ -299,7 +297,6 @@ public class MbmsStreamingServiceBase extends IMbmsStreamingService.Stub {
// Following two methods exist to workaround b/124210145
/** @hide */
@SystemApi
- @TestApi
@Override
public android.os.IBinder asBinder() {
return super.asBinder();
@@ -307,7 +304,6 @@ public class MbmsStreamingServiceBase extends IMbmsStreamingService.Stub {
/** @hide */
@SystemApi
- @TestApi
@Override
public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply,
int flags) throws RemoteException {
diff --git a/telephony/java/android/telephony/mbms/vendor/VendorUtils.java b/telephony/java/android/telephony/mbms/vendor/VendorUtils.java
index f1cac8cf8286..a43f12244168 100644
--- a/telephony/java/android/telephony/mbms/vendor/VendorUtils.java
+++ b/telephony/java/android/telephony/mbms/vendor/VendorUtils.java
@@ -17,7 +17,6 @@
package android.telephony.mbms.vendor;
import android.annotation.SystemApi;
-import android.annotation.TestApi;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -35,7 +34,6 @@ import java.util.List;
* @hide
*/
@SystemApi
-@TestApi
public class VendorUtils {
/**
diff --git a/test-mock/api/test-current.txt b/test-mock/api/test-current.txt
index 32ca250b6c74..79d746a57cc5 100644
--- a/test-mock/api/test-current.txt
+++ b/test-mock/api/test-current.txt
@@ -6,21 +6,12 @@ package android.test.mock {
}
@Deprecated public class MockPackageManager extends android.content.pm.PackageManager {
- method public void addOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener);
- method public boolean arePermissionsIndividuallyControlled();
- method public String getDefaultBrowserPackageNameAsUser(int);
method public int getInstallReason(String, android.os.UserHandle);
method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplicationsAsUser(int, int);
- method public java.util.List<android.content.pm.PackageInfo> getInstalledPackagesAsUser(int, int);
method public String[] getNamesForUids(int[]);
method public String getPermissionControllerPackageName();
- method public int getPermissionFlags(String, String, android.os.UserHandle);
method @NonNull public String getServicesSystemSharedLibraryPackageName();
method @NonNull public String getSharedSystemSharedLibraryPackageName();
- method public void grantRuntimePermission(String, String, android.os.UserHandle);
- method public void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener);
- method public void revokeRuntimePermission(String, String, android.os.UserHandle);
- method public void updatePermissionFlags(String, String, int, int, android.os.UserHandle);
}
}
diff --git a/tests/net/java/com/android/server/connectivity/DnsManagerTest.java b/tests/net/java/com/android/server/connectivity/DnsManagerTest.java
index 32bfa7059b0b..f5b85ca06f92 100644
--- a/tests/net/java/com/android/server/connectivity/DnsManagerTest.java
+++ b/tests/net/java/com/android/server/connectivity/DnsManagerTest.java
@@ -98,7 +98,6 @@ public class DnsManagerTest {
@Mock Context mCtx;
@Mock IDnsResolver mMockDnsResolver;
- @Mock MockableSystemProperties mSystemProperties;
private void assertResolverOptionsEquals(
@NonNull ResolverOptionsParcel actual,
@@ -137,7 +136,7 @@ public class DnsManagerTest {
mContentResolver.addProvider(Settings.AUTHORITY,
new FakeSettingsProvider());
when(mCtx.getContentResolver()).thenReturn(mContentResolver);
- mDnsManager = new DnsManager(mCtx, mMockDnsResolver, mSystemProperties);
+ mDnsManager = new DnsManager(mCtx, mMockDnsResolver);
// Clear the private DNS settings
Settings.Global.putString(mContentResolver, PRIVATE_DNS_DEFAULT_MODE, "");
diff --git a/wifi/api/current.txt b/wifi/api/current.txt
index d6e89223ba95..f0cf75c8bf72 100644
--- a/wifi/api/current.txt
+++ b/wifi/api/current.txt
@@ -563,6 +563,7 @@ package android.net.wifi.aware {
method public int getMaxServiceNameLength();
method public int getMaxServiceSpecificInfoLength();
method public int getSupportedCipherSuites();
+ method public boolean isInstantCommunicationModeSupported();
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
field public static final int WIFI_AWARE_CIPHER_SUITE_NCS_SK_128 = 1; // 0x1
@@ -661,6 +662,7 @@ package android.net.wifi.aware {
method public android.net.wifi.aware.Characteristics getCharacteristics();
method public boolean isAvailable();
method public boolean isDeviceAttached();
+ method public boolean isInstantCommunicationModeEnabled();
field public static final String ACTION_WIFI_AWARE_STATE_CHANGED = "android.net.wifi.aware.action.WIFI_AWARE_STATE_CHANGED";
field public static final int WIFI_AWARE_DATA_PATH_ROLE_INITIATOR = 0; // 0x0
field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
diff --git a/wifi/api/system-current.txt b/wifi/api/system-current.txt
index 98cb849084d4..754a8dc408a4 100644
--- a/wifi/api/system-current.txt
+++ b/wifi/api/system-current.txt
@@ -800,6 +800,10 @@ package android.net.wifi.aware {
method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPmk(@NonNull android.net.wifi.aware.PeerHandle, @NonNull byte[]);
}
+ public class WifiAwareManager {
+ method public void enableInstantCommunicationMode(boolean);
+ }
+
public class WifiAwareSession implements java.lang.AutoCloseable {
method public android.net.NetworkSpecifier createNetworkSpecifierPmk(int, @NonNull byte[], @NonNull byte[]);
}
diff --git a/wifi/java/android/net/wifi/aware/Characteristics.java b/wifi/java/android/net/wifi/aware/Characteristics.java
index d5fd48e9e7b3..116786516b3b 100644
--- a/wifi/java/android/net/wifi/aware/Characteristics.java
+++ b/wifi/java/android/net/wifi/aware/Characteristics.java
@@ -17,6 +17,7 @@
package android.net.wifi.aware;
import android.annotation.IntDef;
+import android.net.wifi.util.SdkLevelUtil;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -37,6 +38,9 @@ public final class Characteristics implements Parcelable {
public static final String KEY_MAX_MATCH_FILTER_LENGTH = "key_max_match_filter_length";
/** @hide */
public static final String KEY_SUPPORTED_CIPHER_SUITES = "key_supported_cipher_suites";
+ /** @hide */
+ public static final String KEY_IS_INSTANT_COMMUNICATION_MODE_SUPPORTED =
+ "key_is_instant_communication_mode_supported";
private Bundle mCharacteristics = new Bundle();
@@ -83,6 +87,17 @@ public final class Characteristics implements Parcelable {
return mCharacteristics.getInt(KEY_MAX_MATCH_FILTER_LENGTH);
}
+ /**
+ * Check if instant communication mode is supported by device.
+ * @return True if supported, false otherwise.
+ */
+ public boolean isInstantCommunicationModeSupported() {
+ if (!SdkLevelUtil.isAtLeastS()) {
+ throw new UnsupportedOperationException();
+ }
+ return mCharacteristics.getBoolean(KEY_IS_INSTANT_COMMUNICATION_MODE_SUPPORTED);
+ }
+
/** @hide */
@IntDef(flag = true, prefix = { "WIFI_AWARE_CIPHER_SUITE_" }, value = {
WIFI_AWARE_CIPHER_SUITE_NCS_SK_128,
diff --git a/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl b/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl
index f5b1edce1d69..cd2ca692137d 100644
--- a/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl
+++ b/wifi/java/android/net/wifi/aware/IWifiAwareManager.aidl
@@ -37,6 +37,8 @@ interface IWifiAwareManager
boolean isUsageEnabled();
Characteristics getCharacteristics();
boolean isDeviceAttached();
+ void enableInstantCommunicationMode(in String callingPackage, boolean enable);
+ boolean isInstantCommunicationModeEnabled();
// client API
void connect(in IBinder binder, in String callingPackage, in String callingFeatureId,
diff --git a/wifi/java/android/net/wifi/aware/WifiAwareManager.java b/wifi/java/android/net/wifi/aware/WifiAwareManager.java
index 03f5f401fc40..bb146e37d48c 100644
--- a/wifi/java/android/net/wifi/aware/WifiAwareManager.java
+++ b/wifi/java/android/net/wifi/aware/WifiAwareManager.java
@@ -22,12 +22,14 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkRequest;
import android.net.NetworkSpecifier;
import android.net.wifi.util.HexEncoding;
+import android.net.wifi.util.SdkLevelUtil;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
@@ -208,6 +210,9 @@ public class WifiAwareManager {
* or not (false).
*/
public boolean isDeviceAttached() {
+ if (!SdkLevelUtil.isAtLeastS()) {
+ throw new UnsupportedOperationException();
+ }
try {
return mService.isDeviceAttached();
} catch (RemoteException e) {
@@ -216,6 +221,42 @@ public class WifiAwareManager {
}
/**
+ * Enable the Wifi Aware Instant communication mode. If the device doesn't support this feature
+ * calling this API will result no action.
+ * @see Characteristics#isInstantCommunicationModeSupported()
+ * @param enable true for enable, false otherwise.
+ * @hide
+ */
+ @SystemApi
+ public void enableInstantCommunicationMode(boolean enable) {
+ if (!SdkLevelUtil.isAtLeastS()) {
+ throw new UnsupportedOperationException();
+ }
+ try {
+ mService.enableInstantCommunicationMode(mContext.getOpPackageName(), enable);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Return the current status of the Wifi Aware instant communication mode.
+ * If the device doesn't support this feature, return will always be false.
+ * @see Characteristics#isInstantCommunicationModeSupported()
+ * @return true if it is enabled, false otherwise.
+ */
+ public boolean isInstantCommunicationModeEnabled() {
+ if (!SdkLevelUtil.isAtLeastS()) {
+ throw new UnsupportedOperationException();
+ }
+ try {
+ return mService.isInstantCommunicationModeEnabled();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Returns the characteristics of the Wi-Fi Aware interface: a set of parameters which specify
* limitations on configurations, e.g. the maximum service name length.
*
diff --git a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
index d163fb0e6adf..2cf7f2c1b8cf 100644
--- a/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/aware/WifiAwareManagerTest.java
@@ -22,6 +22,7 @@ import static android.net.wifi.aware.WifiAwareNetworkSpecifier.NETWORK_SPECIFIER
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
@@ -38,6 +39,7 @@ import android.content.pm.PackageManager;
import android.net.MacAddress;
import android.net.wifi.RttManager;
import android.net.wifi.util.HexEncoding;
+import android.net.wifi.util.SdkLevelUtil;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
@@ -156,6 +158,19 @@ public class WifiAwareManagerTest {
verify(mockAwareService).isDeviceAttached();
}
+ /**
+ * Validate pass-through of isInstantCommunicationModeEnabled() and
+ * enableInstantCommunicationMode() API
+ */
+ @Test
+ public void testEnableInstantCommunicationMode() throws Exception {
+ assumeTrue(SdkLevelUtil.isAtLeastS());
+ mDut.isInstantCommunicationModeEnabled();
+ verify(mockAwareService).isInstantCommunicationModeEnabled();
+ mDut.enableInstantCommunicationMode(true);
+ verify(mockAwareService).enableInstantCommunicationMode(anyString(), eq(true));
+ }
+
/*
* WifiAwareEventCallbackProxy Tests
*/